{ config, lib, options, ... }: { options.desktop.windowManager = lib.mkOption { type = with lib.types; nullOr (enum [ "swayfx" ]); }; config = { programs.waybar = { enable = lib.mkDefault (config.desktop.windowManager == "swayfx"); settings = { main = { modules-left = [ "sway/workspaces" "tray" ]; modules-center = [ "clock" ]; modules-right = [ "backlight" "battery" "wireplumber" "cpu" "memory" "network" ]; backlight = { format = "{icon}"; format-icons = [ "" "󰖨" ]; tooltip-format = "{percent}%"; }; battery = { format = "{icon}"; format-critical = "!! {capacity}% {icon} !!"; format-icons = [ "" "" "" "" ]; format-time = "{H}h{m}m"; format-warning = "{icon} ({capacity}%)"; states = { critical = 15; warning = 25; }; tooltip-format = "{time} remaining, {health}% battery health"; tooltip-format-critical = "plug yo shit in NOW!!"; }; cpu.format = "{avg_frequency} GHz"; clock = { format = "{:%A, %b %d %Y - %H:%M %Z}"; # i am the time god. fear me. timezones = [ "America/Toronto" "America/Vancouver" "America/Edmonton" "America/Regina" "America/Toronto" # duplicated so it appears in the list too "America/Halifax" "America/St_Johns" "America/Sao_Paulo" "Etc/UTC" "Australia/Perth" ]; tooltip-format = "{tz_list}"; }; memory = { format = "{used}/{total} GiB"; states = { critical = 90; warning = 70; }; tooltip-format = "{percentage}% used"; }; network = { format-disabled = "󰀝"; format-disconnected = "󰌙"; format-ethernet = "󰌗 {ipaddr}/{cidr}"; format-icons = [ "󰤟" "󰤢" "󰤥" "󰤨" ]; format-wifi = "{essid} {icon}"; interval = 15; tooltip-format = "{ifname} tx: {bandwidthUpBytes} rx: {bandwidthDownBytes}"; tooltip-format-wifi = "{ifname} ({ipaddr}/{cidr}) {signalStrength}% tx: {bandwidthUpBytes} rx: {bandwidthDownBytes}"; }; position = "bottom"; "sway/workspaces" = { all-outputs = true; disable-scroll = true; format = ""; persistent-workspaces = { "1" = []; "2" = []; "3" = []; "4" = []; "5" = []; "6" = []; "7" = []; "8" = []; "9" = []; }; }; wireplumber = { format = "{icon}"; format-icons = [ "󰕿" "󰖀" "󰕾" ]; format-muted = "󰸈"; on-click = "wpctl set-mute @DEFAULT_SINK@ toggle"; tooltip-format = "{node_name} - {volume}%"; }; }; }; style = builtins.readFile ./waybar.css; }; wayland.windowManager.sway = if (config.desktop.windowManager == "swayfx") then { enable = lib.mkForce true; package = null; # use the nixos module config = { bars = [ ]; bindswitches = { "lid:off" = { action = "output eDP-1 power on"; locked = true; }; "lid:on" = { action = "output eDP-1 power off"; locked = true; }; }; colors = # rose pine theme let gold = "#f6c177"; hl3 = "#524f67"; love = "#eb6f92"; muted = "#6e6a86"; nothing = "#00000000"; overlay = "#26233a"; rose = "#ebbcba"; subtle = "#908caa"; text = "#e0def4"; in { focused = { background = "${rose}"; border = "${rose}"; childBorder = "${rose}"; indicator = "${gold}"; text = "${hl3}"; }; focusedInactive = { background = "${muted}"; border = "${nothing}"; childBorder = "${nothing}"; indicator = "${nothing}"; text = "${text}"; }; unfocused = { background = "${overlay}"; border = "${nothing}"; childBorder = "${nothing}"; indicator = "${nothing}"; text = "${subtle}"; }; urgent = { background = "${love}"; border = "${love}"; childBorder = "${love}"; indicator = "${love}"; text = "${text}"; }; }; floating.titlebar = false; focus.followMouse = false; fonts = { names = [ "Fira Code" ]; size = 8.0; }; gaps = { inner = 4; outer = 8; }; input = { "*" = { accel_profile = "flat"; }; "type:touchpad" = { drag = "enabled"; dwt = "enabled"; natural_scroll = "enabled"; tap = "enabled"; }; }; keybindings = let mod = config.wayland.windowManager.sway.config.modifier; in { "${mod}+Return" = "exec foot"; "${mod}+Q" = "kill"; "${mod}+Alt+Q" = "exit"; "${mod}+V" = "splitt"; "${mod}+H" = "focus left"; "${mod}+J" = "focus down"; "${mod}+K" = "focus up"; "${mod}+L" = "focus right"; "${mod}+Shift+H" = "move left"; "${mod}+Shift+J" = "move down"; "${mod}+Shift+K" = "move up"; "${mod}+Shift+L" = "move right"; "${mod}+Minus" = "resize shrink width 5"; "${mod}+Shift+Equal" = "resize grow height 5"; "${mod}+Shift+Minus" = "resize shrink height 5"; "${mod}+Equal" = "resize grow width 5"; "${mod}+1" = "workspace 1"; "${mod}+2" = "workspace 2"; "${mod}+3" = "workspace 3"; "${mod}+4" = "workspace 4"; "${mod}+5" = "workspace 5"; "${mod}+6" = "workspace 6"; "${mod}+7" = "workspace 7"; "${mod}+8" = "workspace 8"; "${mod}+9" = "workspace 9"; "${mod}+Shift+1" = "move workspace 1"; "${mod}+Shift+2" = "move workspace 2"; "${mod}+Shift+3" = "move workspace 3"; "${mod}+Shift+4" = "move workspace 4"; "${mod}+Shift+5" = "move workspace 5"; "${mod}+Shift+6" = "move workspace 6"; "${mod}+Shift+7" = "move workspace 7"; "${mod}+Shift+8" = "move workspace 8"; "${mod}+Shift+9" = "move workspace 9"; "${mod}+F" = "floating toggle"; "${mod}+G" = "layout toggle split tabbed"; "${mod}+R" = "exec fuzzel"; "XF86AudioRaiseVolume" = "exec wpctl set-volume @DEFAULT_SINK@ 5%+ -l 1"; "XF86AudioLowerVolume" = "exec wpctl set-volume @DEFAULT_SINK@ 5%- -l 1"; "XF86AudioMute" = "exec wpctl set-mute @DEFAULT_SINK@ toggle"; "XF86MonBrightnessUp" = "exec brightnessctl --class=backlight s +10%"; "XF86MonBrightnessDown" = "exec brightnessctl --class=backlight s 10%-"; "Shift+XF86MonBrightnessUp" = "exec brightnessctl --device=chromeos::kbd_backlight s +10%"; "Shift+XF86MonBrightnessDown" = "exec brightnessctl --device=chromeos::kbd_backlight s 10%-"; "XF86RFKill" = "exec rfkill toggle 1"; }; modes = { }; modifier = "Mod4"; output = { "eDP-1" = { background = "~/Pictures/blossoms.jpg fill"; mode = "2256x1504@60Hz"; position = "0 0"; scale = "1.5"; }; }; window.titlebar = false; }; # inactive windows cast no shadow to avoid rendering shadows on top of # the active window extraConfig = '' blur enable blur_xray enable corner_radius 10 shadows enable shadow_inactive_color #00000000 exec waybar ''; } else { }; }; }