nixos/system/home/waybar.nix
Evie Litherland-Smith 36825e26a5 Add and switch to modified build of Iosevka font
Update Makefile for building and copying new fonts

Adjust padding of parts of waybar, using variable width glyphs in
Iosevka font
2025-01-07 08:18:05 +00:00

395 lines
10 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" = [
"com"
"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.blueman}/bin/blueman-manager";
};
"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 = "󰀦";
system = true;
user = false;
};
"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}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.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}
}
#custom-weather,
#tray {
padding: 2px 2px 2px 3px;
}
'';
};
}