Unverified Commit 021da9bf authored by Lin Jian's avatar Lin Jian Committed by GitHub
Browse files

Merge pull request #259549 from woojiq/keyd

nixos/keyd: add `extraConfig` option
parents 249ef1a6 fee1832e
Loading
Loading
Loading
Loading
+21 −11
Original line number Diff line number Diff line
@@ -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 = ''
          text = ''
            [ids]
            ${concatStringsSep "\n" options.ids}
              '';
              passAsFile = [ "ids" ];
            } ''
            cat $idsPath <(echo) ${settingsFormat.generate "keyd-${name}.conf" options.settings} >$out

            ${generators.toINI {} options.settings}
            ${options.extraConfig}
          '';
        })
      cfg.keyboards;
+15 −8
Original line number Diff line number Diff line
@@ -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" ];

    default = {
      settings.main = {
        "a" = "b";
        "b" = "a";
        "control" = "oneshot(shift)";
        "rightalt" = "layer(rightalt)";
      };
      extraConfig = ''
        [rightalt:G]
        h = q
      '';
    };
  };
}