nix_config/home/modules/gui/waybar.nix

183 lines
4.7 KiB
Nix

{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.gui;
in {
config = mkIf cfg.enable {
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
height = 20;
spacing = 0;
modules-left = [
"sway/workspaces"
"sway/mode"
];
modules-center = [
"clock"
];
modules-right = [
"privacy"
"cpu"
"memory"
"disk"
"temperature"
"keyboard-state"
"tray"
];
"keyboard-state" = {
numlock = true;
capslock = true;
};
"tray" = {
icon-size = 13;
spacing = 8;
};
"clock" = {
interval = 60;
format = "{:%A %B %d %Y %H:%M}";
tooltip = false;
};
"cpu" = {
format = "cpu {usage}%";
tooltip = false;
};
"memory" = {
format = "mem {percentage}%";
tooltip = true;
tooltip-format = "{used}/{total}";
};
"disk" = {
format = "disk {specific_used:0.0f}/{specific_total:0.0f}";
unit = "GiB";
tooltip = false;
};
"privacy" = {
icon-size = 12;
};
};
};
style = ''
* {
font-family: "JetBrains Mono", monospace;
font-size: 12px;
font-weight: 500;
border: none;
box-shadow: none;
}
/* Entire bar: fully transparent, no border */
window#waybar {
background: transparent;
color: #eaeaea;
margin: 0;
padding: 0;
}
/* Optional: small edge breathing room (comment out if you want edge-to-edge) */
/* window#waybar { margin: 3px 6px 0 6px; } */
/* Module containers */
.modules-left, .modules-center, .modules-right {
padding: 0;
margin: 0 6px;
}
/* Subtle separators between modules (no boxes) */
.modules-left > widget:not(:first-child),
.modules-center > widget:not(:first-child),
.modules-right > widget:not(:first-child) {
margin-left: 12px;
padding-left: 12px;
border-left: 1px solid rgba(255, 255, 255, 0.08);
}
/* Tightest possible workspaces */
#workspaces { padding: 0; margin: 0; }
#workspaces button {
margin: 0;
padding: 0 3px;
min-width: 0;
border-radius: 0;
background: transparent;
color: #cfcfcf;
}
#workspaces button:hover {
background: rgba(255, 255, 255, 0.06);
}
#workspaces button.active,
#workspaces button.focused {
background: rgba(255, 255, 255, 0.10);
color: #ffffff;
border-bottom: 2px solid #ffffff;
}
#workspaces button.urgent {
background: rgba(255, 80, 80, 0.25);
border-bottom: 2px solid #ff5050;
}
/* Focused window title: single line, no glow */
#window {
padding: 0 6px;
margin: 0;
color: #dedede;
}
/* Sway mode indicator: visible only when active, no bloat */
#mode {
padding: 0 6px;
margin: 0;
background: rgba(255, 255, 255, 0.10);
color: #ffffff;
border-bottom: 2px solid #ffffff;
}
/* Status modules keep them flat and compact */
#clock, #battery, #network, #pulseaudio, #backlight, #cpu, #memory, #temperature, #tray {
padding: 0 6px;
margin: 0;
background: transparent;
color: #eaeaea;
}
/* States (battery, network, audio) */
#battery.charging { color: #c9ffbf; }
#battery.warning:not(.charging) { color: #ffd29a; }
#battery.critical:not(.charging) { color: #ff9a9a; }
#network.disconnected { color: #ffb4b4; }
#pulseaudio.muted { color: #9aa0a6; }
/* Tray: compress icons */
#tray > .passive { opacity: 0.6; }
#tray > .needs-attention { opacity: 1; }
/* Tooltips: clean and readable */
tooltip {
background: rgba(30, 30, 30, 0.95);
border: 1px solid rgba(255, 255, 255, 0.08);
color: #eaeaea;
padding: 6px 8px;
}
/* Remove any leftover borders around everything */
#custom-*, #idle_inhibitor, #privacy, #bluetooth {
border: none;
background: transparent;
margin: 0;
padding: 0 6px;
}
'';
};
};
}