os/shared/home/gui/waybar.nix

164 lines
3.6 KiB
Nix

{ config, lib, ... }:
let cfg = config.custom.gui.bar;
in {
options.custom.gui.bar = with lib; with types; {
network.wifi = lib.mkOption {
type = str;
default = "";
};
network.eth = lib.mkOption {
type = str;
default = "";
};
network.vpn = lib.mkOption {
type = str;
default = "";
};
audio.wireplumber = lib.mkOption {
type = bool;
default = true;
};
};
config = {
programs.waybar = {
enable = true;
systemd = {
enable = true;
target = "sway-session.target";
};
settings = [{
layer = "top";
modules-left = [
"sway/workspaces"
"sway/mode"
];
modules-right = lib.flatten [
"cpu"
"disk"
(lib.optional (cfg.network.wifi != "") "network#wifi")
(lib.optional (cfg.network.eth != "") "network#eth")
(lib.optional (cfg.network.vpn != "") "network#vpn")
(if cfg.audio.wireplumber
then "wireplumber"
else "pulseaudio")
"clock#date"
"clock#time"
];
"clock#time" = {
"format" = "{:%H:%M:%S}";
"interval" = 1;
};
"clock#date" = {
"format" = "{:%Y-%m-%d}";
"interval" = 60;
};
"network#wifi" = {
"interface" = cfg.network.wifi;
};
"network#eth" = {
"interface" = cfg.network.eth;
};
"network#vpn" = {
"interface" = cfg.network.vpn;
};
"wireplumber" = {
"format" = "{node_name}: {volume}%";
};
"disk" = {
"format" = "{used} :: {free}";
};
}];
style = ''
* {
font-family: 'Fira Code';
font-weight: 700;
font-size: 12px;
}
window#waybar {
background-color: rgba(0,0,0,0.7);
}
#workspaces {
margin-left: 5px;
background-color: rgba(0, 0, 0, 0.6);
padding: 0;
margin: 5px;
border-radius: 200px;
}
#workspaces button {
color: #ffffff;
margin: 0;
padding: 0 5px;
border-radius: 100px;
font-size: 0;
background-color: rgba(0, 0, 0, 0.4);
}
#workspaces button.visible.focused {
background-color: #ff4787;
}
#workspaces button.visible {
color: #ffffff;
background-color: rgba(207, 207, 207, 0.4);
}
#mode {
padding: 2px 10px;
margin: 5px;
border-radius: 100px;
background-color: #1bcf9c;
font-weight: 600;
}
#clock {
padding: 2px 10px;
margin: 5px;
border-radius: 100px;
color: #ffffff;
background-color: #3988e3;
}
#clock.date {
background-color: transparent;
}
#network {
padding: 2px 10px;
margin: 5px;
border-radius: 100px;
background-color: #27e67a;
}
#wireplumber, #pulseaudio {
padding: 2px 10px;
margin: 5px;
border-radius: 100px;
background-color: #edd340;
}
#wireplumber.muted, #pulseaudio.muted {
color: #ffffff;
background-color: rgba(207, 207, 207, 0.4);
}
#cpu, #disk {
padding: 2px 10px;
margin: 5px;
border-radius: 100px;
color: #ffffff;
background-color: rgba(0, 0, 0, 0.4);
}
'';
};
};
}