81 lines
1.7 KiB
Nix
81 lines
1.7 KiB
Nix
{user}: {
|
|
lib,
|
|
pkgs,
|
|
config,
|
|
...
|
|
}:
|
|
with lib; let
|
|
scripts = config.programs.scripts;
|
|
|
|
hotkeyType = types.submodule ({...}: {
|
|
options = {
|
|
key = mkOption {
|
|
description = "the key";
|
|
};
|
|
modifier = mkOption {
|
|
description = "modifiers for the key";
|
|
default = "SUPER";
|
|
example = "SUPER_SHIFT";
|
|
};
|
|
args = mkOption {
|
|
description = "args for the script when use this key";
|
|
default = "";
|
|
};
|
|
};
|
|
});
|
|
|
|
scriptType = types.submodule ({...}: {
|
|
options = {
|
|
name = mkOption {
|
|
description = "name of the executable";
|
|
};
|
|
text = mkOption {
|
|
description = "the text of the script";
|
|
};
|
|
hotkeys = mkOption {
|
|
type = types.listOf hotkeyType;
|
|
description = "keys that run this script";
|
|
default = [];
|
|
};
|
|
install = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
};
|
|
};
|
|
});
|
|
|
|
scriptToPackage = script:
|
|
pkgs.writeShellScriptBin script.name script.text;
|
|
|
|
scriptExec = {
|
|
script,
|
|
hotkey,
|
|
}: "${scriptToPackage script}/bin/${script.name} ${hotkey.args}";
|
|
|
|
installScripts = scripts: (map scriptToPackage (filter (s: s.install) scripts));
|
|
|
|
bindScript = script:
|
|
(
|
|
map
|
|
(
|
|
hotkey: "${hotkey.modifier}, ${hotkey.key}, exec, ${scriptExec {inherit script hotkey;}}"
|
|
)
|
|
script.hotkeys
|
|
);
|
|
in {
|
|
options.programs = {
|
|
scripts = mkOption {
|
|
type = types.listOf scriptType;
|
|
default = [];
|
|
};
|
|
};
|
|
|
|
config = {
|
|
home-manager.users.${user}.imports = [
|
|
{
|
|
home.packages = installScripts scripts;
|
|
wayland.windowManager.hyprland.settings.bind = builtins.concatMap bindScript scripts ;
|
|
}
|
|
];
|
|
};
|
|
}
|