nixos/system/home/desktop/waybar.nix
Evie Litherland-Smith 45acedd324 Add image-roll and clapper for pictures and videos respectively
Replace swayimg and mpv

Fix MPRIS module for waybar (needed playerctl in PATH), reorganise so
that MPRIS is in the centre and update formatting
2024-10-25 15:20:10 +01:00

405 lines
11 KiB
Nix

{ config, pkgs, ... }:
{
stylix.targets.waybar.enable = false;
systemd.user.targets.tray.Unit = {
Description = "Home Manager System Tray";
Requires = [ "graphical-session.target" ];
};
home.packages = [ pkgs.playerctl ]; # For MPRIS to work
programs.waybar = {
enable = true;
systemd.enable = true;
settings.main = {
name = "main";
layer = "top";
position = "top";
# Layout
"modules-left" = [
"hyprland/workspaces"
"hyprland/window"
];
"modules-center" = [ "mpris" ];
"modules-right" = [
"custom/notification"
"pulseaudio"
"network"
"bluetooth"
"clock#calendar"
"clock"
"backlight"
"battery"
"custom/weather"
"systemd-failed-units"
"tray"
];
# Module config
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "󰫃 ";
"2" = "󰫄 ";
"3" = "󰫅 ";
"4" = "󰫆 ";
"5" = "󰫇 ";
"6" = "󰫈 ";
default = "󰋙 ";
urgent = "󰁡 ";
};
all-outputs = false;
persistent-workspaces = {
"1" = [ ];
"2" = [ ];
"3" = [ ];
"4" = [ ];
"5" = [ ];
"6" = [ ];
};
};
"hyprland/window" = {
"format" = "{title}";
"max-length" = 50;
"rewrite" = {
"(.*) - GNU Emacs at (.*)" = " $1 [$2]";
"(alacritty.*)" = " $1";
"(.*) - mpv" = "󰦟 $1";
"swayimg: (.*)" = "󰋩 $1";
"swappy" = "󰹑 swappy";
"(btm)" = " Resource Usage [$1]";
"(cava)" = "󰝚 Music Visualiser [$1]";
"Mozilla Firefox" = "󰈹 $1";
"(.*) Mozilla Firefox" = "󰈹 $1";
"Nyxt - (.*)" = "󰀹 $1";
"(.*) - Chromium" = "󰊯 $1";
"(Signal.*)" = "󰭹 $1";
"(WhatsApp for Linux.*)" = "󰖣 $1";
"((?:.*)WebCord.*)" = "󰙯 $1";
"(Cartridges.*)" = "󰊗 $1";
"([Ss]team.*)" = "󰓓 $1";
"(Prism Launcher.*)" = "󰍳 Minecraft ($1)";
"(.*)(?: *)PrusaSlicer-(.*)" = "󰐫 $1 PrusaSlicer ($2)";
"(.*)(?: *)PrusaSlicer G-code Viewer-(.*)" = "󰹛 $1 G-code Viewer ($2)";
"FreeCAD (.*)" = "󰻬 FreeCAD $1";
"(.*) - Blender.* " = "󰂫 $1";
"(Remmina Remote Desktop Client)" = "󰢹 $1";
"(NoMachine|Nxplayer.bin)(?: *)(.*)" = "󰢹 $1 $2";
};
};
mpris = {
"format" = "{player_icon} {status_icon} | {album} - {artist} - {title}";
"tooltip-format" = "{player_icon} ({player}) {status_icon} {dynamic}";
"title-len" = 64;
"interval" = 1;
"dynamic-order" = [
"album"
"artist"
"title"
"position"
"length"
];
"player-icons" = {
"default" = "󰲸 ";
"firefox" = "󰈹 ";
};
"status-icons" = {
"playing" = "󰐊";
"paused" = "󰏤";
"stopped" = "󰓛";
};
"ignored-players" = [ ];
};
pulseaudio = {
scroll-step = 5;
format = "{format_source}{icon}{volume}%";
format-muted = "{format_source} 󰝟 ";
format-source = "󰍬 ";
format-source-muted = "󰍭 ";
format-icons = {
car = "󰄍 ";
default = [
"󰕿 "
"󰖀 "
"󰕾 "
];
hands-free = "󰥰 ";
headset = "󰋎 ";
phone = "󰏲 ";
portable = "󰏳 ";
headphone = "󰋋 ";
};
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
on-click-right = "${pkgs.pamixer}/bin/pamixer -t";
on-scroll-up = "${pkgs.pamixer}/bin/pamixer -i 5";
on-scroll-down = "${pkgs.pamixer}/bin/pamixer -d 5";
};
disk = {
format = "󰋊 {percentage_used}%";
path = config.home.homeDirectory;
};
cpu = {
format = "󰻠 {usage}%";
tooltip = false;
};
memory = {
format = "󰍛 {}%";
};
temperature = {
critical-threshold = 80;
format = "{icon} {temperatureC}°C";
format-icons = [
"󱃃"
"󰔏"
"󱃂"
];
};
network = {
format-icons = [
"󰤟 "
"󰤢 "
"󰤥 "
"󰤨 "
];
format-wifi = "{icon}";
format-ethernet = "󰈁 ";
format-linked = "󰈂 ";
format-disconnected = "󰈂 ";
tooltip-format = "{essid} ({signalStrength}%)";
on-click = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
};
bluetooth = {
format = "󰂯";
format-disabled = "󰂲";
format-off = "󰂲";
format-on = "󰂯";
format-connected = "󰂱";
tooltip-format = "{status} | {device_alias}";
on-click = "${pkgs.blueman}/bin/blueman-manager";
};
"clock#calendar" = {
format = "󰃭 {:%Y-%m-%d}";
tooltip-format = "<tt>{calendar}</tt>";
calendar = {
mode = "month";
mode-mon-col = 3;
weeks-pos = "left";
on-scroll = 1;
format =
let
scheme = config.lib.stylix.scheme.withHashtag;
in
{
months = "<span color='${scheme.red}'><b>{}</b></span>";
weeks = "<span color='${scheme.cyan}'><b>W{}</b></span>";
weekdays = "<span color='${scheme.orange}'><b>{}</b></span>";
days = "<span color='${scheme.base05}'><b>{}</b></span>";
today = "<span color='${scheme.base0D}'><b><i>{}</i></b></span>";
};
};
actions = {
on-scroll-up = "shift_up";
on-scroll-down = "shift_down";
};
};
clock.format = "󰥔 {:%R}";
backlight = {
format = "{icon}";
tooltip-format = "{percent}%";
format-icons = [
" "
" "
" "
" "
" "
" "
" "
" "
" "
];
};
battery = {
states = {
warning = 20;
critical = 10;
};
format = "{icon}";
format-time = "{H}:{m}";
format-charging = "󰂄 ({time})";
format-plugged = "󰚥 ";
format-warning = "{icon}{capacity}%";
format-critical = "{icon}{capacity}% ({time})";
tooltip-format = "{capacity}% | {power}W | {time}";
format-icons = [
"󱃍 "
"󰁺 "
"󰁻 "
"󰁼 "
"󰁽 "
"󰁾 "
"󰁿 "
"󰂀 "
"󰂁 "
"󰂂 "
"󰁹 "
];
};
"systemd-failed-units" = {
hide-on-ok = false;
format = "󰀦 S:{nr_failed_system} U:{nr_failed_user}";
format-ok = "󰄬 ";
system = true;
user = true;
};
"custom/notification" =
let
makoctl = "${config.services.mako.package}/bin/makoctl";
jq = "${pkgs.jq}/bin/jq";
in
{
exec = "( ${makoctl} list | ${jq} -e '.data[] | length > 0' >/dev/null && echo '󱅫 ' ) || echo '󰂚 ' ";
format = "{}";
on-click = "${makoctl} dismiss -a";
interval = 3;
};
"custom/weather" =
let
date-format = "%Y-%m-%d";
custom-indicator = "{ICON}{temp_C}({FeelsLikeC})";
in
{
format = "{}°";
tooltip = true;
interval = 900; # Every 15 minutes
exec = ''${pkgs.wttrbar}/bin/wttrbar --location Didcot --date-format "${date-format}" --custom-indicator "${custom-indicator}"'';
return-type = "json";
};
tray = {
icon-size = 20;
show-passive-items = true;
spacing = 5;
};
};
style =
let
scheme = config.lib.stylix.scheme.withHashtag;
alpha = "0.8";
in
''
* {
all: unset;
font-family: ${config.stylix.fonts.monospace.name};
font-size: ${toString config.stylix.fonts.sizes.popups}px;
}
window {
background: transparent;
box-shadow: none;
border: none;
}
window > box {
color: ${scheme.base05};
background: ${scheme.base00};
margin: 5px 5px 0px;
padding: 0px;
border-top: 1px solid ${scheme.base04};
border-radius: 5px;
}
tooltip {
background: alpha(${scheme.base00}, ${alpha});
border: 1px solid ${scheme.base0E};
border-radius: 5px;
box-shadow: none;
}
tooltip label {
color: ${scheme.base05};
border: none;
padding: 5px;
margin: 0px;
}
#workspaces,
#window,
#mpris,
#pulseaudio,
#network,
#bluetooth,
#backlight,
#battery,
#clock,
#custom-notification,
#custom-weather,
#tray {
margin: 0px;
padding: 1px 5px;
}
#workspaces,
#window,
#tray,
#backlight,
#battery,
#custom-weather {
color: ${scheme.base05};
}
#workspaces button {
background: transparent;
color: ${scheme.base05};
margin: 0px;
padding: 0px 5px;
}
#workspaces button.empty {
color: ${scheme.base03};
}
#workspaces button.active {
color: ${scheme.base0E};
}
#workspaces button.urgent {
color: ${scheme.base09};
}
#mpris.paused {
color: ${scheme.base03};
}
#custom-notification {
color: ${scheme.base08};
}
#pulseaudio {
color: ${scheme.base09};
}
#network {
color: ${scheme.base0A};
}
#bluetooth {
color: ${scheme.base0B};
}
#clock.calendar {
color: ${scheme.base0C};
}
#clock {
color: ${scheme.base0D};
}
#battery.warning {
color: ${scheme.base09};
}
#battery.critical {
color: ${scheme.base08};
}
#battery.charging,
#battery.plugged {
color: ${scheme.base0B};
}
#systemd-failed-units.ok {
color: ${scheme.base0B}
}
#systemd-failed-units.degraded {
color: ${scheme.base08}
}
'';
};
}