nixos-config/home-manager/modules/waybar/default.nix

398 lines
11 KiB
Nix
Raw Normal View History

{ lib
, pkgs
, config
, ...
2022-03-01 22:19:03 +01:00
}:
with lib; let
cfg = config.eboskma.programs.waybar;
in
{
2021-11-12 17:10:17 +01:00
options.eboskma.programs.waybar.enable = mkEnableOption "Enable waybar";
config = mkIf cfg.enable {
programs.waybar = {
enable = true;
2022-05-30 16:21:13 +02:00
systemd.enable = true;
2021-11-12 17:10:17 +01:00
settings = [
{
layer = "top";
position = "top";
2022-03-29 09:32:16 +02:00
height = 32;
2021-11-12 17:10:17 +01:00
modules-left = [
"sway/workspaces"
2022-10-30 22:19:50 +01:00
"wlr/workspaces"
2021-11-12 17:10:17 +01:00
"sway/mode"
2021-11-21 19:07:12 +01:00
"custom/now_playing"
2021-11-12 17:10:17 +01:00
];
modules-center = [
"sway/window"
2022-10-30 22:19:50 +01:00
"hyprland/window"
2021-11-12 17:10:17 +01:00
];
modules-right = [
"network"
"memory"
"cpu"
"temperature"
"custom/keyboard-layout"
"wireplumber"
2021-11-12 17:10:17 +01:00
"tray"
"clock#date"
"clock#time"
"idle_inhibitor"
2022-06-15 11:59:11 +02:00
"custom/notifications"
2021-11-12 17:10:17 +01:00
];
"clock#time" = {
interval = 1;
format = "{:%H:%M:%S}";
tooltip = false;
};
2021-11-12 17:10:17 +01:00
"clock#date" = {
interval = 10;
format = "󰃭 {:%e %b %Y}"; # Icon: calendar
tooltip-format = "{:%e %B %Y}";
};
2021-11-12 17:10:17 +01:00
"cpu" = {
interval = 5;
format = "󰻠 {usage}% ({load})"; # Icon: cpu_64_bit
states = {
warning = 70;
critical = 90;
2021-11-12 17:10:17 +01:00
};
};
2021-11-12 17:10:17 +01:00
"custom/keyboard-layout" = {
2023-11-30 08:59:16 +01:00
exec = ''${pkgs.sway}/bin/swaymsg -t get_inputs | ${pkgs.jaq}/bin/jaq -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;
};
2021-11-12 17:10:17 +01:00
"memory" = {
interval = 5;
format = "󰍛 {}%"; # Icon: memory
states = {
warning = 70;
critical = 90;
2021-11-12 17:10:17 +01:00
};
};
2021-11-12 17:10:17 +01:00
"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}";
};
2021-11-12 17:10:17 +01:00
"sway/mode" = {
format = "<span style=\"italic\">󰁌 {}</span>"; # Icon: arrow_expand_all
tooltip = false;
};
2021-11-12 17:10:17 +01:00
# 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;
2022-11-19 17:24:19 +01:00
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";
};
2021-11-12 17:10:17 +01:00
"sway/window" = {
format = "{}";
max-length = 120;
};
2021-11-12 17:10:17 +01:00
"sway/workspaces" = {
all-outputs = false;
disable-scroll = true;
format = "{icon} {name}";
sort-by-number = true;
format-icons = {
"urgent" = "";
"focused" = "";
"default" = "";
};
};
2022-10-30 22:19:50 +01:00
"wlr/workspaces" = {
all-outputs = false;
2022-10-30 22:19:50 +01:00
# disable-scroll = true;
2022-11-30 19:24:18 +01:00
on-click = "activate";
format = "{icon} {name}";
2022-10-30 22:19:50 +01:00
sort-by-number = true;
format-icons = {
2023-06-01 16:58:04 +02:00
"urgent" = ""; # Icon: fa-exclamation_circle
"focused" = ""; # Icon: fa-dot_circle_o
"default" = ""; # Icon: fa-circle
2021-11-12 17:10:17 +01:00
};
};
2021-11-12 17:10:17 +01:00
"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
2021-11-12 17:10:17 +01:00
};
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
on-click-middle = "${pkgs.helvum}/bin/helvum";
on-click-right = "${pkgs.easyeffects}/bin/easyeffects";
};
2021-11-12 17:10:17 +01:00
"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 = "󰛑";
2021-11-12 17:10:17 +01:00
};
};
"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
2022-06-15 11:59:11 +02:00
};
escape = true;
2021-11-12 17:10:17 +01:00
};
}
];
2022-03-01 22:19:03 +01:00
style = ''
@keyframes blink-warning {
70% {
2021-11-12 17:10:17 +01:00
color: white;
2022-03-01 22:19:03 +01:00
}
to {
color: white;
background-color: orange;
}
}
@keyframes blink-critical {
70% {
2021-11-12 17:10:17 +01:00
color: white;
2022-03-01 22:19:03 +01:00
}
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);
2022-03-01 22:19:03 +01:00
color: white;
font-family: "Iosevka Nerd Font", sans-serif;
2022-03-01 22:19:03 +01:00
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;
}
2021-11-12 17:10:17 +01:00
2022-03-01 22:19:03 +01:00
#battery {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#battery.warning {
color: orange;
}
#battery.critical {
color: red;
}
2021-11-12 17:10:17 +01:00
2022-03-01 22:19:03 +01:00
#battery.warning.discharging {
animation-name: blink-warning;
animation-duration: 3s;
}
#battery.critical.discharging {
animation-name: blink-critical;
animation-duration: 2s;
}
#clock {
2021-11-12 17:10:17 +01:00
font-weight: bold;
2022-03-01 22:19:03 +01:00
}
#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 */
}
2021-11-12 17:10:17 +01:00
2022-03-01 22:19:03 +01:00
#temperature.critical {
color: red;
}
#tray {
/* No styles */
}
2021-11-12 17:10:17 +01:00
2022-03-01 22:19:03 +01:00
#window {
2021-11-12 17:10:17 +01:00
font-weight: bold;
2022-03-01 22:19:03 +01:00
}
#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;
}
2022-11-30 19:24:18 +01:00
#workspaces button.focused, #workspaces button.active {
2022-03-01 22:19:03 +01:00
border-color: #4c7899;
color: white;
background-color: #285577;
}
#workspaces button.urgent {
border-color: #c9545d;
color: #c9545d;
}
#idle_inhibitor {
background-color: transparent;
font-weight: bold;
2022-03-21 16:50:28 +01:00
padding-right: 10px;
2022-03-01 22:19:03 +01:00
}
#idle_inhibitor.activated {
background-color: #c9545d;
color: #ffffff;
}
#custom-now_playing {
font-weight: bold;
}
2022-03-21 16:50:28 +01:00
2022-06-15 11:59:11 +02:00
#custom-notifications {
2022-03-21 16:50:28 +01:00
padding: 0 10px;
}
2022-03-01 22:19:03 +01:00
'';
2021-11-12 17:10:17 +01:00
};
};
}