{ config, lib, pkgs, ... }: let cfg = config.ar.home; in { config = lib.mkIf cfg.services.waybar.enable { programs.waybar = { enable = true; settings = { mainBar = { height = 32; layer = "top"; output = ["*"]; position = "top"; modules-left = lib.optionals (cfg.desktop.hyprland.enable) ["hyprland/workspaces" "hyprland/submap"] ++ lib.optionals (cfg.desktop.sway.enable) ["sway/workspaces" "sway/scratchpad" "sway/mode"] ++ lib.optionals (cfg.desktop.hyprland.tabletMode.enable) ["custom/menu" "custom/hyprland-close"]; modules-center = ["clock"]; modules-right = [ "tray" "group/hardware" "group/session" ]; "hyprland/workspaces" = { "all-outputs" = true; "format" = "{icon} {name}"; "format-icons" = { "default" = "󰝥"; "active" = "󰪥"; }; "sort-by" = "id"; }; "hyprland/submap" = { "on-click" = ''${lib.getExe' config.wayland.windowManager.hyprland.package "hyprctl"} dispatch submap reset''; }; "sway/workspaces" = { "all-outputs" = true; "format" = "{icon} {name}"; "format-icons" = { "default" = "󰝥"; "focused" = "󰪥"; }; "sort-by" = "id"; }; "sway/mode" = { "on-click" = ''${lib.getExe' config.wayland.windowManager.sway.package "swaymsg"} mode default''; }; "sway/scratchpad" = { "format" = "{icon} {count}"; "format-icons" = ["" ""]; "show-empty" = false; "tooltip" = true; "tooltip-format" = "{app}: {title}"; }; "custom/hyprland-close" = { "on-click" = ''${lib.getExe' config.wayland.windowManager.hyprland.package "hyprctl"} dispatch killactive''; "format" = "󰅗"; "tooltip-format" = "Close the focused window."; }; "clock" = { "format" = "{:%I:%M%p}"; "interval" = 60; "tooltip-format" = "{:%Y-%m-%d | %H:%M}"; }; "battery" = let checkBattery = pkgs.writeShellScript "check-battery" '' if [ -d /sys/class/power_supply/BAT0 ]; then BAT=/sys/class/power_supply/BAT0 elif [ -d /sys/class/power_supply/BAT1 ]; then BAT=/sys/class/power_supply/BAT1 else echo "No battery found." exit 1 fi CRIT=''${1:-10} NOTIFY=${lib.getExe' pkgs.libnotify "notify-send"} stat=$(${lib.getExe' pkgs.coreutils "cat"} $BAT/status) perc=$(${lib.getExe' pkgs.coreutils "cat"} $BAT/capacity) if [[ $perc -le $CRIT ]] && [[ $stat == "Discharging" ]]; then $NOTIFY --urgency=critical --icon=dialog-error "Battery Critical" "Current charge: $perc%". fi ''; in { "format" = "{icon}"; "format-icons" = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; "on-update" = "${checkBattery}"; "tooltip-format" = '' {capacity}%: {timeTo}. Draw: {power} watts.''; "states" = {"critical" = 20;}; }; "idle_inhibitor" = { "format" = "{icon}"; "format-icons" = { "activated" = "󰅶"; "deactivated" = "󰾪"; }; "timeout" = 45; "tooltip-format-activated" = '' Presentation mode enabled. System will not sleep.''; "tooltip-format-deactivated" = '' Presentation mode disabled. System will sleep normally.''; }; "bluetooth" = { "format" = ""; "format-connected" = " {num_connections}"; "format-disabled" = ""; # an empty format will hide the module "on-click" = lib.getExe' pkgs.blueberry "blueberry"; "tooltip-format" = "{controller_alias} {controller_address}"; "tooltip-format-connected" = '' {controller_alias} {controller_address} {device_enumerate}''; "tooltip-format-enumerate-connected" = "{device_alias} {device_address}"; }; "pulseaudio" = { "format" = "{icon}"; "format-bluetooth" = "{volume}% {icon}󰂯"; "format-muted" = ""; "format-icons" = { "headphones" = "󰋋"; "handsfree" = "󰋎"; "headset" = "󰋎"; "default" = ["" "" ""]; }; "ignored-sinks" = ["Easy Effects Sink"]; "on-click" = "${lib.getExe pkgs.pavucontrol} -t 3"; "scroll-step" = 5; }; "network" = { "format-disabled" = "󰀝"; "format-disconnected" = "󰀦"; "format-ethernet" = "󰈀"; "format-icons" = ["󰤟" "󰤢" "󰤥" "󰤨"]; "format-wifi" = "{icon}"; "on-click" = "${lib.getExe pkgs.networkmanager_dmenu} -i"; "tooltip-format" = "{ifname} via {gwaddr} 󰊗"; "tooltip-format-disconnected" = "Disconnected"; "tooltip-format-ethernet" = "{ifname} "; "tooltip-format-wifi" = "{essid} ({signalStrength}%) {icon}"; }; "tray" = {"spacing" = 15;}; "custom/dnd" = let mako-dnd = pkgs.writeShellScript "mako-dnd" '' show() { MAKO_MODE=$(${lib.getExe' pkgs.mako "makoctl"} mode) if ${lib.getExe' pkgs.coreutils "echo"} "$MAKO_MODE" | ${lib.getExe' pkgs.gnugrep "grep"} -q "do-not-disturb"; then ${lib.getExe' pkgs.coreutils "printf"} '{"text": "󰂛", "class": "on", "tooltip": "Notifications snoozed."}\n' else ${lib.getExe' pkgs.coreutils "printf"} '{"text": "󰂚", "class": "off","tooltip": "Notifications enabled."}\n' fi } toggle() { ${lib.getExe' pkgs.mako "makoctl"} mode -t do-not-disturb ${lib.getExe' pkgs.procps "pkill"} -SIGRTMIN+2 .waybar-wrapped } [ $# -gt 0 ] && toggle || show ''; in { "exec" = "${mako-dnd}"; "interval" = "once"; "on-click" = "${mako-dnd} toggle"; "return-type" = "json"; "signal" = 2; }; "custom/logout" = { "format" = "󰤆"; "on-click" = ''${lib.getExe config.programs.rofi.package} -i -show power-menu -modi "power-menu:${lib.getExe pkgs.rofi-power-menu} --choices=logout/lockscreen/suspend/shutdown/reboot"''; "tooltip-format" = "Manage your session."; }; "custom/menu" = { "format" = "󰀻"; "on-click" = "${lib.getExe pkgs.nwg-drawer} -mt 5"; "tooltip-format" = "Touch-friendly application menu."; }; "power-profiles-daemon" = { "format" = "{icon}"; "format-icons" = { "balanced" = "󰗑"; "default" = "󱐌"; "performance" = "󱐌"; "power-saver" = "󰌪"; }; "tooltip-format" = '' Profile: {profile} Driver: {driver}''; "tooltip" = true; }; "group/hardware" = { "orientation" = "horizontal"; modules = ["pulseaudio" "bluetooth" "network" "power-profiles-daemon" "battery"]; }; "group/session" = { "orientation" = "horizontal"; modules = ["custom/dnd" "idle_inhibitor" "custom/logout"]; }; }; }; systemd.enable = true; }; systemd.user.services.waybar = { Install.WantedBy = lib.mkForce ["hyprland-session.target" "sway-session.target"]; Service = { Restart = lib.mkForce "on-failure"; RestartSec = 5; }; }; xdg.configFile."waybar/style.css".text = '' * { border: none; border-radius: 0px; font-family: "${cfg.theme.monospaceFont.name}"; font-size: ${toString (cfg.theme.monospaceFont.size + 3)}px; font-weight: 600; } window#waybar { background: rgba (35, 38, 52, 0.0); color: ${cfg.theme.colors.text}; } #workspaces button { padding: 0px 5px; margin: 0px 0px; color: ${cfg.theme.colors.text}; } #workspaces button.active, #workspaces button.focused { color: ${cfg.theme.colors.primary}; } #clock, #battery, #bluetooth, #network, #power-profiles-daemon, #pulseaudio, #wireplumber, #idle_inhibitor, #custom-dnd, #custom-logout, #custom-menu, #tray { padding: 0px 7.5px; margin: 0px 5px; } #battery { color: ${cfg.theme.colors.text}; } #battery.charging { color: ${cfg.theme.colors.primary}; } #battery.critical:not(.charging), #custom-dnd.on { color: #e78284; } #clock, #custom-hyprland-close, #custom-menu, #hardware, #mode, #scratchpad, #session, #submap, #tray, #workspaces { border-radius: 10px; background: rgba (36, 36, 36, 0.8); margin: 5px 10px 0px 10px; padding: 0px 10px 0px 10px; } #clock, #custom-menu, #custom-hyprland-close { padding: 0px 20px 0px 20px; } #submap, #mode { color: ${cfg.theme.colors.text}; background: rgba(255, 123, 99, 0.8); } ''; }; }