nichts/modules/programs/gui/waybar.nix

325 lines
8.6 KiB
Nix

{
config,
lib,
pkgs,
...
}: let
cfg = config.modules.programs.waybar;
inherit (config.modules.other.system) username;
in {
options.modules.programs.waybar.enable = lib.mkEnableOption "waybar";
config = lib.mkIf cfg.enable {
home-manager.users.${username} = {
programs.waybar = {
enable = true;
package = pkgs.waybar;
settings.mainBar = {
gtk-layer-shell = true;
layer = "top";
position = "bottom";
modules-left = ["tray" "mpd"];
modules-center = ["hyprland/workspaces"];
modules-right = [
"memory"
"pulseaudio"
"clock"
"backlight"
"battery"
];
pulseaudio = {
tooltip = false;
scroll-step = "1";
format = " {icon} {volume}%";
format-muted = " 󰸈 {volume}%";
format-icons = {default = ["󰕿" "󰖀" "󰕾"];};
on-click = "${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
};
"hyprland/workspaces" = {
sort-by-name = true;
sort-by-coordinates = false;
on-click = "activate";
#on-scroll = "~/Scripts/cycle_workspace.sh 1";
active-only = true;
format = "{icon}";
format-icons = {
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "10";
"11" = "1";
"12" = "2";
"13" = "3";
"14" = "4";
"15" = "5";
"16" = "6";
"17" = "7";
"18" = "8";
"19" = "9";
"20" = "10";
"21" = "1";
"22" = "2";
"23" = "3";
"24" = "4";
"25" = "5";
"26" = "6";
"27" = "7";
"28" = "8";
"29" = "9";
"30" = "10";
};
};
tray = {
icon-size = 12;
spacing = 5;
};
# 󰃰
clock = {
interval = 1;
format = " {:%a %d %b %H:%M:%S}";
};
battery = {
interval = 10;
states = {
good = 75;
warning = 20;
critical = 10;
};
format = "{icon}{capacity}%";
format-charging = "󰚥{icon}{capacity}%";
format-discharging = "{icon}{capacity}%";
format-icons = ["󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
format-charging-icons = ["󰢟" "󰢜" "󰂆" "󰂇" "󰂈" "󰢝" "󰂉" "󰢞" "󰂊" "󰂋" "󰂅"];
};
cpu = {
interval = 1;
format = "󰻠 {}%";
max-length = 10;
};
memory = {
interval = 1;
format = "󰍛 {}%";
max-length = 10;
};
"hyprland/window" = {
format = "{}";
separate-outputs = true;
};
mpd = {
format = "󰝚 {artist} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S})";
format-disconnected = "󰝚 Disconnected";
format-stopped = "󰝚 Stopped";
interval = 1;
tooltip-format = "MPD (connected)";
tooltip-format-disconnected = "MPD (disconnected)";
on-click = "mpc toggle";
};
};
style = ''
@define-color base #000000;
@define-color inactive #ab8f44;
@define-color active #1565c0;
@define-color text #ffffff;
* {
border-radius: 1px;
font-family: ComicShannsMono Nerd Font;
font-size: 16px;
}
window#waybar {
background-color: alpha(@base, 1.0);
border-radius: 0px;
}
window#waybar.hidden {
opacity: 0.2;
}
#window {
margin-top: 2px;
margin-bottom: 2px;
padding-left: 2px;
padding-right: 2px;
background: @base;
color: @text;
font-family: ComicShannsMono Nerd Font;
}
#workspaces {
padding-left: 5px;
}
#workspaces button {
border-radius: 0px;
padding-top: 0px;
padding-right: 0px;
padding-bottom: 0px;
padding-left: 0px;
margin-top: 2px;
margin-right: 2px;
margin-bottom: 2px;
margin-left: 2px;
background-color: @inactive;
color: @text;
min-width: 15px;
}
#workspaces button.active {
padding-top: 0px;
padding-bottom: 0px;
padding-right: 0px;
padding-left: 0px;
margin-top: 2px;
margin-right: 2px;
margin-bottom: 2px;
margin-left: 2px;
background-color: @active;
color: @base;
min-width: 15px;
}
#workspaces button.urgent {
background-color: @red;
}
.modules-left > widget:first-child > #workspaces {
margin-left: 0;
}
.modules-right > widget:first-child > #workspaces {
margin-right: 0;
}
#pulseaudio {
margin-top: 2px;
margin-bottom: 2px;
margin-left: 2px;
margin-right: 2px;
padding-left: 0px;
padding-right: 0px;
transition: none;
background: @base;
color: @text;
}
#memory {
color: @text;
}
#battery {
margin-top: 3px;
margin-bottom: 3px;
margin-left: 8px;
padding-left: 10px;
padding-right: 10px;
transition: none;
background: @base;
color: @text;
}
@keyframes blink {
to {
background-color: @red;
}
}
#battery.charging, #battery.plugged {
background-color: @base;
}
#battery.critical:not(.charging) {
background-color: @base;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#backlight {
margin-top: 3px;
margin-bottom: 3px;
margin-left: 8px;
padding-left: 10px;
padding-right: 10px;
transition: none;
background: @base;
color: @yellow;
}
#clock {
margin-top: 3px;
margin-bottom: 3px;
margin-left: 8px;
padding-left: 10px;
padding-right: 10px;
transition-property: min-width;
transition-duration: 0.5s;
background: @base;
color: @text;
}
#tray {
margin-top: 2px;
margin-bottom: 2px;
margin-left: 2px;
padding-left: 2px;
padding-right: 2px;
transition: none;
background: @base;
}
#custom-power {
font-size: 20px;
margin-top: 3px;
margin-bottom: 3px;
margin-left: 8px;
margin-right: 8px;
padding-left: 10px;
padding-right: 10px;
transition: none;
background: @base;
color: @red;
}
#custom-media {
margin-top: 3px;
margin-bottom: 3px;
margin-left: 8px;
padding-left: 10px;
padding-right: 10px;
transition: none;
background: @mantle;
}
#mpd {
margin-top: 3px;
margin-bottom: 3px;
margin-left: 8px;
padding-left: 10px;
padding-right: 10px;
transition: none;
background: @base;
color: @text;
}
'';
};
};
};
}