From d8cb49476539a9743da6dfc8eb1d2aa554fa59be Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Fri, 18 Feb 2022 13:47:33 -0800 Subject: nixos/input-remapper: Fix missing [] for package, add enableUdevRules and serviceWantedBy options, add meta.maintainers --- nixos/modules/services/misc/input-remapper.nix | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'nixos') diff --git a/nixos/modules/services/misc/input-remapper.nix b/nixos/modules/services/misc/input-remapper.nix index c2da0d616a31..6440e4904644 100644 --- a/nixos/modules/services/misc/input-remapper.nix +++ b/nixos/modules/services/misc/input-remapper.nix @@ -7,23 +7,24 @@ let cfg = config.services.input-remapper; in options = { services.input-remapper = { enable = mkEnableOption "input-remapper, an easy to use tool to change the mapping of your input device buttons."; - package = mkOption { - type = types.package; - default = pkgs.input-remapper; - defaultText = literalExpression "pkgs.input-remapper"; - description = '' - The input-remapper package to use. - ''; + package = options.mkPackageOption pkgs "input-remapper" { }; + enableUdevRules = mkEnableOption "udev rules added by input-remapper to handle hotplugged devices. Currently disabled by default due to https://github.com/sezanzeb/input-remapper/issues/140"; + serviceWantedBy = mkOption { + default = [ "graphical.target" ]; + example = [ "multi-user.target" ]; + type = types.listOf types.str; + description = "Specifies the WantedBy setting for the input-remapper service."; }; }; }; config = mkIf cfg.enable { - # FIXME: udev rule hangs sometimes when lots of devices connected, so let's not use it - # config.services.udev.packages = mapper-pkg; - services.dbus.packages = cfg.package; - systemd.packages = cfg.package; - environment.systemPackages = cfg.package; + services.udev.packages = mkIf cfg.enableUdevRules [ cfg.package ]; + services.dbus.packages = [ cfg.package ]; + systemd.packages = [ cfg.package ]; + environment.systemPackages = [ cfg.package ]; systemd.services.input-remapper.wantedBy = [ "graphical.target" ]; }; + + meta.maintainers = with lib.maintainers; [ LunNova ]; } -- cgit 1.4.1 From 865e0df2fc3dd06ca7b5730a7f3651a94beb4006 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Fri, 18 Feb 2022 13:47:54 -0800 Subject: nixos/input-remapper: add nixos test for input-remapper --- nixos/modules/services/misc/input-remapper.nix | 2 +- nixos/tests/all-tests.nix | 1 + nixos/tests/input-remapper.nix | 45 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 nixos/tests/input-remapper.nix (limited to 'nixos') diff --git a/nixos/modules/services/misc/input-remapper.nix b/nixos/modules/services/misc/input-remapper.nix index 6440e4904644..f5fb2bf53086 100644 --- a/nixos/modules/services/misc/input-remapper.nix +++ b/nixos/modules/services/misc/input-remapper.nix @@ -23,7 +23,7 @@ let cfg = config.services.input-remapper; in services.dbus.packages = [ cfg.package ]; systemd.packages = [ cfg.package ]; environment.systemPackages = [ cfg.package ]; - systemd.services.input-remapper.wantedBy = [ "graphical.target" ]; + systemd.services.input-remapper.wantedBy = cfg.serviceWantedBy; }; meta.maintainers = with lib.maintainers; [ LunNova ]; diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 342e8f461b57..15b54cd9fe1d 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -224,6 +224,7 @@ in initrd-network-ssh = handleTest ./initrd-network-ssh {}; initrdNetwork = handleTest ./initrd-network.nix {}; initrd-secrets = handleTest ./initrd-secrets.nix {}; + input-remapper = handleTest ./input-remapper.nix {}; inspircd = handleTest ./inspircd.nix {}; installer = handleTest ./installer.nix {}; invoiceplane = handleTest ./invoiceplane.nix {}; diff --git a/nixos/tests/input-remapper.nix b/nixos/tests/input-remapper.nix new file mode 100644 index 000000000000..8b9939617083 --- /dev/null +++ b/nixos/tests/input-remapper.nix @@ -0,0 +1,45 @@ +import ./make-test-python.nix ({ pkgs, ... }: + + { + name = "input-remapper"; + meta = { + maintainers = with pkgs.lib.maintainers; [ LunNova ]; + }; + + machine = { config, ... }: + let user = config.users.users.sybil; in + { + imports = [ + ./common/user-account.nix + ./common/x11.nix + ]; + + services.xserver.enable = true; + services.input-remapper.enable = true; + users.users.sybil = { isNormalUser = true; group = "wheel"; }; + test-support.displayManager.auto.user = user.name; + # passwordless pkexec bodge + security.sudo = { enable = true; wheelNeedsPassword = false; }; + security.wrappers.pkexec = pkgs.lib.mkForce + { + setuid = true; + owner = "root"; + group = "root"; + source = "${pkgs.sudo}/bin/sudo"; + }; + }; + + enableOCR = true; + + testScript = { nodes, ... }: '' + start_all() + machine.wait_for_x() + + machine.succeed("systemctl status input-remapper.service") + machine.execute("su - sybil -c input-remapper-gtk >&2 &") + + machine.wait_for_text("Input Remapper") + machine.wait_for_text("Preset") + machine.wait_for_text("Change Key") + ''; + }) -- cgit 1.4.1 From 064362042091a21a75a682d7d9d0811e0033f73b Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Mon, 7 Mar 2022 08:39:15 -0800 Subject: nixos/input-remapper: document pkexec workaround in test --- nixos/tests/input-remapper.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'nixos') diff --git a/nixos/tests/input-remapper.nix b/nixos/tests/input-remapper.nix index 8b9939617083..f692564caa57 100644 --- a/nixos/tests/input-remapper.nix +++ b/nixos/tests/input-remapper.nix @@ -18,7 +18,14 @@ import ./make-test-python.nix ({ pkgs, ... }: services.input-remapper.enable = true; users.users.sybil = { isNormalUser = true; group = "wheel"; }; test-support.displayManager.auto.user = user.name; - # passwordless pkexec bodge + # workaround for pkexec not working in the test environment + # Error creating textual authentication agent: + # Error opening current controlling terminal for the process (`/dev/tty'): + # No such device or address + # passwordless pkexec with polkit module also doesn't work + # to allow the program to run, we replace pkexec with sudo + # and turn on passwordless sudo + # this is not correct in general but good enough for this test security.sudo = { enable = true; wheelNeedsPassword = false; }; security.wrappers.pkexec = pkgs.lib.mkForce { -- cgit 1.4.1