// ============================================================================ // GENERAL & SYSTEM SETTINGS // Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Introduction // ============================================================================ config-notification { disable-failed } hotkey-overlay { skip-at-startup } prefer-no-csd screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" debug { honor-xdg-activation-with-invalid-serial } // ============================================================================ // ENVIRONMENT VARIABLES // ============================================================================ environment { XDG_CURRENT_DESKTOP "niri" QT_QPA_PLATFORM "wayland;xcb" ELECTRON_OZONE_PLATFORM_HINT "auto" QT_QPA_PLATFORMTHEME "gtk3" QT_QPA_PLATFORMTHEME_QT6 "gtk3" TERMINAL "alacritty" } // ============================================================================ // AUTOSTART / SPAWN AT STARTUP // ============================================================================ spawn-at-startup "dms" "run" // Export the session env to D-Bus so xdg-desktop-portal works spawn-at-startup "dbus-update-activation-environment" "--all" // Audio stack spawn-at-startup "pipewire" // PolicyKit authentication agent (verify path: xbps-query -f mate-polkit | grep -i agent) spawn-at-startup "sh" "-c" "/usr/libexec/polkit-mate-authentication-agent-1 &" // Clipboard history backing store for Mod+V spawn-at-startup "sh" "-c" "wl-paste --watch cliphist store" // Automount removable media spawn-at-startup "udiskie" "--no-tray" // ============================================================================ // INPUT & GESTURES // Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Input // ============================================================================ input { keyboard { xkb { // If this section is empty, niri will fetch xkb settings // from org.freedesktop.locale1. You can control these using // localectl set-x11-keymap. } // Enable numlock on startup, omitting this setting disables it. numlock } // Focus windows and outputs automatically when moving the mouse into them. focus-follows-mouse max-scroll-amount="95%" } gestures { hot-corners { off } } // ============================================================================ // LAYOUT & VISUAL APPEARANCE // Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Layout // ============================================================================ layout { background-color "transparent" // When to center a column when changing focus: "never", "always", or "on-overflow" center-focused-column "never" // Custom widths toggled by "switch-preset-column-width" (Mod+R) preset-column-widths { proportion 0.5 proportion 1.0 } default-column-width { proportion 0.5; } border { off width 4 active-color "#707070" // Neutral gray inactive-color "#d0d0d0" // Light gray urgent-color "#cc4444" // Softer red } shadow { softness 30 spread 5 offset x=0 y=5 color "#0007" } struts { } } overview { workspace-shadow { off } } // ============================================================================ // ANIMATIONS // ============================================================================ animations { workspace-switch { spring damping-ratio=0.80 stiffness=523 epsilon=0.0001 } window-open { duration-ms 150 curve "ease-out-expo" } window-close { duration-ms 150 curve "ease-out-quad" } horizontal-view-movement { spring damping-ratio=0.85 stiffness=423 epsilon=0.0001 } window-movement { spring damping-ratio=0.75 stiffness=323 epsilon=0.0001 } window-resize { spring damping-ratio=0.85 stiffness=423 epsilon=0.0001 } config-notification-open-close { spring damping-ratio=0.65 stiffness=923 epsilon=0.001 } screenshot-ui-open { duration-ms 200 curve "ease-out-quad" } overview-open-close { spring damping-ratio=0.85 stiffness=800 epsilon=0.0001 } } // ============================================================================ // WINDOW & LAYER RULES // Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules // ============================================================================ layer-rule { match namespace="^quickshell$" place-within-backdrop true } window-rule { match app-id=r#"^org\.gnome\."# draw-border-with-background false geometry-corner-radius 12 clip-to-geometry true } window-rule { match app-id=r#"^gnome-control-center$"# match app-id=r#"^pavucontrol$"# match app-id=r#"^nm-connection-editor$"# default-column-width { proportion 0.5; } open-floating false } window-rule { match app-id=r#"^org\.gnome\.Calculator$"# match app-id=r#"^gnome-calculator$"# match app-id=r#"^galculator$"# match app-id=r#"^blueman-manager$"# match app-id=r#"^org\.gnome\.Nautilus$"# match app-id=r#"^xdg-desktop-portal$"# open-floating true } window-rule { match app-id="Alacritty" match app-id="kitty" draw-border-with-background false } window-rule { match app-id=r#"firefox$"# title="^Picture-in-Picture$" match app-id="zoom" open-floating true } // Force the Steam client, Friends List, and settings windows to float window-rule { match app-id="steam" open-floating true } window-rule { match app-id="steam" match title="Friends List" open-floating true default-floating-position x=10 y=10 relative-to="bottom-right" } window-rule { match app-id=r#"^steam$"# title=r#"^notificationtoasts_\d+_desktop$"# default-floating-position x=10 y=10 relative-to="top-right" open-focused false } // Automatically fullscreen games launched via Proton window-rule { // Proton games typically use "steam_app_" as their app-id. // The r#"..."# syntax tells niri to evaluate this as a regular expression. match app-id=r#"^steam_app_\d+$"# open-fullscreen true } // ============================================================================ // NAVIGATION & KEYBINDINGS // ============================================================================ // Override to disable super+tab recent-windows { binds { Alt+Tab { next-window scope="output"; } Alt+Shift+Tab { previous-window scope="output"; } Alt+grave { next-window filter="app-id"; } Alt+Shift+grave { previous-window filter="app-id"; } } } // ============================================================================ // INCLUDES (DMS MANAGEMENT) // ============================================================================ // @NOTE: only dms file we could edit include optional=true "dms/binds.kdl" // @NOTE: Non-editable files below all managed by dms include optional=true "dms/colors.kdl" include optional=true "dms/layout.kdl" include optional=true "dms/alttab.kdl" include optional=true "dms/outputs.kdl" include optional=true "dms/cursor.kdl" include optional=true "dms/input.kdl"