nixos/system/home/waybar.nix

376 lines
9.8 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#source"
"pulseaudio#sink"
"network"
"bluetooth"
"custom/calendar-icon"
"clock#calendar"
"custom/clock-icon"
"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" = [ ];
};
};
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#source" = {
scroll-step = 5;
format = "{format_source}";
format-source = "󰍬";
format-source-muted = "󰍭";
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";
};
"pulseaudio#sink" = {
scroll-step = 5;
format = "{icon}";
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";
};
"custom/calendar-icon" = {
format = "󰃭";
tooltip = false;
};
"clock#calendar" =
let
size = "${toString config.stylix.fonts.sizes.popups}pt";
in
{
format = "{:%d\n%m}";
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";
};
};
"custom/clock-icon" = {
format = "󰅐";
tooltip = false;
};
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 = "󰚥";
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 {
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.source {
color: ${scheme.base09};
}
#pulseaudio.sink {
color: ${scheme.base0A};
}
#network {
color: ${scheme.base0B};
}
#bluetooth {
color: ${scheme.base0C};
}
#custom-calendar-icon,
#clock.calendar {
color: ${scheme.base0D};
}
#custom-clock-icon,
#clock {
color: ${scheme.base0E};
}
#backlight {
color: ${scheme.base0F};
}
#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;
}
'';
};
}