{ lib, config, pkgs, ... }: with lib; let cfg = config.local.polybar; inherit (config.services.polybar) package; themeCfg = config.local.theme; exchangerate_unwrapped = pkgs.writeShellScriptBin "exchangerate" (builtins.readFile (pkgs.substituteAll ({ src = ./scripts/exchangerate.sh; } // themeCfg.highlights))); exchangerate = pkgs.symlinkJoin { name = "exchangerate"; paths = [ exchangerate_unwrapped ] ++ (with pkgs; [ curl gnugrep gnused coreutils ]); buildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/exchangerate --prefix PATH : @out/bin ''; }; in { options.local.polybar = with lib; { wifiDevice = mkOption { type = types.str; example = "wlp11s0f3u2"; description = "Set your wifi device"; }; }; config = { 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"; in { settings = { pseudo-transparency = true; }; "bar/main" = { monitor = "\${env:MONITOR:DisplayPort-1}"; font = [ "Fira Code:size=9:antialias=true;${fontVerticalOffset}" "Fira Code:bold:size=9:antialias=true;${fontVerticalOffset}" "FiraCode Nerd Font Mono:size=9:antialias=true;${fontVerticalOffset}" "FiraCode Nerd Font Mono:size=14:antialias=true;${fontVerticalOffset}" ]; modules = { left = "xmonad"; center = "date wifi"; 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; }; "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.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-} "; foreground = themeCfg.highlights.success; }; format.discharging = { inherit padding; text = "%{T3}%{T-} "; foreground = themeCfg.highlights.warning; }; format.full = { inherit padding; text = "%{T3}%{T-} "; foreground = themeCfg.highlights.success; }; format.low = { inherit padding; text = "%{T3}%{T-} "; foreground = themeCfg.highlights.critical; }; # Only applies if is used ramp.capacity = [ "" "" "" "" "" ]; }; "module/wifi" = { type = "internal/network"; interval = 3; interface = { type = "wireless"; text = cfg.wifiDevice; }; label.connected = "%essid% %signal%"; format.connected = { prefix = "| %{T4}%{T-} "; suffix = "%"; }; }; "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; }; }; } ; }; }; }