396 lines
11 KiB
Nix
396 lines
11 KiB
Nix
{ lib
|
|
, pkgs
|
|
, config
|
|
, ...
|
|
}:
|
|
with lib; let
|
|
cfg = config.eboskma.programs.waybar;
|
|
in
|
|
{
|
|
options.eboskma.programs.waybar.enable = mkEnableOption "Enable waybar";
|
|
|
|
config = mkIf cfg.enable {
|
|
programs.waybar = {
|
|
enable = true;
|
|
systemd.enable = true;
|
|
|
|
settings = [
|
|
{
|
|
layer = "top";
|
|
position = "top";
|
|
height = 32;
|
|
|
|
modules-left = [
|
|
"sway/workspaces"
|
|
"wlr/workspaces"
|
|
"sway/mode"
|
|
"custom/now_playing"
|
|
];
|
|
modules-center = [
|
|
"sway/window"
|
|
"hyprland/window"
|
|
];
|
|
modules-right = [
|
|
"network"
|
|
"memory"
|
|
"cpu"
|
|
"temperature"
|
|
"custom/keyboard-layout"
|
|
"wireplumber"
|
|
"tray"
|
|
"clock#date"
|
|
"clock#time"
|
|
"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;
|
|
};
|
|
};
|
|
|
|
"custom/keyboard-layout" = {
|
|
exec = ''${pkgs.sway}/bin/swaymsg -t get_inputs | ${pkgs.jq}/bin/jq -r '.[] | select(.identifier == "36125:40349:splitkb_Kyria_rev1") | .xkb_active_layout_name' '';
|
|
interval = 30;
|
|
format = " {}"; # Icon: keyboard
|
|
# Signal sent by Sway key binding (~/.config/sway/key-bindings)
|
|
signal = 1; # SIGHUP
|
|
tooltip = false;
|
|
};
|
|
|
|
"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}";
|
|
};
|
|
|
|
"sway/mode" = {
|
|
format = "<span style=\"italic\"> {}</span>"; # Icon: arrow_expand_all
|
|
tooltip = false;
|
|
};
|
|
|
|
# TODO: package as nix thingy
|
|
"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 = " ♪ {}";
|
|
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";
|
|
};
|
|
|
|
"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" = "";
|
|
};
|
|
};
|
|
|
|
"wlr/workspaces" = {
|
|
all-outputs = false;
|
|
# disable-scroll = true;
|
|
on-click = "activate";
|
|
format = "{icon} {name}";
|
|
sort-by-number = true;
|
|
format-icons = {
|
|
"urgent" = "";
|
|
"focused" = "";
|
|
"default" = "";
|
|
};
|
|
};
|
|
|
|
"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";
|
|
};
|
|
|
|
"temperature" = {
|
|
hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input";
|
|
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 = "<span size=\"large\">{icon}</span>";
|
|
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 = "<span foreground='red'><sup></sup></span>"; # Icon: bell_outline
|
|
none = ""; # Icon: bell_outline
|
|
dnd-notification = "<span foreground='red'><sup></sup></span>"; # Icon: bell_off_outline
|
|
dnd-none = ""; # Icon: bell_off_outline
|
|
};
|
|
escape = true;
|
|
};
|
|
}
|
|
];
|
|
|
|
style = ''
|
|
@keyframes blink-warning {
|
|
70% {
|
|
color: white;
|
|
}
|
|
|
|
to {
|
|
color: white;
|
|
background-color: orange;
|
|
}
|
|
}
|
|
|
|
@keyframes blink-critical {
|
|
70% {
|
|
color: white;
|
|
}
|
|
|
|
to {
|
|
color: white;
|
|
background-color: red;
|
|
}
|
|
}
|
|
|
|
* {
|
|
border: none;
|
|
border-radius: 0;
|
|
min-height: 0;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
#waybar {
|
|
background: rgba(0, 0, 0, 0.8);
|
|
color: white;
|
|
font-family: "Iosevka Nerd Font", sans-serif;
|
|
font-size: 13px;
|
|
}
|
|
|
|
#battery,
|
|
#clock,
|
|
#cpu,
|
|
#custom-keyboard-layout,
|
|
#memory,
|
|
#mode,
|
|
#network,
|
|
#pulseaudio,
|
|
#temperature,
|
|
#tray,
|
|
#custom-now_playing,
|
|
#idle_inhibitor {
|
|
padding-left: 10px;
|
|
padding-right: 10px;
|
|
}
|
|
|
|
#battery {
|
|
animation-timing-function: linear;
|
|
animation-iteration-count: infinite;
|
|
animation-direction: alternate;
|
|
}
|
|
|
|
#battery.warning {
|
|
color: orange;
|
|
}
|
|
|
|
#battery.critical {
|
|
color: red;
|
|
}
|
|
|
|
#battery.warning.discharging {
|
|
animation-name: blink-warning;
|
|
animation-duration: 3s;
|
|
}
|
|
|
|
#battery.critical.discharging {
|
|
animation-name: blink-critical;
|
|
animation-duration: 2s;
|
|
}
|
|
|
|
#clock {
|
|
font-weight: bold;
|
|
}
|
|
|
|
#cpu {
|
|
/* No styles */
|
|
}
|
|
|
|
#cpu.warning {
|
|
color: orange;
|
|
}
|
|
|
|
#cpu.critical {
|
|
color: red;
|
|
}
|
|
|
|
#memory {
|
|
animation-timing-function: linear;
|
|
animation-iteration-count: infinite;
|
|
animation-direction: alternate;
|
|
}
|
|
|
|
#memory.warning {
|
|
color: orange;
|
|
}
|
|
|
|
#memory.critical {
|
|
color: red;
|
|
animation-name: blink-critical;
|
|
animation-duration: 2s;
|
|
}
|
|
|
|
#mode {
|
|
background: #64727D;
|
|
border-top: 2px solid white;
|
|
/* To compensate for the top border and still have vertical centering */
|
|
padding-bottom: 2px;
|
|
}
|
|
|
|
#network {
|
|
/* No styles */
|
|
}
|
|
|
|
#network.disconnected {
|
|
color: orange;
|
|
}
|
|
|
|
#pulseaudio {
|
|
/* No styles */
|
|
}
|
|
|
|
#pulseaudio.muted {
|
|
/* No styles */
|
|
}
|
|
|
|
#custom-spotify {
|
|
color: rgb(102, 220, 105);
|
|
}
|
|
|
|
#temperature {
|
|
/* No styles */
|
|
}
|
|
|
|
#temperature.critical {
|
|
color: red;
|
|
}
|
|
|
|
#tray {
|
|
/* No styles */
|
|
}
|
|
|
|
#window {
|
|
font-weight: bold;
|
|
}
|
|
|
|
#workspaces button {
|
|
border-top: 2px solid transparent;
|
|
/* To compensate for the top border and still have vertical centering */
|
|
padding-bottom: 2px;
|
|
padding-left: 10px;
|
|
padding-right: 10px;
|
|
color: #888888;
|
|
}
|
|
|
|
#workspaces button.focused, #workspaces button.active {
|
|
border-color: #4c7899;
|
|
color: white;
|
|
background-color: #285577;
|
|
}
|
|
|
|
#workspaces button.urgent {
|
|
border-color: #c9545d;
|
|
color: #c9545d;
|
|
}
|
|
|
|
#idle_inhibitor {
|
|
background-color: transparent;
|
|
font-weight: bold;
|
|
padding-right: 10px;
|
|
}
|
|
|
|
#idle_inhibitor.activated {
|
|
background-color: #c9545d;
|
|
color: #ffffff;
|
|
}
|
|
|
|
#custom-now_playing {
|
|
font-weight: bold;
|
|
}
|
|
|
|
#custom-notifications {
|
|
padding: 0 10px;
|
|
}
|
|
'';
|
|
};
|
|
};
|
|
}
|