From d2f8dff81e1ac3db5212d5213000ac6d29ba20a7 Mon Sep 17 00:00:00 2001 From: Sean Kovacs Date: Sat, 13 Dec 2025 21:31:54 -0500 Subject: [PATCH] switch niri config to nix format --- home/hosts/alien.nix | 5 +- home/hosts/peach.nix | 5 +- home/hosts/vm-aarch64.nix | 5 +- home/tiling/niri/config/config.kdl | 619 ------------------ home/tiling/niri/config/noctalia.kdl | 28 - home/tiling/niri/default.nix | 395 ++++++++++- .../niri/{config => }/scripts/brightness.sh | 0 system/all.nix | 2 +- 8 files changed, 388 insertions(+), 671 deletions(-) delete mode 100644 home/tiling/niri/config/config.kdl delete mode 100644 home/tiling/niri/config/noctalia.kdl rename home/tiling/niri/{config => }/scripts/brightness.sh (100%) diff --git a/home/hosts/alien.nix b/home/hosts/alien.nix index a499d9b..cb971ce 100644 --- a/home/hosts/alien.nix +++ b/home/hosts/alien.nix @@ -33,13 +33,10 @@ _2ship2harkinian ]; - home.sessionVariables = { - XCURSOR_THEME = "catppuccin-mocha-blue-cursors"; - }; - gtk.cursorTheme = { name = "catppuccin-mocha-blue-cursors"; package = pkgs.catppuccin-cursors.mochaBlue; + size = 24; }; programs.plasma = { diff --git a/home/hosts/peach.nix b/home/hosts/peach.nix index 80d5717..61b213a 100644 --- a/home/hosts/peach.nix +++ b/home/hosts/peach.nix @@ -33,13 +33,10 @@ moonlight-qt ]; - home.sessionVariables = { - XCURSOR_THEME = "catppuccin-mocha-peach-cursors"; - }; - gtk.cursorTheme = { name = "catppuccin-mocha-peach-cursors"; package = pkgs.catppuccin-cursors.mochaPeach; + size = 24; }; programs.plasma = { diff --git a/home/hosts/vm-aarch64.nix b/home/hosts/vm-aarch64.nix index 7178f22..078950a 100644 --- a/home/hosts/vm-aarch64.nix +++ b/home/hosts/vm-aarch64.nix @@ -27,13 +27,10 @@ ]; - home.sessionVariables = { - XCURSOR_THEME = "catppuccin-mocha-green-cursors"; - }; - gtk.cursorTheme = { name = "catppuccin-mocha-green-cursors"; package = pkgs.catppuccin-cursors.mochaGreen; + size = 24; }; programs.plasma = { diff --git a/home/tiling/niri/config/config.kdl b/home/tiling/niri/config/config.kdl deleted file mode 100644 index 48391e6..0000000 --- a/home/tiling/niri/config/config.kdl +++ /dev/null @@ -1,619 +0,0 @@ -// https://github.com/YaLTeR/niri/issues/2330#issuecomment-3256864777 -//debug { render-drm-device "/dev/dri/card2"; } - -input { - keyboard { - numlock - } - - // Next sections include libinput settings. - // Omitting settings disables them, or leaves them at their default values. - // All commented-out settings here are examples, not defaults. - touchpad { - // off - // tap - // dwt - // dwtp - // drag false - // drag-lock - natural-scroll - // accel-speed 0.2 - // accel-profile "flat" - // scroll-method "two-finger" - // disabled-on-external-mouse - } - - // Focus windows and outputs automatically when moving the mouse into them. - // Setting max-scroll-amount="0%" makes it work only on windows already fully on screen. - focus-follows-mouse max-scroll-amount="0%" -} - -overview { - backdrop-color "#11111b" - workspace-shadow { - off - } -} - -// Disable the hot corners. -gestures { - hot-corners { - off - } -} - -environment { - QT_QPA_PLATFORM "wayland" - QT_QPA_PLATFORMTHEME_5 "qt5ct" - QT_QPA_PLATFORMTHEME "qt6ct" - // DISPLAY null -} - -cursor { - xcursor-theme "catppuccin-mocha-dark-cursors" - xcursor-size 24 - - hide-when-typing - hide-after-inactive-ms 10000 -} - -// You can configure outputs by their name, which you can find -// by running `niri msg outputs` while inside a niri instance. -// The built-in laptop monitor is usually called "eDP-1". -// Find more information on the wiki: -// https://yalter.github.io/niri/Configuration:-Outputs -// Remember to uncomment the node by removing "/-"! -output "eDP-1" { - // Uncomment this line to disable this output. - // off - - // Resolution and, optionally, refresh rate of the output. - // The format is "x" or "x@". - // If the refresh rate is omitted, niri will pick the highest refresh rate - // for the resolution. - // If the mode is omitted altogether or is invalid, niri will pick one automatically. - // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. - // mode "1920x1080@120.030" - - // You can use integer or fractional scale, for example use 1.5 for 150% scale. - scale 1.75 - - // Transform allows to rotate the output counter-clockwise, valid values are: - // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. - transform "normal" - - // Position of the output in the global coordinate space. - // This affects directional monitor actions like "focus-monitor-left", and cursor movement. - // The cursor can only move between directly adjacent outputs. - // Output scale and rotation has to be taken into account for positioning: - // outputs are sized in logical, or scaled, pixels. - // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080, - // so to put another output directly adjacent to it on the right, set its x to 1920. - // If the position is unset or results in an overlap, the output is instead placed - // automatically. - // position x=1280 y=0 -} - -output "HDMI-A-1" { - // Uncomment this line to disable this output. - // off - - // Resolution and, optionally, refresh rate of the output. - // The format is "x" or "x@". - // If the refresh rate is omitted, niri will pick the highest refresh rate - // for the resolution. - // If the mode is omitted altogether or is invalid, niri will pick one automatically. - // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. - // mode "1920x1080@120.030" - - // You can use integer or fractional scale, for example use 1.5 for 150% scale. - scale 1.75 - - // Transform allows to rotate the output counter-clockwise, valid values are: - // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. - transform "normal" - - // Position of the output in the global coordinate space. - // This affects directional monitor actions like "focus-monitor-left", and cursor movement. - // The cursor can only move between directly adjacent outputs. - // Output scale and rotation has to be taken into account for positioning: - // outputs are sized in logical, or scaled, pixels. - // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080, - // so to put another output directly adjacent to it on the right, set its x to 1920. - // If the position is unset or results in an overlap, the output is instead placed - // automatically. - // position x=1280 y=0 -} - -// Settings that influence how windows are positioned and sized. -// Find more information on the wiki: -// https://yalter.github.io/niri/Configuration:-Layout -layout { - background-color "#181825" - // Set gaps around windows in logical pixels. - gaps 4 - - // When to center a column when changing focus, options are: - // - "never", default behavior, focusing an off-screen column will keep at the left - // or right edge of the screen. - // - "always", the focused column will always be centered. - // - "on-overflow", focusing a column will center it if it doesn't fit - // together with the previously focused column. - center-focused-column "never" - - // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. - preset-column-widths { - // Proportion sets the width as a fraction of the output width, taking gaps into account. - // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. - // The default preset widths are 1/3, 1/2 and 2/3 of the output. - proportion 0.33333 - proportion 0.5 - proportion 0.66667 - - // Fixed sets the width in logical pixels exactly. - // fixed 1920 - } - - // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. - // preset-window-heights { } - - // You can change the default width of the new windows. - default-column-width { proportion 0.5; } - // If you leave the brackets empty, the windows themselves will decide their initial width. - // default-column-width {} - - // By default focus ring and border are rendered as a solid background rectangle - // behind windows. That is, they will show up through semitransparent windows. - // This is because windows using client-side decorations can have an arbitrary shape. - // - // If you don't like that, you should uncomment `prefer-no-csd` below. - // Niri will draw focus ring and border *around* windows that agree to omit their - // client-side decorations. - // - // Alternatively, you can override it with a window rule called - // `draw-border-with-background`. - - focus-ring { - off - } - - // You can also add a border. It's similar to the focus ring, but always visible. - border { - // The settings are the same as for the focus ring. - // If you enable the border, you probably want to disable the focus ring. - // off - - width 1 - active-color "#fab387" - // active-gradient from="#fab387" to="#89b4fa" angle=90 - inactive-color "#313244" - // inactive-gradient from="#313244" to="#6c7086" angle=90 - // Color of the border around windows that request your attention. - urgent-color "#eba0ac" - - // Gradients can use a few different interpolation color spaces. - // For example, this is a pastel rainbow gradient via in="oklch longer hue". - // - // active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue" - - // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" - } - - // You can enable drop shadows for windows. - shadow { - // Uncomment the next line to enable shadows. - on - - // By default, the shadow draws only around its window, and not behind it. - // Uncomment this setting to make the shadow draw behind its window. - // - // Note that niri has no way of knowing about the CSD window corner - // radius. It has to assume that windows have square corners, leading to - // shadow artifacts inside the CSD rounded corners. This setting fixes - // those artifacts. - // - // However, instead you may want to set prefer-no-csd and/or - // geometry-corner-radius. Then, niri will know the corner radius and - // draw the shadow correctly, without having to draw it behind the - // window. These will also remove client-side shadows if the window - // draws any. - // - // draw-behind-window true - - // You can change how shadows look. The values below are in logical - // pixels and match the CSS box-shadow properties. - - // Softness controls the shadow blur radius. - softness 30 - - // Spread expands the shadow. - spread 5 - - // Offset moves the shadow relative to the window. - offset x=0 y=5 - - // You can also change the shadow color and opacity. - color "#1e1e2e77" - } - - // Struts shrink the area occupied by windows, similarly to layer-shell panels. - // You can think of them as a kind of outer gaps. They are set in logical pixels. - // Left and right struts will cause the next window to the side to always be visible. - // Top and bottom struts will simply add outer gaps in addition to the area occupied by - // layer-shell panels and regular gaps. - struts { - // left 64 - // right 64 - // top 64 - // bottom 64 - } -} - -// Add lines like this to spawn processes at startup. -// Note that running niri as a session supports xdg-desktop-autostart, -// which may be more convenient to use. -// See the binds section below for more spawn examples. - -// This line starts waybar, a commonly used bar for Wayland compositors. -// spawn-at-startup "waybar" - -spawn-at-startup "swaybg" "-i" "/home/sckova/.local/share/dailywallpaper.jpg" - -// run tailscale system tray -spawn-at-startup "sudo tailscale set --operator=$USER" -spawn-at-startup "tailscale systray" - -// Instead let's start quickshell, which is similar but made with Qt/QML -// spawn-at-startup "quickshell" - -// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup: -// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell" - -hotkey-overlay { - // Uncomment this line to disable the "Important Hotkeys" pop-up at startup. - skip-at-startup -} - -// Uncomment this line to ask the clients to omit their client-side decorations if possible. -// If the client will specifically ask for CSD, the request will be honored. -// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. -// This option will also fix border/focus ring drawing behind some semitransparent windows. -// After enabling or disabling this, you need to restart the apps for this to take effect. -prefer-no-csd - -// You can change the path where screenshots are saved. -// A ~ at the front will be expanded to the home directory. -// The path is formatted with strftime(3) to give you the screenshot date and time. -screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" - -// You can also set this to null to disable saving screenshots to disk. -// screenshot-path null - -// Animation settings. -// The wiki explains how to configure individual animations: -// https://yalter.github.io/niri/Configuration:-Animations -animations { - // Uncomment to turn off all animations. - // off - - // Slow down all animations by this factor. Values below 1 speed them up instead. - // slowdown 3.0 -} - -// Window rules let you adjust behavior for individual windows. -// Find more information on the wiki: -// https://yalter.github.io/niri/Configuration:-Window-Rules - -// Open the Firefox picture-in-picture player as floating by default. -window-rule { - // This app-id regular expression will work for both: - // - host Firefox (app-id is "firefox") - // - Flatpak Firefox (app-id is "org.mozilla.firefox") - match app-id=r#"firefox$"# title="^Picture-in-Picture$" - open-floating true - default-floating-position x=32 y=32 relative-to="bottom-left" -} - -// Example: block out two password managers from screen capture. -// (This example rule is commented out with a "/-" in front.) -/-window-rule { - match app-id=r#"^org\.keepassxc\.KeePassXC$"# - match app-id=r#"^org\.gnome\.World\.Secrets$"# - - block-out-from "screen-capture" - - // Use this instead if you want them visible on third-party screenshot tools. - // block-out-from "screencast" -} - -// Example: enable rounded corners for all windows. -// (This example rule is commented out with a "/-" in front.) -window-rule { - geometry-corner-radius 16 - clip-to-geometry true -} - -window-rule { - match app-id="openmw" title="OpenMW" - open-maximized true - focus-ring { - off - } - border { - off - } - shadow { - off - } -} - -binds { - // Keys consist of modifiers separated by + signs, followed by an XKB key name - // in the end. To find an XKB name for a particular key, you may use a program - // like wev. - // - // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt - // when running as a winit window. - // - // Most actions that you can bind here can also be invoked programmatically with - // `niri msg action do-something`. - - // Mod-Shift-/, which is usually the same as Mod-?, - // shows a list of important hotkeys. - Mod+Shift+Slash { show-hotkey-overlay; } - - // Suggested binds for running programs: terminal, app launcher, screen locker. - Mod+T hotkey-overlay-title="Open a Terminal: kitty" { spawn "kitty"; } - // Mod+D hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; } - Mod+Space hotkey-overlay-title="Run an Application: Noctalia app launcher" { spawn-sh "noctalia-shell ipc call launcher toggle"; } - Super+Alt+L hotkey-overlay-title="Lock the Screen: swaylock" { spawn "swaylock"; } - - // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc. - // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`. - // For example, this is a standard bind to toggle the screen reader (orca). - Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; } - - // Example volume keys mappings for PipeWire & WirePlumber. - // The allow-when-locked=true property makes them work even when the session is locked. - // Using spawn-sh allows to pass multiple arguments together with the command. - XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+"; } - XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-"; } - Shift+XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01+"; } - Shift+XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01-"; } - XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; } - XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; } - - // Example brightness key mappings for brightnessctl. - // You can use regular spawn with multiple arguments too (to avoid going through "sh"), - // but you need to manually put each argument in separate "" quotes. - XF86MonBrightnessUp allow-when-locked=true { spawn "/home/sckova/.config/niri/scripts/brightness.sh" "1"; } - XF86MonBrightnessDown allow-when-locked=true { spawn "/home/sckova/.config/niri/scripts/brightness.sh" "-1"; } - - // Open/close the Overview: a zoomed-out view of workspaces and windows. - // You can also move the mouse into the top-left hot corner, - // or do a four-finger swipe up on a touchpad. - Mod+O repeat=false { toggle-overview; } - - Mod+Q repeat=false { close-window; } - - Mod+Left { focus-column-left; } - Mod+Down { focus-window-down; } - Mod+Up { focus-window-up; } - Mod+Right { focus-column-right; } - Mod+H { focus-column-left; } - Mod+J { focus-window-down; } - Mod+K { focus-window-up; } - Mod+L { focus-column-right; } - - Mod+Ctrl+Left { move-column-left; } - Mod+Ctrl+Down { move-window-down; } - Mod+Ctrl+Up { move-window-up; } - Mod+Ctrl+Right { move-column-right; } - Mod+Ctrl+H { move-column-left; } - Mod+Ctrl+J { move-window-down; } - Mod+Ctrl+K { move-window-up; } - Mod+Ctrl+L { move-column-right; } - - // Alternative commands that move across workspaces when reaching - // the first or last window in a column. - // Mod+J { focus-window-or-workspace-down; } - // Mod+K { focus-window-or-workspace-up; } - // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } - // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } - - Mod+Home { focus-column-first; } - Mod+End { focus-column-last; } - Mod+Ctrl+Home { move-column-to-first; } - Mod+Ctrl+End { move-column-to-last; } - - Mod+Shift+Left { focus-monitor-left; } - Mod+Shift+Down { focus-monitor-down; } - Mod+Shift+Up { focus-monitor-up; } - Mod+Shift+Right { focus-monitor-right; } - Mod+Shift+H { focus-monitor-left; } - Mod+Shift+J { focus-monitor-down; } - Mod+Shift+K { focus-monitor-up; } - Mod+Shift+L { focus-monitor-right; } - - Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } - Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } - Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } - Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } - Mod+Shift+Ctrl+H { move-column-to-monitor-left; } - Mod+Shift+Ctrl+J { move-column-to-monitor-down; } - Mod+Shift+Ctrl+K { move-column-to-monitor-up; } - Mod+Shift+Ctrl+L { move-column-to-monitor-right; } - - // Alternatively, there are commands to move just a single window: - // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } - // ... - - // And you can also move a whole workspace to another monitor: - // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } - // ... - - Mod+Page_Down { focus-workspace-down; } - Mod+Page_Up { focus-workspace-up; } - Mod+U { focus-workspace-down; } - Mod+I { focus-workspace-up; } - Mod+Ctrl+Page_Down { move-column-to-workspace-down; } - Mod+Ctrl+Page_Up { move-column-to-workspace-up; } - Mod+Ctrl+U { move-column-to-workspace-down; } - Mod+Ctrl+I { move-column-to-workspace-up; } - - // Alternatively, there are commands to move just a single window: - // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } - // ... - - Mod+Shift+Page_Down { move-workspace-down; } - Mod+Shift+Page_Up { move-workspace-up; } - Mod+Shift+U { move-workspace-down; } - Mod+Shift+I { move-workspace-up; } - - // You can bind mouse wheel scroll ticks using the following syntax. - // These binds will change direction based on the natural-scroll setting. - // - // To avoid scrolling through workspaces really fast, you can use - // the cooldown-ms property. The bind will be rate-limited to this value. - // You can set a cooldown on any bind, but it's most useful for the wheel. - Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } - Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } - Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } - Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } - - Mod+WheelScrollRight { focus-column-right; } - Mod+WheelScrollLeft { focus-column-left; } - Mod+Ctrl+WheelScrollRight { move-column-right; } - Mod+Ctrl+WheelScrollLeft { move-column-left; } - - // Usually scrolling up and down with Shift in applications results in - // horizontal scrolling; these binds replicate that. - Mod+Shift+WheelScrollDown { focus-column-right; } - Mod+Shift+WheelScrollUp { focus-column-left; } - Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } - Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } - - // Similarly, you can bind touchpad scroll "ticks". - // Touchpad scrolling is continuous, so for these binds it is split into - // discrete intervals. - // These binds are also affected by touchpad's natural-scroll, so these - // example binds are "inverted", since we have natural-scroll enabled for - // touchpads by default. - // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; } - // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; } - - // You can refer to workspaces by index. However, keep in mind that - // niri is a dynamic workspace system, so these commands are kind of - // "best effort". Trying to refer to a workspace index bigger than - // the current workspace count will instead refer to the bottommost - // (empty) workspace. - // - // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on - // will all refer to the 3rd workspace. - Mod+1 { focus-workspace 1; } - Mod+2 { focus-workspace 2; } - Mod+3 { focus-workspace 3; } - Mod+4 { focus-workspace 4; } - Mod+5 { focus-workspace 5; } - Mod+6 { focus-workspace 6; } - Mod+7 { focus-workspace 7; } - Mod+8 { focus-workspace 8; } - Mod+9 { focus-workspace 9; } - Mod+Ctrl+1 { move-column-to-workspace 1; } - Mod+Ctrl+2 { move-column-to-workspace 2; } - Mod+Ctrl+3 { move-column-to-workspace 3; } - Mod+Ctrl+4 { move-column-to-workspace 4; } - Mod+Ctrl+5 { move-column-to-workspace 5; } - Mod+Ctrl+6 { move-column-to-workspace 6; } - Mod+Ctrl+7 { move-column-to-workspace 7; } - Mod+Ctrl+8 { move-column-to-workspace 8; } - Mod+Ctrl+9 { move-column-to-workspace 9; } - - // Alternatively, there are commands to move just a single window: - // Mod+Ctrl+1 { move-window-to-workspace 1; } - - // Switches focus between the current and the previous workspace. - // Mod+Tab { focus-workspace-previous; } - - // The following binds move the focused window in and out of a column. - // If the window is alone, they will consume it into the nearby column to the side. - // If the window is already in a column, they will expel it out. - Mod+BracketLeft { consume-or-expel-window-left; } - Mod+BracketRight { consume-or-expel-window-right; } - - // Consume one window from the right to the bottom of the focused column. - Mod+Comma { consume-window-into-column; } - // Expel the bottom window from the focused column to the right. - Mod+Period { expel-window-from-column; } - - Mod+R { switch-preset-column-width; } - // Cycling through the presets in reverse order is also possible. - // Mod+R { switch-preset-column-width-back; } - Mod+Shift+R { switch-preset-window-height; } - Mod+Ctrl+R { reset-window-height; } - Mod+F { maximize-column; } - Mod+Shift+F { fullscreen-window; } - - // Expand the focused column to space not taken up by other fully visible columns. - // Makes the column "fill the rest of the space". - Mod+Ctrl+F { expand-column-to-available-width; } - - Mod+C { center-column; } - - // Center all fully visible columns on screen. - Mod+Ctrl+C { center-visible-columns; } - - // Finer width adjustments. - // This command can also: - // * set width in pixels: "1000" - // * adjust width in pixels: "-5" or "+5" - // * set width as a percentage of screen width: "25%" - // * adjust width as a percentage of screen width: "-10%" or "+10%" - // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, - // set-column-width "100" will make the column occupy 200 physical screen pixels. - Mod+Minus { set-column-width "-10%"; } - Mod+Equal { set-column-width "+10%"; } - - // Finer height adjustments when in column with other windows. - Mod+Shift+Minus { set-window-height "-10%"; } - Mod+Shift+Equal { set-window-height "+10%"; } - - // Move the focused window between the floating and the tiling layout. - Mod+V { toggle-window-floating; } - Mod+Shift+V { switch-focus-between-floating-and-tiling; } - - // Toggle tabbed column display mode. - // Windows in this column will appear as vertical tabs, - // rather than stacked on top of each other. - Mod+W { toggle-column-tabbed-display; } - - // Actions to switch layouts. - // Note: if you uncomment these, make sure you do NOT have - // a matching layout switch hotkey configured in xkb options above. - // Having both at once on the same hotkey will break the switching, - // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). - // Mod+Space { switch-layout "next"; } - // Mod+Shift+Space { switch-layout "prev"; } - - Print { screenshot; } - Ctrl+Print { screenshot-screen; } - Alt+Print { screenshot-window; } - - // Applications such as remote-desktop clients and software KVM switches may - // request that niri stops processing the keyboard shortcuts defined here - // so they may, for example, forward the key presses as-is to a remote machine. - // It's a good idea to bind an escape hatch to toggle the inhibitor, - // so a buggy application can't hold your session hostage. - // - // The allow-inhibiting=false property can be applied to other binds as well, - // which ensures niri always processes them, even when an inhibitor is active. - Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } - - // The quit action will show a confirmation dialog to avoid accidental exits. - Mod+Shift+E { quit; } - Ctrl+Alt+Delete { quit; } - - // Powers off the monitors. To turn them back on, do any input like - // moving the mouse or pressing any other key. - Mod+Shift+P { power-off-monitors; } -} diff --git a/home/tiling/niri/config/noctalia.kdl b/home/tiling/niri/config/noctalia.kdl deleted file mode 100644 index 0ae564e..0000000 --- a/home/tiling/niri/config/noctalia.kdl +++ /dev/null @@ -1,28 +0,0 @@ -layout { - - focus-ring { - active-color "#E6B450" - inactive-color "#0B0E14" - urgent-color "#D95757" - } - - border { - active-color "#E6B450" - inactive-color "#0B0E14" - urgent-color "#D95757" - } - - shadow { - color "#00000070" - } - - tab-indicator { - active-color "#E6B450" - inactive-color "#8e620b" - urgent-color "#D95757" - } - - insert-hint { - color "#E6B45080" - } -} diff --git a/home/tiling/niri/default.nix b/home/tiling/niri/default.nix index 4b28279..7dd7abd 100644 --- a/home/tiling/niri/default.nix +++ b/home/tiling/niri/default.nix @@ -20,13 +20,9 @@ in catppuccin-qt5ct ]; - programs.niri = { - # wip: put config in here - }; - home.file = { - ".config/niri" = { - source = ./config; + ".config/niri/scripts" = { + source = ./scripts; recursive = true; force = true; }; @@ -62,11 +58,6 @@ in gtk = { enable = true; - # theme = { - # name = "adw-gtk3-dark"; - # package = pkgs.adw-gtk3; - # }; - iconTheme = { name = "Colloid-Dark"; package = pkgs.colloid-icon-theme; @@ -118,4 +109,386 @@ in windowManager.command = "niri"; # launches niri directly }; + # https://github.com/sodiboo/niri-flake/blob/main/docs.md + programs.niri.settings = { + screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"; + hotkey-overlay.skip-at-startup = true; + prefer-no-csd = true; + spawn-at-startup = [ + { + command = [ + "swaybg" + "-i" + "/home/sckova/.local/share/dailywallpaper.jpg" + ]; + } + ]; + overview = { + backdrop-color = pkgs.catppuccin.${config.catppuccin.flavor}.crust; + workspace-shadow.enable = false; + }; + input = { + focus-follows-mouse = { + enable = true; + max-scroll-amount = "0%"; + }; + keyboard = { + numlock = false; + repeat-delay = 600; + repeat-rate = 25; + }; + mouse = { + enable = true; + accel-profile = "adaptive"; + natural-scroll = true; + }; + touchpad = { + enable = true; + accel-profile = "adaptive"; + natural-scroll = true; + tap = false; + drag = false; + }; + }; + outputs = { + "eDP-1" = { + scale = 1.75; + }; + "HDMI-A-1" = { + scale = 2; + }; + }; + cursor = { + hide-when-typing = true; + hide-after-inactive-ms = 2000; + size = config.gtk.cursorTheme.size; + theme = config.gtk.cursorTheme.name; + }; + layout = { + gaps = 4; + background-color = pkgs.catppuccin.${config.catppuccin.flavor}.mantle; + default-column-width = { + proportion = 0.5; + }; + preset-column-widths = [ + { proportion = 1.0 / 3.0; } + { proportion = 1.0 / 2.0; } + { proportion = 2.0 / 3.0; } + ]; + border = { + enable = true; + width = 1; + active.color = pkgs.catppuccin.${config.catppuccin.flavor}.${config.catppuccin.accent}; + inactive.color = pkgs.catppuccin.${config.catppuccin.flavor}.surface0; + urgent.color = pkgs.catppuccin.${config.catppuccin.flavor}.maroon; + }; + focus-ring = { + enable = false; + width = 1; + active.color = pkgs.catppuccin.${config.catppuccin.flavor}.${config.catppuccin.accent}; + inactive.color = pkgs.catppuccin.${config.catppuccin.flavor}.surface0; + urgent.color = pkgs.catppuccin.${config.catppuccin.flavor}.maroon; + }; + shadow = { + enable = true; + spread = 5; + offset.x = 0; + offset.y = 5; + softness = 30; + color = pkgs.catppuccin.${config.catppuccin.flavor}.base + "77"; + }; + }; + window-rules = [ + { + matches = [ + { + app-id = "firefox$"; + title = "^Picture-in-Picture$"; + } + ]; + open-floating = true; + default-floating-position = { + x = 32; + y = 32; + relative-to = "bottom-left"; + }; + } + { + geometry-corner-radius = { + top-left = 16.0; + top-right = 16.0; + bottom-left = 16.0; + bottom-right = 16.0; + }; + clip-to-geometry = true; + } + { + matches = [ + { + app-id = "openmw"; + title = "OpenMW"; + } + ]; + open-maximized = true; + focus-ring.enable = false; + border.enable = false; + shadow.enable = false; + } + ]; + binds = { + "Mod+Shift+Slash".action.show-hotkey-overlay = { }; + + "Mod+T" = { + action.spawn = [ "kitty" ]; + hotkey-overlay.title = "Open a Terminal: kitty"; + }; + "Mod+Space" = { + action.spawn = [ + "sh" + "-c" + "noctalia-shell ipc call launcher toggle" + ]; + hotkey-overlay.title = "Run an Application: Noctalia app launcher"; + }; + "Super+Alt+L" = { + action.spawn = [ "swaylock" ]; + hotkey-overlay.title = "Lock the Screen: swaylock"; + }; + + "Super+Alt+S" = { + action.spawn = [ + "sh" + "-c" + "pkill orca || exec orca" + ]; + allow-when-locked = true; + hotkey-overlay.title = "Orca screen reader"; + }; + + "XF86AudioRaiseVolume" = { + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.05+" + ]; + allow-when-locked = true; + }; + "XF86AudioLowerVolume" = { + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.05-" + ]; + allow-when-locked = true; + }; + "Shift+XF86AudioRaiseVolume" = { + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.01+" + ]; + allow-when-locked = true; + }; + "Shift+XF86AudioLowerVolume" = { + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.01-" + ]; + allow-when-locked = true; + }; + "XF86AudioMute" = { + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SINK@" + "toggle" + ]; + allow-when-locked = true; + }; + "XF86AudioMicMute" = { + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SOURCE@" + "toggle" + ]; + allow-when-locked = true; + }; + + "XF86MonBrightnessUp" = { + action.spawn = [ + "/home/sckova/.config/niri/scripts/brightness.sh" + "1" + ]; + allow-when-locked = true; + }; + "XF86MonBrightnessDown" = { + action.spawn = [ + "/home/sckova/.config/niri/scripts/brightness.sh" + "-1" + ]; + allow-when-locked = true; + }; + + "Mod+O" = { + action.toggle-overview = { }; + repeat = false; + }; + + "Mod+Q" = { + action.close-window = { }; + repeat = false; + }; + + "Mod+Left".action.focus-column-left = { }; + "Mod+Down".action.focus-window-down = { }; + "Mod+Up".action.focus-window-up = { }; + "Mod+Right".action.focus-column-right = { }; + "Mod+H".action.focus-column-left = { }; + "Mod+J".action.focus-window-down = { }; + "Mod+K".action.focus-window-up = { }; + "Mod+L".action.focus-column-right = { }; + + "Mod+Ctrl+Left".action.move-column-left = { }; + "Mod+Ctrl+Down".action.move-window-down = { }; + "Mod+Ctrl+Up".action.move-window-up = { }; + "Mod+Ctrl+Right".action.move-column-right = { }; + "Mod+Ctrl+H".action.move-column-left = { }; + "Mod+Ctrl+J".action.move-window-down = { }; + "Mod+Ctrl+K".action.move-window-up = { }; + "Mod+Ctrl+L".action.move-column-right = { }; + + "Mod+Home".action.focus-column-first = { }; + "Mod+End".action.focus-column-last = { }; + "Mod+Ctrl+Home".action.move-column-to-first = { }; + "Mod+Ctrl+End".action.move-column-to-last = { }; + + "Mod+Shift+Left".action.focus-monitor-left = { }; + "Mod+Shift+Down".action.focus-monitor-down = { }; + "Mod+Shift+Up".action.focus-monitor-up = { }; + "Mod+Shift+Right".action.focus-monitor-right = { }; + "Mod+Shift+H".action.focus-monitor-left = { }; + "Mod+Shift+J".action.focus-monitor-down = { }; + "Mod+Shift+K".action.focus-monitor-up = { }; + "Mod+Shift+L".action.focus-monitor-right = { }; + + "Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = { }; + "Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = { }; + "Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = { }; + "Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = { }; + "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = { }; + "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = { }; + "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = { }; + "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = { }; + + "Mod+Page_Down".action.focus-workspace-down = { }; + "Mod+Page_Up".action.focus-workspace-up = { }; + "Mod+U".action.focus-workspace-down = { }; + "Mod+I".action.focus-workspace-up = { }; + "Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = { }; + "Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = { }; + "Mod+Ctrl+U".action.move-column-to-workspace-down = { }; + "Mod+Ctrl+I".action.move-column-to-workspace-up = { }; + + "Mod+Shift+Page_Down".action.move-workspace-down = { }; + "Mod+Shift+Page_Up".action.move-workspace-up = { }; + "Mod+Shift+U".action.move-workspace-down = { }; + "Mod+Shift+I".action.move-workspace-up = { }; + + "Mod+WheelScrollDown" = { + action.focus-workspace-down = { }; + cooldown-ms = 150; + }; + "Mod+WheelScrollUp" = { + action.focus-workspace-up = { }; + cooldown-ms = 150; + }; + "Mod+Ctrl+WheelScrollDown" = { + action.move-column-to-workspace-down = { }; + cooldown-ms = 150; + }; + "Mod+Ctrl+WheelScrollUp" = { + action.move-column-to-workspace-up = { }; + cooldown-ms = 150; + }; + + "Mod+WheelScrollRight".action.focus-column-right = { }; + "Mod+WheelScrollLeft".action.focus-column-left = { }; + "Mod+Ctrl+WheelScrollRight".action.move-column-right = { }; + "Mod+Ctrl+WheelScrollLeft".action.move-column-left = { }; + + "Mod+Shift+WheelScrollDown".action.focus-column-right = { }; + "Mod+Shift+WheelScrollUp".action.focus-column-left = { }; + "Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = { }; + "Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = { }; + + "Mod+1".action.focus-workspace = 1; + "Mod+2".action.focus-workspace = 2; + "Mod+3".action.focus-workspace = 3; + "Mod+4".action.focus-workspace = 4; + "Mod+5".action.focus-workspace = 5; + "Mod+6".action.focus-workspace = 6; + "Mod+7".action.focus-workspace = 7; + "Mod+8".action.focus-workspace = 8; + "Mod+9".action.focus-workspace = 9; + "Mod+Ctrl+1".action.move-column-to-workspace = 1; + "Mod+Ctrl+2".action.move-column-to-workspace = 2; + "Mod+Ctrl+3".action.move-column-to-workspace = 3; + "Mod+Ctrl+4".action.move-column-to-workspace = 4; + "Mod+Ctrl+5".action.move-column-to-workspace = 5; + "Mod+Ctrl+6".action.move-column-to-workspace = 6; + "Mod+Ctrl+7".action.move-column-to-workspace = 7; + "Mod+Ctrl+8".action.move-column-to-workspace = 8; + "Mod+Ctrl+9".action.move-column-to-workspace = 9; + + "Mod+BracketLeft".action.consume-or-expel-window-left = { }; + "Mod+BracketRight".action.consume-or-expel-window-right = { }; + + "Mod+Comma".action.consume-window-into-column = { }; + "Mod+Period".action.expel-window-from-column = { }; + + "Mod+R".action.switch-preset-column-width = { }; + "Mod+Shift+R".action.switch-preset-window-height = { }; + "Mod+Ctrl+R".action.reset-window-height = { }; + "Mod+F".action.maximize-column = { }; + "Mod+Shift+F".action.fullscreen-window = { }; + + "Mod+Ctrl+F".action.expand-column-to-available-width = { }; + + "Mod+C".action.center-column = { }; + + "Mod+Ctrl+C".action.center-visible-columns = { }; + + "Mod+Minus".action.set-column-width = "-10%"; + "Mod+Equal".action.set-column-width = "+10%"; + + "Mod+Shift+Minus".action.set-window-height = "-10%"; + "Mod+Shift+Equal".action.set-window-height = "+10%"; + + "Mod+V".action.toggle-window-floating = { }; + "Mod+Shift+V".action.switch-focus-between-floating-and-tiling = { }; + + "Mod+W".action.toggle-column-tabbed-display = { }; + + "Print".action.screenshot = { }; + "Ctrl+Print".action.screenshot-screen = { }; + "Alt+Print".action.screenshot-window = { }; + + "Mod+Escape" = { + action.toggle-keyboard-shortcuts-inhibit = { }; + allow-inhibiting = false; + }; + + "Mod+Shift+E".action.quit = { }; + "Ctrl+Alt+Delete".action.quit = { }; + + "Mod+Shift+P".action.power-off-monitors = { }; + }; + }; + } diff --git a/home/tiling/niri/config/scripts/brightness.sh b/home/tiling/niri/scripts/brightness.sh similarity index 100% rename from home/tiling/niri/config/scripts/brightness.sh rename to home/tiling/niri/scripts/brightness.sh diff --git a/system/all.nix b/system/all.nix index 9493c4c..e01fc59 100755 --- a/system/all.nix +++ b/system/all.nix @@ -182,7 +182,7 @@ documentation.man = { enable = true; - generateCaches = true; + generateCaches = false; }; # This value determines the NixOS release from which the default