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