this repo has no description

add niri/waybar config

tjh a80dc5af

+795
+568
.config/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://github.com/YaLTeR/niri/wiki/Configuration:-Overview 5 + debug { 6 + wait-for-frame-completion-in-pipewire 7 + } 8 + 9 + // Input device configuration. 10 + // Find the full list of options on the wiki: 11 + // https://github.com/YaLTeR/niri/wiki/Configuration:-Input 12 + input { 13 + keyboard { 14 + xkb { 15 + layout "us" 16 + } 17 + } 18 + touchpad { 19 + off 20 + } 21 + mouse { 22 + // off 23 + // natural-scroll 24 + // accel-speed 0.2 25 + // accel-profile "flat" 26 + // scroll-method "no-scroll" 27 + } 28 + trackpoint { 29 + off 30 + } 31 + // Uncomment this to make the mouse warp to the center of newly focused windows. 32 + // warp-mouse-to-focus 33 + // Focus windows and outputs automatically when moving the mouse into them. 34 + // Setting max-scroll-amount="0%" makes it work only on windows already fully on screen. 35 + focus-follows-mouse max-scroll-amount="0%" 36 + } 37 + 38 + // Primary Monitor 39 + output "DP-2" { 40 + scale 1 41 + position x=0 y=840 42 + } 43 + 44 + // Secondary Monitor 45 + output "DP-1" { 46 + scale 1 47 + transform "90" 48 + position x=3840 y=0 49 + } 50 + 51 + // Settings that influence how windows are positioned and sized. 52 + // Find more information on the wiki: 53 + // https://github.com/YaLTeR/niri/wiki/Configuration:-Layout 54 + layout { 55 + // Set gaps around windows in logical pixels. 56 + gaps 16 57 + 58 + // When to center a column when changing focus, options are: 59 + // - "never", default behavior, focusing an off-screen column will keep at the left 60 + // or right edge of the screen. 61 + // - "always", the focused column will always be centered. 62 + // - "on-overflow", focusing a column will center it if it doesn't fit 63 + // together with the previously focused column. 64 + center-focused-column "never" 65 + 66 + // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. 67 + preset-column-widths { 68 + // Proportion sets the width as a fraction of the output width, taking gaps into account. 69 + // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. 70 + // The default preset widths are 1/3, 1/2 and 2/3 of the output. 71 + proportion 0.33333 72 + proportion 0.5 73 + proportion 0.66667 74 + 75 + // Fixed sets the width in logical pixels exactly. 76 + // fixed 1920 77 + } 78 + 79 + // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. 80 + // preset-window-heights { } 81 + 82 + // You can change the default width of the new windows. 83 + default-column-width { proportion 0.5; } 84 + // If you leave the brackets empty, the windows themselves will decide their initial width. 85 + // default-column-width {} 86 + 87 + // By default focus ring and border are rendered as a solid background rectangle 88 + // behind windows. That is, they will show up through semitransparent windows. 89 + // This is because windows using client-side decorations can have an arbitrary shape. 90 + // 91 + // If you don't like that, you should uncomment `prefer-no-csd` below. 92 + // Niri will draw focus ring and border *around* windows that agree to omit their 93 + // client-side decorations. 94 + // 95 + // Alternatively, you can override it with a window rule called 96 + // `draw-border-with-background`. 97 + 98 + // You can change how the focus ring looks. 99 + focus-ring { 100 + // Uncomment this line to disable the focus ring. 101 + // off 102 + 103 + // How many logical pixels the ring extends out from the windows. 104 + width 3 105 + 106 + // Colors can be set in a variety of ways: 107 + // - CSS named colors: "red" 108 + // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa" 109 + // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others. 110 + 111 + // Color of the ring on the active monitor. 112 + // active-color "#7fc8ff" 113 + active-color "#336699" 114 + 115 + // Color of the ring on inactive monitors. 116 + inactive-color "#505050" 117 + 118 + // You can also use gradients. They take precedence over solid colors. 119 + // Gradients are rendered the same as CSS linear-gradient(angle, from, to). 120 + // The angle is the same as in linear-gradient, and is optional, 121 + // defaulting to 180 (top-to-bottom gradient). 122 + // You can use any CSS linear-gradient tool on the web to set these up. 123 + // Changing the color space is also supported, check the wiki for more info. 124 + // 125 + // active-gradient from="#80c8ff" to="#bbddff" angle=45 126 + 127 + // You can also color the gradient relative to the entire view 128 + // of the workspace, rather than relative to just the window itself. 129 + // To do that, set relative-to="workspace-view". 130 + // 131 + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 132 + } 133 + 134 + // You can also add a border. It's similar to the focus ring, but always visible. 135 + border { 136 + // The settings are the same as for the focus ring. 137 + // If you enable the border, you probably want to disable the focus ring. 138 + off 139 + 140 + width 3 141 + active-color "#ffc87f" 142 + inactive-color "#505050" 143 + 144 + // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" 145 + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 146 + } 147 + 148 + // You can enable drop shadows for windows. 149 + shadow { 150 + // Uncomment the next line to enable shadows. 151 + on 152 + 153 + // By default, the shadow draws only around its window, and not behind it. 154 + // Uncomment this setting to make the shadow draw behind its window. 155 + // 156 + // Note that niri has no way of knowing about the CSD window corner 157 + // radius. It has to assume that windows have square corners, leading to 158 + // shadow artifacts inside the CSD rounded corners. This setting fixes 159 + // those artifacts. 160 + // 161 + // However, instead you may want to set prefer-no-csd and/or 162 + // geometry-corner-radius. Then, niri will know the corner radius and 163 + // draw the shadow correctly, without having to draw it behind the 164 + // window. These will also remove client-side shadows if the window 165 + // draws any. 166 + // 167 + // draw-behind-window true 168 + 169 + // You can change how shadows look. The values below are in logical 170 + // pixels and match the CSS box-shadow properties. 171 + 172 + // Softness controls the shadow blur radius. 173 + softness 30 174 + 175 + // Spread expands the shadow. 176 + spread 5 177 + 178 + // Offset moves the shadow relative to the window. 179 + offset x=0 y=5 180 + 181 + // You can also change the shadow color and opacity. 182 + color "#0007" 183 + } 184 + 185 + // Struts shrink the area occupied by windows, similarly to layer-shell panels. 186 + // You can think of them as a kind of outer gaps. They are set in logical pixels. 187 + // Left and right struts will cause the next window to the side to always be visible. 188 + // Top and bottom struts will simply add outer gaps in addition to the area occupied by 189 + // layer-shell panels and regular gaps. 190 + struts { 191 + // left 64 192 + // right 64 193 + // top 64 194 + // bottom 64 195 + } 196 + } 197 + 198 + // Add lines like this to spawn processes at startup. 199 + // Note that running niri as a session supports xdg-desktop-autostart, 200 + // which may be more convenient to use. 201 + // See the binds section below for more spawn examples. 202 + // spawn-at-startup "alacritty" "-e" "fish" 203 + spawn-at-startup "xwayland-satellite" 204 + 205 + environment { 206 + DISPLAY ":0" 207 + } 208 + 209 + // Uncomment this line to ask the clients to omit their client-side decorations if possible. 210 + // If the client will specifically ask for CSD, the request will be honored. 211 + // Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. 212 + // This option will also fix border/focus ring drawing behind some semitransparent windows. 213 + // After enabling or disabling this, you need to restart the apps for this to take effect. 214 + // prefer-no-csd 215 + 216 + // You can change the path where screenshots are saved. 217 + // A ~ at the front will be expanded to the home directory. 218 + // The path is formatted with strftime(3) to give you the screenshot date and time. 219 + screenshot-path "~/Pictures/screenshots/screenshot-from-%Y-%m-%d-%H-%M-%S.png" 220 + 221 + // You can also set this to null to disable saving screenshots to disk. 222 + // screenshot-path null 223 + 224 + // Animation settings. 225 + // The wiki explains how to configure individual animations: 226 + // https://github.com/YaLTeR/niri/wiki/Configuration:-Animations 227 + animations { 228 + // Uncomment to turn off all animations. 229 + // off 230 + 231 + // Slow down all animations by this factor. Values below 1 speed them up instead. 232 + // slowdown 3.0 233 + } 234 + 235 + // Window rules let you adjust behavior for individual windows. 236 + // Find more information on the wiki: 237 + // https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules 238 + 239 + // Work around WezTerm's initial configure bug 240 + // by setting an empty default-column-width. 241 + window-rule { 242 + // This regular expression is intentionally made as specific as possible, 243 + // since this is the default config, and we want no false positives. 244 + // You can get away with just app-id="wezterm" if you want. 245 + match app-id=r#"^org\.wezfurlong\.wezterm$"# 246 + default-column-width {} 247 + } 248 + 249 + window-rule { 250 + match app-id=r#"^looking-glass-client$"# 251 + // open-maximized true 252 + open-floating true 253 + default-column-width { fixed 2560; } 254 + default-window-height { fixed 1440; } 255 + } 256 + 257 + // Open the Firefox picture-in-picture player as floating by default. 258 + window-rule { 259 + // This app-id regular expression will work for both: 260 + // - host Firefox (app-id is "firefox") 261 + // - Flatpak Firefox (app-id is "org.mozilla.firefox") 262 + match app-id=r#"firefox$"# title="^Picture-in-Picture$" 263 + open-floating true 264 + } 265 + 266 + // Example: block out two password managers from screen capture. 267 + // (This example rule is commented out with a "/-" in front.) 268 + /-window-rule { 269 + match app-id=r#"^org\.keepassxc\.KeePassXC$"# 270 + match app-id=r#"^org\.gnome\.World\.Secrets$"# 271 + 272 + block-out-from "screen-capture" 273 + 274 + // Use this instead if you want them visible on third-party screenshot tools. 275 + // block-out-from "screencast" 276 + } 277 + 278 + // Example: enable rounded corners for all windows. 279 + // (This example rule is commented out with a "/-" in front.) 280 + window-rule { 281 + geometry-corner-radius 12 282 + clip-to-geometry true 283 + } 284 + 285 + window-rule { 286 + match app-id=r#"^obs$"# title="Add|Create|Select|Properties" 287 + open-floating true 288 + } 289 + 290 + window-rule { 291 + match is-window-cast-target=true 292 + focus-ring { 293 + off 294 + active-color "#ff0000" 295 + inactive-color "#aa0000" 296 + } 297 + border { 298 + on 299 + inactive-color "#aa0000" 300 + } 301 + } 302 + 303 + // Hide my emails 304 + window-rule { 305 + match app-id=r#"firefox$"# title="tjh.dev Mail — Mozilla Firefox$|Gmail — Mozilla Firefox$" 306 + block-out-from "screen-capture" 307 + } 308 + 309 + window-rule { 310 + match app-id="1Password" 311 + block-out-from "screen-capture" 312 + } 313 + 314 + binds { 315 + // Keys consist of modifiers separated by + signs, followed by an XKB key name 316 + // in the end. To find an XKB name for a particular key, you may use a program 317 + // like wev. 318 + // 319 + // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt 320 + // when running as a winit window. 321 + // 322 + // Most actions that you can bind here can also be invoked programmatically with 323 + // `niri msg action do-something`. 324 + 325 + // Mod-Shift-/, which is usually the same as Mod-?, 326 + // shows a list of important hotkeys. 327 + Mod+Shift+Slash { show-hotkey-overlay; } 328 + 329 + // Suggested binds for running programs: terminal, app launcher, screen locker. 330 + Mod+T { spawn "alacritty"; } 331 + Mod+D { spawn "fuzzel"; } 332 + // Mod+D { spawn "wofi" "--show" "drun"; } 333 + Super+Alt+L { spawn "swaylock"; } 334 + Super+Alt+S { spawn "systemctl" "suspend"; } 335 + 336 + // You can also use a shell. Do this if you need pipes, multiple commands, etc. 337 + // Note: the entire command goes as a single argument in the end. 338 + // Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; } 339 + 340 + // Example volume keys mappings for PipeWire & WirePlumber. 341 + // The allow-when-locked=true property makes them work even when the session is locked. 342 + XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.005+"; } 343 + XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.005-"; } 344 + XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } 345 + XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } 346 + 347 + Mod+Q { close-window; } 348 + 349 + // Mod+Left { focus-column-left; } 350 + // Mod+Down { focus-window-down; } 351 + // Mod+Up { focus-window-up; } 352 + // Mod+Right { focus-column-right; } 353 + Mod+H allow-inhibiting=false { focus-column-left; } 354 + Mod+J { focus-window-down; } 355 + Mod+K { focus-window-up; } 356 + Mod+L allow-inhibiting=false { focus-column-right; } 357 + 358 + // Mod+Ctrl+Left { move-column-left; } 359 + // Mod+Ctrl+Down { move-window-down; } 360 + // Mod+Ctrl+Up { move-window-up; } 361 + // Mod+Ctrl+Right { move-column-right; } 362 + Mod+Ctrl+H { move-column-left; } 363 + Mod+Ctrl+J { move-window-down; } 364 + Mod+Ctrl+K { move-window-up; } 365 + Mod+Ctrl+L { move-column-right; } 366 + 367 + // Alternative commands that move across workspaces when reaching 368 + // the first or last window in a column. 369 + // Mod+J { focus-window-or-workspace-down; } 370 + // Mod+K { focus-window-or-workspace-up; } 371 + // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } 372 + // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } 373 + 374 + Mod+Home { focus-column-first; } 375 + Mod+End { focus-column-last; } 376 + Mod+Ctrl+Home { move-column-to-first; } 377 + Mod+Ctrl+End { move-column-to-last; } 378 + 379 + // Mod+Shift+Left { focus-monitor-left; } 380 + // Mod+Shift+Down { focus-monitor-down; } 381 + // Mod+Shift+Up { focus-monitor-up; } 382 + // Mod+Shift+Right { focus-monitor-right; } 383 + Mod+Shift+H { focus-monitor-left; } 384 + // Mod+Shift+J { focus-monitor-down; } 385 + // Mod+Shift+K { focus-monitor-up; } 386 + Mod+Shift+L { focus-monitor-right; } 387 + 388 + // Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } 389 + // Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } 390 + // Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } 391 + // Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } 392 + Mod+Shift+Ctrl+H { move-column-to-monitor-left; } 393 + // Mod+Shift+Ctrl+J { move-column-to-monitor-down; } 394 + // Mod+Shift+Ctrl+K { move-column-to-monitor-up; } 395 + Mod+Shift+Ctrl+L { move-column-to-monitor-right; } 396 + 397 + // Alternatively, there are commands to move just a single window: 398 + // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } 399 + // ... 400 + 401 + // And you can also move a whole workspace to another monitor: 402 + // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } 403 + // ... 404 + 405 + // Mod+Page_Down { focus-workspace-down; } 406 + // Mod+Page_Up { focus-workspace-up; } 407 + Mod+U allow-inhibiting=false { focus-workspace-down; } 408 + Mod+I allow-inhibiting=false { focus-workspace-up; } 409 + // Mod+Ctrl+Page_Down { move-column-to-workspace-down; } 410 + // Mod+Ctrl+Page_Up { move-column-to-workspace-up; } 411 + Mod+Ctrl+U { move-column-to-workspace-down; } 412 + Mod+Ctrl+I { move-column-to-workspace-up; } 413 + 414 + // Alternatively, there are commands to move just a single window: 415 + // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } 416 + // ... 417 + 418 + // Mod+Shift+Page_Down { move-workspace-down; } 419 + // Mod+Shift+Page_Up { move-workspace-up; } 420 + Mod+Shift+U { move-workspace-down; } 421 + Mod+Shift+I { move-workspace-up; } 422 + 423 + // You can bind mouse wheel scroll ticks using the following syntax. 424 + // These binds will change direction based on the natural-scroll setting. 425 + // 426 + // To avoid scrolling through workspaces really fast, you can use 427 + // the cooldown-ms property. The bind will be rate-limited to this value. 428 + // You can set a cooldown on any bind, but it's most useful for the wheel. 429 + Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } 430 + Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } 431 + Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } 432 + Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } 433 + 434 + Mod+WheelScrollRight { focus-column-right; } 435 + Mod+WheelScrollLeft { focus-column-left; } 436 + Mod+Ctrl+WheelScrollRight { move-column-right; } 437 + Mod+Ctrl+WheelScrollLeft { move-column-left; } 438 + 439 + // Usually scrolling up and down with Shift in applications results in 440 + // horizontal scrolling; these binds replicate that. 441 + Mod+Shift+WheelScrollDown { focus-column-right; } 442 + Mod+Shift+WheelScrollUp { focus-column-left; } 443 + Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } 444 + Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } 445 + 446 + // Similarly, you can bind touchpad scroll "ticks". 447 + // Touchpad scrolling is continuous, so for these binds it is split into 448 + // discrete intervals. 449 + // These binds are also affected by touchpad's natural-scroll, so these 450 + // example binds are "inverted", since we have natural-scroll enabled for 451 + // touchpads by default. 452 + // Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; } 453 + // Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; } 454 + 455 + // You can refer to workspaces by index. However, keep in mind that 456 + // niri is a dynamic workspace system, so these commands are kind of 457 + // "best effort". Trying to refer to a workspace index bigger than 458 + // the current workspace count will instead refer to the bottommost 459 + // (empty) workspace. 460 + // 461 + // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on 462 + // will all refer to the 3rd workspace. 463 + Mod+1 { focus-workspace 1; } 464 + Mod+2 { focus-workspace 2; } 465 + Mod+3 { focus-workspace 3; } 466 + Mod+4 { focus-workspace 4; } 467 + Mod+5 { focus-workspace 5; } 468 + Mod+6 { focus-workspace 6; } 469 + Mod+7 { focus-workspace 7; } 470 + Mod+8 { focus-workspace 8; } 471 + Mod+9 { focus-workspace 9; } 472 + Mod+Ctrl+1 { move-column-to-workspace 1; } 473 + Mod+Ctrl+2 { move-column-to-workspace 2; } 474 + Mod+Ctrl+3 { move-column-to-workspace 3; } 475 + Mod+Ctrl+4 { move-column-to-workspace 4; } 476 + Mod+Ctrl+5 { move-column-to-workspace 5; } 477 + Mod+Ctrl+6 { move-column-to-workspace 6; } 478 + Mod+Ctrl+7 { move-column-to-workspace 7; } 479 + Mod+Ctrl+8 { move-column-to-workspace 8; } 480 + Mod+Ctrl+9 { move-column-to-workspace 9; } 481 + 482 + // Alternatively, there are commands to move just a single window: 483 + // Mod+Ctrl+1 { move-window-to-workspace 1; } 484 + 485 + // Switches focus between the current and the previous workspace. 486 + // Mod+Tab { focus-workspace-previous; } 487 + 488 + // The following binds move the focused window in and out of a column. 489 + // If the window is alone, they will consume it into the nearby column to the side. 490 + // If the window is already in a column, they will expel it out. 491 + Mod+N { consume-or-expel-window-left; } 492 + Mod+M { consume-or-expel-window-right; } 493 + Mod+BracketLeft { consume-or-expel-window-left; } 494 + Mod+BracketRight { consume-or-expel-window-right; } 495 + 496 + // Consume one window from the right to the bottom of the focused column. 497 + Mod+Comma { consume-window-into-column; } 498 + // Expel the bottom window from the focused column to the right. 499 + Mod+Period { expel-window-from-column; } 500 + 501 + Mod+R { switch-preset-column-width; } 502 + Mod+Shift+R { switch-preset-window-height; } 503 + Mod+Ctrl+R { reset-window-height; } 504 + Mod+F { maximize-column; } 505 + Mod+Shift+F { fullscreen-window; } 506 + Mod+Ctrl+Shift+F { toggle-windowed-fullscreen; } 507 + 508 + // Expand the focused column to space not taken up by other fully visible columns. 509 + // Makes the column "fill the rest of the space". 510 + Mod+Ctrl+F { expand-column-to-available-width; } 511 + 512 + Mod+C { center-column; } 513 + 514 + // Finer width adjustments. 515 + // This command can also: 516 + // * set width in pixels: "1000" 517 + // * adjust width in pixels: "-5" or "+5" 518 + // * set width as a percentage of screen width: "25%" 519 + // * adjust width as a percentage of screen width: "-10%" or "+10%" 520 + // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, 521 + // set-column-width "100" will make the column occupy 200 physical screen pixels. 522 + Mod+Minus { set-column-width "-10%"; } 523 + Mod+Equal { set-column-width "+10%"; } 524 + 525 + // Finer height adjustments when in column with other windows. 526 + Mod+Shift+Minus { set-window-height "-10%"; } 527 + Mod+Shift+Equal { set-window-height "+10%"; } 528 + 529 + // Move the focused window between the floating and the tiling layout. 530 + Mod+V { toggle-window-floating; } 531 + Mod+Shift+V { switch-focus-between-floating-and-tiling; } 532 + 533 + // Toggle tabbed column display mode. 534 + // Windows in this column will appear as vertical tabs, 535 + // rather than stacked on top of each other. 536 + Mod+W { toggle-column-tabbed-display; } 537 + 538 + // Actions to switch layouts. 539 + // Note: if you uncomment these, make sure you do NOT have 540 + // a matching layout switch hotkey configured in xkb options above. 541 + // Having both at once on the same hotkey will break the switching, 542 + // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). 543 + // Mod+Space { switch-layout "next"; } 544 + // Mod+Shift+Space { switch-layout "prev"; } 545 + 546 + Print { screenshot; } 547 + Super+P { screenshot; } 548 + Ctrl+Print { screenshot-screen; } 549 + Alt+Print { screenshot-window; } 550 + 551 + // Applications such as remote-desktop clients and software KVM switches may 552 + // request that niri stops processing the keyboard shortcuts defined here 553 + // so they may, for example, forward the key presses as-is to a remote machine. 554 + // It's a good idea to bind an escape hatch to toggle the inhibitor, 555 + // so a buggy application can't hold your session hostage. 556 + // 557 + // The allow-inhibiting=false property can be applied to other binds as well, 558 + // which ensures niri always processes them, even when an inhibitor is active. 559 + Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } 560 + 561 + // The quit action will show a confirmation dialog to avoid accidental exits. 562 + Mod+Shift+E { quit; } 563 + Ctrl+Alt+Delete { quit; } 564 + 565 + // Powers off the monitors. To turn them back on, do any input like 566 + // moving the mouse or pressing any other key. 567 + Mod+Shift+P { power-off-monitors; } 568 + }
+58
.config/waybar/config
··· 1 + { 2 + "layer": "top", 3 + "height": 32, 4 + "modules-left": [ 5 + "niri/workspaces", 6 + "niri/window" 7 + ], 8 + "modules-center": [ 9 + "clock", 10 + "wireplumber", 11 + "idle_inhibitor", 12 + "privacy" 13 + ], 14 + "modules-right": [ 15 + "disk", 16 + "network", 17 + "cpu", 18 + "memory", 19 + "tray" 20 + ], 21 + "clock": { 22 + "format": "{:%a %d %b %H:%M}", 23 + "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>", 24 + "format-alt": "{:%Y-%m-%d}" 25 + }, 26 + "network": { 27 + "format-wifi": "{essid}", 28 + "format-ethernet": "ETH-IP: {ipaddr}", 29 + "format-linked": "{ifname} (No IP)", 30 + "format-disconnected": "󰤮 Disconnected", 31 + "format-alt": "{ifname}: {ipaddr}/{cidr}" 32 + }, 33 + "tray": { 34 + "icon-size": 13, 35 + "spacing": 5 36 + }, 37 + "disk": { 38 + "interval": 30, 39 + "format": "/home/tjh {percentage_free}% FREE", 40 + "path": "/home/tjh" 41 + }, 42 + "memory": { 43 + "interval": 2, 44 + "format": "RAM {used:0.1f}G/{total:0.1f}G " 45 + }, 46 + "cpu": { 47 + "interval": 2, 48 + "format": "CPU {}% ", 49 + "max-length": 20 50 + }, 51 + "idle_inhibitor": { 52 + "format": "{icon}", 53 + "format-icons": { 54 + "activated": "", 55 + "deactivated": "" 56 + } 57 + } 58 + }
+169
.config/waybar/style.css
··· 1 + /* Animations */ 2 + @keyframes blink { 3 + to { 4 + background-color: #ffffff; 5 + color: black; 6 + } 7 + } 8 + 9 + * { 10 + border: none; 11 + border-radius: 0; 12 + font-family: MonoLisa; 13 + font-weight: 600; 14 + font-size: 14px; 15 + min-height: 0; 16 + } 17 + 18 + window#waybar { 19 + background-color: transparent; 20 + color: white; 21 + padding-top: 0.125em; 22 + padding-left: 1em; 23 + padding-right: 1em; 24 + } 25 + 26 + .module { 27 + background-color: rgba(0, 0, 0, 0.5); 28 + margin-left: 0.5em; 29 + margin-right: 0.5em; 30 + padding-left: 1em; 31 + padding-right: 1em; 32 + border-bottom-left-radius: 0.5em; 33 + border-bottom-right-radius: 0.5em; 34 + } 35 + 36 + .modules-left { 37 + margin-left: 1em; 38 + } 39 + 40 + .modules-right { 41 + margin-right: 1em; 42 + } 43 + 44 + /* #workspaces { */ 45 + /* background-color: #1d202e; */ 46 + /* margin: 5px 0px; */ 47 + /* border-radius: 2px; */ 48 + /* } */ 49 + 50 + /* #workspaces button { */ 51 + /* padding: 2px 8px; */ 52 + /* color: #fff; */ 53 + /* } */ 54 + 55 + /* #workspaces button.focused { */ 56 + /* color: #24283b; */ 57 + /* background-color: #7aa2f7; */ 58 + /* border-radius: 2px; */ 59 + /* } */ 60 + 61 + /* #workspaces button:hover { */ 62 + /* background-color: #7dcfff; */ 63 + /* color: #24283b; */ 64 + /* border-radius: 2px; */ 65 + /* } */ 66 + 67 + /* #clock, */ 68 + /* #network { */ 69 + /* background-color: #1d202e; */ 70 + /* padding: 0px 10px; */ 71 + /* margin: 5px 0px; */ 72 + /* } */ 73 + 74 + /* #clock { */ 75 + /* color: #b48ead; */ 76 + /* border-radius: 0px 2px 2px 0px; */ 77 + /* margin-right: 3px; */ 78 + /* } */ 79 + 80 + /* #network { */ 81 + /* color: #f7768e; */ 82 + /* border-radius: 2px 0px 0px 2px; */ 83 + /* } */ 84 + 85 + /* #temperature { */ 86 + /* background-color: #1d202e; */ 87 + /* margin: 5px 0; */ 88 + /* padding: 0 10px; */ 89 + /* border-top-left-radius: 2px; */ 90 + /* border-bottom-left-radius: 2px; */ 91 + /* color: #82e4ff; */ 92 + /* } */ 93 + 94 + /* #disk { */ 95 + /* color: #b9f27c; */ 96 + /* margin: 5px 0; */ 97 + /* padding: 0 10px; */ 98 + /* background-color: #1d202e; */ 99 + /* border-radius: 2px 2px 2px 2px; */ 100 + /* margin-right: 3px; */ 101 + /* } */ 102 + 103 + /* #memory { */ 104 + /* background-color: #1d202e; */ 105 + /* margin: 5px 0; */ 106 + /* margin-right: 3px; */ 107 + /* padding: 0 10px; */ 108 + /* border-radius: 2px 2px 2px 2px; */ 109 + /* color: #ff9e64; */ 110 + /* } */ 111 + 112 + /* #cpu { */ 113 + /* margin: 5px 0; */ 114 + /* padding: 0 10px; */ 115 + /* background-color: #1d202e; */ 116 + /* color: #ff7a93; */ 117 + /* border-top-right-radius: 2px; */ 118 + /* border-bottom-right-radius: 2px; */ 119 + /* margin-right: 3px; */ 120 + /* } */ 121 + 122 + /* #backlight { */ 123 + /* color: #b9f27c; */ 124 + /* margin: 5px 0; */ 125 + /* padding: 0 10px; */ 126 + /* background-color: #1d202e; */ 127 + /* border-radius: 2px 2px 2px 2px; */ 128 + /* margin-right: 3px; */ 129 + /* } */ 130 + 131 + /* #tray { */ 132 + /* background-color: #7aa2f7; */ 133 + /* margin: 5px; */ 134 + /* margin-left: 0px; */ 135 + /* margin-right: 3px; */ 136 + /* border-radius: 2px; */ 137 + /* padding: 0 10px; */ 138 + /* } */ 139 + 140 + /* #tray menu { */ 141 + /* background-color: #1d202e; */ 142 + /* color: #7dcfff; */ 143 + /* border-radius: 2px 2px 2px 2px; */ 144 + /* } */ 145 + 146 + /* #tray > * { */ 147 + /* padding: 0 2px; */ 148 + /* margin: 0 2px; */ 149 + /* } */ 150 + 151 + /* #systemd-failed-units { */ 152 + /* margin: 5px 0; */ 153 + /* padding: 0 10px; */ 154 + /* background-color: #b9f27c; */ 155 + /* color: #24283b; */ 156 + /* border-radius: 2px 2px 2px 2px; */ 157 + /* margin-right: 3px; */ 158 + /* } */ 159 + 160 + /* #systemd-failed-units.degraded { */ 161 + /* background-color: #f7768e; */ 162 + /* color: #24283b; */ 163 + /* border-radius: 2px 2px 2px 2px; */ 164 + /* animation-name: blink; */ 165 + /* animation-duration: 1s; */ 166 + /* animation-timing-function: steps(12); */ 167 + /* animation-iteration-count: infinite; */ 168 + /* animation-direction: alternate; */ 169 + /* } */