(Snow)flakes for fluffy winters.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(home-manager): add niri configuration

+629
+623
modules/home-manager/niri/config.kdl
··· 1 + // This config is in the KDL format: https://kdl.dev 2 + // "/-" comments out the following node. 3 + // Check the wiki for a full description of the configuration: 4 + // https://yalter.github.io/niri/Configuration:-Introduction 5 + 6 + // Input device configuration. 7 + // Find the full list of options on the wiki: 8 + // https://yalter.github.io/niri/Configuration:-Input 9 + input { 10 + keyboard { 11 + xkb { 12 + // You can set rules, model, layout, variant and options. 13 + // For more information, see xkeyboard-config(7). 14 + 15 + // For example: 16 + // layout "us,ru" 17 + // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps" 18 + 19 + // If this section is empty, niri will fetch xkb settings 20 + // from org.freedesktop.locale1. You can control these using 21 + // localectl set-x11-keymap. 22 + } 23 + 24 + // Enable numlock on startup, omitting this setting disables it. 25 + numlock 26 + } 27 + 28 + // Next sections include libinput settings. 29 + // Omitting settings disables them, or leaves them at their default values. 30 + // All commented-out settings here are examples, not defaults. 31 + touchpad { 32 + // off 33 + tap 34 + // dwt 35 + // dwtp 36 + // drag false 37 + // drag-lock 38 + natural-scroll 39 + // accel-speed 0.2 40 + // accel-profile "flat" 41 + // scroll-method "two-finger" 42 + // disabled-on-external-mouse 43 + } 44 + 45 + mouse { 46 + // off 47 + // natural-scroll 48 + // accel-speed 0.2 49 + // accel-profile "flat" 50 + // scroll-method "no-scroll" 51 + } 52 + 53 + trackpoint { 54 + // off 55 + // natural-scroll 56 + // accel-speed 0.2 57 + // accel-profile "flat" 58 + // scroll-method "on-button-down" 59 + // scroll-button 273 60 + // scroll-button-lock 61 + // middle-emulation 62 + } 63 + 64 + // Uncomment this to make the mouse warp to the center of newly focused windows. 65 + // warp-mouse-to-focus 66 + 67 + // Focus windows and outputs automatically when moving the mouse into them. 68 + // Setting max-scroll-amount="0%" makes it work only on windows already fully on screen. 69 + // focus-follows-mouse max-scroll-amount="0%" 70 + 71 + disable-power-key-handling 72 + } 73 + 74 + // You can configure outputs by their name, which you can find 75 + // by running `niri msg outputs` while inside a niri instance. 76 + // The built-in laptop monitor is usually called "eDP-1". 77 + // Find more information on the wiki: 78 + // https://yalter.github.io/niri/Configuration:-Outputs 79 + // Remember to uncomment the node by removing "/-"! 80 + output "eDP-1" { 81 + mode "1920x1200@59.950" 82 + 83 + // You can use integer or fractional scale, for example use 1.5 for 150% scale. 84 + scale 1.5 85 + 86 + // Transform allows to rotate the output counter-clockwise, valid values are: 87 + // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. 88 + transform "normal" 89 + 90 + // Position of the output in the global coordinate space. 91 + // This affects directional monitor actions like "focus-monitor-left", and cursor movement. 92 + // The cursor can only move between directly adjacent outputs. 93 + // Output scale and rotation has to be taken into account for positioning: 94 + // outputs are sized in logical, or scaled, pixels. 95 + // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080, 96 + // so to put another output directly adjacent to it on the right, set its x to 1920. 97 + // If the position is unset or results in an overlap, the output is instead placed 98 + // automatically. 99 + position x=0 y=0 100 + } 101 + 102 + // Settings that influence how windows are positioned and sized. 103 + // Find more information on the wiki: 104 + // https://yalter.github.io/niri/Configuration:-Layout 105 + layout { 106 + // Set gaps around windows in logical pixels. 107 + gaps 12 108 + 109 + // When to center a column when changing focus, options are: 110 + // - "never", default behavior, focusing an off-screen column will keep at the left 111 + // or right edge of the screen. 112 + // - "always", the focused column will always be centered. 113 + // - "on-overflow", focusing a column will center it if it doesn't fit 114 + // together with the previously focused column. 115 + center-focused-column "never" 116 + 117 + // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. 118 + preset-column-widths { 119 + // Proportion sets the width as a fraction of the output width, taking gaps into account. 120 + // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. 121 + // The default preset widths are 1/3, 1/2 and 2/3 of the output. 122 + proportion 0.33333 123 + proportion 0.5 124 + proportion 0.66667 125 + 126 + // Fixed sets the width in logical pixels exactly. 127 + // fixed 1920 128 + } 129 + 130 + // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. 131 + // preset-window-heights { } 132 + 133 + // You can change the default width of the new windows. 134 + default-column-width { proportion 0.5; } 135 + // If you leave the brackets empty, the windows themselves will decide their initial width. 136 + // default-column-width {} 137 + 138 + // By default focus ring and border are rendered as a solid background rectangle 139 + // behind windows. That is, they will show up through semitransparent windows. 140 + // This is because windows using client-side decorations can have an arbitrary shape. 141 + // 142 + // If you don't like that, you should uncomment `prefer-no-csd` below. 143 + // Niri will draw focus ring and border *around* windows that agree to omit their 144 + // client-side decorations. 145 + // 146 + // Alternatively, you can override it with a window rule called 147 + // `draw-border-with-background`. 148 + 149 + // You can change how the focus ring looks. 150 + focus-ring { 151 + // Uncomment this line to disable the focus ring. 152 + off 153 + 154 + // How many logical pixels the ring extends out from the windows. 155 + width 4 156 + 157 + // Colors can be set in a variety of ways: 158 + // - CSS named colors: "red" 159 + // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa" 160 + // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others. 161 + 162 + // Color of the ring on the active monitor. 163 + // active-color "#7fc8ff" 164 + 165 + // Color of the ring on inactive monitors. 166 + // 167 + // The focus ring only draws around the active window, so the only place 168 + // where you can see its inactive-color is on other monitors. 169 + // inactive-color "#505050" 170 + 171 + // You can also use gradients. They take precedence over solid colors. 172 + // Gradients are rendered the same as CSS linear-gradient(angle, from, to). 173 + // The angle is the same as in linear-gradient, and is optional, 174 + // defaulting to 180 (top-to-bottom gradient). 175 + // You can use any CSS linear-gradient tool on the web to set these up. 176 + // Changing the color space is also supported, check the wiki for more info. 177 + // 178 + // active-gradient from="#80c8ff" to="#c7ff7f" angle=45 179 + 180 + // You can also color the gradient relative to the entire view 181 + // of the workspace, rather than relative to just the window itself. 182 + // To do that, set relative-to="workspace-view". 183 + // 184 + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 185 + } 186 + 187 + // You can also add a border. It's similar to the focus ring, but always visible. 188 + border { 189 + // The settings are the same as for the focus ring. 190 + // If you enable the border, you probably want to disable the focus ring. 191 + off 192 + 193 + width 4 194 + active-color "#ffc87f" 195 + inactive-color "#505050" 196 + 197 + // Color of the border around windows that request your attention. 198 + urgent-color "#9b0000" 199 + 200 + // Gradients can use a few different interpolation color spaces. 201 + // For example, this is a pastel rainbow gradient via in="oklch longer hue". 202 + // 203 + // active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue" 204 + 205 + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 206 + } 207 + 208 + shadow { 209 + on 210 + softness 22 // blur radius 211 + spread 0 212 + offset x=0 y=8 213 + color "rgba(0,0,0,0.22)" 214 + } 215 + 216 + // Struts shrink the area occupied by windows, similarly to layer-shell panels. 217 + // You can think of them as a kind of outer gaps. They are set in logical pixels. 218 + // Left and right struts will cause the next window to the side to always be visible. 219 + // Top and bottom struts will simply add outer gaps in addition to the area occupied by 220 + // layer-shell panels and regular gaps. 221 + struts { 222 + // left 64 223 + // right 64 224 + // top 64 225 + // bottom 64 226 + } 227 + } 228 + 229 + overview { 230 + workspace-shadow { 231 + off 232 + } 233 + } 234 + 235 + // Add lines like this to spawn processes at startup. 236 + // Note that running niri as a session supports xdg-desktop-autostart, 237 + // which may be more convenient to use. 238 + // See the binds section below for more spawn examples. 239 + 240 + // Noctalia Shell startup 241 + spawn-at-startup "noctalia-shell" 242 + 243 + // This line starts waybar, a commonly used bar for Wayland compositors. 244 + // spawn-at-startup "waybar" 245 + 246 + // To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup: 247 + // spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell" 248 + 249 + hotkey-overlay { 250 + // Uncomment this line to disable the "Important Hotkeys" pop-up at startup. 251 + // skip-at-startup 252 + } 253 + 254 + // Uncomment this line to ask the clients to omit their client-side decorations if possible. 255 + // If the client will specifically ask for CSD, the request will be honored. 256 + // Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. 257 + // This option will also fix border/focus ring drawing behind some semitransparent windows. 258 + // After enabling or disabling this, you need to restart the apps for this to take effect. 259 + prefer-no-csd 260 + 261 + // You can change the path where screenshots are saved. 262 + // A ~ at the front will be expanded to the home directory. 263 + // The path is formatted with strftime(3) to give you the screenshot date and time. 264 + screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" 265 + 266 + // You can also set this to null to disable saving screenshots to disk. 267 + // screenshot-path null 268 + 269 + // Animation settings. 270 + // The wiki explains how to configure individual animations: 271 + // https://yalter.github.io/niri/Configuration:-Animations 272 + animations { 273 + // Uncomment to turn off all animations. 274 + // off 275 + 276 + // Slow down all animations by this factor. Values below 1 speed them up instead. 277 + // slowdown 3.0 278 + } 279 + 280 + // Window rules let you adjust behavior for individual windows. 281 + // Find more information on the wiki: 282 + // https://yalter.github.io/niri/Configuration:-Window-Rules 283 + 284 + // Work around WezTerm's initial configure bug 285 + // by setting an empty default-column-width. 286 + window-rule { 287 + // This regular expression is intentionally made as specific as possible, 288 + // since this is the default config, and we want no false positives. 289 + // You can get away with just app-id="wezterm" if you want. 290 + match app-id=r#"^org\.wezfurlong\.wezterm$"# 291 + default-column-width {} 292 + } 293 + 294 + // Open the Firefox picture-in-picture player as floating by default. 295 + window-rule { 296 + // This app-id regular expression will work for both: 297 + // - host Firefox (app-id is "firefox") 298 + // - Flatpak Firefox (app-id is "org.mozilla.firefox") 299 + match app-id=r#"firefox$"# title="^Picture-in-Picture$" 300 + open-floating true 301 + } 302 + 303 + // Example: block out two password managers from screen capture. 304 + // (This example rule is commented out with a "/-" in front.) 305 + /-window-rule { 306 + match app-id=r#"^org\.keepassxc\.KeePassXC$"# 307 + match app-id=r#"^org\.gnome\.World\.Secrets$"# 308 + 309 + block-out-from "screen-capture" 310 + 311 + // Use this instead if you want them visible on third-party screenshot tools. 312 + // block-out-from "screencast" 313 + } 314 + 315 + // Example: enable rounded corners for all windows. 316 + // (This example rule is commented out with a "/-" in front.) 317 + window-rule { 318 + geometry-corner-radius 8 319 + clip-to-geometry true 320 + } 321 + 322 + // Apps: Blur all with xray 323 + window-rule { 324 + background-effect { 325 + blur true 326 + xray true 327 + } 328 + } 329 + 330 + // Noctalia: blur bar and launcher with xray 331 + /-layer-rule { 332 + match namespace="^noctalia-(background|launcher-overlay|dock)-.*$" 333 + background-effect { 334 + blur true 335 + xray true 336 + } 337 + } 338 + 339 + blur { 340 + passes 1 341 + offset 8 342 + noise 0.04 343 + saturation 1 344 + } 345 + 346 + debug { 347 + // Allows notification actions and window activation from Noctalia. 348 + honor-xdg-activation-with-invalid-serial 349 + } 350 + 351 + // Noctalia overview blurred background 352 + layer-rule { 353 + match namespace="^noctalia-overview*" 354 + place-within-backdrop true 355 + } 356 + 357 + binds { 358 + // Keys consist of modifiers separated by + signs, followed by an XKB key name 359 + // in the end. To find an XKB name for a particular key, you may use a program 360 + // like wev. 361 + // 362 + // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt 363 + // when running as a winit window. 364 + // 365 + // Most actions that you can bind here can also be invoked programmatically with 366 + // `niri msg action do-something`. 367 + 368 + // Noctalia binds 369 + Alt+Space { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; } 370 + Mod+S { spawn "noctalia-shell" "ipc" "call" "controlCenter" "toggle"; } 371 + 372 + // Mod-Shift-/, which is usually the same as Mod-?, 373 + // shows a list of important hotkeys. 374 + Mod+Shift+Slash { show-hotkey-overlay; } 375 + 376 + // Suggested binds for running programs: terminal, app launcher, screen locker. 377 + Mod+T hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; } 378 + // Mod+D hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; } 379 + Mod+L { spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"; } 380 + 381 + // KDE Plasma equivalent power cycle 382 + Mod+B { spawn "noctalia-shell" "ipc" "call" "powerProfile" "cycle"; } 383 + 384 + XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "increase"; } 385 + XF86AudioPlay allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "media" "playPause"; } 386 + XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "decrease"; } 387 + XF86AudioMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; } 388 + XF86MonBrightnessUp allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "brightness" "increase"; } 389 + XF86MonBrightnessDown allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "brightness" "decrease"; } 390 + 391 + XF86PowerOff allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "sessionMenu" "toggle"; } 392 + 393 + Mod+V { spawn "noctalia-shell" "ipc" "call" "launcher" "clipboard"; } 394 + Mod+Shift+Space { spawn "noctalia-shell" "ipc" "call" "launcher" "emoji"; } 395 + 396 + // Open/close the Overview: a zoomed-out view of workspaces and windows. 397 + // You can also move the mouse into the top-left hot corner, 398 + // or do a four-finger swipe up on a touchpad. 399 + Mod+O repeat=false { toggle-overview; } 400 + 401 + Mod+Q repeat=false { close-window; } 402 + 403 + Mod+Left { focus-column-left; } 404 + Mod+Down { focus-window-down; } 405 + Mod+Up { focus-window-up; } 406 + Mod+Right { focus-column-right; } 407 + // Mod+H { focus-column-left; } 408 + // Mod+J { focus-window-down; } 409 + // Mod+K { focus-window-up; } 410 + // Mod+L { focus-column-right; } 411 + 412 + Mod+Ctrl+Left { move-column-left; } 413 + Mod+Ctrl+Down { move-window-down; } 414 + Mod+Ctrl+Up { move-window-up; } 415 + Mod+Ctrl+Right { move-column-right; } 416 + Mod+Ctrl+H { move-column-left; } 417 + Mod+Ctrl+J { move-window-down; } 418 + Mod+Ctrl+K { move-window-up; } 419 + Mod+Ctrl+L { move-column-right; } 420 + 421 + // Alternative commands that move across workspaces when reaching 422 + // the first or last window in a column. 423 + // Mod+J { focus-window-or-workspace-down; } 424 + // Mod+K { focus-window-or-workspace-up; } 425 + // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } 426 + // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } 427 + 428 + Mod+Home { focus-column-first; } 429 + Mod+End { focus-column-last; } 430 + Mod+Ctrl+Home { move-column-to-first; } 431 + Mod+Ctrl+End { move-column-to-last; } 432 + 433 + Mod+Shift+Left { focus-monitor-left; } 434 + Mod+Shift+Down { focus-monitor-down; } 435 + Mod+Shift+Up { focus-monitor-up; } 436 + Mod+Shift+Right { focus-monitor-right; } 437 + Mod+Shift+H { focus-monitor-left; } 438 + Mod+Shift+J { focus-monitor-down; } 439 + Mod+Shift+K { focus-monitor-up; } 440 + Mod+Shift+L { focus-monitor-right; } 441 + 442 + Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } 443 + Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } 444 + Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } 445 + Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } 446 + Mod+Shift+Ctrl+H { move-column-to-monitor-left; } 447 + Mod+Shift+Ctrl+J { move-column-to-monitor-down; } 448 + Mod+Shift+Ctrl+K { move-column-to-monitor-up; } 449 + Mod+Shift+Ctrl+L { move-column-to-monitor-right; } 450 + 451 + // Alternatively, there are commands to move just a single window: 452 + // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } 453 + // ... 454 + 455 + // And you can also move a whole workspace to another monitor: 456 + // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } 457 + // ... 458 + 459 + Mod+Page_Down { focus-workspace-down; } 460 + Mod+Page_Up { focus-workspace-up; } 461 + // Mod+U { focus-workspace-down; } 462 + // Mod+I { focus-workspace-up; } 463 + Mod+Ctrl+Page_Down { move-column-to-workspace-down; } 464 + Mod+Ctrl+Page_Up { move-column-to-workspace-up; } 465 + Mod+Ctrl+U { move-column-to-workspace-down; } 466 + Mod+Ctrl+I { move-column-to-workspace-up; } 467 + 468 + // Alternatively, there are commands to move just a single window: 469 + // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } 470 + // ... 471 + 472 + Mod+Shift+Page_Down { move-workspace-down; } 473 + Mod+Shift+Page_Up { move-workspace-up; } 474 + // Mod+Shift+U { move-workspace-down; } 475 + // Mod+Shift+I { move-workspace-up; } 476 + 477 + // You can bind mouse wheel scroll ticks using the following syntax. 478 + // These binds will change direction based on the natural-scroll setting. 479 + // 480 + // To avoid scrolling through workspaces really fast, you can use 481 + // the cooldown-ms property. The bind will be rate-limited to this value. 482 + // You can set a cooldown on any bind, but it's most useful for the wheel. 483 + Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } 484 + Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } 485 + Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } 486 + Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } 487 + 488 + Mod+WheelScrollRight { focus-column-right; } 489 + Mod+WheelScrollLeft { focus-column-left; } 490 + Mod+Ctrl+WheelScrollRight { move-column-right; } 491 + Mod+Ctrl+WheelScrollLeft { move-column-left; } 492 + 493 + // Usually scrolling up and down with Shift in applications results in 494 + // horizontal scrolling; these binds replicate that. 495 + Mod+Shift+WheelScrollDown { focus-column-right; } 496 + Mod+Shift+WheelScrollUp { focus-column-left; } 497 + Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } 498 + Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } 499 + 500 + // Similarly, you can bind touchpad scroll "ticks". 501 + // Touchpad scrolling is continuous, so for these binds it is split into 502 + // discrete intervals. 503 + // These binds are also affected by touchpad's natural-scroll, so these 504 + // example binds are "inverted", since we have natural-scroll enabled for 505 + // touchpads by default. 506 + // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; } 507 + // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; } 508 + 509 + // You can refer to workspaces by index. However, keep in mind that 510 + // niri is a dynamic workspace system, so these commands are kind of 511 + // "best effort". Trying to refer to a workspace index bigger than 512 + // the current workspace count will instead refer to the bottommost 513 + // (empty) workspace. 514 + // 515 + // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on 516 + // will all refer to the 3rd workspace. 517 + Mod+1 { focus-workspace 1; } 518 + Mod+2 { focus-workspace 2; } 519 + Mod+3 { focus-workspace 3; } 520 + Mod+4 { focus-workspace 4; } 521 + Mod+5 { focus-workspace 5; } 522 + Mod+6 { focus-workspace 6; } 523 + Mod+7 { focus-workspace 7; } 524 + Mod+8 { focus-workspace 8; } 525 + Mod+9 { focus-workspace 9; } 526 + Mod+Ctrl+1 { move-column-to-workspace 1; } 527 + Mod+Ctrl+2 { move-column-to-workspace 2; } 528 + Mod+Ctrl+3 { move-column-to-workspace 3; } 529 + Mod+Ctrl+4 { move-column-to-workspace 4; } 530 + Mod+Ctrl+5 { move-column-to-workspace 5; } 531 + Mod+Ctrl+6 { move-column-to-workspace 6; } 532 + Mod+Ctrl+7 { move-column-to-workspace 7; } 533 + Mod+Ctrl+8 { move-column-to-workspace 8; } 534 + Mod+Ctrl+9 { move-column-to-workspace 9; } 535 + 536 + // Alternatively, there are commands to move just a single window: 537 + // Mod+Ctrl+1 { move-window-to-workspace 1; } 538 + 539 + // Switches focus between the current and the previous workspace. 540 + // Mod+Tab { focus-workspace-previous; } 541 + 542 + // The following binds move the focused window in and out of a column. 543 + // If the window is alone, they will consume it into the nearby column to the side. 544 + // If the window is already in a column, they will expel it out. 545 + Mod+BracketLeft { consume-or-expel-window-left; } 546 + Mod+BracketRight { consume-or-expel-window-right; } 547 + 548 + // Consume one window from the right to the bottom of the focused column. 549 + Mod+Comma { consume-window-into-column; } 550 + // Expel the bottom window from the focused column to the right. 551 + Mod+Period { expel-window-from-column; } 552 + 553 + Mod+R { switch-preset-column-width; } 554 + // Cycling through the presets in reverse order is also possible. 555 + // Mod+R { switch-preset-column-width-back; } 556 + Mod+Shift+R { switch-preset-window-height; } 557 + Mod+Ctrl+R { reset-window-height; } 558 + Mod+F { maximize-column; } 559 + Mod+Shift+F { fullscreen-window; } 560 + 561 + // Expand the focused column to space not taken up by other fully visible columns. 562 + // Makes the column "fill the rest of the space". 563 + Mod+Ctrl+F { expand-column-to-available-width; } 564 + 565 + Mod+C { center-column; } 566 + 567 + // Center all fully visible columns on screen. 568 + Mod+Ctrl+C { center-visible-columns; } 569 + 570 + // Finer width adjustments. 571 + // This command can also: 572 + // * set width in pixels: "1000" 573 + // * adjust width in pixels: "-5" or "+5" 574 + // * set width as a percentage of screen width: "25%" 575 + // * adjust width as a percentage of screen width: "-10%" or "+10%" 576 + // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, 577 + // set-column-width "100" will make the column occupy 200 physical screen pixels. 578 + Mod+Minus { set-column-width "-10%"; } 579 + Mod+Equal { set-column-width "+10%"; } 580 + 581 + // Finer height adjustments when in column with other windows. 582 + Mod+Shift+Minus { set-window-height "-10%"; } 583 + Mod+Shift+Equal { set-window-height "+10%"; } 584 + 585 + // Move the focused window between the floating and the tiling layout. 586 + // Mod+V { toggle-window-floating; } 587 + // Mod+Shift+V { switch-focus-between-floating-and-tiling; } 588 + 589 + // Toggle tabbed column display mode. 590 + // Windows in this column will appear as vertical tabs, 591 + // rather than stacked on top of each other. 592 + Mod+W { toggle-column-tabbed-display; } 593 + 594 + // Actions to switch layouts. 595 + // Note: if you uncomment these, make sure you do NOT have 596 + // a matching layout switch hotkey configured in xkb options above. 597 + // Having both at once on the same hotkey will break the switching, 598 + // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). 599 + // Mod+Space { switch-layout "next"; } 600 + // Mod+Shift+Space { switch-layout "prev"; } 601 + 602 + Print { screenshot; } 603 + Ctrl+Print { screenshot-screen; } 604 + Alt+Print { screenshot-window; } 605 + 606 + // Applications such as remote-desktop clients and software KVM switches may 607 + // request that niri stops processing the keyboard shortcuts defined here 608 + // so they may, for example, forward the key presses as-is to a remote machine. 609 + // It's a good idea to bind an escape hatch to toggle the inhibitor, 610 + // so a buggy application can't hold your session hostage. 611 + // 612 + // The allow-inhibiting=false property can be applied to other binds as well, 613 + // which ensures niri always processes them, even when an inhibitor is active. 614 + Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } 615 + 616 + // The quit action will show a confirmation dialog to avoid accidental exits. 617 + Mod+Shift+E { quit; } 618 + Ctrl+Alt+Delete { quit; } 619 + 620 + // Powers off the monitors. To turn them back on, do any input like 621 + // moving the mouse or pressing any other key. 622 + Mod+Shift+P { power-off-monitors; } 623 + }
+6
modules/home-manager/niri/default.nix
··· 1 + { ... }: 2 + { 3 + programs.niri = { 4 + config = builtins.readFile ./config.kdl; 5 + }; 6 + }