{ config, pkgs, # pkgs-51b85c, lib, ... }: { # imports = [./walker.nix]; stylix.targets.sway.enable = true; wayland.windowManager.sway = { enable = true; systemd.enable = true; # xwayland.enable = false; wrapperFeatures.gtk = true; config = let modifier = "Mod4"; terminal = "ghostty"; launcher = "walker"; clipboard = "copyq toggle"; left = "n"; down = "e"; up = "i"; right = "o"; in { bars = [ { command = "${lib.getExe pkgs.waybar}"; } ]; modifier = "${modifier}"; terminal = "${terminal}"; menu = "${launcher}"; left = "${left}"; down = "${down}"; up = "${up}"; right = "${right}"; workspaceLayout = "tabbed"; input = { "*" = { xkb_layout = "us,ua"; repeat_delay = "200"; repeat_rate = "50"; accel_profile = "flat"; }; "type:touchpad" = { tap = "enabled"; scroll_method = "two_finger"; }; }; output = { "Samsung Electric Company S24R65x H4TMA03291" = { mode = "1920x1080@74.973Hz"; pos = "0 0"; adaptive_sync = "on"; allow_tearing = "yes"; max_render_time = "off"; }; "AOC 27V2G5 0x0000026C" = { pos = "1920 0"; }; }; keybindings = lib.mkForce { "${modifier}+Ctrl+q" = "kill"; "${modifier}+Ctrl+Escape" = "exit"; "${modifier}+Ctrl+r" = "reload"; "${modifier}+Ctrl+${left}" = "move left"; "${modifier}+Ctrl+${down}" = "move down"; "${modifier}+Ctrl+${up}" = "move up"; "${modifier}+Ctrl+${right}" = "move right"; "${modifier}+Ctrl+left" = "move left"; "${modifier}+Ctrl+down" = "move down"; "${modifier}+Ctrl+up" = "move up"; "${modifier}+Ctrl+right" = "move right"; "${modifier}+Ctrl+1" = "move window workspace 1"; "${modifier}+Ctrl+2" = "move window workspace 2"; "${modifier}+Ctrl+3" = "move window workspace 3"; "${modifier}+Ctrl+4" = "move window workspace 4"; "${modifier}+Ctrl+5" = "move window workspace 5"; "${modifier}+Ctrl+6" = "move window workspace 6"; "${modifier}+Ctrl+7" = "move window workspace 7"; "${modifier}+Ctrl+8" = "move window workspace 8"; "${modifier}+Ctrl+9" = "move window workspace 9"; "${modifier}+Ctrl+0" = "move window workspace 10"; "${modifier}+Ctrl+l" = "move window workspace prev"; "${modifier}+Ctrl+y" = "move window workspace next"; "${modifier}+Shift+${left}" = "focus output left"; "${modifier}+Shift+${down}" = "focus output down"; "${modifier}+Shift+${up}" = "focus output up"; "${modifier}+Shift+${right}" = "focus output right"; "${modifier}+Shift+left" = "focus output left"; "${modifier}+Shift+down" = "focus output down"; "${modifier}+Shift+up" = "focus output up"; "${modifier}+Shift+right" = "focus output right"; "${modifier}+Return" = "exec ${terminal}"; "${modifier}+Shift+v" = "exec ${clipboard}"; "${modifier}+Space" = "exec ${launcher}"; "${modifier}+c" = "splith"; "${modifier}+d" = "splitv"; "${modifier}+s" = "layout toggle split"; "${modifier}+t" = "layout tabbed"; "${modifier}+h" = "focus mode_toggle"; "${modifier}+f" = "floating toggle"; "${modifier}+m" = "fullscreen toggle"; "${modifier}+g" = "sticky toggle"; "${modifier}+b" = "bar mode toggle"; "--locked ${modifier}+Escape" = "exec swaymsg input \"*\" xkb_switch_layout next"; "Print" = ''exec ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp -o -r -c '#ff0000ff')" -t ppm - | ${pkgs.satty}/bin/satty --filename - --fullscreen --output-filename ~/pics/screenshots/satty-$(date '+%Y%m%d-%H:%M:%S').png''; "${modifier}+1" = "workspace 1"; "${modifier}+2" = "workspace 2"; "${modifier}+3" = "workspace 3"; "${modifier}+4" = "workspace 4"; "${modifier}+5" = "workspace 5"; "${modifier}+6" = "workspace 6"; "${modifier}+7" = "workspace 7"; "${modifier}+8" = "workspace 8"; "${modifier}+9" = "workspace 9"; "${modifier}+0" = "workspace 10"; "${modifier}+l" = "workspace prev"; "${modifier}+y" = "workspace next"; "${modifier}+${left}" = "focus left"; "${modifier}+${down}" = "focus down"; "${modifier}+${up}" = "focus up"; "${modifier}+${right}" = "focus right"; "${modifier}+left" = "focus left"; "${modifier}+down" = "focus down"; "${modifier}+up" = "focus up"; "${modifier}+right" = "focus right"; }; window = { border = 1; # hideEdgeBorders = "smart"; }; gaps = { # top = 6; # bottom = 6; # left = 6; # right = 6; outer = 6; inner = 3; }; floating.criteria = [ { app_id = "com.github.hluk.copyq"; } { app_id = "com.saivert.pwvucontrol"; } ]; }; }; programs.swaylock.enable = true; services.swayidle = { enable = true; systemdTarget = "sway-session.target"; timeouts = [ { timeout = 300; command = "${pkgs.swaylock}/bin/swaylock -fF"; } { timeout = 301; command = "${pkgs.sway}/bin/swaymsg \"output * dpms off\""; resumeCommand = "${pkgs.sway}/bin/swaymsg \"output * dpms on\""; } ]; events = [ { event = "lock"; command = "${pkgs.swaylock}/bin/swaylock -fF &&"; } { event = "unlock"; command = "${pkgs.procps}/bin/pkill -SIGUSR1 swaylock"; } { event = "lock"; command = "${pkgs.swaylock}/bin/swaylock -fF & ${pkgs.playerctl}/bin/playerctl pause"; } ]; }; services.playerctld.enable = true; services.gnome-keyring = { enable = true; components = ["secrets" "ssh"]; }; services.ssh-agent.enable = true; programs.keychain = { enable = true; keys = ["id_ed25519"]; enableNushellIntegration = true; extraFlags = [ "--quiet" "--noask" ]; }; services = { network-manager-applet.enable = true; blueman-applet.enable = true; copyq.enable = true; }; qt = { enable = true; platformTheme.name = "gtk3"; #style.name = "gtk2"; }; stylix.targets.waybar.enable = false; programs.waybar = { enable = true; #package = pkgs.waybar-0.11.0"; # systemd = { # enable = true; # target = "graphical-session.target"; # }; settings = { bar-0 = { ipc = true; id = "bar-0"; layer = "top"; position = "bottom"; height = 32; spacing = 6; # margin-top = 8; margin-left = 8; margin-right = 8; margin-bottom = 8; reload_style_on_change = true; modules-left = [ #"custom/notification" "group/sway" "wlr/taskbar" ]; modules-center = ["clock"]; modules-right = [ "privacy" "tray" "wireplumber" # "group/laptop" "idle_inhibitor" ]; "sway/workspaces" = { format = "{icon}"; format-icons = { "1" = "I"; "2" = "II"; "3" = "III"; "4" = "IV"; "5" = "V"; "6" = "VI"; "7" = "VII"; "8" = "IIX"; "9" = "IX"; "10" = "X"; #focused = "󰗝"; #active = "󰻃"; #default = "󰄰"; }; }; "sway/language" = { format = "{flag}"; tooltip-format = "{long}"; on-click = "swaymsg input type:keyboard xkb_switch_layout next"; }; "group/sway" = { orientation = "inherit"; modules = [ "sway/language" "sway/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" "custom/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}"; }; # "custom/backlight" = { # format = "{}% {icon}"; # interval = 1; # format-icons = ["󰃠"]; # }; # "custom/kbd-backlight" = { # exec = "brightnessctl s 5%+"; # interval = 1; # format = "{}% {icon}"; # format-icons = ["󰌌"]; # on-scroll-up = "~/.local/bin/keyboard-brightness.nu increase"; # on-scroll-down = "~/.local/bin/keyboard-brightness.nu decrease"; # }; # 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 = "${pkgs.pwvucontrol}/bin/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: ${config.stylix.fonts.sansSerif.name}, FontAwesome; font-weight: 500; font-size: 100%; /* margin: 0px 2px 2px 2px; */ } window#waybar { background-color: @base00; border: 1px solid @base0D; /* border-top: 3px solid @overlay0; */ color: @base05; /* padding: 0px 2px 0px 0px; */ transition-property: background-color; transition-duration: 0.5s; } .modules-left, .modules-center, .modules-right { padding: 1px; margin-left: 4px; margin-right: 4px; } 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-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.5em; color: @base05; background-color: @base00; } /* #upower, #battery, #backlight, #custom-kbd-backlight, #backlight-slider, #cpu, #memory, #disk, #network, #wireplumber, #power-profiles-daemon { padding-right: 0.5em; } */ #taskbar button, #workspaces button { padding: 0 0.2em; } #workspaces button.focused, #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: @base0D; } #power-profiles-daemon.balanced { background-color: @base00; color: @base0B; } #power-profiles-daemon.power-saver { background-color: @base00; color: @base0A; } label:focus { background-color: #000000; } #tray > .passive { -gtk-icon-effect: dim; } #tray > .needs-attention { -gtk-icon-effect: highlight; background-color: @base08; } #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.rofi = { enable = true; theme = { window = { height = 360; border = 3; }; inputbar = { children = ["prompt" "entry"]; border-radius = 5; padding = 2; }; prompt = { padding = 6; border-radius = 3; margin = "20px 0px 0px 20px"; }; textbox-prompt-colon = { expand = false; str = "~>"; }; entry = { padding = 6; margin = "20px 0px 0px 10px"; }; listview = { border = "0px 0px 0px"; padding = "6px 0px 0px"; margin = "10px 0px 0px 20px"; columns = 2; lines = 5; }; element = { padding = 5; }; element-icon = { size = 25; }; mode-switcher = { spacing = 0; }; button = { padding = 10; vertical-align = "0.5"; horizontal-align = "0.5"; }; message = { margin = 2; padding = 2; border-radius = 5; }; textbox = { padding = 6; margin = "20 0 0 20"; }; }; extraConfig = { show-icons = true; modi = "run,drun,window"; kb-primary-paste = "Control+V,Shift+Insert"; kb-secondary-paste = "Control+v,Insert"; }; }; programs.fuzzel = { enable = true; settings = { main = { terminal = "wezterm -e"; fields = "filename,name,generic,keywords,categories,exec"; dpi-aware = false; horizontal-pad = 8; show-actions = true; match-mode = "fuzzy"; icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}"; }; border = { width = 2; radius = 4; }; }; }; services.dunst = { enable = true; settings = { global = { width = 300; height = 300; icon_theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}"; corner_radius = 4; #corners = "top-right,bottom-left"; offset = "16x16"; origin = "bottom-right"; timeout = 15; frame_width = 2; notification_limit = 5; }; rule-telegram = { "desktop_entry" = "org.telegram.desktop"; "urgency" = "normal"; }; }; }; services.wlsunset = { enable = true; latitude = "49.6"; longitude = "36.1"; temperature = { day = 6500; night = 3000; }; systemdTarget = "graphical-session.target"; }; services.udiskie = { enable = true; automount = false; notify = true; tray = "auto"; }; # services.flameshot = { # enable = true; # settings = { # General = { # buttons = "@Variant(000x7f000vQList0000x130000000x1000x2000x3000x4000x5000x6000x12000xf000x13000b000 000x10000000v000x17000xe000f000x11)"; # filenamePattern = "screenshot-%F_%H-%M-%S"; # saveAsFileExtension = "png"; # savePath = "/home/user/pics/screenshots"; # uiColor = "#${config.lib.stylix.colors.base0D}"; # showStartupLaunchMessage = false; # showDesktopNotification = false; # showHelp = false; # }; # }; # }; home.packages = with pkgs; [ nautilus helvum loupe evince celluloid mission-center dconf glib libnotify playerctl wdisplays pwvucontrol wl-clipboard-rs polkit_gnome libqalculate #papirus-icon-theme ]; xdg.userDirs = { enable = true; createDirectories = true; templates = "${config.home.homeDirectory}/temps"; publicShare = "${config.home.homeDirectory}/pub"; desktop = "${config.home.homeDirectory}/desktop"; download = "${config.home.homeDirectory}/downloads"; documents = "${config.home.homeDirectory}/docs"; pictures = "${config.home.homeDirectory}/pics"; videos = "${config.home.homeDirectory}/vids"; music = "${config.home.homeDirectory}/music"; }; xdg.mime.enable = true; xdg.mimeApps = { enable = true; defaultApplications = let file_manager = ["org.gnome.Nautilus.desktop"]; web_browser = ["io.github.zen_browser.zen.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; }; }; systemd.user.settings.Manager.DefaultEnvironment = { #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 = ["sway-session.target"]; }; }; # waybar = { # Unit = { # Description = "Swaync notification daemon"; # # }; # Unit = { # PartOf = ["graphical-session.target"]; # After = ["graphical-session.target"]; # Requisite = ["graphical-session.target"]; # }; # Install = { # WantedBy = ["sway-session.target"]; # }; # }; copyq = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["sway-session.target"]; }; Service = { Environment = lib.mkForce "QT_QPA_PLATFORM=wayland"; 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 = ["sway-session.target"]; }; }; gnome-polkit-agent = { Unit = { PartOf = ["graphical-session.target"]; After = ["graphical-session.target"]; Requisite = ["graphical-session.target"]; }; Install = { WantedBy = ["sway-session.target"]; }; 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 = ["sway-session.target"]; }; }; }; }