52 lines
1.3 KiB
Nix
52 lines
1.3 KiB
Nix
{ user }: { lib, pkgs, config, ... }:
|
|
with lib;
|
|
let
|
|
scripts = config.programs.scripts;
|
|
|
|
scriptType = types.submodule ({...}: {
|
|
options = {
|
|
name = mkOption {
|
|
description = "name of the executable";
|
|
};
|
|
text = mkOption {
|
|
description = "the text of the script";
|
|
};
|
|
hotkey = mkOption {
|
|
description = "the key that run this script";
|
|
default = "";
|
|
};
|
|
install = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
};
|
|
};
|
|
});
|
|
|
|
scriptToPackage = script: pkgs.writeShellScriptBin script.name script.text;
|
|
installScripts = scripts: (map scriptToPackage (filter ( s: s.install ) scripts));
|
|
|
|
bindScript = script: if script.hotkey != "" then ''
|
|
bind = SUPER, ${script.hotkey}, exec, ${scriptToPackage script}/bin/${script.name}
|
|
'' else "";
|
|
|
|
bindScripts = scripts:
|
|
"# === USER SCRIPTS MODULE ===\n"
|
|
+ concatStringsSep "\n" (map bindScript scripts);
|
|
|
|
in
|
|
{
|
|
options.programs = {
|
|
scripts = mkOption {
|
|
type = types.listOf scriptType;
|
|
default = [];
|
|
};
|
|
};
|
|
|
|
config = {
|
|
home-manager.users.${user}.imports = [{
|
|
home.packages = installScripts scripts;
|
|
wayland.windowManager.hyprland.extraConfig = bindScripts scripts;
|
|
}];
|
|
};
|
|
|
|
}
|