{ config, lib, pkgs, ... }:
let
cfg = config.ctucxConfig.services.waybar;
in {
options = {
ctucxConfig.services.waybar = {
enable = lib.mkEnableOption "waybar";
};
};
config = lib.mkIf cfg.enable {
home-manager.users.katja = {
wayland.windowManager.sway.config.startup = [
{ always = true; command = "systemctl --user restart waybar"; }
];
systemd.user.services.waybar.Service.Environment = "PATH=$PATH:${pkgs.iwd}/bin";
programs = {
waybar = {
enable = true;
systemd.enable = true;
package = pkgs.waybar.override {
hyprlandSupport = false;
};
settings = [{
layer = "top";
position = "top";
height = 40;
modules-left = [ "sway/workspaces" "sway/mode" ];
modules-center = [ "clock" ];
modules-right = [
"tray" "disk" "memory" "cpu" "idle_inhibitor" "network#wifi" "battery" "pulseaudio"
];
"sway/workspaces" = {
disable-scroll = true;
};
"sway/mode" = {
tooltip = false;
format = "{}";
};
clock = {
interval = 1;
format = "{:%H:%M:%S}";
format-alt = "{:%Y-%m-%d}";
tooltip-format = "{:%Y %B}\n{calendar}";
};
tray = {
tooltip = false;
# icon-size = 21;
spacing = 10;
};
disk = {
format = " {}%";
tooltip-format = "SSD: {used} / {total} used";
};
memory = {
format = " {}%";
tooltip-format = "RAM: {used:0.1f}G / {total:0.1f}G used";
};
cpu = {
format = " {usage}%";
tooltip = false;
};
battery = {
bat = "BAT0";
adapter = "AC";
interval = 10;
full-at = 99;
states = {
full = 100;
good = 99;
warning = 40;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = " {capacity}%";
format-plugged = " {capacity}%";
format-empty = "";
format-full = "";
format-icons = ["" "" "" "" ""];
};
"network#wifi" = {
interface = "wlan0*";
tooltip-format = "{ifname}: {ipaddr}/{cidr}";
on-click = "${pkgs.rofi-wayland}/bin/rofi -show wifi -modi 'wifi:${pkgs.rofi-iwd-wifi-menu}/bin/iwdrofimenu'";
format-ethernet = "";
format-wifi = " {essid} ({signalStrength}%)";
format-linked = "";
format-disconnected = "";
};
pulseaudio = {
scroll-step = 1;
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
format = "{format_source} {icon} {volume}%";
format-bluetooth = "{format_source} {icon} {volume}%";
format-bluetooth-muted = "{format_source} ";
format-muted = "{format_source} ";
format-source = "";
format-source-muted = "";
format-icons = {
headphone = "";
phone = "";
portable = "";
car = "";
default = ["" "" ""];
};
};
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "";
deactivated = "";
};
};
}];
style = ''
@keyframes blink {
to {
background: transparent;
color: #fff;
}
}
* {
font-family: 'Noto Sans';
font-size: 15px;
border: none;
border-radius: 0;
min-height: 0;
transition: none;
box-shadow: none;
}
window#waybar {
/* background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); */
background: rgba(0, 0, 0, 0.5);
color: white;
border-bottom: 2px solid rgba(59, 135, 86, 0.5);
}
#workspaces button.focused {
background: rgba(255, 255, 255, 0.1);
border-bottom: 3px solid rgb(74, 169, 108);
}
#workspaces button:hover {
background: rgba(255, 255, 255, 0.06);
}
#clock {
font-size: 16px;
font-family: 'Noto Mono', monospace;
}
#disk, #memory, #cpu, #idle_inhibitor, #battery, #pulseaudio, #network {
padding: 0px 15px;
}
#battery {
color: #a3be8c;
}
#battery.charging {
color: #a3be8c;
}
#battery.critical:not(.charging) {
background: rgba(245, 60, 60, 0.4);
color: #fff;
border-radius: 15px;
margin: 6px;
animation-name: blink;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
'';
};
};
};
};
}