diff options
author | Matthew Bauer <mjbauer95@gmail.com> | 2018-10-08 14:42:59 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-08 14:42:59 -0500 |
commit | dd6f6951cf57050aa1efdd6296e838866c915c38 (patch) | |
tree | 243df8f9dd79e3253210675290319738c2ec959a | |
parent | 3cb179a4d0dffffb9e131acfb4f64baaed7f7a7a (diff) | |
parent | f9129251ea633ccf94ba4699a3ce5694c2e0c3b9 (diff) | |
download | nixlib-dd6f6951cf57050aa1efdd6296e838866c915c38.tar nixlib-dd6f6951cf57050aa1efdd6296e838866c915c38.tar.gz nixlib-dd6f6951cf57050aa1efdd6296e838866c915c38.tar.bz2 nixlib-dd6f6951cf57050aa1efdd6296e838866c915c38.tar.lz nixlib-dd6f6951cf57050aa1efdd6296e838866c915c38.tar.xz nixlib-dd6f6951cf57050aa1efdd6296e838866c915c38.tar.zst nixlib-dd6f6951cf57050aa1efdd6296e838866c915c38.zip |
Merge pull request #45109 from jfrankenau/module-triggerhappy
nixos/triggerhappy: add module for triggerhappy hotkey daemon
-rw-r--r-- | nixos/modules/module-list.nix | 1 | ||||
-rw-r--r-- | nixos/modules/services/hardware/triggerhappy.nix | 114 | ||||
-rw-r--r-- | pkgs/tools/inputmethods/triggerhappy/default.nix | 23 |
3 files changed, 125 insertions, 13 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index af630178a919..b6849a4df574 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -284,6 +284,7 @@ ./services/hardware/tlp.nix ./services/hardware/thinkfan.nix ./services/hardware/trezord.nix + ./services/hardware/triggerhappy.nix ./services/hardware/u2f.nix ./services/hardware/udev.nix ./services/hardware/udisks2.nix diff --git a/nixos/modules/services/hardware/triggerhappy.nix b/nixos/modules/services/hardware/triggerhappy.nix new file mode 100644 index 000000000000..81d4a1ae65bf --- /dev/null +++ b/nixos/modules/services/hardware/triggerhappy.nix @@ -0,0 +1,114 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.triggerhappy; + + socket = "/run/thd.socket"; + + configFile = pkgs.writeText "triggerhappy.conf" '' + ${concatMapStringsSep "\n" + ({ keys, event, cmd, ... }: + ''${concatMapStringsSep "+" (x: "KEY_" + x) keys} ${toString { press = 1; hold = 2; release = 0; }.${event}} ${cmd}'' + ) + cfg.bindings} + ${cfg.extraConfig} + ''; + + bindingCfg = { config, ... }: { + options = { + + keys = mkOption { + type = types.listOf types.str; + description = "List of keys to match. Key names as defined in linux/input-event-codes.h"; + }; + + event = mkOption { + type = types.enum ["press" "hold" "release"]; + default = "press"; + description = "Event to match."; + }; + + cmd = mkOption { + type = types.str; + description = "What to run."; + }; + + }; + }; + +in + +{ + + ###### interface + + options = { + + services.triggerhappy = { + + enable = mkOption { + type = types.bool; + default = false; + description = '' + Whether to enable the <command>triggerhappy</command> hotkey daemon. + ''; + }; + + bindings = mkOption { + type = types.listOf (types.submodule bindingCfg); + default = []; + example = lib.literalExample '' + [ { keys = ["PLAYPAUSE"]; cmd = "''${pkgs.mpc_cli}/bin/mpc -q toggle"; } ] + ''; + description = '' + Key bindings for <command>triggerhappy</command>. + ''; + }; + + extraConfig = mkOption { + type = types.lines; + default = ""; + description = '' + Literal contents to append to the end of <command>triggerhappy</command> configuration file. + ''; + }; + + }; + + }; + + + ###### implementation + + config = mkIf cfg.enable { + + systemd.sockets.triggerhappy = { + description = "Triggerhappy Socket"; + wantedBy = [ "sockets.target" ]; + socketConfig.ListenDatagram = socket; + }; + + systemd.services.triggerhappy = { + wantedBy = [ "multi-user.target" ]; + after = [ "local-fs.target" ]; + description = "Global hotkey daemon"; + serviceConfig = { + ExecStart = "${pkgs.triggerhappy}/bin/thd --user nobody --socket ${socket} --triggers ${configFile} --deviceglob /dev/input/event*"; + }; + }; + + services.udev.packages = lib.singleton (pkgs.writeTextFile { + name = "triggerhappy-udev-rules"; + destination = "/etc/udev/rules.d/61-triggerhappy.rules"; + text = '' + ACTION=="add", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{name}!="triggerhappy", \ + RUN+="${pkgs.triggerhappy}/bin/th-cmd --socket ${socket} --passfd --udev" + ''; + }); + + }; + +} diff --git a/pkgs/tools/inputmethods/triggerhappy/default.nix b/pkgs/tools/inputmethods/triggerhappy/default.nix index 719d86b3a389..ec8ac8845597 100644 --- a/pkgs/tools/inputmethods/triggerhappy/default.nix +++ b/pkgs/tools/inputmethods/triggerhappy/default.nix @@ -1,26 +1,23 @@ -{ stdenv, fetchurl, perl }: +{ stdenv, fetchFromGitHub, pkgconfig, perl, systemd }: stdenv.mkDerivation rec { name = "triggerhappy-${version}"; version = "0.5.0"; - src = fetchurl { - url = "https://github.com/wertarbyte/triggerhappy/archive/release/${version}.tar.gz"; - sha256 = "af0fc196202f2d35153be401769a9ad9107b5b6387146cfa8895ae9cafad631c"; + src = fetchFromGitHub { + owner = "wertarbyte"; + repo = "triggerhappy"; + rev = "release/${version}"; + sha256 = "0gb1qhrxwq7i5abd408d01a2dpf28nr1fph1fg7w7n0i5i1nnk90"; }; - buildInputs = [ perl ]; - installFlags = [ "DESTDIR=$(out)" ]; + nativeBuildInputs = [ pkgconfig perl ]; + buildInputs = [ systemd ]; - postPatch = '' - substituteInPlace Makefile --replace "/usr/" "/" - substituteInPlace Makefile --replace "/sbin/" "/bin/" - ''; + makeFlags = [ "PREFIX=$(out)" "BINDIR=$(out)/bin" ]; postInstall = '' install -D -m 644 -t "$out/etc/triggerhappy/triggers.d" "triggerhappy.conf.examples" - install -D -m 644 -t "$out/usr/lib/systemd/system" "systemd/triggerhappy.service" "systemd/triggerhappy.socket" - install -D -m 644 -t "$out/usr/lib/udev/rules.d" "udev/triggerhappy-udev.rules" ''; meta = with stdenv.lib; { @@ -34,6 +31,6 @@ stdenv.mkDerivation rec { homepage = https://github.com/wertarbyte/triggerhappy/; license = licenses.gpl3Plus; platforms = platforms.linux; - maintainers = [ maintainers.taha ]; + maintainers = with maintainers; [ jfrankenau taha ]; }; } |