409 lines
11 KiB
Nix
409 lines
11 KiB
Nix
{ config, pkgs, ... }:
|
|
{
|
|
imports = [ ./avizo.nix ];
|
|
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 = "left";
|
|
# Layout
|
|
"modules-left" = [
|
|
"hyprland/workspaces"
|
|
"mpris"
|
|
];
|
|
"modules-center" = [ ];
|
|
"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" = "";
|
|
"7" = "";
|
|
default = "";
|
|
};
|
|
all-outputs = false;
|
|
persistent-workspaces = {
|
|
"1" = [ ];
|
|
"2" = [ ];
|
|
"3" = [ ];
|
|
"4" = [ ];
|
|
"5" = [ ];
|
|
"6" = [ ];
|
|
"7" = [ ];
|
|
};
|
|
};
|
|
"hyprland/window" = {
|
|
"format" = "{title}";
|
|
"max-length" = 50;
|
|
"rewrite" = {
|
|
"(.*) - GNU Emacs at (.*)" = " $1 [$2]";
|
|
"(alacritty.*)" = " $1";
|
|
"(.*) - mpv" = " $1";
|
|
"swayimg: (.*)" = " $1";
|
|
"swappy" = " swappy";
|
|
"(?:/nix/.*)(btm)" = " Resource Usage [$1]";
|
|
"(?:/nix/.*)(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}\n{status_icon}";
|
|
"tooltip-format" = "{player_icon} ({player}) {status_icon}\n{title}\n{album}\n{artist}";
|
|
"interval" = 1;
|
|
"dynamic-order" = [
|
|
"album"
|
|
"artist"
|
|
"title"
|
|
"position"
|
|
"length"
|
|
];
|
|
"player-icons" = {
|
|
"default" = "";
|
|
};
|
|
"status-icons" = {
|
|
"playing" = "";
|
|
"paused" = "";
|
|
"stopped" = "";
|
|
};
|
|
"ignored-players" = [ "firefox" ];
|
|
};
|
|
pulseaudio = {
|
|
scroll-step = 5;
|
|
format = "{format_source}\n{icon}";
|
|
# format-muted = "{format_source} {icon}";
|
|
format-source = "";
|
|
format-source-muted = "";
|
|
format-icons = {
|
|
car = "";
|
|
default = [
|
|
""
|
|
""
|
|
""
|
|
];
|
|
default-muted = "";
|
|
hands-free = "";
|
|
headset = "";
|
|
phone = "";
|
|
portable = "";
|
|
headphone = "";
|
|
};
|
|
tooltip = true;
|
|
tooltip-format = "{desc} ({volume}%)";
|
|
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
|
|
on-click-right = "${config.services.avizo.package}/bin/volumectl %";
|
|
on-scroll-up = "${config.services.avizo.package}/bin/volumectl -u + 5";
|
|
on-scroll-down = "${config.services.avizo.package}/bin/volumectl -u - 5";
|
|
};
|
|
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.overskride}/bin/overskride";
|
|
};
|
|
"clock#calendar" =
|
|
let
|
|
size = "${toString config.stylix.fonts.sizes.popups}pt";
|
|
in
|
|
{
|
|
format = "";
|
|
tooltip-format = "<span size='${size}'>{calendar}</span>";
|
|
calendar = {
|
|
mode = "month";
|
|
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}'><i>W{}</i></span>";
|
|
weekdays = "<span color='${scheme.orange}'><u>{}</u></span>";
|
|
days = "<span color='${scheme.base05}'>{}</span>";
|
|
today = "<span color='${scheme.magenta}'><b><u>{}</u></b></span>";
|
|
};
|
|
};
|
|
actions = {
|
|
on-scroll-up = "shift_up";
|
|
on-scroll-down = "shift_down";
|
|
};
|
|
};
|
|
clock = {
|
|
format = "{:%H\n%M}";
|
|
tooltip = false;
|
|
};
|
|
backlight = {
|
|
format = "{icon}";
|
|
tooltip-format = "{percent}%";
|
|
format-icons = [
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
];
|
|
};
|
|
battery = {
|
|
states = {
|
|
warning = 20;
|
|
critical = 10;
|
|
};
|
|
format = "{icon}";
|
|
format-time = "{H}:{m}";
|
|
format-charging = "";
|
|
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 = true;
|
|
format = "";
|
|
tooltip = true;
|
|
tooltip-format = "System failed:{nr_failed_system}\nUser failed:{nr_failed_user}";
|
|
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 = "{}";
|
|
tooltip = false;
|
|
on-click = "${makoctl} dismiss -a";
|
|
interval = 3;
|
|
};
|
|
"custom/weather" =
|
|
let
|
|
date-format = "%Y-%m-%d";
|
|
custom-indicator = "{ICON}"; # "{temp_C}°C({FeelsLikeC}°C)";
|
|
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;
|
|
opacity = config.stylix.opacity.desktop;
|
|
in
|
|
''
|
|
* {
|
|
all: unset;
|
|
font-family: ${config.stylix.fonts.monospace.name};
|
|
font-size: ${toString (config.stylix.fonts.sizes.desktop + 2)}px;
|
|
}
|
|
|
|
window {
|
|
background: transparent;
|
|
box-shadow: none;
|
|
border: none;
|
|
}
|
|
|
|
window > box {
|
|
color: ${scheme.base05};
|
|
background: alpha(${scheme.base00}, ${toString opacity});
|
|
margin: 5px 0px 5px 6px;
|
|
padding: 2px;
|
|
border: 1px solid ${scheme.base04};
|
|
border-radius: 10px;
|
|
}
|
|
|
|
tooltip {
|
|
background: ${scheme.base00};
|
|
border: 2px solid ${scheme.base0E};
|
|
border-radius: 10px;
|
|
box-shadow: none;
|
|
padding: 10px;
|
|
}
|
|
|
|
tooltip label {
|
|
color: ${scheme.base05};
|
|
border: none;
|
|
padding: 5px;
|
|
margin: 0px;
|
|
}
|
|
|
|
#workspaces,
|
|
#window,
|
|
#mpris,
|
|
#custom-notification,
|
|
#pulseaudio,
|
|
#network,
|
|
#bluetooth,
|
|
#clock,
|
|
#backlight,
|
|
#battery,
|
|
#custom-weather,
|
|
#tray {
|
|
margin: 0px;
|
|
padding: 2px 4px 2px 3px;
|
|
}
|
|
|
|
#workspaces {
|
|
background: ${scheme.base00};
|
|
border-radius: 5px;
|
|
margin: 3px 2px;
|
|
padding: 2px 3px;
|
|
}
|
|
|
|
#workspaces button {
|
|
padding: 2px 5px 2px 1px;
|
|
}
|
|
#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};
|
|
padding: 2px 6px 2px 1px;
|
|
}
|
|
#bluetooth {
|
|
color: ${scheme.base0B};
|
|
}
|
|
#clock.calendar {
|
|
color: ${scheme.base0C};
|
|
padding: 2px 3px 2px 3px;
|
|
}
|
|
#clock {
|
|
color: ${scheme.base0D};
|
|
padding: 2px 1px 2px 2px;
|
|
}
|
|
|
|
#backlight {
|
|
padding: 2px 3px 2px 3px;
|
|
}
|
|
#battery {
|
|
padding: 2px 2px 2px 4px;
|
|
}
|
|
#battery.warning {
|
|
color: ${scheme.base09};
|
|
}
|
|
#battery.critical {
|
|
color: ${scheme.base08};
|
|
}
|
|
#battery.charging,
|
|
#battery.plugged {
|
|
color: ${scheme.base0B};
|
|
}
|
|
|
|
#systemd-failed-units {
|
|
padding: 2px 4px 2px 1px;
|
|
}
|
|
#systemd-failed-units.ok {
|
|
color: ${scheme.base0B}
|
|
}
|
|
#systemd-failed-units.degraded {
|
|
color: ${scheme.base08}
|
|
}
|
|
|
|
#custom-weather,
|
|
#tray {
|
|
padding: 2px 2px 2px 3px;
|
|
}
|
|
'';
|
|
};
|
|
}
|