Merge pull request #259549 from woojiq/keyd
nixos/keyd: add `extraConfig` option
This commit is contained in:
commit
021da9bf62
2 changed files with 36 additions and 19 deletions
|
@ -2,7 +2,6 @@
|
|||
with lib;
|
||||
let
|
||||
cfg = config.services.keyd;
|
||||
settingsFormat = pkgs.formats.ini { };
|
||||
|
||||
keyboardOptions = { ... }: {
|
||||
options = {
|
||||
|
@ -16,7 +15,7 @@ let
|
|||
};
|
||||
|
||||
settings = mkOption {
|
||||
type = settingsFormat.type;
|
||||
type = (pkgs.formats.ini { }).type;
|
||||
default = { };
|
||||
example = {
|
||||
main = {
|
||||
|
@ -37,6 +36,20 @@ let
|
|||
See <https://github.com/rvaiya/keyd> how to configure.
|
||||
'';
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
example = ''
|
||||
[control+shift]
|
||||
h = left
|
||||
'';
|
||||
description = lib.mdDoc ''
|
||||
Extra configuration that is appended to the end of the file.
|
||||
**Do not** write `ids` section here, use a separate option for it.
|
||||
You can use this option to define compound layers that must always be defined after the layer they are comprised.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
|
@ -85,15 +98,12 @@ in
|
|||
environment.etc = mapAttrs'
|
||||
(name: options:
|
||||
nameValuePair "keyd/${name}.conf" {
|
||||
source = pkgs.runCommand "${name}.conf"
|
||||
{
|
||||
ids = ''
|
||||
[ids]
|
||||
${concatStringsSep "\n" options.ids}
|
||||
'';
|
||||
passAsFile = [ "ids" ];
|
||||
} ''
|
||||
cat $idsPath <(echo) ${settingsFormat.generate "keyd-${name}.conf" options.settings} >$out
|
||||
text = ''
|
||||
[ids]
|
||||
${concatStringsSep "\n" options.ids}
|
||||
|
||||
${generators.toINI {} options.settings}
|
||||
${options.extraConfig}
|
||||
'';
|
||||
})
|
||||
cfg.keyboards;
|
||||
|
|
|
@ -26,13 +26,13 @@ let
|
|||
'';
|
||||
|
||||
|
||||
mkKeyboardTest = name: { settings, test }: with pkgs.lib; makeTest {
|
||||
mkKeyboardTest = name: { default, test }: with pkgs.lib; makeTest {
|
||||
inherit name;
|
||||
|
||||
nodes.machine = {
|
||||
services.keyd = {
|
||||
enable = true;
|
||||
keyboards.default = { inherit settings; };
|
||||
keyboards = { inherit default; };
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -70,13 +70,20 @@ let
|
|||
in
|
||||
pkgs.lib.mapAttrs mkKeyboardTest {
|
||||
swap-ab_and_ctrl-as-shift = {
|
||||
test.press = [ "a" "ctrl-b" "c" ];
|
||||
test.expect = [ "b" "A" "c" ];
|
||||
test.press = [ "a" "ctrl-b" "c" "alt_r-h" ];
|
||||
test.expect = [ "b" "A" "c" "q" ];
|
||||
|
||||
settings.main = {
|
||||
"a" = "b";
|
||||
"b" = "a";
|
||||
"control" = "oneshot(shift)";
|
||||
default = {
|
||||
settings.main = {
|
||||
"a" = "b";
|
||||
"b" = "a";
|
||||
"control" = "oneshot(shift)";
|
||||
"rightalt" = "layer(rightalt)";
|
||||
};
|
||||
extraConfig = ''
|
||||
[rightalt:G]
|
||||
h = q
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue