{ lib, config, pkgs, ... }: with lib; let cfg = config.local.window-manager.polybar; inherit (config.services.polybar) package; themeCfg = config.local.themes."${config.local.theme.name}"; exchangerate = import ./scripts/exchangerate.nix { inherit themeCfg pkgs; }; external_ip = import ./scripts/external_ip.nix { inherit themeCfg pkgs; }; in { options.local.window-manager.polybar = with lib; { enable = mkEnableOption "polybar"; wifiDevice = mkOption { type = types.str; example = "wlp11s0f3u2"; description = "Set your wifi device"; }; }; config = lib.mkIf cfg.enable { systemd.user.services.polybar = { # Add additional /usr/bin to run custom scripts Service.Environment = mkForce "PATH=${package}/bin:/run/current-system/sw/bin"; }; services.polybar = { enable = true; script = "MONITOR=$(xrandr | grep \"connected primary\" | awk '{print $1;}') polybar &"; settings = let padding = 1; # See: https://github.com/polybar/polybar/issues/478 fontVerticalOffset = 2; mkFont = fontconfig: fontconfig + ";${toString fontVerticalOffset}"; in { settings = { pseudo-transparency = true; }; "bar/main" = { monitor = "\${env:MONITOR:DisplayPort-1}"; font = map mkFont [ "Fira Code:size=9:antialias=true" "Fira Code:bold:size=9:antialias=true" "FiraCode Nerd Font Mono:size=9:antialias=true" "FiraCode Nerd Font Mono:size=14:antialias=true" ]; modules = { left = "xmonad"; center = "date wifi external_ip"; right = "exchangerate volume battery lang time"; }; offset-x = "6px"; offset-y = "6px"; width = "100%:-12px"; height = "26px"; padding = 1; radius = 6.0; background = themeCfg.bar.background; foreground = themeCfg.bar.mainText; enable-ipc = true; }; "module/date" = { type = "internal/date"; interval = 10; date = "%a %d %b %Y"; label = "%date%"; format = { inherit padding; }; }; "module/time" = { type = "internal/date"; time = "%H:%M:%S"; label = { text = "%time%"; font = 2; foreground = themeCfg.highlights.warning; }; }; "module/lang" = { type = "internal/xkeyboard"; format = { inherit padding; text = "<label-layout>"; }; label.layout.font = 2; }; "module/volume" = { type = "custom/script"; exec = "${./scripts/get_volume.sh}"; interval = 1; format = { inherit padding; prefix = "%{T4}%{T-} "; }; }; "module/battery" = { type = "internal/battery"; full-at = 99; low-at = 10; battery = "BAT0"; adapter = "AC0"; format.charging = { inherit padding; text = "%{T3}%{T-} <label-charging>"; foreground = themeCfg.highlights.success; }; format.discharging = { inherit padding; text = "%{T3}<ramp-capacity>%{T-} <label-discharging>"; foreground = themeCfg.highlights.warning; }; format.full = { inherit padding; text = "%{T3}%{T-} <label-full>"; foreground = themeCfg.highlights.success; }; format.low = { inherit padding; text = "%{T3}%{T-} <label-low>"; foreground = themeCfg.highlights.critical; }; # Only applies if <ramp-capacity> is used ramp.capacity = [ "" "" "" "" "" ]; }; "module/wifi" = { type = "internal/network"; interval = 3; interface = { type = "wireless"; text = cfg.wifiDevice; }; label.connected = "%essid% %local_ip%"; format.connected = { prefix = "| %{T4}%{T-} "; suffix = " |"; }; }; "module/external_ip" = { type = "custom/script"; exec = "${external_ip}/bin/external_ip"; interval = 60; format = { inherit padding; }; }; "module/xmonad" = mkIf config.xsession.windowManager.xmonad.enable { type = "custom/script"; exec = "${pkgs.xmonad-log}/bin/xmonad-log"; tail = true; }; "module/exchangerate" = { type = "custom/script"; exec = "${exchangerate}/bin/exchangerate"; interval = 60; format = { inherit padding; prefix = "USD: "; }; }; "global/wm" = { margin = { bottom = 0; top = 0; }; }; } ; }; }; }