192 lines
5.2 KiB
Nix
192 lines
5.2 KiB
Nix
{ 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;
|
|
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";
|
|
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>";
|
|
};
|
|
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% %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;
|
|
};
|
|
};
|
|
}
|
|
;
|
|
};
|
|
};
|
|
}
|