{
lib,
pkgs,
config,
...
}:
with lib;
let
cfg = config.eboskma.programs.waybar;
in
{
options.eboskma.programs.waybar = {
enable = mkEnableOption "Enable waybar";
sway = mkEnableOption "sway";
river = mkEnableOption "river";
profile = mkOption {
description = "";
type = types.enum [
"home"
"work"
];
default = "home";
};
cpuTempPath = mkOption {
description = "The path to the CPU temperature sensor in sysfs";
type = types.path;
};
};
config = mkIf cfg.enable {
programs.waybar = {
enable = true;
systemd.enable = true;
settings = [
{
layer = "top";
position = "top";
height = 32;
modules-left =
[ ]
++ lib.optionals cfg.river [
"river/tags"
"river/mode"
]
++ lib.optionals cfg.sway [
"sway/workspaces"
"sway/mode"
]
++ lib.optional (cfg.profile == "home") "custom/now_playing"
++ lib.optional (cfg.profile == "work") "mpris";
modules-center = (lib.optional cfg.sway "sway/window") ++ (lib.optional cfg.river "river/window");
modules-right = [
"network"
"memory"
"cpu"
"temperature"
"wireplumber"
"clock#date"
"clock#time"
"tray"
"idle_inhibitor"
"custom/notifications"
];
"clock#time" = {
interval = 1;
format = "{:%H:%M:%S}";
tooltip = false;
};
"clock#date" = {
interval = 10;
format = " {:%e %b %Y}"; # Icon: calendar
tooltip-format = "{:%e %B %Y}";
};
cpu = {
interval = 5;
format = " {usage}% ({load})"; # Icon: cpu_64_bit
states = {
warning = 70;
critical = 90;
};
};
memory = {
interval = 5;
format = " {}%"; # Icon: memory
states = {
warning = 70;
critical = 90;
};
};
network = {
interval = 5;
format-wifi = " {essid} ({signalStrength}%)"; # Icon: wifi
format-ethernet = " {ifname}: {ipaddr}/{cidr}"; # Icon: ethernet
format-disconnected = " Disconnected"; # Icon: network_off_outline
tooltip-format = "{ifname}: {ipaddr}";
};
"custom/now_playing" = {
exec = "${pkgs.ha-now-playing}/bin/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token-file /run/secrets/ha_now_playing_token";
exec-on-event = false;
escape = true;
format = " {}"; # Icon: radio
restart-interval = 1;
return-type = "json";
on-click = "${pkgs.ha-now-playing}/bin/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token-file /run/secrets/ha_now_playing_token play-pause";
on-scroll-down = "${pkgs.ha-now-playing}/bin/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token-file /run/secrets/ha_now_playing_token volume-up";
on-scroll-up = "${pkgs.ha-now-playing}/bin/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token-file /run/secrets/ha_now_playing_token volume-down";
};
mpris = {
format = "[{player}] {status_icon} {dynamic}";
status-icons = {
paused = " "; # Icon: pause
playing = " "; # Icon: play
stopped = " "; # Icon: stop
};
on-click-middle = "stop";
};
"sway/mode" = {
format = '' {}''; # Icon: arrow_expand_all
tooltip = false;
};
"sway/window" = {
format = "{}";
max-length = 120;
};
"sway/workspaces" = {
all-outputs = false;
disable-scroll = true;
format = "{icon} {name}";
sort-by-number = true;
format-icons = {
urgent = "";
focused = "";
default = "";
};
};
"river/mode" = {
format = '' {}''; # Icon: arrow_expand_all
};
"river/tags" = { };
"river/window" = {
max-length = 120;
};
"wlr/workspaces" = {
all-outputs = false;
# disable-scroll = true;
on-click = "activate";
format = "{icon} {name}";
sort-by-number = true;
format-icons = {
"urgent" = ""; # Icon: fa-exclamation_circle
"focused" = ""; # Icon: fa-dot_circle_o
"default" = ""; # Icon: fa-circle
};
};
wireplumber = {
format = "{icon} {volume}%";
format-muted = ""; # Icon: volume_off
format-icons = {
headphones = ""; # Icon: headphones
handsfree = ""; # Icon: headset
headset = ""; # Icon: headset
phone = ""; # Icon: phone
portable = ""; # Icon: phone
car = ""; # Icon: car
default = [
""
""
""
]; # Icons: volume_low volume_medium volume_high
};
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
on-click-middle = "${pkgs.helvum}/bin/helvum";
on-click-right = "${pkgs.easyeffects}/bin/easyeffects";
};
temperature = {
hwmon-path = cfg.cpuTempPath;
critical-threshold = 80;
interval = 5;
format = "{icon} {temperatureC}°C";
format-icons = [
"" # Icon = temperature-empty
"" # Icon = temperature-quarter
"" # Icon = temperature-half
"" # Icon = temperature-three-quarters
"" # Icon = temperature-full
];
tooltip = true;
};
tray = {
icon-size = 21;
spacing = 10;
};
idle_inhibitor = {
format = ''{icon}'';
format-icons = {
activated = "";
deactivated = "";
};
};
"custom/notifications" = {
exec = "${pkgs.swaynotificationcenter}/bin/swaync-client --subscribe-waybar";
on-click = "${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-panel --skip-wait";
on-click-right = "${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-dnd --skip-wait";
return-type = "json";
tooltip = false;
format = "{icon}";
format-icons = {
notification = ""; # Icon: bell_outline
none = ""; # Icon: bell_outline
dnd-notification = ""; # Icon: bell_off_outline
dnd-none = ""; # Icon: bell_off_outline
};
escape = true;
};
}
];
style = ./style.css;
};
};
}