{ config, osConfig, pkgs, lib, font, ... }: let inherit (config.my) key theme accent font ; inherit (theme) color; in { config = { programs.waybar = { enable = true; systemd.enable = true; systemd.target = "sway-session.target"; settings = [ { layer = "top"; modules-left = [ "sway/workspaces" "sway/mode" "sway/window" ]; modules-center = [ "clock" ]; modules-right = lib.flatten [ "sway/language" "mpd" "custom/playerctl" "tray" "custom/controller-battery" "custom/caffeine" "pulseaudio" (lib.optional (osConfig.services.vpn.enable or false) "custom/vpn") "network" "battery" ]; battery = { tooltip = true; states = { full = 100; good = 95; warning = 25; }; format = "{icon} "; format-charging = ""; format-plugged = ""; format-full = ""; format-warning = "{icon} {time}"; format-icons = [ "" "" "" "" "" "" ]; }; network = { interval = 5; tooltip = false; on-click = "terminal -e iwd"; format-wifi = "{icon}"; format-icons = [ "" "" "" "" "" ]; format-ethernet = ""; format-linked = ""; format-disconnected = ""; }; "sway/workspaces" = { enable-bar-scroll = true; format = "{icon}"; format-icons = { "1" = ""; "2" = ""; "3" = ""; "4" = ""; "5" = ""; "6" = ""; "7" = ""; "8" = ""; "9" = ""; "10" = ""; urgent = ""; # focused = ""; default = ""; }; }; "sway/window" = { max-length = 40; }; "tray" = { "spacing" = 7; "icon-size" = 19; }; clock = { interval = 60; format = "<b>{:L%H:%M %a %d/%m}</b>"; tooltip-format = "<tt><small>{calendar}</small></tt>"; calendar = { mode = "year"; mode-mon-col = 3; weeks-pos = "right"; on-scroll = 1; on-click-right = "mode"; format = { months = "<span color='${color.normal.magenta}'><b>{}</b></span>"; days = "<span color='${color.txt}'><b>{}</b></span>"; weeks = "<span color='${color.normal.cyan}'><b>W{}</b></span>"; weekdays = "<span color='${color.normal.yellow}'><b>{}</b></span>"; today = "<span color='${accent.color}'><b><u>{}</u></b></span>"; }; }; actions = { on-click-right = "mode"; on-click-forward = "tz_up"; on-click-backward = "tz_down"; on-scroll-up = "shift_up"; on-scroll-down = "shift_down"; }; }; mpd = let mpc = "${pkgs.mpc-cli}/bin/mpc"; in { format = "{stateIcon} {title} - {artist}"; format-paused = "{stateIcon}"; format-stopped = ""; state-icons = { paused = ""; playing = ""; }; tooltip = false; on-click = "${mpc} toggle"; on-scroll-up = "${mpc} vol +10"; on-scroll-down = "${mpc} vol -10"; }; "custom/playerctl" = { format = "{} "; exec = "${pkgs.playerctl-status}/bin/playerctl-status"; on-click = "${pkgs.playerctl}/bin/playerctl --ignore-player=mpd play-pause"; interval = 1; tooltip = false; }; "sway/language" = { format = "{short} {variant}"; }; "custom/controller-battery" = { format = "{}"; exec = lib.getExe pkgs.controller-battery; interval = 1; tooltip = false; }; "custom/caffeine" = { format = "{}"; exec = "systemctl --user status swayidle > /dev/null && echo || echo "; on-click = "${pkgs._sway_idle_toggle}/bin/_sway_idle_toggle"; interval = 1; tooltip = false; }; "custom/vpn" = lib.mkIf (osConfig.services.vpn.enable or false) { format = "{}"; exec = '' ${pkgs.mullvad}/bin/mullvad status | ${pkgs.gnugrep}/bin/grep "^Connected" > /dev/null \ && echo "" \ || echo "" ''; on-click = "mullvad connect"; on-click-right = "mullvad disconnect"; interval = 1; tooltip = false; }; pulseaudio = { interval = 5; tooltip = false; scroll-step = 10; format = "{icon}"; format-bluetooth = ""; format-bluetooth-muted = ""; format-muted = ""; format-icons = { "rtp-sink" = [ "" "" "" ]; "alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.analog-stereo" = [ " " " " " " ]; "alsa_output.pci-0000_09_00.4.analog-stereo" = [ " " " " " " ]; headphone = [ " " " " " " ]; handsfree = ""; headset = ""; phone = ""; portable = ""; car = ""; default = [ "" "" "" ]; }; on-click = "pavucontrol"; on-click-right = "${pkgs.pulse_sink}/bin/pulse_sink"; on-scroll-up = "${pkgs.volumesh}/bin/volumesh -i 10"; on-scroll-down = "${pkgs.volumesh}/bin/volumesh -d 10"; }; } ]; style = builtins.readFile ( pkgs.substituteAll { src = ./style.css; accent_color = accent.color; color_bg = color.bg; color_bg_dark = color.bg_dark; color_bg_light = color.bg_light; color_txt = color.txt; font_interface = font.interface; font_size_big = "${toString font.size.big}px"; font_size_medium = "${toString font.size.medium}px"; } ); }; home.packages = with pkgs; [ waybar ]; }; }