home-manager/modules/services/sxhkd.nix
0qq ff959fd49a
sxhkd: fix environment (#1892)
* sxhkd: move to xsession.initExtra

When sxhkd is launched as systemd service it
doesn't have $PATH a user expects to see.

* sxhkd: add news entry
2021-05-07 15:28:52 -04:00

81 lines
1.9 KiB
Nix

{config, lib, pkgs, ...}:
with lib;
let
cfg = config.services.sxhkd;
keybindingsStr = concatStringsSep "\n" (
mapAttrsToList (hotkey: command:
optionalString (command != null) ''
${hotkey}
${command}
''
)
cfg.keybindings
);
in
{
imports = [
(mkRemovedOptionModule ["services" "sxhkd" "extraPath"]
"This option is no longer needed and can be removed.")
];
options.services.sxhkd = {
enable = mkEnableOption "simple X hotkey daemon";
package = mkOption {
type = types.package;
default = pkgs.sxhkd;
defaultText = "pkgs.sxhkd";
description = "Package containing the <command>sxhkd</command> executable.";
};
extraOptions = mkOption {
type = types.listOf types.str;
default = [ ];
description = "Command line arguments to invoke <command>sxhkd</command> with.";
example = literalExample ''[ "-m 1" ]'';
};
keybindings = mkOption {
type = types.attrsOf (types.nullOr types.str);
default = {};
description = "An attribute set that assigns hotkeys to commands.";
example = literalExample ''
{
"super + shift + {r,c}" = "i3-msg {restart,reload}";
"super + {s,w}" = "i3-msg {stacking,tabbed}";
}
'';
};
extraConfig = mkOption {
default = "";
type = types.lines;
description = "Additional configuration to add.";
example = literalExample ''
super + {_,shift +} {1-9,0}
i3-msg {workspace,move container to workspace} {1-10}
'';
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."sxhkd/sxhkdrc".text = concatStringsSep "\n" [
keybindingsStr
cfg.extraConfig
];
xsession.initExtra = ''
systemd-cat -t sxhkd systemd-run --user --scope -u sxhkd \
${cfg.package}/bin/sxhkd ${toString cfg.extraOptions} &
'';
};
}