{ 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" "keyboard-state" "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} {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" = "󰲸 "; }; "status-icons" = { "playing" = "󰐊"; "paused" = "󰏤"; "stopped" = "󰓛"; }; "ignored-players" = [ "firefox" ]; }; 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.overskride}/bin/overskride"; }; "clock#calendar" = let size = "${toString config.stylix.fonts.sizes.popups}pt"; in { format = "󰃭 {:%Y-%m-%d}"; tooltip-format = "{calendar}"; calendar = { mode = "month"; weeks-pos = "left"; on-scroll = 1; format = let scheme = config.lib.stylix.scheme.withHashtag; in { months = "{}"; weeks = "W{}"; weekdays = "{}"; days = "{}"; today = "{}"; }; }; actions = { on-scroll-up = "shift_up"; on-scroll-down = "shift_down"; }; }; clock.format = "󰥔 {:%R}"; "keyboard-state" = { capslock = true; format.capslock = "󰪛 :{icon}"; format-icons = { locked = "󰌾 "; unlocked = "󰌿 "; }; }; 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}°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; 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: ${scheme.base00}; border: 1px solid ${scheme.base0C}; border-radius: 5px; box-shadow: none; } tooltip label { color: ${scheme.base05}; border: none; padding: 5px; margin: 0px; } #workspaces, #window, #mpris, #custom-notification, #pulseaudio, #network, #bluetooth, #clock, #keyboard-state, #backlight, #battery, #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.base0C}; } #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}; } #keyboard-state { color: ${scheme.base0E}; } #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} } ''; }; }