nix/graphical/binds.nix
2026-04-08 11:51:33 +10:00

104 lines
2.8 KiB
Nix

{
lib,
config,
...
}:
let
inherit (lib)
range
nameValuePair
mapAttrs'
mergeAttrsList
;
inherit (builtins) listToAttrs replaceStrings;
hBinds = {
H = "left";
L = "right";
};
vBinds = {
J = "down";
K = "up";
};
makeDirBind =
mods: cmd: keys:
mapAttrs' (
key: dir:
nameValuePair "${mods}+${key}" {
action = "${replaceStrings [ "$DIR" ] [ "${dir}" ] "${cmd}"}";
}
) keys;
makeTagBind =
mods: cmd:
listToAttrs (
map (num: {
name = "${mods}+${builtins.toString (lib.mod num 10)}";
value = {
spawn = [
"tagctl"
cmd
(builtins.toString num)
];
};
}) (range 1 10)
);
getApp = app: lib.singleton (lib.getExe config.apps.${app});
in
scope "niri.binds"
<| mergeAttrsList [
{
"Mod+Grave".action = "focus-monitor-next";
"Mod+Shift+Grave".action = "move-column-to-monitor-next";
"Mod+Minus".spawn = [
"tagctl"
"toggle-tag"
"99"
];
"Mod+Equal".spawn = [
"tagctl"
"toggle-tag"
"101"
];
"Mod+D".spawn = [
"qs"
"ipc"
"call"
"launch"
"toggle"
];
"Mod+F".spawn = (getApp "browser");
"Mod+E".spawn = (getApp "fm");
"Mod+Return".spawn = (getApp "terminal");
"Mod+Shift+E".spawn = [
"qs"
"ipc"
"call"
"logout"
"toggle"
];
"Mod+Shift+Q".action = "close-window";
"Mod+Shift+S".action = "screenshot";
"Mod+R".action = "switch-preset-column-width";
"Mod+Shift+R".action = "maximize-column";
"XF86AudioLowerVolume".spawn = ["qs" "ipc" "call" "osd" "volumeDown"];
"XF86AudioMute".spawn = ["qs" "ipc" "call" "osd" "toggleMute"];
"XF86AudioNext".spawn = ["playerctl" "next"];
"XF86AudioPlay".spawn = ["playerctl" "play-pause"];
"XF86AudioPrev".spawn = ["playerctl" "previous"];
"XF86AudioRaiseVolume".spawn = ["qs" "ipc" "call" "osd" "volumeUp"];
"XF86AudioStop".spawn = ["playerctl" "stop"];
"XF86MonBrightnessUp".spawn = ["qs" "ipc" "call" "osd" "brightnessUp"];
"XF86MonBrightnessDown".spawn = ["qs" "ipc" "call" "osd" "brightnessDown"];
"Mod+Space".action = "switch-focus-between-floating-and-tiling";
"Mod+Shift+Space".action = "toggle-window-floating";
"Mod+Ctrl+Space".action = "fullscreen-window";
"Mod+C".action = "center-window";
}
(makeDirBind "Mod" "focus-window-$DIR" vBinds)
(makeDirBind "Mod" "focus-column-or-monitor-$DIR" hBinds)
(makeDirBind "Mod+Shift" "consume-or-expel-window-$DIR" hBinds)
(makeDirBind "Mod+Ctrl" "move-column-$DIR-or-to-monitor-$DIR" hBinds)
(makeDirBind "Mod+Ctrl" "move-window-$DIR" vBinds)
(makeTagBind "Mod" "toggle-tag")
(makeTagBind "Mod+Shift" "toggle")
(makeTagBind "Mod+Ctrl" "exclusive-tag")
]