CrOS/home/crow/common/optional/desktops/niri.nix
2025-07-10 23:23:47 -04:00

229 lines
7.1 KiB
Nix

{
pkgs,
inputs,
config,
...
}: {
imports = [
inputs.niri-flake.homeModules.niri
./sway/waybar.nix
./swww
];
nixpkgs.overlays = [
inputs.niri-flake.overlays.niri
];
home.packages = with pkgs; [
foot
wofi
swaynotificationcenter
polkit_gnome
swayidle
sway-audio-idle-inhibit
sway-contrib.grimshot
waybar
wl-clipboard
hyprlock
grim
slurp
swappy
wljoywake
pulseaudio
playerctl
brightnessctl
];
programs.niri = {
enable = true;
settings = {
binds = with config.lib.niri.actions; {
# Shortcuts
"Mod+Shift+Slash".action = show-hotkey-overlay;
"Mod+Return" = {
hotkey-overlay.title = "Open terminal";
action = spawn "foot";
};
"Mod+D" = {
hotkey-overlay.title = "Open Application Picker";
action = spawn "wofi" "--show" "run";
};
"Mod+Shift+Z" = {
hotkey-overlay.title = "Lock computer";
action = spawn "";
};
"Mod+Shift+E" = {
action = quit;
};
"Mod+O" = {
action = toggle-overview;
};
# Audio Control
XF86AudioRaiseVolume = {
action = spawn "pactl" "set-sink-volume" "@DEFAULT_SINK@" "+5%";
allow-when-locked = true;
};
XF86AudioLowerVolume = {
action = spawn "pactl" "set-sink-volume" "@DEFAULT_SINK@" "-5%";
allow-when-locked = true;
};
XF86AudioMute = {
action = spawn "pactl" "set-sink-mute" "@DEFAULT_SINK@" "toggle";
allow-when-locked = true;
};
XF86AudioMicMute = {
action = spawn "pulseaudio-ctl" "mute-input";
allow-when-locked = true;
};
XF86AudioPlay = {
action = spawn "playerctl" "play-pause";
allow-when-locked = true;
};
XF86AudioNext = {
action = spawn "playerctl" "next";
allow-when-locked = true;
};
XF86AudioPrev = {
action = spawn "playerctl" "previous";
allow-when-locked = true;
};
# Brightness Control
XF86MonBrightnessUp = {
action = spawn "brightnessctl" "s" "+5%";
allow-when-locked = true;
};
XF86MonBrightnessDown = {
action = spawn "brightnessctl" "s" "-5%";
allow-when-locked = true;
};
# Application Controls
"Mod+Shift+Q" = {
action = close-window;
};
# Window switching (vim style)
"Mod+H" = {action = focus-column-left;};
"Mod+J" = {action = focus-window-down;};
"Mod+K" = {action = focus-window-up;};
"Mod+L" = {action = focus-column-right;};
# Window moving
"Mod+Ctrl+H" = {action = move-column-left;};
"Mod+Ctrl+J" = {action = move-window-down;};
"Mod+Ctrl+K" = {action = move-window-up;};
"Mod+Ctrl+L" = {action = move-column-right;};
"Mod+Home" = {action = focus-column-first;};
"Mod+End" = {action = focus-column-last;};
"Mod+Ctrl+Home" = {action = move-column-to-first;};
"Mod+Ctrl+End" = {action = move-column-to-last;};
# Monitor switching
"Mod+Shift+H" = {action = focus-monitor-left;};
"Mod+Shift+J" = {action = focus-monitor-down;};
"Mod+Shift+K" = {action = focus-monitor-up;};
"Mod+Shift+L" = {action = focus-monitor-right;};
"Mod+Shift+Ctrl+H" = {action = move-column-to-monitor-left;};
"Mod+Shift+Ctrl+J" = {action = move-column-to-monitor-down;};
"Mod+Shift+Ctrl+K" = {action = move-column-to-monitor-up;};
"Mod+Shift+Ctrl+L" = {action = move-column-to-monitor-right;};
# Workspace switching
"Mod+U" = {action = focus-workspace-up;};
"Mod+I" = {action = focus-workspace-down;};
"Mod+Ctrl+U" = {action = move-column-to-workspace-up;};
"Mod+Ctrl+I" = {action = move-column-to-workspace-down;};
"Mod+Shift+U" = {action = move-workspace-up;};
"Mod+Shift+I" = {action = move-workspace-down;};
"Mod+WheelScrollDown" = {
action = focus-workspace-down;
cooldown-ms = 150;
};
"Mod+WheelScrollUp" = {
action = focus-workspace-up;
cooldown-ms = 150;
};
"Mod+Ctrl+WheelScrollDown" = {
action = move-column-to-workspace-down;
cooldown-ms = 150;
};
"Mod+Ctrl+WheelScrollUp" = {
action = move-column-to-workspace-up;
cooldown-ms = 150;
};
"Mod+WheelScrollRight" = {action = focus-column-right;};
"Mod+WheelScrollLeft" = {action = focus-column-left;};
"Mod+Ctrl+WheelScrollRight" = {action = move-column-right;};
"Mod+Ctrl+WheelScrollLeft" = {action = move-column-left;};
"Mod+Shift+WheelScrollDown" = {action = focus-column-right;};
"Mod+Shift+WheelScrollUp" = {action = focus-column-left;};
"Mod+Ctrl+Shift+WheelScrollDown" = {action = move-column-right;};
"Mod+Ctrl+Shift+WheelScrollUp" = {action = move-column-left;};
"Mod+1" = {action = focus-workspace 1;};
"Mod+2" = {action = focus-workspace 2;};
"Mod+3" = {action = focus-workspace 3;};
"Mod+4" = {action = focus-workspace 4;};
"Mod+5" = {action = focus-workspace 5;};
"Mod+6" = {action = focus-workspace 6;};
"Mod+7" = {action = focus-workspace 7;};
"Mod+8" = {action = focus-workspace 8;};
"Mod+9" = {action = focus-workspace 9;};
"Mod+BracketLeft" = {action = consume-or-expel-window-left;};
"Mod+BracketRight" = {action = consume-or-expel-window-right;};
"Mod+Comma" = {action = consume-window-into-column;};
"Mod+Period" = {action = expel-window-from-column;};
"Mod+R" = {action = switch-preset-column-width;};
"Mod+Shift+R" = {action = switch-preset-window-height;};
"Mod+Ctrl+R" = {action = reset-window-height;};
"Mod+F" = {action = maximize-column;};
"Mod+Shift+F" = {action = fullscreen-window;};
"Mod+Ctrl+F" = {action = expand-column-to-available-width;};
"Mod+C" = {action = center-column;};
"Mod+Ctrl+C" = {action = center-visible-columns;};
"Mod+Minus" = {action = set-column-width "-10%";};
"Mod+Equal" = {action = set-column-width "+10%";};
"Mod+Shift+Minus" = {action = set-window-height "-10%";};
"Mod+Shift+Equal" = {action = set-window-height "+10%";};
"Mod+V" = {action = toggle-window-floating;};
"Mod+Shift+V" = {action = switch-focus-between-floating-and-tiling;};
"Mod+W" = {action = toggle-column-tabbed-display;};
"Mod+Escape" = {
action = toggle-keyboard-shortcuts-inhibit;
allow-inhibiting = false;
};
};
input = {
keyboard = {
numlock = true;
};
touchpad = {
tap = false;
natural-scroll = true;
click-method = "button-areas";
};
};
layout = {
gaps = 16;
};
spawn-at-startup = [
{command = ["waybar"];}
];
};
};
}