infra/nix/hosts/z/modules/desktop/waybar.nix
2026-01-05 23:09:19 +01:00

257 lines
7.5 KiB
Nix

{
config,
lib,
pkgs,
...
}: {
environment.systemPackages = with pkgs; [waybar];
nixpkgs.overlays = [
# Waybar needs to be compiled with the experimental flag for wlr/workspaces to work
(self: super: {
waybar = super.waybar.overrideAttrs (oldAttrs: {
mesonFlags = oldAttrs.mesonFlags ++ ["-Dexperimental=true"];
});
})
];
home-manager.users.tom = {
# Home-manager waybar config
programs.waybar = {
enable = true;
systemd.enable = true;
style = ''
/*
*
* Catppuccin Mocha palette
* Maintainer: rubyowo
*
*/
@define-color base #1e1e2e;
@define-color mantle #181825;
@define-color crust #11111b;
@define-color text #cdd6f4;
@define-color subtext0 #a6adc8;
@define-color subtext1 #bac2de;
@define-color surface0 #313244;
@define-color surface1 #45475a;
@define-color surface2 #585b70;
@define-color overlay0 #6c7086;
@define-color overlay1 #7f849c;
@define-color overlay2 #9399b2;
@define-color blue #89b4fa;
@define-color lavender #b4befe;
@define-color sapphire #74c7ec;
@define-color sky #89dceb;
@define-color teal #94e2d5;
@define-color green #a6e3a1;
@define-color yellow #f9e2af;
@define-color peach #fab387;
@define-color maroon #eba0ac;
@define-color red #f38ba8;
@define-color mauve #cba6f7;
@define-color pink #f5c2e7;
@define-color flamingo #f2cdcd;
@define-color rosewater #f5e0dc;
* {
border: none;
font-family: JetBrainsMono Nerd Font;
}
window#waybar {
background-color: rgba(48, 52, 70, 0.0);
transition-property: background-color;
transition-duration: .5s;
border-bottom: none;
}
window#waybar.hidden {
opacity: 0.2;
}
#workspace,
#mode,
#clock,
.binary-clock,
#pulseaudio,
#network,
#mpd,
#memory,
#network,
#window,
#cpu,
#disk,
#battery,
#tray {
background-color: @mantle;
padding: 0 12px;
margin: 4px 4px 4px 4px;
border-radius: 90px;
background-clip: padding-box;
}
#workspaces button {
padding: 0 5px;
color: @surface2;
min-width: 20px;
}
#workspaces button:hover {
background-color: rgba(0, 0, 0, 0.2);
}
#workspaces button.focused, #workspaces button.active {
color: @mauve;
}
#workspaces button.urgent {
color: @red;
}
#mode {
color: @red;
}
#disk {
color: @teal;
}
#cpu {
color: @peach;
}
#memory {
color: @mauve;
}
#clock {
color: @surface2;
}
#window {
color: @green;
}
#battery {
color: @surface2;
}
#battery.warning {
color: @peach;
}
#battery.critical {
color: @red;
}
#battery.charging {
color: @surface2;
}
#network {
color: @mauve;
}
#pulseaudio {
color: @surface2;
}
#pulseaudio.muted {
color: @surface2;
background-color: #252734;
}
'';
settings = [
{
bar_id = "bar-0";
ipc = true;
layer = "top";
position = "top";
height = 30;
tray = {
icon-size = 14;
spacing = 10;
show-passive-items = true;
};
modules-left = ["wlr/workspaces"];
modules-center = [];
modules-right = ["battery" "battery#bat1" "pulseaudio" "clock" "tray"];
"wlr/workspaces" = {
format = "<span font='14'>{icon}</span>";
format-icons = {
"1" = "";
"2" = "";
"3" = "";
};
all-outputs = true;
persistent_workspaces = {};
};
clock = {
format = "{:%b %d %H:%M} <span font='14'></span>";
tooltip-format = ''
<big>{:%Y %B}</big>
<tt><small>{calendar}</small></tt>'';
format-alt = "{:%A, %B %d, %Y} ";
};
cpu = {
format = "{usage}% <span font='14'></span>";
tooltip = false;
interval = 1;
};
disk = {
format = "{percentage_used}% <span font='14'></span>";
path = "/";
interval = 30;
};
memory = {
format = "{}% <span font='14'></span>";
interval = 1;
};
battery = {
bat = "BAT0";
interval = 60;
states = {
warning = 30;
critical = 15;
};
format = "{capacity}% <span font='14'>{icon}</span>";
format-charging = "{capacity}% <span font='14'></span>";
format-icons = ["" "" "" "" ""];
max-length = 25;
};
"battery#bat1" = {
bat = "BAT1";
interval = 60;
states = {
warning = 30;
critical = 15;
};
format = "{capacity}% <span font='16'>{icon}</span>";
format-charging = "{capacity}% <span font='14'></span>";
format-icons = ["" "" "" "" ""];
max-length = 25;
};
network = {
format-wifi = "<span font='14'></span>";
format-ethernet = "<span font='14'></span> {ifname}: {ipaddr}/{cidr}";
format-linked = "<span font='14'></span> {ifname} (No IP)";
format-disconnected = "<span font='14'></span> Not connected";
format-alt = "{ifname}: {ipaddr}/{cidr}";
tooltip-format = "{essid} {signalStrength}%";
on-click-right = "${pkgs.alacritty}/bin/alacritty -e nmtui";
};
pulseaudio = {
format = "<span font='14'>{icon}</span> {volume}% {format_source}";
format-bluetooth = "<span font='14'>{icon}</span> {volume}% {format_source}";
format-bluetooth-muted = "<span font='14'></span> {volume}% {format_source}";
format-muted = "<span font='13'></span> {format_source}";
format-source = "{volume}% <span font='11'></span>";
format-source-muted = "<span font='11'></span>";
format-icons = {
default = ["" "" ""];
headphone = "";
hands-free = "";
headset = "";
phone = "";
portable = "";
car = "";
};
tooltip-format = "{desc}, {volume}%";
on-click = "${pkgs.pamixer}/bin/pamixer -t";
on-click-right = "${pkgs.pamixer}/bin/pamixer --default-source -t";
on-click-middle = "${pkgs.pavucontrol}/bin/pavucontrol";
};
}
];
};
};
}