diff options
| author | Pavel Egorov <[email protected]> | 2025-12-08 22:10:14 +0300 |
|---|---|---|
| committer | Pavel Egorov <[email protected]> | 2025-12-08 22:10:14 +0300 |
| commit | e2307e04bbc004f580f5de8a5c04a6210f0c06d2 (patch) | |
| tree | 9f57d846d7ee57ba2517442ee75f60b14c0d0669 /.config | |
| parent | c45e377cda2ee0990e5833b425332c0832e7f2f1 (diff) | |
| download | dotfiles-e2307e04bbc004f580f5de8a5c04a6210f0c06d2.tar.gz dotfiles-e2307e04bbc004f580f5de8a5c04a6210f0c06d2.zip | |
[niri] Autogenerated config
Diffstat (limited to '')
| -rw-r--r-- | .config/niri/config.kdl | 623 |
1 files changed, 623 insertions, 0 deletions
diff --git a/.config/niri/config.kdl b/.config/niri/config.kdl new file mode 100644 index 0000000..0af16c7 --- /dev/null +++ b/.config/niri/config.kdl | |||
| @@ -0,0 +1,623 @@ | |||
| 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 | |||
| 72 | // You can configure outputs by their name, which you can find | ||
| 73 | // by running `niri msg outputs` while inside a niri instance. | ||
| 74 | // The built-in laptop monitor is usually called "eDP-1". | ||
| 75 | // Find more information on the wiki: | ||
| 76 | // https://yalter.github.io/niri/Configuration:-Outputs | ||
| 77 | // Remember to uncomment the node by removing "/-"! | ||
| 78 | /-output "eDP-1" { | ||
| 79 | // Uncomment this line to disable this output. | ||
| 80 | // off | ||
| 81 | |||
| 82 | // Resolution and, optionally, refresh rate of the output. | ||
| 83 | // The format is "<width>x<height>" or "<width>x<height>@<refresh rate>". | ||
| 84 | // If the refresh rate is omitted, niri will pick the highest refresh rate | ||
| 85 | // for the resolution. | ||
| 86 | // If the mode is omitted altogether or is invalid, niri will pick one automatically. | ||
| 87 | // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. | ||
| 88 | mode "[email protected]" | ||
| 89 | |||
| 90 | // You can use integer or fractional scale, for example use 1.5 for 150% scale. | ||
| 91 | scale 2 | ||
| 92 | |||
| 93 | // Transform allows to rotate the output counter-clockwise, valid values are: | ||
| 94 | // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. | ||
| 95 | transform "normal" | ||
| 96 | |||
| 97 | // Position of the output in the global coordinate space. | ||
| 98 | // This affects directional monitor actions like "focus-monitor-left", and cursor movement. | ||
| 99 | // The cursor can only move between directly adjacent outputs. | ||
| 100 | // Output scale and rotation has to be taken into account for positioning: | ||
| 101 | // outputs are sized in logical, or scaled, pixels. | ||
| 102 | // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080, | ||
| 103 | // so to put another output directly adjacent to it on the right, set its x to 1920. | ||
| 104 | // If the position is unset or results in an overlap, the output is instead placed | ||
| 105 | // automatically. | ||
| 106 | position x=1280 y=0 | ||
| 107 | } | ||
| 108 | |||
| 109 | // Settings that influence how windows are positioned and sized. | ||
| 110 | // Find more information on the wiki: | ||
| 111 | // https://yalter.github.io/niri/Configuration:-Layout | ||
| 112 | layout { | ||
| 113 | // Set gaps around windows in logical pixels. | ||
| 114 | gaps 16 | ||
| 115 | |||
| 116 | // When to center a column when changing focus, options are: | ||
| 117 | // - "never", default behavior, focusing an off-screen column will keep at the left | ||
| 118 | // or right edge of the screen. | ||
| 119 | // - "always", the focused column will always be centered. | ||
| 120 | // - "on-overflow", focusing a column will center it if it doesn't fit | ||
| 121 | // together with the previously focused column. | ||
| 122 | center-focused-column "never" | ||
| 123 | |||
| 124 | // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. | ||
| 125 | preset-column-widths { | ||
| 126 | // Proportion sets the width as a fraction of the output width, taking gaps into account. | ||
| 127 | // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. | ||
| 128 | // The default preset widths are 1/3, 1/2 and 2/3 of the output. | ||
| 129 | proportion 0.33333 | ||
| 130 | proportion 0.5 | ||
| 131 | proportion 0.66667 | ||
| 132 | |||
| 133 | // Fixed sets the width in logical pixels exactly. | ||
| 134 | // fixed 1920 | ||
| 135 | } | ||
| 136 | |||
| 137 | // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. | ||
| 138 | // preset-window-heights { } | ||
| 139 | |||
| 140 | // You can change the default width of the new windows. | ||
| 141 | default-column-width { proportion 0.5; } | ||
| 142 | // If you leave the brackets empty, the windows themselves will decide their initial width. | ||
| 143 | // default-column-width {} | ||
| 144 | |||
| 145 | // By default focus ring and border are rendered as a solid background rectangle | ||
| 146 | // behind windows. That is, they will show up through semitransparent windows. | ||
| 147 | // This is because windows using client-side decorations can have an arbitrary shape. | ||
| 148 | // | ||
| 149 | // If you don't like that, you should uncomment `prefer-no-csd` below. | ||
| 150 | // Niri will draw focus ring and border *around* windows that agree to omit their | ||
| 151 | // client-side decorations. | ||
| 152 | // | ||
| 153 | // Alternatively, you can override it with a window rule called | ||
| 154 | // `draw-border-with-background`. | ||
| 155 | |||
| 156 | // You can change how the focus ring looks. | ||
| 157 | focus-ring { | ||
| 158 | // Uncomment this line to disable the focus ring. | ||
| 159 | // off | ||
| 160 | |||
| 161 | // How many logical pixels the ring extends out from the windows. | ||
| 162 | width 4 | ||
| 163 | |||
| 164 | // Colors can be set in a variety of ways: | ||
| 165 | // - CSS named colors: "red" | ||
| 166 | // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa" | ||
| 167 | // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others. | ||
| 168 | |||
| 169 | // Color of the ring on the active monitor. | ||
| 170 | active-color "#7fc8ff" | ||
| 171 | |||
| 172 | // Color of the ring on inactive monitors. | ||
| 173 | // | ||
| 174 | // The focus ring only draws around the active window, so the only place | ||
| 175 | // where you can see its inactive-color is on other monitors. | ||
| 176 | inactive-color "#505050" | ||
| 177 | |||
| 178 | // You can also use gradients. They take precedence over solid colors. | ||
| 179 | // Gradients are rendered the same as CSS linear-gradient(angle, from, to). | ||
| 180 | // The angle is the same as in linear-gradient, and is optional, | ||
| 181 | // defaulting to 180 (top-to-bottom gradient). | ||
| 182 | // You can use any CSS linear-gradient tool on the web to set these up. | ||
| 183 | // Changing the color space is also supported, check the wiki for more info. | ||
| 184 | // | ||
| 185 | // active-gradient from="#80c8ff" to="#c7ff7f" angle=45 | ||
| 186 | |||
| 187 | // You can also color the gradient relative to the entire view | ||
| 188 | // of the workspace, rather than relative to just the window itself. | ||
| 189 | // To do that, set relative-to="workspace-view". | ||
| 190 | // | ||
| 191 | // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" | ||
| 192 | } | ||
| 193 | |||
| 194 | // You can also add a border. It's similar to the focus ring, but always visible. | ||
| 195 | border { | ||
| 196 | // The settings are the same as for the focus ring. | ||
| 197 | // If you enable the border, you probably want to disable the focus ring. | ||
| 198 | off | ||
| 199 | |||
| 200 | width 4 | ||
| 201 | active-color "#ffc87f" | ||
| 202 | inactive-color "#505050" | ||
| 203 | |||
| 204 | // Color of the border around windows that request your attention. | ||
| 205 | urgent-color "#9b0000" | ||
| 206 | |||
| 207 | // Gradients can use a few different interpolation color spaces. | ||
| 208 | // For example, this is a pastel rainbow gradient via in="oklch longer hue". | ||
| 209 | // | ||
| 210 | // active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue" | ||
| 211 | |||
| 212 | // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" | ||
| 213 | } | ||
| 214 | |||
| 215 | // You can enable drop shadows for windows. | ||
| 216 | shadow { | ||
| 217 | // Uncomment the next line to enable shadows. | ||
| 218 | // on | ||
| 219 | |||
| 220 | // By default, the shadow draws only around its window, and not behind it. | ||
| 221 | // Uncomment this setting to make the shadow draw behind its window. | ||
| 222 | // | ||
| 223 | // Note that niri has no way of knowing about the CSD window corner | ||
| 224 | // radius. It has to assume that windows have square corners, leading to | ||
| 225 | // shadow artifacts inside the CSD rounded corners. This setting fixes | ||
| 226 | // those artifacts. | ||
| 227 | // | ||
| 228 | // However, instead you may want to set prefer-no-csd and/or | ||
| 229 | // geometry-corner-radius. Then, niri will know the corner radius and | ||
| 230 | // draw the shadow correctly, without having to draw it behind the | ||
| 231 | // window. These will also remove client-side shadows if the window | ||
| 232 | // draws any. | ||
| 233 | // | ||
| 234 | // draw-behind-window true | ||
| 235 | |||
| 236 | // You can change how shadows look. The values below are in logical | ||
| 237 | // pixels and match the CSS box-shadow properties. | ||
| 238 | |||
| 239 | // Softness controls the shadow blur radius. | ||
| 240 | softness 30 | ||
| 241 | |||
| 242 | // Spread expands the shadow. | ||
| 243 | spread 5 | ||
| 244 | |||
| 245 | // Offset moves the shadow relative to the window. | ||
| 246 | offset x=0 y=5 | ||
| 247 | |||
| 248 | // You can also change the shadow color and opacity. | ||
| 249 | color "#0007" | ||
| 250 | } | ||
| 251 | |||
| 252 | // Struts shrink the area occupied by windows, similarly to layer-shell panels. | ||
| 253 | // You can think of them as a kind of outer gaps. They are set in logical pixels. | ||
| 254 | // Left and right struts will cause the next window to the side to always be visible. | ||
| 255 | // Top and bottom struts will simply add outer gaps in addition to the area occupied by | ||
| 256 | // layer-shell panels and regular gaps. | ||
| 257 | struts { | ||
| 258 | // left 64 | ||
| 259 | // right 64 | ||
| 260 | // top 64 | ||
| 261 | // bottom 64 | ||
| 262 | } | ||
| 263 | } | ||
| 264 | |||
| 265 | // Add lines like this to spawn processes at startup. | ||
| 266 | // Note that running niri as a session supports xdg-desktop-autostart, | ||
| 267 | // which may be more convenient to use. | ||
| 268 | // See the binds section below for more spawn examples. | ||
| 269 | |||
| 270 | // This line starts waybar, a commonly used bar for Wayland compositors. | ||
| 271 | spawn-at-startup "waybar" | ||
| 272 | |||
| 273 | // To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup: | ||
| 274 | // spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell" | ||
| 275 | |||
| 276 | hotkey-overlay { | ||
| 277 | // Uncomment this line to disable the "Important Hotkeys" pop-up at startup. | ||
| 278 | // skip-at-startup | ||
| 279 | } | ||
| 280 | |||
| 281 | // Uncomment this line to ask the clients to omit their client-side decorations if possible. | ||
| 282 | // If the client will specifically ask for CSD, the request will be honored. | ||
| 283 | // Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. | ||
| 284 | // This option will also fix border/focus ring drawing behind some semitransparent windows. | ||
| 285 | // After enabling or disabling this, you need to restart the apps for this to take effect. | ||
| 286 | // prefer-no-csd | ||
| 287 | |||
| 288 | // You can change the path where screenshots are saved. | ||
| 289 | // A ~ at the front will be expanded to the home directory. | ||
| 290 | // The path is formatted with strftime(3) to give you the screenshot date and time. | ||
| 291 | screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" | ||
| 292 | |||
| 293 | // You can also set this to null to disable saving screenshots to disk. | ||
| 294 | // screenshot-path null | ||
| 295 | |||
| 296 | // Animation settings. | ||
| 297 | // The wiki explains how to configure individual animations: | ||
| 298 | // https://yalter.github.io/niri/Configuration:-Animations | ||
| 299 | animations { | ||
| 300 | // Uncomment to turn off all animations. | ||
| 301 | // off | ||
| 302 | |||
| 303 | // Slow down all animations by this factor. Values below 1 speed them up instead. | ||
| 304 | // slowdown 3.0 | ||
| 305 | } | ||
| 306 | |||
| 307 | // Window rules let you adjust behavior for individual windows. | ||
| 308 | // Find more information on the wiki: | ||
| 309 | // https://yalter.github.io/niri/Configuration:-Window-Rules | ||
| 310 | |||
| 311 | // Work around WezTerm's initial configure bug | ||
| 312 | // by setting an empty default-column-width. | ||
| 313 | window-rule { | ||
| 314 | // This regular expression is intentionally made as specific as possible, | ||
| 315 | // since this is the default config, and we want no false positives. | ||
| 316 | // You can get away with just app-id="wezterm" if you want. | ||
| 317 | match app-id=r#"^org\.wezfurlong\.wezterm$"# | ||
| 318 | default-column-width {} | ||
| 319 | } | ||
| 320 | |||
| 321 | // Open the Firefox picture-in-picture player as floating by default. | ||
| 322 | window-rule { | ||
| 323 | // This app-id regular expression will work for both: | ||
| 324 | // - host Firefox (app-id is "firefox") | ||
| 325 | // - Flatpak Firefox (app-id is "org.mozilla.firefox") | ||
| 326 | match app-id=r#"firefox$"# title="^Picture-in-Picture$" | ||
| 327 | open-floating true | ||
| 328 | } | ||
| 329 | |||
| 330 | // Example: block out two password managers from screen capture. | ||
| 331 | // (This example rule is commented out with a "/-" in front.) | ||
| 332 | /-window-rule { | ||
| 333 | match app-id=r#"^org\.keepassxc\.KeePassXC$"# | ||
| 334 | match app-id=r#"^org\.gnome\.World\.Secrets$"# | ||
| 335 | |||
| 336 | block-out-from "screen-capture" | ||
| 337 | |||
| 338 | // Use this instead if you want them visible on third-party screenshot tools. | ||
| 339 | // block-out-from "screencast" | ||
| 340 | } | ||
| 341 | |||
| 342 | // Example: enable rounded corners for all windows. | ||
| 343 | // (This example rule is commented out with a "/-" in front.) | ||
| 344 | /-window-rule { | ||
| 345 | geometry-corner-radius 12 | ||
| 346 | clip-to-geometry true | ||
| 347 | } | ||
| 348 | |||
| 349 | binds { | ||
| 350 | // Keys consist of modifiers separated by + signs, followed by an XKB key name | ||
| 351 | // in the end. To find an XKB name for a particular key, you may use a program | ||
| 352 | // like wev. | ||
| 353 | // | ||
| 354 | // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt | ||
| 355 | // when running as a winit window. | ||
| 356 | // | ||
| 357 | // Most actions that you can bind here can also be invoked programmatically with | ||
| 358 | // `niri msg action do-something`. | ||
| 359 | |||
| 360 | // Mod-Shift-/, which is usually the same as Mod-?, | ||
| 361 | // shows a list of important hotkeys. | ||
| 362 | Mod+Shift+Slash { show-hotkey-overlay; } | ||
| 363 | |||
| 364 | // Suggested binds for running programs: terminal, app launcher, screen locker. | ||
| 365 | Mod+T hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; } | ||
| 366 | Mod+D hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; } | ||
| 367 | Super+Alt+L hotkey-overlay-title="Lock the Screen: swaylock" { spawn "swaylock"; } | ||
| 368 | |||
| 369 | // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc. | ||
| 370 | // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`. | ||
| 371 | // For example, this is a standard bind to toggle the screen reader (orca). | ||
| 372 | Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; } | ||
| 373 | |||
| 374 | // Example volume keys mappings for PipeWire & WirePlumber. | ||
| 375 | // The allow-when-locked=true property makes them work even when the session is locked. | ||
| 376 | // Using spawn-sh allows to pass multiple arguments together with the command. | ||
| 377 | // "-l 1.0" limits the volume to 100%. | ||
| 378 | XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; } | ||
| 379 | XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; } | ||
| 380 | XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; } | ||
| 381 | XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; } | ||
| 382 | |||
| 383 | // Example media keys mapping using playerctl. | ||
| 384 | // This will work with any MPRIS-enabled media player. | ||
| 385 | XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; } | ||
| 386 | XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; } | ||
| 387 | XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; } | ||
| 388 | XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; } | ||
| 389 | |||
| 390 | // Example brightness key mappings for brightnessctl. | ||
| 391 | // You can use regular spawn with multiple arguments too (to avoid going through "sh"), | ||
| 392 | // but you need to manually put each argument in separate "" quotes. | ||
| 393 | XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; } | ||
| 394 | XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; } | ||
| 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 | } | ||
