niri.nix (10239B)
1 { 2 lib, 3 inputs, 4 pkgs, 5 ... 6 }: 7 { 8 imports = [ 9 inputs.niri.homeModules.niri 10 ]; 11 12 programs.niri = { 13 enable = true; 14 package = pkgs.niri-unstable; 15 settings = 16 let 17 terminalCmd = lib.getExe pkgs.alacritty; 18 in 19 { 20 prefer-no-csd = true; 21 hotkey-overlay.skip-at-startup = true; 22 overview = { 23 backdrop-color = "#000000"; 24 }; 25 26 window-rules = [ 27 { 28 matches = [ { app-id = "spotify"; } ]; 29 open-on-workspace = "r9"; 30 open-maximized = true; 31 } 32 { 33 matches = [ { app-id = "Alacritty"; } ]; 34 opacity = 0.92; 35 } 36 { 37 matches = [ { app-id = "firefox"; } ]; 38 open-maximized = true; 39 } 40 { 41 matches = [ { app-id = "telegram"; } ]; 42 open-maximized = true; 43 } 44 ]; 45 46 workspaces = { 47 "l1" = { }; 48 "l2" = { }; 49 "l3" = { }; 50 "l4" = { }; 51 "l5" = { }; 52 "l6" = { }; 53 "l7" = { }; 54 "l8" = { }; 55 "l9" = { }; 56 "r1" = { }; 57 "r2" = { }; 58 "r3" = { }; 59 "r4" = { }; 60 "r5" = { }; 61 "r6" = { }; 62 "r7" = { }; 63 "r8" = { }; 64 "r9" = { }; 65 }; 66 binds = 67 let 68 nshic = "noctalia-shell ipc call notifications"; 69 in 70 { 71 "Mod+Return".action.spawn = "${terminalCmd}"; 72 "Mod+C".action.spawn = "firefox"; 73 "Mod+D".action.spawn = "dmenu-niri_run"; 74 "Mod+P".action.spawn = "passmenu-otp"; 75 "Mod+B".action.spawn = "dmenu-bluetooth"; 76 "Mod+Alt+L".action.spawn = "swaylock -f -c 000000"; 77 "Mod+W".action.spawn = "spotify"; 78 "Mod+Shift+P".action.spawn = "pavucontrol"; 79 "Mod+Shift+B".action.spawn = "nautilus"; 80 "Mod+Shift+W".action.spawn-sh = "${terminalCmd} -e nmtui"; 81 "Mod+M".action.spawn-sh = "TZ=Europe/Berlin ${terminalCmd} -e neomutt"; 82 "Mod+Shift+R".action.spawn-sh = "background"; 83 "Mod+Shift+Slash".action.show-hotkey-overlay = { }; 84 "Mod+Ctrl+Space".action.spawn-sh = "${nshic} removeOldestHistory"; 85 "Ctrl+Space".action.spawn-sh = "${nshic} dismissOldest"; 86 "Mod+Space".action.spawn-sh = "${nshic} toggleHistory"; 87 88 "Mod+Shift+E".action.quit.skip-confirmation = true; 89 "Mod+Shift+Q".action.close-window = { }; 90 "Mod+F".action.maximize-column = { }; 91 "Mod+G".action.fullscreen-window = { }; 92 "Mod+Shift+F".action.toggle-window-floating = { }; 93 "Mod+Shift+C".action.center-column = { }; 94 95 "Mod+K".action.focus-column-right = { }; 96 "Mod+J".action.focus-column-left = { }; 97 "Alt+K".action.focus-workspace-up = { }; 98 "Alt+J".action.focus-workspace-down = { }; 99 100 "Mod+H".action.focus-monitor-left = { }; 101 "Mod+L".action.focus-monitor-right = { }; 102 103 "Mod+Ctrl+WheelScrollDown".action.focus-column-left = { }; 104 "Mod+Ctrl+WheelScrollUp".action.focus-column-right = { }; 105 "Mod+WheelScrollDown".action.focus-workspace-down = { }; 106 "Mod+WheelScrollUp".action.focus-workspace-up = { }; 107 108 "Mod+Shift+K".action.move-column-right = { }; 109 "Mod+Shift+J".action.move-column-left = { }; 110 "Alt+Shift+K".action.move-window-to-workspace-up = { }; 111 "Alt+Shift+J".action.move-window-to-workspace-down = { }; 112 113 "Mod+Shift+H".action.move-window-to-monitor-left = { }; 114 "Mod+Shift+L".action.move-window-to-monitor-right = { }; 115 "Mod+Tab".action.toggle-overview = { }; 116 117 "Mod+1".action.focus-workspace = "l1"; 118 "Mod+2".action.focus-workspace = "l2"; 119 "Mod+3".action.focus-workspace = "l3"; 120 "Mod+4".action.focus-workspace = "l4"; 121 "Mod+5".action.focus-workspace = "l5"; 122 "Mod+6".action.focus-workspace = "l6"; 123 "Mod+7".action.focus-workspace = "l7"; 124 "Mod+8".action.focus-workspace = "l8"; 125 "Mod+9".action.focus-workspace = "l9"; 126 127 "Alt+1".action.focus-workspace = "r1"; 128 "Alt+2".action.focus-workspace = "r2"; 129 "Alt+3".action.focus-workspace = "r3"; 130 "Alt+4".action.focus-workspace = "r4"; 131 "Alt+5".action.focus-workspace = "r5"; 132 "Alt+6".action.focus-workspace = "r6"; 133 "Alt+7".action.focus-workspace = "r7"; 134 "Alt+8".action.focus-workspace = "r8"; 135 "Alt+9".action.focus-workspace = "r9"; 136 137 "Mod+Shift+1".action.move-window-to-workspace = "l1"; 138 "Mod+Shift+2".action.move-window-to-workspace = "l2"; 139 "Mod+Shift+3".action.move-window-to-workspace = "l3"; 140 "Mod+Shift+4".action.move-window-to-workspace = "l4"; 141 "Mod+Shift+5".action.move-window-to-workspace = "l5"; 142 "Mod+Shift+6".action.move-window-to-workspace = "l6"; 143 "Mod+Shift+7".action.move-window-to-workspace = "l7"; 144 "Mod+Shift+8".action.move-window-to-workspace = "l8"; 145 "Mod+Shift+9".action.move-window-to-workspace = "l9"; 146 147 "Alt+Shift+1".action.move-window-to-workspace = "r1"; 148 "Alt+Shift+2".action.move-window-to-workspace = "r2"; 149 "Alt+Shift+3".action.move-window-to-workspace = "r3"; 150 "Alt+Shift+4".action.move-window-to-workspace = "r4"; 151 "Alt+Shift+5".action.move-window-to-workspace = "r5"; 152 "Alt+Shift+6".action.move-window-to-workspace = "r6"; 153 "Alt+Shift+7".action.move-window-to-workspace = "r7"; 154 "Alt+Shift+8".action.move-window-to-workspace = "r8"; 155 "Alt+Shift+9".action.move-window-to-workspace = "r9"; 156 157 "Mod+F1".action.spawn-sh = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; 158 "Mod+F2".action.spawn-sh = "wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-"; 159 "Mod+F3".action.spawn-sh = "wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+"; 160 "Mod+F4".action.spawn-sh = "sudo xbacklight -dec 1"; 161 "Mod+F5".action.spawn-sh = "sudo xbacklight -inc 1"; 162 163 "Mod+Ctrl+H".action.set-column-width = "-5%"; 164 "Mod+Ctrl+L".action.set-column-width = "+5%"; 165 "Mod+Ctrl+K".action.set-window-height = "-5%"; 166 "Mod+Ctrl+J".action.set-window-height = "+5%"; 167 168 "Shift+Alt+C".action.spawn-sh = "${lib.getExe pkgs.grim} -l 0 - | ${pkgs.wl-clipboard}/bin/wl-copy"; 169 170 "Shift+Alt+V".action.spawn-sh = 171 "${pkgs.wl-clipboard}/bin/wl-paste | ${lib.getExe pkgs.swappy} -f -"; 172 173 "Shift+Alt+S".action.spawn-sh = lib.getExe ( 174 pkgs.writeShellApplication { 175 name = "screenshot"; 176 text = '' 177 ${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp} -w 0)" - \ 178 | ${pkgs.wl-clipboard}/bin/wl-copy 179 ''; 180 } 181 ); 182 }; 183 layout = { 184 default-column-width.proportion = 0.5; 185 border = { 186 enable = true; 187 width = 4; 188 active = { 189 color = "#A96C8A"; 190 }; 191 inactive = { 192 color = "#263238"; 193 }; 194 }; 195 gaps = 10; 196 focus-ring = { 197 enable = false; 198 }; 199 }; 200 cursor = { 201 size = 16; 202 theme = "Adwaita"; 203 }; 204 205 xwayland-satellite.path = lib.getExe pkgs.xwayland-satellite; 206 207 spawn-at-startup = [ 208 { command = [ "noctalia-shell" ]; } 209 { command = [ "background" ]; } 210 # { command = [ "dunst" ]; } 211 { command = [ "check-mail" ]; } 212 { 213 command = [ 214 "dbus-update-activation-environment" 215 "--systemd DISPLAY XDG_CURRENT_DESKOP=niri" 216 ]; 217 } 218 { 219 command = [ 220 "systemctl" 221 " --user" 222 "import-environment DISPLAY XDG_CURRENT_DESKTOP=niri" 223 ]; 224 } 225 226 { 227 command = [ 228 "sh" 229 "niri-monitors" 230 ]; 231 } 232 { 233 command = [ 234 "nextcloud" 235 "--background" 236 ]; 237 } 238 { 239 command = [ 240 "${lib.getExe pkgs.swayidle}" 241 "-w" 242 "timeout" 243 "300" 244 "swaylock -f -c 000000" 245 "timeout" 246 "900" 247 "systemctl suspend-then-hibernate" 248 "before-sleep" 249 "swaylock -f -c 000000" 250 ]; 251 } 252 ]; 253 254 outputs = { 255 "PNP(BNQ) BenQ GL2760 H3E04203019" = { 256 enable = true; 257 scale = 1; 258 mode = { 259 width = 1920; 260 height = 1080; 261 }; 262 position = { 263 x = 0; 264 y = 0; 265 }; 266 }; 267 "PNP(BNQ) BenQ GL2760 SCF04101019" = { 268 enable = true; 269 scale = 1; 270 mode = { 271 width = 1920; 272 height = 1080; 273 }; 274 position = { 275 x = 1920; 276 y = 0; 277 }; 278 }; 279 "BOE 0x0BCA Unknown" = { 280 enable = true; 281 mode = { 282 width = 2256; 283 height = 1504; 284 }; 285 position = { 286 x = 3840; 287 y = 0; 288 }; 289 }; 290 }; 291 input = { 292 focus-follows-mouse.enable = false; 293 keyboard = { 294 xkb = { 295 layout = "us,de"; 296 model = "pc104"; 297 options = "grp:shifts_toggle"; 298 }; 299 repeat-rate = 50; 300 repeat-delay = 200; 301 }; 302 touchpad = { 303 natural-scroll = false; 304 tap = true; 305 }; 306 mouse = { 307 accel-profile = "flat"; 308 }; 309 }; 310 }; 311 }; 312 }