{
config,
pkgs,
...
}: {
systemd.user.targets.tray.Unit = {
Description = "Home Manager System Tray";
Requires = ["graphical-session-pre.target"];
};
programs.waybar = {
enable = true;
style = builtins.readFile (config.lib.stylix.colors {
template = ./default.mustache;
extension = ".css";
});
systemd = {
enable = true;
target = "hyprland-session.target";
};
settings.main = {
layer = "top";
position = "top";
# Layout
"modules-left" = ["hyprland/window" "mpris"];
"modules-center" = ["hyprland/workspaces"];
"modules-right" = [
"custom/notification"
"pulseaudio"
"network"
"bluetooth"
"clock#calendar"
"clock"
"backlight"
"battery"
"custom/weather"
"tray"
];
# Module config
"hyprland/window" = {
"format" = "{title}";
# TODO workspace rewrites
"rewrite" = {
"(.*) - GNU Emacs at (.*)" = " $1 [$2]";
"(Alacritty.*)" = " $1";
"(.*) - mpv" = " $1";
"(btm)" = " Resource Usage [$1]";
"(cava)" = " Music Visualiser [$1]";
"(.*) - Thunar" = " $1";
"Nyxt - (.*)" = " $1";
"(.*) — Mozilla Firefox" = " $1";
"((?:.*)WebCord.*)" = " $1";
"(Signal.*)" = " $1";
"(WhatsApp for Linux.*)" = " $1";
"([Ss]team)" = " $1";
"(Prism Launcher.*)" = " Minecraft ($1)";
"Microsoft Teams(?: classic)?(?: - )?(.*)(?: \| Microsoft Teams)?" = " $1";
};
"separate-outputs" = true;
};
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
default = " ";
active = " ";
urgent = " ";
};
show-special = false;
persistent-workspaces = {
"1" = [];
"2" = [];
"3" = [];
"4" = [];
"5" = [];
"6" = [];
};
};
mpris = {
"format" = "> {player_icon} {player}";
"tooltip-format" = "{player_icon} ({player}) {dynamic}";
"interval" = 1;
"dynamic-order" = ["album" "artist" "title" "position" "length"];
"player-icons" = {
"default" = " ";
"emms" = " ";
"firefox" = " ";
"mpv" = " ";
};
"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 = " ";
tooltip-format = "{essid} ({signalStrength}%)";
format-linked = " ";
format-disconnected = " ";
};
bluetooth = {
format = " ";
format-disabled = " ";
format-off = " ";
format-on = " ";
format-connected = " ";
tooltip-format = "{status} | {device_alias}";
on-click = "${pkgs.bluez}/bin/bluetoothctl power on";
on-click-right = "${pkgs.bluez}/bin/bluetoothctl power off";
};
"clock#calendar" = {
format = "{: %Y-%m-%d}";
tooltip-format = "{calendar}";
calendar = {
mode = "month";
mode-mon-col = 3;
weeks-pos = "left";
on-scroll = 1;
on-click-right = "mode";
format = {
months = "{}";
days = "{}";
weeks = "W{}";
weekdays = "{}";
today = "{}";
};
};
actions = {
on-click-right = "mode";
on-scroll-up = "shift_up";
on-scroll-down = "shift_down";
};
};
clock = {format = "{: %R}";};
backlight = {
format = "{icon}";
tooltip-format = "{percent}%";
format-icons = [" " " " " " " " " " " " " " " " " "];
};
battery = {
states = {
warning = 30;
critical = 20;
};
format = "{icon}";
format-charging = " ";
format-plugged = " ";
tooltip-format = "{capacity}% {time}";
format-icons = [" " " " " " " " " " " " " " " " " " " " " "];
};
"custom/notification" = let
swaync = pkgs.swaynotificationcenter;
in {
"tooltip" = false;
"format" = "{icon}{}";
"format-icons" = {
"notification" = " ";
"none" = " ";
"dnd-notification" = " ";
"dnd-none" = " ";
"inhibited-notification" = " ";
"inhibited-none" = " ";
"dnd-inhibited-notification" = " ";
"dnd-inhibited-none" = " ";
};
"return-type" = "json";
"exec-if" = "which ${swaync}/bin/swaync-client";
"exec" = "${swaync}/bin/swaync-client -swb";
"on-click" = "${swaync}/bin/swaync-client -t -sw";
"on-click-right" = "${swaync}/bin/swaync-client -d -sw";
"escape" = true;
};
"custom/weather" = {
"format" = "{}°";
"tooltip" = true;
"interval" = 3600;
"exec" = "${pkgs.wttrbar}/bin/wttrbar --location London --hide-conditions";
"return-type" = "json";
};
tray = {
icon-size = config.stylix.fonts.sizes.desktop;
show-passive-items = true;
spacing = 5;
};
};
};
}