nix/graphical/binds.nix
2025-11-21 17:25:05 +11:00

147 lines
3.2 KiB
Nix

{
lib,
config,
scope,
...
}:
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 "user.desktops.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+Shift+Minus".spawn = [
"tagctl"
"toggle"
"99"
];
"Mod+Equal".spawn = [
"tagctl"
"toggle-tag"
"101"
];
"Mod+Shift+Equal".spawn = [
"tagctl"
"toggle"
"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+Equal".spawn = (getAppName "passwordManager"); # niri-tag needs proper scratchpads smh
"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 = [
"volumectl"
"-u"
"down"
];
"XF86AudioMute".spawn = [
"volumectl"
"toggle-mute"
];
"XF86AudioNext".spawn = [
"playerctl"
"next"
];
"XF86AudioPlay".spawn = [
"playerctl"
"play-pause"
];
"XF86AudioPrev".spawn = [
"playerctl"
"previous"
];
"XF86AudioRaiseVolume".spawn = [
"volumectl"
"-u"
"up"
];
"XF86AudioStop".spawn = [
"playerctl"
"stop"
];
"XF86MonBrightnessUp".spawn = [
"brightnessctl"
"s"
"5%+"
];
"XF86MonBrightnessDown".spawn = [
"brightnessctl"
"s"
"5%-"
];
"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")
]