{ osConfig, config, pkgs, lib, ... }: with lib; let cfg = config.desktop.niri; in { options = { desktop.niri.enable = mkEnableOption "enable niri desktop"; }; config = mkIf cfg.enable { stylix.targets = { waybar.enable = false; hyprlock.enable = false; }; services = { playerctld.enable = true; network-manager-applet.enable = true; copyq.enable = true; gnome-keyring = { enable = true; components = ["secrets" "ssh"]; }; udiskie = { enable = true; automount = false; notify = true; tray = "auto"; }; wlsunset = { enable = true; latitude = "49.6"; longitude = "36.1"; temperature = { day = 6500; night = 3000; }; systemdTarget = "graphical-session.target"; }; dunst = { enable = true; settings = { global = { width = 300; height = 300; icon_theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}"; corner_radius = 12; #corners = "top-right,bottom-left"; offset = "16x16"; origin = "top-right"; timeout = 15; frame_width = 3; notification_limit = 5; }; rule-telegram = { "desktop_entry" = "org.telegram.desktop"; "urgency" = "normal"; }; }; }; hypridle = { enable = true; settings = { general = { before_sleep_cmd = "loginctl lock-session"; lock_cmd = "pidof hyprlock || hyprlock"; # unlock_cmd = "loginctl unlock-session"; }; listener = [ { timeout = 600; on-timeout = "pidof hyprlock || hyprlock"; } { timeout = 601; on-timeout = "${pkgs.niri}/bin/niri msg action power-off-monitors"; } ]; }; }; }; programs.hyprlock = { enable = true; settings = { general = { disable_loading_bar = true; #grace = 300; hide_cursor = true; no_fade_in = false; }; background = [ { path = "screenshot"; blur_passes = 3; blur_size = 8; } ]; input-field = [ { size = "274, 50"; rounding = 12; outline_thickness = 4; position = "0, -30"; monitor = ""; dots_center = true; fade_on_empty = false; font_family = "${config.stylix.fonts.serif.name}"; font_color = "rgb(${config.lib.stylix.colors.base05})"; inner_color = "rgb(${config.lib.stylix.colors.base00})"; outer_color = "rgb(${config.lib.stylix.colors.base0D})"; check_color = "rgb(${config.lib.stylix.colors.base0A})"; fail_color = "rgb(${config.lib.stylix.colors.base08})"; placeholder_text = "locked..."; fail_text = "wrong"; shadow_passes = 0; } ]; shape = [ { rounding = 12; size = "150, 50"; color = "rgb(${config.lib.stylix.colors.base00})"; border_color = "rgb(${config.lib.stylix.colors.base0D})"; position = "-62, 30"; halign = "center"; valign = "center"; } { rounding = 12; size = "120, 50"; color = "rgb(${config.lib.stylix.colors.base00})"; border_color = "rgb(${config.lib.stylix.colors.base0D})"; position = "77, 28"; halign = "center"; valign = "center"; } ]; label = [ { monitor = ""; text = "$LAYOUT"; text_align = "center"; font_size = 16; font_family = "${config.stylix.fonts.serif.name}"; outer_color = "rgb(${config.lib.stylix.colors.base00})"; color = "rgb(${config.lib.stylix.colors.base05})"; position = "-62, 28"; halign = "center"; valign = "center"; } { monitor = ""; text = "cmd[update:1000] ${pkgs.uutils-coreutils-noprefix}/bin/echo $(${pkgs.uutils-coreutils-noprefix}/bin/date +%H:%M:%S)"; text_align = "center"; font_size = 16; font_family = "${config.stylix.fonts.serif.name}"; outer_color = "rgb(${config.lib.stylix.colors.base00})"; color = "rgb(${config.lib.stylix.colors.base05})"; position = "77, 28"; halign = "center"; valign = "center"; } ]; }; }; xdg.configFile = { niri = { target = "niri/config.kdl"; text = let cursor_size = toString config.stylix.cursor.size; terminal = "ghostty"; launcher = "walker"; browser = "app.zen_browser.zen"; lockscreen = "hyprlock"; # clipboard = "copyq toggle"; left = "n"; down = "e"; up = "i"; right = "o"; in '' environment { DISPLAY ":123" QT_QPA_PLATFORM "wayland" // QT_STYLE_OVERRIDE "adwaita" // QT_QPA_PLATFORMTHEME "qt5ct" GDK_BACKEND "wayland" MOZ_ENABLE_WAYLAND "1" MOZ_WEBRENDER "1" XDG_SESSION_TYPE "wayland" CLUTTER_BACKEND "wayland" SDL_VIDEODRIVER "wayland" } input { keyboard { xkb { layout "us,ua" // variant "colemak_dh," options "grp:menu_toggle" } repeat-delay 200 repeat-rate 50 track-layout "global" } touchpad { // off tap // dwt // dwtp natural-scroll accel-speed 0.2 accel-profile "flat" // scroll-method "two-finger" // disabled-on-external-mouse } mouse { // off // natural-scroll accel-speed 0.0 accel-profile "flat" // scroll-method "no-scroll" } /-touch { off } warp-mouse-to-focus // focus-follows-mouse } output "eDP-1" { // off scale 1.2 transform "normal" // position x=1920 y=0 } output "Samsung Electric Company S24R65x H4TMA03291" { position x=0 y=0 variable-refresh-rate } output "Philips Consumer Electronics Company 27M2N5500 UK02418033254" { mode "2560x1440@180.000" variable-refresh-rate position x=0 y=0 scale 1.33 } output "PNP(AOC) 27V2G5 0x0000026C" { position x=1920 y=0 mode "1920x1080@74.973" variable-refresh-rate } cursor { xcursor-theme "${config.stylix.cursor.name}" xcursor-size ${cursor_size} } layout { gaps 11 center-focused-column "never" // "on-overflow" preset-column-widths { proportion 0.33333 proportion 0.5 proportion 0.66667 } // default-column-width { proportion 0.9; } default-column-width {} focus-ring { //off width 3 active-gradient from="#${config.lib.stylix.colors.base0D}" to="#${config.lib.stylix.colors.base04}" angle=40 relative-to="workspace-view" inactive-color "#${config.lib.stylix.colors.base03}" // inactive-gradient from="#1c1c1c" to="#4e4e4e" angle=60 relative-to="workspace-view" } // 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 4 // active-color "#ffc87f" inactive-color "#${config.lib.stylix.colors.base00}" // active-gradient from="#${config.lib.stylix.colors.base0D}" to="#${config.lib.stylix.colors.base0C}" angle=40 relative-to="workspace-view" // inactive-gradient from="#1c1c1c" to="#4e4e4e" angle=60 relative-to="workspace-view" // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" } struts { left 52 right 52 } } prefer-no-csd hotkey-overlay { skip-at-startup } window-rule { geometry-corner-radius 12 clip-to-geometry true } screenshot-path "~/pics/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png" // screenshot-path null animations { // off slowdown 0.7 } window-rule { match app-id=r#"^org\.wezfurlong\.wezterm$"# default-column-width { proportion 1.0; } } window-rule { match app-id=r#"^re\.sonny\.Junction$"# open-floating true open-focused true } // window-rule { // match app-id=r#"^com\.mitchellh\.ghostty$"# // draw-border-with-background false // } window-rule { match app-id=r#"^org\.keepassxc\.KeePassXC$"# match app-id=r#"^org\.telegram\.desktop$"# match app-id=r#"^org\.gnome\.World\.Secrets$"# match app-id=r#"^signal$"# match app-id=r#"^Bitwarden$"# // block-out-from "screen-capture" block-out-from "screencast" } binds { Mod+Shift+Slash { show-hotkey-overlay; } Mod+Return repeat=false { spawn "${terminal}"; } Mod+Space repeat=false { spawn "${launcher}"; } Mod+Shift+Space repeat=false { spawn "walker" "-m" "windows"; } Super+Alt+L repeat=false { spawn "${lockscreen}"; } Super+Alt+B repeat=false { spawn "${browser}"; } Super+Alt+V repeat=false { spawn "copyq" "toggle"; } Super+Alt+D repeat=false { spawn "dunstctl" "set-paused" "toggle"; } Super+Alt+C repeat=false { spawn "dunstctl" "close-all"; } Super+Alt+X repeat=false { spawn "dunstctl" "history-pop"; } Mod+Alt+Q { quit; } Mod+Alt+P { power-off-monitors; } XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05+"; } XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05-"; } XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; } XF86AudioPause allow-when-locked=true { spawn "playerctl" "pause"; } XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; } XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; } XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+"; } XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-"; } Alt+XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+" "-d" "platform::kbd_backlight"; } Alt+XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-" "-d" "platform::kbd_backlight"; } Mod+Left { focus-column-left; } Mod+Down { focus-window-or-workspace-down; } Mod+Up { focus-window-or-workspace-up; } Mod+Right { focus-column-right; } Mod+${left} { focus-column-left; } Mod+${down} { focus-window-or-workspace-down; } Mod+${up} { focus-window-or-workspace-up; } Mod+${right} { focus-column-right; } Mod+Ctrl+Left { move-column-left; } Mod+Ctrl+Down { move-window-down-or-to-workspace-down; } Mod+Ctrl+Up { move-window-up-or-to-workspace-up; } Mod+Ctrl+Right { move-column-right; } Mod+Ctrl+${left} { move-column-left; } Mod+Ctrl+${down} { move-window-down-or-to-workspace-down; } Mod+Ctrl+${up} { move-window-up-or-to-workspace-up; } Mod+Ctrl+${right} { move-column-right; } 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+${left} { focus-monitor-left; } Mod+Shift+${down} { focus-monitor-down; } Mod+Shift+${up} { focus-monitor-up; } Mod+Shift+${right} { 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+${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+Page_Down { focus-workspace-down; } // Mod+Page_Up { focus-workspace-up; } // Mod+N { focus-workspace-down; } // Mod+E { focus-workspace-up; } Mod+Ctrl+Page_Down { move-column-to-workspace-down; } Mod+Ctrl+Page_Up { move-column-to-workspace-up; } // Mod+Ctrl+N { move-column-to-workspace-down; } // Mod+Ctrl+U { move-column-to-workspace-up; } Mod+Shift+Page_Down { move-workspace-down; } Mod+Shift+Page_Up { move-workspace-up; } // Mod+Shift+N { move-workspace-down; } // Mod+Shift+U { move-workspace-up; } 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; } 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; } Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; } Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; } 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; } // Mod+Q { focus-workspace 1; } // Mod+W { focus-workspace 2; } // Mod+F { focus-workspace 3; } // Mod+P { focus-workspace 4; } // Mod+B { focus-workspace 5; } // Mod+J { focus-workspace 6; } // Mod+L { focus-workspace 7; } // Mod+Y { focus-workspace 8; } // Mod+Apostrophe { focus-workspace 9; } // Mod+Ctrl+Q { move-column-to-workspace 1; } // Mod+Ctrl+W { move-column-to-workspace 2; } // Mod+Ctrl+F { move-column-to-workspace 3; } // Mod+Ctrl+P { move-column-to-workspace 4; } // Mod+Ctrl+B { move-column-to-workspace 5; } // Mod+Ctrl+J { move-column-to-workspace 6; } // Mod+Ctrl+L { move-column-to-workspace 7; } // Mod+Ctrl+Y { move-column-to-workspace 8; } // Mod+Ctrl+Apostrophe { move-column-to-workspace 9; } // Mod+Ctrl+1 { move-window-to-workspace 1; } Mod+Tab { focus-workspace-previous; } Mod+Ctrl+Comma { consume-or-expel-window-left; } Mod+Ctrl+Period { consume-or-expel-window-right; } Mod+Comma { set-column-width "-10%"; } Mod+Period { set-column-width "+10%"; } Mod+T { switch-preset-column-width; } Mod+H { set-column-width "50%"; } Mod+Shift+Comma { set-window-height "-10%"; } Mod+Shift+Period { set-window-height "+10%"; } Mod+Shift+T { reset-window-height; } Mod+M { maximize-column; } Mod+G { switch-focus-between-floating-and-tiling; } Mod+C { center-column; } Mod+Ctrl+M { fullscreen-window; } Mod+Ctrl+G { toggle-window-floating; } Mod+Ctrl+Q { close-window; } Mod+Minus { set-column-width "-10%"; } Mod+Equal { set-column-width "+10%"; } Mod+Escape { switch-layout "next"; } // Mod+Shift+Space { switch-layout "prev"; } Print { screenshot; } Ctrl+Print { screenshot-screen; } Alt+Print { screenshot-window; } } ''; }; }; programs.waybar = { enable = true; #package = pkgs.waybar-0.11.0"; systemd = { enable = true; target = "graphical-session.target"; }; settings = let hostname = osConfig.networking.hostName; in { bar-0 = { layer = "top"; position = "bottom"; height = 40; spacing = 6; margin-left = 8; margin-right = 8; margin-bottom = 8; reload_style_on_change = true; modules-left = [ #"custom/notification" "clock" "wlr/taskbar" ]; modules-center = ["group/niri" "privacy"]; modules-right = [ "tray" "wireplumber" (lib.mkIf (hostname != "dunamis") "group/laptop") "idle_inhibitor" ]; "niri/workspaces" = { format = "{icon}"; format-icons = { focused = "󰗝"; active = "󰻃"; default = "󰄰"; }; }; "niri/language" = { format = "{}"; format-en = "🇺🇸"; format-uk = "🇺🇦"; }; "custom/separator" = { format = "|"; interval = "once"; tooltip = false; }; "custom/text" = { format = "here will be workspaces"; interval = "once"; tooltip = false; }; "group/niri" = { orientation = "inherit"; modules = [ "niri/language" "niri/workspaces" ]; }; "group/laptop" = { orientation = "inherit"; drawer = { transition-duration = 500; children-class = "laptop"; transition-left-to-right = false; }; modules = [ "battery" "power-profiles-daemon" "custom/separator" "custom/kbd-backlight" "custom/separator" "backlight" "custom/separator" ]; }; "idle_inhibitor" = { format = "{icon}"; format-icons = { activated = "󰈈"; deactivated = "󰈉"; }; }; "tray" = { icon-size = 24; spacing = 3; }; "clock" = { interval = 1; format = "{:%H:%M:%S}"; tooltip-format = "{:%d.%m.%Y}"; }; # "backlight" = { # device = "intel_backlight"; # format = "{percent}% {icon}"; # format-icons = ["󰃞" "󰃟" "󰃝" "󰃠"]; # on-scroll-up = "light -A 2%"; # on-scroll-down = "light -U 2%"; # }; "custom/backlight" = { format = "{}% {icon}"; format-icons = ["󰃠"]; exec = "~/.local/bin/brightness.nu get-percentage"; on-scroll-up = "~/.local/bin/brightness.nu change 2"; on-scroll-down = "~/.local/bin/brightness.nu change 2"; interval = 1; }; "custom/kbd-backlight" = { format = "{}% {icon}"; format-icons = ["󰌌"]; exec = "~/.local/bin/keyboard-brightness.nu get-percentage"; on-scroll-up = "~/.local/bin/keyboard-brightness.nu change"; on-scroll-down = "~/.local/bin/keyboard-brightness.nu change -1"; interval = 1; }; # "custom/kbd-backlight" = { # exec = "cat /sys/class/leds/platform::kbd_backlight/brightness"; # interval = 1; # format = "{}% {icon}"; # format-icons = ["󰌌"]; # on-scroll-up = "light -s sysfs/leds/platform::kbd_backlight -A 5%"; # on-scroll-down = "light -s sysfs/leds/platform::kbd_backlight -U 5%"; # }; battery = { states = { good = 95; warning = 30; critical = 15; }; format = "{capacity}% {icon}"; format-full = "{capacity}% 󱟢"; format-charging = "{capacity}% 󰂄"; format-plugged = "{capacity}% 󰚥"; format-alt = "{icon} {time}"; format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; }; "upower" = { icon-size = 16; format = "{percentage}"; hide-if-empty = true; tooltip = true; tooltip-spacing = 20; }; "power-profiles-daemon" = { format = "{icon}"; tooltip-format = "Power profile: {profile}\nDriver: {driver}"; tooltip = true; format-icons = { default = "󱡮"; performance = "󱡮"; balanced = ""; power-saver = ""; }; }; "wireplumber" = { scroll-step = 3; format = "{volume}% {icon}"; format-muted = "󰖁"; format-icons = ["󰕿" "󰖀" "󰕾"]; on-click = "pwvucontrol"; on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle"; }; "custom/notification" = { tooltip = false; format = "{icon}"; format-icons = { notification = ""; none = ""; dnd-notification = ""; dnd-none = ""; }; return-type = "json"; exec-if = "which swaync-client"; exec = "swaync-client -swb"; on-click = "swaync-client -t -sw"; on-click-right = "swaync-client -d -sw"; escape = true; }; "privacy" = { # icon-spacing = 4; icon-size = 16; transition-duration = 250; screenshare = { type = "screenshare"; tooltip = true; tooltip-icon-size = 24; }; audio-in = { type = "audio-in"; tooltip = true; tooltip-icon-size = 24; }; }; "wlr/taskbar" = { format = "{icon}"; icon-size = 24; icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}"; tooltip-format = "{title}"; on-click = "activate"; }; }; }; style = '' @define-color base00 #${config.lib.stylix.colors.base00}; @define-color base01 #${config.lib.stylix.colors.base01}; @define-color base02 #${config.lib.stylix.colors.base02}; @define-color base03 #${config.lib.stylix.colors.base03}; @define-color base04 #${config.lib.stylix.colors.base04}; @define-color base05 #${config.lib.stylix.colors.base05}; @define-color base06 #${config.lib.stylix.colors.base06}; @define-color base07 #${config.lib.stylix.colors.base07}; @define-color base08 #${config.lib.stylix.colors.base08}; @define-color base09 #${config.lib.stylix.colors.base09}; @define-color base0A #${config.lib.stylix.colors.base0A}; @define-color base0B #${config.lib.stylix.colors.base0B}; @define-color base0C #${config.lib.stylix.colors.base0C}; @define-color base0D #${config.lib.stylix.colors.base0D}; @define-color base0E #${config.lib.stylix.colors.base0E}; @define-color base0F #${config.lib.stylix.colors.base0F}; * { font-family: Iosevka Nerd Font Propo, FontAwesome; font-size: 100%; /* margin: 0px 2px 2px 2px; */ } window#waybar { background-color: transparent; /* border-top: 3px solid @overlay0; */ color: @base05; /* padding: 0px 2px 0px 0px; */ transition-property: background-color; transition-duration: 0.5s; } .modules-right, .modules-center, .modules-left { border-radius: 8px; } tooltip { background: @base01; border: 1px solid @base0E; } tooltip label { color: @base05; } button { box-shadow: inset 0 -3px transparent; border-radius: 12px; } /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ button:hover { background: inherit; box-shadow: inset 0 -3px transparent; } #mode { background-color: rgba(0, 0, 0, 0.2); box-shadow: inset 0 -3px @base05; } #clock, #battery, #cpu, #memory, #disk, #temperature, #backlight, #custom-kbd-backlight, #workspaces, #network, #pulseaudio, #wireplumber, #custom-media, #laptop, #tray, #mode, #privacy #privacy-item, #idle_inhibitor, #backlight-slider, #custom-notification, #scratchpad, #power-profiles-daemon, #taskbar, #language, #upower, #mpris, #mpd { padding: 0 0.8em; border-radius: 12px; color: @base05; background-color: @base00; } /* #upower, */ #battery, #backlight, #custom-kbd-backlight, #backlight-slider, #cpu, #memory, #disk, #network, #wireplumber, #power-profiles-daemon { padding-right: 0.8em; } #language { padding-right: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; } #workspaces { border-top-left-radius: 0; border-bottom-left-radius: 0; } #taskbar, #workspaces { padding: 0 0.5em; } #taskbar button, #workspaces button { padding: 0 0.2em; } #workspaces button.active { color: @base0D; } #taskbar button:hover { box-shadow: transparent; } #taskbar.empty, window#empty { background-color: transparent; } #battery.critical:not(.charging) { background-color: @base09; color: @base00; animation-name: blink; animation-duration: 0.5s; animation-timing-function: steps(12); animation-iteration-count: infinite; animation-direction: alternate; } #power-profiles-daemon.performance { background-color: @base00; color: @base08; } #power-profiles-daemon.balanced { background-color: @base00; color: @base0E; } #power-profiles-daemon.power-saver { background-color: @base00; color: @base08; } label:focus { background-color: #000000; } #tray > .passive { -gtk-icon-effect: dim; } #tray > .needs-attention { -gtk-icon-effect: highlight; background-color: #eb4d4b; } #idle_inhibitor { padding: 0 0.9em; } #idle_inhibitor:hover { box-shadow: inset 0 -3px @base05; } #idle_inhibitor.activated { background-color: @base05; color: @base00; } #idle_inhibitor.activated:hover { box-shadow: inset 0 -3px @base00; } #laptop, #privacy { padding: 0em; } #privacy-item.screenshare { background-color: @base00; color: @base0C; } #privacy-item.audio-in { background-color: @base00; color: @base0E; } #privacy-item.audio-out { background-color: @base; } ''; }; programs.walker = { enable = true; package = pkgs.walker; runAsService = true; config = { activation_mode.labels = "neiotsra"; # theme = "stylix"; as_window = false; builtins = { applications = { actions = {enabled = true;}; context_aware = true; name = "applications"; placeholder = "Applications"; prioritize_new = true; refresh = true; show_generic = false; show_icon_when_single = true; show_sub_when_single = true; weight = 5; }; calc = { icon = "accessories-calculator"; min_chars = 4; name = "calc"; placeholder = "Calculator"; weight = 5; }; clipboard = { image_height = 300; max_entries = 10; name = "clipboard"; placeholder = "Clipboard"; switcher_only = true; weight = 5; }; commands = { icon = "utilities-terminal"; name = "commands"; placeholder = "Commands"; switcher_only = true; weight = 5; }; custom_commands = { icon = "utilities-terminal"; name = "custom_commands"; placeholder = "Custom Commands"; weight = 5; }; dmenu = { name = "dmenu"; placeholder = "Dmenu"; switcher_only = true; weight = 5; }; emojis = { history = true; name = "emojis"; placeholder = "Emojis"; switcher_only = true; typeahead = true; weight = 5; }; finder = { concurrency = 8; icon = "folder"; ignore_gitignore = true; name = "finder"; placeholder = "Finder"; refresh = true; switcher_only = true; weight = 5; }; runner = { generic_entry = false; history = true; icon = "utilities-terminal"; name = "runner"; placeholder = "Runner"; refresh = true; typeahead = true; weight = 5; }; ssh = { history = true; icon = "preferences-system-network"; name = "ssh"; placeholder = "SSH"; refresh = true; switcher_only = true; weight = 5; }; switcher = { name = "switcher"; placeholder = "Switcher"; prefix = "/"; weight = 5; }; # websearch = { # engines = ["google"]; # icon = "applications-internet"; # name = "websearch"; # placeholder = "Websearch"; # weight = 5; # }; windows = { icon = "view-restore"; name = "windows"; placeholder = "Windows"; weight = 5; }; }; disable_click_to_close = false; force_keyboard_focus = true; list = { max_entries = 50; show_initial_entries = true; single_click = true; }; search = { delay = 0; force_keyboard_focus = true; history = true; placeholder = "Search..."; }; }; theme = { layout = { ui = { anchors = { bottom = false; left = false; right = false; top = false; }; window = { h_align = "center"; v_align = "center"; box = { width = 500; height = 300; h_align = "center"; v_align = "center"; spacing = 12; orientation = "vertical"; # margins = { # bottom = 200; # top = 200; # start = 200; # }; search = { margins = { # bottom = 0; # top = 0; start = 8; end = 8; }; spacing = 12; # v_align = "baseline"; h_align = "top"; h_expand = true; v_expand = true; }; scroll = { h_align = "fill"; v_align = "fill"; h_expand = false; overlay_scrolling = true; list = { # max_height = 300; margins = { bottom = 8; top = 0; start = 8; end = 8; }; always_show = true; v_align = "fill"; h_align = "bottom"; h_expand = false; v_expand = true; item = { icon.theme = "${config.gtk.iconTheme.name}"; spacing = 4; activation_label = { h_align = "end"; # v_align = "bottom"; h_expand = false; justify = "right"; spacing = 4; margins.end = 12; # x_align = 1; }; text = { h_align = "start"; h_expand = true; revert = true; wrap = true; }; }; }; }; }; }; }; }; style = '' @define-color base00 #${config.lib.stylix.colors.base00}; @define-color base01 #${config.lib.stylix.colors.base01}; @define-color base02 #${config.lib.stylix.colors.base02}; @define-color base03 #${config.lib.stylix.colors.base03}; @define-color base04 #${config.lib.stylix.colors.base04}; @define-color base05 #${config.lib.stylix.colors.base05}; @define-color base06 #${config.lib.stylix.colors.base06}; @define-color base07 #${config.lib.stylix.colors.base07}; @define-color base08 #${config.lib.stylix.colors.base08}; @define-color base09 #${config.lib.stylix.colors.base09}; @define-color base0A #${config.lib.stylix.colors.base0A}; @define-color base0B #${config.lib.stylix.colors.base0B}; @define-color base0C #${config.lib.stylix.colors.base0C}; @define-color base0D #${config.lib.stylix.colors.base0D}; @define-color base0E #${config.lib.stylix.colors.base0E}; @define-color base0F #${config.lib.stylix.colors.base0F}; #window, #box, #search, #password, #input, #typeahead, #spinner, #list, child, scrollbar, slider, #item, #text, #label, #sub, #activationlabel { all: unset; } #window { background: none; color: @base05; } #box { border-radius: 20px; border-width: 4px; border-color: @base0D; background: @base00; } #search { background: @base01; border-radius: 12px; padding: 8px; } #password, #input, #typeahead { background: none; box-shadow: none; border-radius: 12px; } #input > *:first-child, #typeahead > *:first-child { margin-right: 12px; border-radius: 12px; } /* #spinner { } */ #typeahead { color: @base05; } #input placeholder { opacity: 0.5; } #list { padding: 8px; border-radius: 12px; background: @base01; } child { box-shadow: none; } child:selected, child:hover { box-shadow: none; border-radius: 8px; background: @base02; } #item { padding: 4px; } /* #icon { } #text { } #label { } */ #sub { font-size: smaller; opacity: 0.5; } #activationlabel { opacity: 0.5; } .activation #activationlabel { opacity: 1; color: @base05; } .activation #text, .activation #icon, .activation #search { opacity: 0.5; } ''; }; }; programs.wpaperd.enable = true; home.packages = with pkgs; [ niri nautilus helvum loupe evince celluloid junction swayidle swaylock-effects libnotify playerctl wdisplays pwvucontrol wl-clipboard-rs polkit_gnome xwayland-satellite ]; gtk = { enable = true; iconTheme = { name = "Papirus-Dark"; package = pkgs.papirus-icon-theme; }; }; qt = { enable = true; # platformTheme.name = "gtk3"; }; dconf.settings = { "org/gnome/desktop/interface" = { icon-theme = "${config.gtk.iconTheme.name}"; }; }; xdg.mime.enable = true; xdg.mimeApps = { enable = true; defaultApplications = let file_manager = ["org.gnome.Nautilus.desktop"]; web_browser = ["re.sonny.Junction.desktop"]; image_viewer = ["org.gnome.Loupe.desktop"]; video_player = ["io.github.celluloid_player.Celluloid.desktop"]; pdf_reader = ["org.gnome.Evince.desktop"]; in { "inode/directory" = file_manager; "video/x-matroska" = video_player; "video/mp4" = video_player; "video/mpeg" = video_player; "video/x-mpeg" = video_player; "image/png" = image_viewer; "image/jpeg" = image_viewer; "application/pdf" = pdf_reader; "text/html" = web_browser; "x-scheme-handler/http" = web_browser; "x-scheme-handler/https" = web_browser; "x-scheme-handler/about" = web_browser; "x-scheme-handler/unknown" = web_browser; }; }; systemd.user.settings.Manager.DefaultEnvironment = { # QT_QPA_PLATFORMTHEME = "gtk3"; QT_QPA_PLATFORM = "wayland"; DISPLAY = ":123"; }; systemd.user.targets.tray = { # workaround for udiskie Unit = { Description = "Home Manager System Tray"; }; }; systemd.user.services = { udiskie = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; }; waybar = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; }; copyq = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; Service = { Environment = lib.mkForce "QT_QPA_PLATFORM=wayland"; Restart = "on-failure"; RestartSec = 1; TimeoutStopSec = 10; }; }; wpaperd = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; Service = { Type = "simple"; ExecStart = "${pkgs.wpaperd}/bin/wpaperd"; Restart = "on-failure"; RestartSec = 1; TimeoutStopSec = 10; }; }; network-manager-applet = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; }; gnome-polkit-agent = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; Service = { Type = "simple"; ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; Restart = "on-failure"; RestartSec = 1; TimeoutStopSec = 10; }; }; wlsunset = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; }; hypridle = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; }; xwayland-satellite = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["niri.service"]; }; Service = { Type = "simple"; ExecStart = "${pkgs.xwayland-satellite}/bin/xwayland-satellite :123"; Restart = "on-failure"; RestartSec = 1; TimeoutStopSec = 10; }; }; }; }; }