960 lines
32 KiB
Nix
960 lines
32 KiB
Nix
{pkgs, ...}: let
|
|
# Install any helper scripts shipped in modules/home/waybar/scripts into ~/.config/waybar/scripts
|
|
scriptsDir = ./scripts;
|
|
scripts = builtins.attrNames (builtins.readDir scriptsDir);
|
|
|
|
# Inline, improved Cava script packaged via Nix so we don't rely on an external bash file
|
|
waybarCava = pkgs.writeShellScriptBin "WaybarCava" ''
|
|
set -euo pipefail
|
|
|
|
# Ensure cava exists
|
|
if ! command -v cava >/dev/null 2>&1; then
|
|
echo "cava not found in PATH" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Characters for vertical bars (0..7)
|
|
bar="▁▂▃▄▅▆▇█"
|
|
|
|
# Build sed script that:
|
|
# - strips semicolons (cava RAW ASCII delimiter)
|
|
# - maps digits 0..7 to the corresponding glyph in $bar
|
|
dict="s/;//g"
|
|
bar_length=''${#bar}
|
|
for ((i = 0; i < bar_length; i++)); do
|
|
dict+=";s/$i/''${bar:$i:1}/g"
|
|
done
|
|
|
|
# Single-instance guard (kill prior instance cleanly)
|
|
RUNTIME_DIR="''${XDG_RUNTIME_DIR:-/tmp}"
|
|
pidfile="$RUNTIME_DIR/waybar-cava.pid"
|
|
if [ -f "$pidfile" ]; then
|
|
oldpid=$(cat "$pidfile" || true)
|
|
if [ -n "''${oldpid:-}" ] && kill -0 "$oldpid" 2>/dev/null; then
|
|
kill "$oldpid" 2>/dev/null || true
|
|
# Give the old pipeline a moment to exit
|
|
sleep 0.1 || true
|
|
fi
|
|
fi
|
|
echo $$ > "$pidfile"
|
|
|
|
# Use a unique temporary config and clean it up on exit
|
|
config_file=$(mktemp "''${RUNTIME_DIR}/waybar-cava.XXXXXX.conf")
|
|
cleanup() {
|
|
rm -f "$config_file" "$pidfile"
|
|
}
|
|
trap cleanup EXIT INT TERM
|
|
|
|
cat >"$config_file" <<EOF
|
|
[general]
|
|
framerate = 30
|
|
bars = 10
|
|
|
|
[input]
|
|
method = pulse
|
|
source = auto
|
|
|
|
[output]
|
|
method = raw
|
|
raw_target = /dev/stdout
|
|
data_format = ascii
|
|
ascii_max_range = 7
|
|
EOF
|
|
|
|
# Stream cava output and transform
|
|
exec cava -p "$config_file" | sed -u "$dict"
|
|
'';
|
|
|
|
# Catppuccin Mocha palette so CSS can be self-contained (no @import needed)
|
|
catppuccinColors = {
|
|
rosewater = "#f5e0dc";
|
|
flamingo = "#f2cdcd";
|
|
pink = "#f5c2e7";
|
|
mauve = "#cba6f7";
|
|
red = "#f38ba8";
|
|
maroon = "#eba0ac";
|
|
peach = "#fab387";
|
|
yellow = "#f9e2af";
|
|
green = "#a6e3a1";
|
|
teal = "#94e2d5";
|
|
sky = "#89dceb";
|
|
sapphire = "#74c7ec";
|
|
blue = "#89b4fa";
|
|
lavender = "#b4befe";
|
|
text = "#cdd6f4";
|
|
subtext1 = "#bac2de";
|
|
subtext0 = "#a6adc8";
|
|
overlay2 = "#9399b2";
|
|
overlay1 = "#7f849c";
|
|
overlay0 = "#6c7086";
|
|
surface2 = "#585b70";
|
|
surface1 = "#45475a";
|
|
surface0 = "#313244";
|
|
base = "#1e1e2e";
|
|
mantle = "#181825";
|
|
crust = "#11111b";
|
|
};
|
|
in {
|
|
# Ensure bundled Waybar scripts are installed under ~/.config/waybar/scripts
|
|
home.file = builtins.listToAttrs (
|
|
map (name: {
|
|
name = ".config/waybar/scripts/" + name;
|
|
value = {
|
|
source = "${scriptsDir}/${name}";
|
|
executable = true;
|
|
};
|
|
})
|
|
scripts
|
|
);
|
|
|
|
programs.waybar = {
|
|
enable = true;
|
|
package = pkgs.waybar;
|
|
|
|
settings = [
|
|
{
|
|
layer = "top";
|
|
# mode = "dock"; # optional
|
|
exclusive = true;
|
|
passthrough = false;
|
|
position = "top";
|
|
spacing = 3;
|
|
"fixed-center" = true;
|
|
ipc = true;
|
|
"margin-top" = 3;
|
|
"margin-left" = 8;
|
|
"margin-right" = 8;
|
|
|
|
modules-left = [
|
|
"custom/separator#line"
|
|
"custom/startmenu"
|
|
"custom/qs_wallpapers_apply"
|
|
"custom/separator#blank"
|
|
"custom/qs_vid_wallpapers_apply"
|
|
"custom/separator#line"
|
|
"custom/separator#blank"
|
|
"custom/cava_mviz"
|
|
"custom/separator#blank"
|
|
"custom/separator#line"
|
|
"tray"
|
|
"custom/separator#line"
|
|
];
|
|
|
|
modules-center = [
|
|
"custom/separator#line"
|
|
"hyprland/workspaces#rw"
|
|
"custom/separator#line"
|
|
];
|
|
|
|
modules-right = [
|
|
"custom/separator#line"
|
|
"custom/swaync"
|
|
"custom/separator#line"
|
|
"idle_inhibitor"
|
|
"custom/separator#line"
|
|
"clock"
|
|
"custom/separator#line"
|
|
"custom/weather"
|
|
"custom/separator#line"
|
|
"group/audio"
|
|
"custom/separator#line"
|
|
"custom/power"
|
|
];
|
|
|
|
# ---------- Modules (merged from jak-waybar/Modules) ----------
|
|
temperature = {
|
|
interval = 10;
|
|
tooltip = true;
|
|
"hwmon-path" = [
|
|
"/sys/class/hwmon/hwmon1/temp1_input"
|
|
"/sys/class/thermal/thermal_zone0/temp"
|
|
];
|
|
"critical-threshold" = 82;
|
|
"format-critical" = "{temperatureC}°C {icon}";
|
|
format = "{temperatureC}°C {icon}";
|
|
"format-icons" = [""];
|
|
"on-click-right" = "$HOME/.config/hypr/scripts/WaybarScripts.sh --nvtop";
|
|
};
|
|
|
|
# backlight module removed per request
|
|
|
|
battery = {
|
|
align = 0;
|
|
rotate = 0;
|
|
"full-at" = 100;
|
|
"design-capacity" = false;
|
|
states = {
|
|
good = 95;
|
|
warning = 30;
|
|
critical = 15;
|
|
};
|
|
format = "{icon} {capacity}%";
|
|
"format-charging" = " {capacity}%";
|
|
"format-plugged" = " {capacity}%";
|
|
"format-alt-click" = "click";
|
|
"format-full" = "{icon} Full";
|
|
"format-alt" = "{icon} {time}";
|
|
"format-icons" = [
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
];
|
|
"format-time" = "{H}h {M}min";
|
|
tooltip = true;
|
|
"tooltip-format" = "{timeTo} {power}w";
|
|
"on-click-middle" = "$HOME/.config/hypr/scripts/ChangeBlur.sh";
|
|
"on-click-right" = "$HOME/.config/hypr/scripts/Wlogout.sh";
|
|
};
|
|
|
|
bluetooth = {
|
|
format = " ";
|
|
"format-disabled" = "";
|
|
"format-connected" = " {num_connections}";
|
|
"tooltip-format" = " {device_alias}";
|
|
"tooltip-format-connected" = "{device_enumerate}";
|
|
"tooltip-format-enumerate-connected" = " {device_alias} {device_battery_percentage}%";
|
|
tooltip = true;
|
|
"on-click" = "blueman-manager";
|
|
};
|
|
|
|
clock = {
|
|
interval = 1;
|
|
format = " {:%I:%M %p}";
|
|
"format-alt" = " {:%H:%M %Y, %d %B, %A}";
|
|
"tooltip-format" = "<tt><small>{calendar}</small></tt>";
|
|
calendar = {
|
|
mode = "year";
|
|
"mode-mon-col" = 3;
|
|
"weeks-pos" = "right";
|
|
"on-scroll" = 1;
|
|
format = {
|
|
months = "<span color='#ffead3'><b>{}</b></span>";
|
|
days = "<span color='#ecc6d9'><b>{}</b></span>";
|
|
weeks = "<span color='#99ffdd'><b>W{:%V}</b></span>";
|
|
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
|
|
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
|
|
};
|
|
};
|
|
actions = {
|
|
"on-click-right" = "mode";
|
|
"on-click-forward" = "tz_up";
|
|
"on-click-backward" = "tz_down";
|
|
"on-scroll-up" = "shift_up";
|
|
"on-scroll-down" = "shift_down";
|
|
};
|
|
};
|
|
|
|
cpu = {
|
|
format = "{usage}% ";
|
|
interval = 1;
|
|
"min-length" = 5;
|
|
"format-alt-click" = "click";
|
|
"format-alt" = "{icon0}{icon1}{icon2}{icon3} {usage:>2}% ";
|
|
"format-icons" = [
|
|
"▁"
|
|
"▂"
|
|
"▃"
|
|
"▄"
|
|
"▅"
|
|
"▆"
|
|
"▇"
|
|
"█"
|
|
];
|
|
"on-click-right" = "gnome-system-monitor";
|
|
};
|
|
|
|
disk = {
|
|
interval = 30;
|
|
path = "/";
|
|
format = "{percentage_used}% ";
|
|
"tooltip-format" = "{used} used out of {total} on {path} ({percentage_used}%)";
|
|
};
|
|
|
|
"hyprland/window" = {
|
|
format = "{}";
|
|
"max-length" = 25;
|
|
"separate-outputs" = true;
|
|
"offscreen-css" = true;
|
|
"offscreen-css-text" = "(inactive)";
|
|
rewrite = {
|
|
"(.*) — Mozilla Firefox" = " $1";
|
|
"(.*) - fish" = "> [$1]";
|
|
"(.*) - zsh" = "> [$1]";
|
|
};
|
|
};
|
|
|
|
idle_inhibitor = {
|
|
tooltip = true;
|
|
"tooltip-format-activated" = "Idle_inhibitor active";
|
|
"tooltip-format-deactivated" = "Idle_inhibitor not active";
|
|
format = "{icon}";
|
|
# Requested change: coffee mug icon for both states
|
|
"format-icons" = {
|
|
activated = " ";
|
|
deactivated = " ";
|
|
};
|
|
};
|
|
|
|
"keyboard-state" = {
|
|
capslock = true;
|
|
format = {
|
|
numlock = "N {icon}";
|
|
capslock = " {icon}";
|
|
};
|
|
"format-icons" = {
|
|
locked = "";
|
|
unlocked = "";
|
|
};
|
|
};
|
|
|
|
memory = {
|
|
interval = 10;
|
|
format = "{used:0.1f}G ";
|
|
"format-alt" = "{percentage}% ";
|
|
"format-alt-click" = "click";
|
|
tooltip = true;
|
|
"tooltip-format" = "{used:0.1f}GB/{total:0.1f}G";
|
|
"on-click-right" = "$HOME/.config/hypr/scripts/WaybarScripts.sh --btop";
|
|
};
|
|
|
|
network = {
|
|
format = "{ifname}";
|
|
"format-wifi" = "{icon}";
|
|
"format-ethernet" = "";
|
|
"format-disconnected" = "";
|
|
"tooltip-format" = "{ipaddr} {bandwidthUpBits} {bandwidthDownBits}";
|
|
"format-linked" = " {ifname} (No IP)";
|
|
"tooltip-format-wifi" = "{essid} {icon} {signalStrength}%";
|
|
"tooltip-format-ethernet" = "{ifname} ";
|
|
"tooltip-format-disconnected" = " Disconnected";
|
|
"max-length" = 30;
|
|
"format-icons" = [
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
];
|
|
"on-click-right" = "$HOME/.config/hypr/scripts/WaybarScripts.sh --nmtui";
|
|
};
|
|
|
|
"network#speed" = {
|
|
interval = 1;
|
|
format = "{ifname}";
|
|
"format-wifi" = "{icon} {bandwidthUpBytes} {bandwidthDownBytes}";
|
|
"format-ethernet" = " {bandwidthUpBytes} {bandwidthDownBytes}";
|
|
"format-disconnected" = "";
|
|
"tooltip-format" = "{ipaddr}";
|
|
"format-linked" = " {ifname} (No IP)";
|
|
"tooltip-format-wifi" = "{essid} {icon} {signalStrength}%";
|
|
"tooltip-format-ethernet" = "{ifname} ";
|
|
"tooltip-format-disconnected" = " Disconnected";
|
|
"min-length" = 24;
|
|
"max-length" = 24;
|
|
"format-icons" = [
|
|
""
|
|
""
|
|
""
|
|
""
|
|
""
|
|
];
|
|
};
|
|
|
|
"power-profiles-daemon" = {
|
|
format = "{icon} ";
|
|
"tooltip-format" = "Power profile: {profile}\nDriver: {driver}";
|
|
tooltip = true;
|
|
"format-icons" = {
|
|
default = "";
|
|
performance = "";
|
|
balanced = "";
|
|
"power-saver" = "";
|
|
};
|
|
};
|
|
|
|
pulseaudio = {
|
|
format = "{icon} {volume}%";
|
|
"format-bluetooth" = "{icon} {volume}%";
|
|
"format-muted" = "";
|
|
"format-icons" = {
|
|
headphone = "";
|
|
"hands-free" = "";
|
|
headset = "";
|
|
phone = "";
|
|
portable = "";
|
|
car = "";
|
|
default = [
|
|
""
|
|
""
|
|
""
|
|
""
|
|
];
|
|
"ignored-sinks" = ["Easy Effects Sink"];
|
|
};
|
|
"scroll-step" = 5.0;
|
|
"on-click" = "$HOME/.config/hypr/scripts/Volume.sh --toggle";
|
|
"on-click-right" = "pavucontrol -t 3";
|
|
"on-scroll-up" = "$HOME/.config/hypr/scripts/Volume.sh --inc";
|
|
"on-scroll-down" = "$HOME/.config/hypr/scripts/Volume.sh --dec";
|
|
"tooltip-format" = "{icon} {desc} | {volume}%";
|
|
"smooth-scrolling-threshold" = 1;
|
|
};
|
|
|
|
"pulseaudio#microphone" = {
|
|
format = "{format_source}";
|
|
"format-source" = " {volume}%";
|
|
"format-source-muted" = "";
|
|
"on-click" = "$HOME/.config/hypr/scripts/Volume.sh --toggle-mic";
|
|
"on-click-right" = "pavucontrol -t 4";
|
|
"on-scroll-up" = "$HOME/.config/hypr/scripts/Volume.sh --mic-inc";
|
|
"on-scroll-down" = "$HOME/.config/hypr/scripts/Volume.sh --mic-dec";
|
|
"tooltip-format" = "{source_desc} | {source_volume}%";
|
|
"scroll-step" = 5;
|
|
};
|
|
|
|
tray = {
|
|
"icon-size" = 20;
|
|
spacing = 4;
|
|
};
|
|
|
|
# ---------- Workspaces variants (from ModulesWorkspaces) ----------
|
|
"hyprland/workspaces#rw" = {
|
|
"disable-scroll" = true;
|
|
"all-outputs" = true;
|
|
"warp-on-scroll" = false;
|
|
"sort-by-number" = true;
|
|
"show-special" = false;
|
|
"on-click" = "activate";
|
|
"on-scroll-up" = "hyprctl dispatch workspace e+1";
|
|
"on-scroll-down" = "hyprctl dispatch workspace e-1";
|
|
"persistent-workspaces" = {
|
|
"*" = 5;
|
|
};
|
|
format = "{icon} {windows}";
|
|
"format-window-separator" = " ";
|
|
"window-rewrite-default" = " ";
|
|
"window-rewrite" = {
|
|
"title<.*amazon.*>" = " ";
|
|
"title<.*reddit.*>" = " ";
|
|
"title<.*[Hh]elium.*>" = " ";
|
|
"class<firefox|org.mozilla.firefox|librewolf|floorp|mercury-browser|[Cc]achy-browser>" = " ";
|
|
"class<zen>" = " ";
|
|
"class<waterfox|waterfox-bin>" = " ";
|
|
"class<microsoft-edge>" = " ";
|
|
"class<Chromium|Thorium|[Cc]hrome>" = " ";
|
|
"class<helium>" = " ";
|
|
"class<brave-browser>" = "🦁 ";
|
|
"class<tor browser>" = " ";
|
|
"class<firefox-developer-edition>" = "🦊 ";
|
|
"class<kitty|konsole>" = " ";
|
|
"class<kitty-dropterm>" = " ";
|
|
"class<com.mitchellh.ghostty>" = " ";
|
|
"class<org.wezfurlong.wezterm>" = " ";
|
|
"class<Warp|warp|dev.warp.Warp|warp-terminal>" = " ";
|
|
"class<[Tt]hunderbird|[Tt]hunderbird-esr>" = " ";
|
|
"class<eu.betterbird.Betterbird>" = " ";
|
|
"title<.*gmail.*>" = " ";
|
|
"class<[Tt]elegram-desktop|org.telegram.desktop|io.github.tdesktop_x64.TDesktop>" = " ";
|
|
"class<discord|discord-canary|[Ww]ebcord|[Vv]esktop|com.discordapp.Discord|dev.vencord.Vesktop>" = " ";
|
|
"title<.*whatsapp.*>" = " ";
|
|
"title<.*zapzap.*>" = " ";
|
|
"title<.*messenger.*>" = " ";
|
|
"title<.*facebook.*>" = " ";
|
|
"class<[Ss]ignal|signal-desktop|org.signal.Signal>" = " ";
|
|
"title<.*Signal.*>" = " ";
|
|
"title<.*ChatGPT.*>" = " ";
|
|
"title<.*deepseek.*>" = " ";
|
|
"title<.*qwen.*>" = " ";
|
|
"class<subl>" = " ";
|
|
"class<slack>" = " ";
|
|
"class<mpv>" = " ";
|
|
"class<celluloid|Zoom>" = " ";
|
|
"class<Cider>" = " ";
|
|
"title<.*Picture-in-Picture.*>" = " ";
|
|
"title<.*youtube.*>" = " ";
|
|
"class<vlc>" = " ";
|
|
"class<[Kk]denlive|org.kde.kdenlive>" = "🎬 ";
|
|
"title<.*Kdenlive.*>" = "🎬 ";
|
|
"title<.*cmus.*>" = " ";
|
|
"class<[Ss]potify>" = " ";
|
|
"class<virt-manager>" = " ";
|
|
"class<.virt-manager-wrapped>" = " ";
|
|
"class<remote-viewer|virt-viewer>" = " ";
|
|
"class<virtualbox manager>" = "💽 ";
|
|
"title<virtualbox>" = "💽 ";
|
|
"class<remmina|org.remmina.Remmina>" = "🖥️ ";
|
|
"class<VSCode|code|code-url-handler|code-oss|codium|codium-url-handler|VSCodium>" = " ";
|
|
"class<dev.zed.Zed>" = "";
|
|
"class<codeblocks>" = " ";
|
|
"title<.*github.*>" = " ";
|
|
"class<mousepad>" = " ";
|
|
"class<libreoffice-writer>" = " ";
|
|
"class<libreoffice-startcenter>" = " ";
|
|
"class<libreoffice-calc>" = " ";
|
|
"title<.*nvim ~.*>" = " ";
|
|
"title<.*vim.*>" = " ";
|
|
"title<.*nvim.*>" = " ";
|
|
"title<.*Discord.*>" = " ";
|
|
"title<.*figma.*>" = " ";
|
|
"title<.*jira.*>" = " ";
|
|
"class<jetbrains-idea>" = " ";
|
|
"class<obs|com.obsproject.Studio>" = " ";
|
|
"class<polkit-gnome-authentication-agent-1>" = " ";
|
|
"class<nwg-look>" = " ";
|
|
"class<[Pp]avucontrol|org.pulseaudio.pavucontrol>" = " ";
|
|
"class<steam>" = " ";
|
|
"class<thunar|nemo>" = " ";
|
|
"class<Gparted>" = "";
|
|
"class<gimp>" = " ";
|
|
"class<emulator>" = "📱 ";
|
|
"class<android-studio>" = " ";
|
|
"class<org.pipewire.Helvum>" = "";
|
|
"class<localsend>" = "";
|
|
"class<PrusaSlicer|UltiMaker-Cura|OrcaSlicer>" = "";
|
|
|
|
"class<io.github.kolunmi.Bazaar>" = " ";
|
|
"title<^Bazaar$>" = " ";
|
|
|
|
"class<com.gabm.satty>" = " ";
|
|
"title<^satty$>" = " ";
|
|
|
|
"class<[Bb]ox[Bb]uddy|io.github.dvlv.boxbuddy|io.github.dvlv.BoxBuddy>" = " ";
|
|
"title<.*BoxBuddy.*>" = " ";
|
|
|
|
# qs-* apps
|
|
"title<Hyprland Keybinds>" = " ";
|
|
"title<Niri Keybinds>" = " ";
|
|
"title<BSPWM Keybinds>" = " ";
|
|
"title<DWM Keybinds>" = " ";
|
|
"title<Emacs Leader Keybinds>" = " ";
|
|
"title<Kitty Configuration>" = " ";
|
|
"title<WezTerm Configuration>" = " ";
|
|
"title<Yazi Configuration>" = " ";
|
|
"title<Cheatsheets Viewer>" = " ";
|
|
"title<Documentation Viewer>" = " ";
|
|
"title<^Wallpapers$>" = " ";
|
|
"title<^Video Wallpapers$>" = " ";
|
|
"title<^qs-wlogout$>" = " ";
|
|
};
|
|
};
|
|
|
|
# ---------- Groups (from ModulesGroups) ----------
|
|
"group/app_drawer" = {
|
|
orientation = "inherit";
|
|
drawer = {
|
|
"transition-duration" = 500;
|
|
"children-class" = "custom/menu";
|
|
"transition-left-to-right" = true;
|
|
};
|
|
modules = [
|
|
"custom/menu"
|
|
"custom/file_manager"
|
|
"custom/tty"
|
|
"custom/browser"
|
|
];
|
|
};
|
|
|
|
"group/mobo_drawer" = {
|
|
orientation = "inherit";
|
|
drawer = {
|
|
"transition-duration" = 500;
|
|
"children-class" = "cpu";
|
|
"transition-left-to-right" = true;
|
|
};
|
|
modules = [
|
|
"temperature"
|
|
"cpu"
|
|
"power-profiles-daemon"
|
|
"memory"
|
|
"disk"
|
|
];
|
|
};
|
|
|
|
"group/laptop" = {
|
|
orientation = "inherit";
|
|
modules = ["battery"];
|
|
};
|
|
|
|
"group/audio" = {
|
|
orientation = "inherit";
|
|
drawer = {
|
|
"transition-duration" = 500;
|
|
"children-class" = "pulseaudio";
|
|
"transition-left-to-right" = true;
|
|
};
|
|
modules = [
|
|
"pulseaudio"
|
|
"pulseaudio#microphone"
|
|
];
|
|
};
|
|
|
|
"group/status" = {
|
|
orientation = "inherit";
|
|
drawer = {
|
|
"transition-duration" = 500;
|
|
"children-class" = "custom/power";
|
|
"transition-left-to-right" = false;
|
|
};
|
|
modules = [
|
|
"custom/power"
|
|
"custom/lock"
|
|
"keyboard-state"
|
|
];
|
|
};
|
|
|
|
# ---------- Custom modules (from ModulesCustom) ----------
|
|
"custom/weather" = {
|
|
return-type = "json";
|
|
exec = "sh -lc 'WEATHER_ICON_STYLE=emoji WEATHER_TOOLTIP_MARKUP=1 ~/.local/bin/weather'";
|
|
interval = 600;
|
|
tooltip = true;
|
|
};
|
|
"custom/qs_wallpapers_apply" = {
|
|
# Image wallpaper apply (qs-wallpapers-apply)
|
|
format = " ";
|
|
"on-click" = "qs-wallpapers-apply";
|
|
tooltip = true;
|
|
"tooltip-format" = "Set wallpaper";
|
|
};
|
|
"custom/qs_vid_wallpapers_apply" = {
|
|
# Video wallpaper apply (qs-vid-wallpapers-apply)
|
|
format = " ";
|
|
"on-click" = "qs-vid-wallpapers-apply";
|
|
tooltip = true;
|
|
"tooltip-format" = "Set video wallpaper";
|
|
};
|
|
"custom/hypridle" = {
|
|
format = " ";
|
|
"return-type" = "json";
|
|
escape = true;
|
|
"exec-on-event" = true;
|
|
interval = 60;
|
|
exec = "$HOME/.config/hypr/scripts/Hypridle.sh status";
|
|
"on-click" = "$HOME/.config/hypr/scripts/Hypridle.sh toggle";
|
|
"on-click-right" = "hyprlock";
|
|
};
|
|
"custom/lock" = {
|
|
format = "";
|
|
"on-click" = "$HOME/.config/hypr/scripts/LockScreen.sh";
|
|
tooltip = true;
|
|
"tooltip-format" = " Screen Lock";
|
|
};
|
|
"custom/startmenu" = {
|
|
tooltip = true;
|
|
"tooltip-format" = "App menu";
|
|
format = "";
|
|
# on-click = "rofi -show drun";
|
|
on-click = "launch-nwg-menu";
|
|
"on-click-right" = "nwg-drawer -mr 225 -ml 225 -mt 200 -mb 200 -is 48 --spacing 15";
|
|
};
|
|
|
|
# Integrated CAVA visualizer using the inline script above
|
|
"custom/cava_mviz" = {
|
|
exec = "${waybarCava}/bin/WaybarCava";
|
|
format = "<span color='#a6e3a1'>[</span> {} <span color='#a6e3a1'>]</span>";
|
|
};
|
|
|
|
"custom/playerctl" = {
|
|
format = "<span>{}</span>";
|
|
"return-type" = "json";
|
|
"max-length" = 25;
|
|
exec = "playerctl -a metadata --format '{\"text\": \"{{artist}} {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F";
|
|
"on-click-middle" = "playerctl play-pause";
|
|
"on-click" = "playerctl previous";
|
|
"on-click-right" = "playerctl next";
|
|
"scroll-step" = 5.0;
|
|
"on-scroll-up" = "$HOME/.config/hypr/scripts/Volume.sh --inc";
|
|
"on-scroll-down" = "$HOME/.config/hypr/scripts/Volume.sh --dec";
|
|
"smooth-scrolling-threshold" = 1;
|
|
};
|
|
|
|
"custom/power" = {
|
|
format = " ⏻ ";
|
|
"on-click" = "qs-wlogout";
|
|
"on-click-right" = "~/.config/waybar/scripts/power-menu.sh";
|
|
tooltip = true;
|
|
"tooltip-format" = "Power menu: Left-click for QS logout, Right-click for rofi power menu";
|
|
};
|
|
"custom/reboot" = {
|
|
format = "";
|
|
"on-click" = "systemctl reboot";
|
|
tooltip = true;
|
|
"tooltip-format" = "Left Click: Reboot";
|
|
};
|
|
"custom/quit" = {
|
|
format = "";
|
|
"on-click" = "hyprctl dispatch exit";
|
|
tooltip = true;
|
|
"tooltip-format" = "Left Click: Exit Hyprland";
|
|
};
|
|
|
|
"custom/swaync" = {
|
|
tooltip = true;
|
|
"tooltip-format" = "Left Click: Launch Notification Center\nRight Click: Do not Disturb";
|
|
format = "{} {icon} ";
|
|
"format-icons" = {
|
|
notification = "<span foreground='red'><sup></sup></span>";
|
|
none = "";
|
|
"dnd-notification" = "<span foreground='red'><sup></sup></span>";
|
|
"dnd-none" = "";
|
|
"inhibited-notification" = "<span foreground='red'><sup></sup></span>";
|
|
"inhibited-none" = "";
|
|
"dnd-inhibited-notification" = "<span foreground='red'><sup></sup></span>";
|
|
"dnd-inhibited-none" = "";
|
|
};
|
|
"return-type" = "json";
|
|
"exec-if" = "which swaync-client";
|
|
exec = "swaync-client -swb";
|
|
"on-click" = "systemctl --user start swaync.service; swaync-client -t";
|
|
"on-click-right" = "systemctl --user start swaync.service; swaync-client -d";
|
|
escape = true;
|
|
};
|
|
|
|
# Separators
|
|
"custom/separator#dot" = {
|
|
format = "";
|
|
interval = "once";
|
|
tooltip = false;
|
|
};
|
|
"custom/separator#dot-line" = {
|
|
format = "";
|
|
interval = "once";
|
|
tooltip = false;
|
|
};
|
|
"custom/separator#line" = {
|
|
format = "|";
|
|
interval = "once";
|
|
tooltip = false;
|
|
};
|
|
"custom/separator#blank" = {
|
|
format = "";
|
|
interval = "once";
|
|
tooltip = false;
|
|
};
|
|
"custom/separator#blank_2" = {
|
|
format = " ";
|
|
interval = "once";
|
|
tooltip = false;
|
|
};
|
|
"custom/separator#blank_3" = {
|
|
format = " ";
|
|
interval = "once";
|
|
tooltip = false;
|
|
};
|
|
}
|
|
];
|
|
|
|
# Consolidated style (Catppuccin Mocha) inlined
|
|
style = let
|
|
c = catppuccinColors;
|
|
in ''
|
|
@define-color rosewater ${c.rosewater};
|
|
@define-color flamingo ${c.flamingo};
|
|
@define-color pink ${c.pink};
|
|
@define-color mauve ${c.mauve};
|
|
@define-color red ${c.red};
|
|
@define-color maroon ${c.maroon};
|
|
@define-color peach ${c.peach};
|
|
@define-color yellow ${c.yellow};
|
|
@define-color green ${c.green};
|
|
@define-color teal ${c.teal};
|
|
@define-color sky ${c.sky};
|
|
@define-color sapphire ${c.sapphire};
|
|
@define-color blue ${c.blue};
|
|
@define-color lavender ${c.lavender};
|
|
@define-color text ${c.text};
|
|
@define-color subtext1 ${c.subtext1};
|
|
@define-color subtext0 ${c.subtext0};
|
|
@define-color overlay2 ${c.overlay2};
|
|
@define-color overlay1 ${c.overlay1};
|
|
@define-color overlay0 ${c.overlay0};
|
|
@define-color surface2 ${c.surface2};
|
|
@define-color surface1 ${c.surface1};
|
|
@define-color surface0 ${c.surface0};
|
|
@define-color base ${c.base};
|
|
@define-color mantle ${c.mantle};
|
|
@define-color crust ${c.crust};
|
|
|
|
* {
|
|
font-family: "JetBrainsMono Nerd Font";
|
|
font-weight: bold;
|
|
min-height: 0;
|
|
font-size: 101%;
|
|
font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"';
|
|
}
|
|
|
|
window#waybar {
|
|
background-color: @base;
|
|
border-radius: 5px;
|
|
}
|
|
|
|
tooltip {
|
|
background: @base;
|
|
opacity: 1;
|
|
border-radius: 10px;
|
|
border-width: 2px;
|
|
border-style: solid;
|
|
border-color: @sapphire;
|
|
}
|
|
tooltip label { color: @blue; }
|
|
|
|
/* Extra spacing between NixOS start menu and CAVA */
|
|
#custom-startmenu { margin-left: 4px; margin-right: 8px; }
|
|
#custom-cava_mviz { margin-left: 4px; }
|
|
|
|
#taskbar button, #workspaces button {
|
|
color: @surface2;
|
|
background-color: transparent;
|
|
padding-top: 4px;
|
|
padding-bottom: 4px;
|
|
padding-right: 6px;
|
|
padding-left: 4px;
|
|
}
|
|
#taskbar button.active { color: @maroon; }
|
|
#workspaces button.active { color: @green; }
|
|
#taskbar button.focused, #workspaces button.focused {
|
|
color: @rosewater;
|
|
background: transparent;
|
|
border-radius: 15px;
|
|
}
|
|
#workspaces button.urgent {
|
|
color: #11111b;
|
|
background: transparent;
|
|
border-radius: 15px;
|
|
}
|
|
#taskbar button:hover, #workspaces button:hover {
|
|
background: transparent;
|
|
color: @flamingo;
|
|
border-radius: 15px;
|
|
}
|
|
/* Workspaces colors: inactive= @sapphire (pale blue), active= @green, empty= @red */
|
|
#workspaces button { color: @sapphire; }
|
|
#workspaces button.empty { color: @red; }
|
|
|
|
#backlight,
|
|
#backlight-slider,
|
|
#battery,
|
|
#bluetooth,
|
|
#clock,
|
|
#cpu,
|
|
#disk,
|
|
#idle_inhibitor,
|
|
#keyboard-state,
|
|
#memory,
|
|
#mode,
|
|
#mpris,
|
|
#network,
|
|
#power-profiles-daemon,
|
|
#pulseaudio,
|
|
#pulseaudio-slider,
|
|
#taskbar button,
|
|
#taskbar,
|
|
#temperature,
|
|
#tray,
|
|
#window,
|
|
#wireplumber,
|
|
#workspaces,
|
|
#custom-backlight,
|
|
#custom-browser,
|
|
#custom-cava_mviz,
|
|
#custom-cycle_wall,
|
|
#custom-dot_update,
|
|
#custom-file_manager,
|
|
#custom-keybinds,
|
|
#custom-keyboard,
|
|
#custom-light_dark,
|
|
#custom-lock,
|
|
#custom-hint,
|
|
#custom-hypridle,
|
|
#custom-menu,
|
|
#custom-playerctl,
|
|
#custom-power_vertical,
|
|
#custom-power,
|
|
#custom-quit,
|
|
#custom-reboot,
|
|
#custom-settings,
|
|
#custom-spotify,
|
|
#custom-swaync,
|
|
#custom-tty,
|
|
#custom-updater,
|
|
#custom-weather,
|
|
#custom-weather.clearNight,
|
|
#custom-weather.cloudyFoggyDay,
|
|
#custom-weather.cloudyFoggyNight,
|
|
#custom-weather.default,
|
|
#custom-weather.rainyDay,
|
|
#custom-weather.rainyNight,
|
|
#custom-weather.severe,
|
|
#custom-weather.showyIcyDay,
|
|
#custom-weather.snowyIcyNight,
|
|
#custom-weather.sunnyDay {
|
|
opacity: 1;
|
|
padding-top: 4px;
|
|
padding-bottom: 4px;
|
|
padding-right: 6px;
|
|
padding-left: 6px;
|
|
}
|
|
|
|
#idle_inhibitor.activated { color: @green; }
|
|
#idle_inhibitor.deactivated { color: @red; }
|
|
#mpris { color: @rosewater; }
|
|
#battery { color: @green; padding-left: 15px; border-radius: 15px 0 0 15px; }
|
|
@keyframes blink { to { background-color: #ffffff; color: #333333; } }
|
|
#battery.critical:not(.charging) {
|
|
color: #f53c3c;
|
|
animation-name: blink;
|
|
animation-duration: 0.5s;
|
|
animation-timing-function: linear;
|
|
animation-iteration-count: infinite;
|
|
animation-direction: alternate;
|
|
}
|
|
#custom-lock, #custom-power { color: @red; border-radius: 15px; font-weight: bolder; padding-left: 1px; }
|
|
#network { background-color: transparent; color: @mauve; }
|
|
#backlight { color: @flamingo; }
|
|
#custom-weather { color: @green; border-radius: 15px; background-color: transparent; }
|
|
#custom-menu { color: #89b4fa; }
|
|
#pulseaudio { background-color: transparent; color: @blue; }
|
|
#clock, #clock-calender { color: @green; }
|
|
/* Use the same pale blue as clock for these icons */
|
|
#custom-qs_wallpapers_apply,
|
|
#custom-qs_vid_wallpapers_apply { color: @sapphire; }
|
|
|
|
/* Focused window title */
|
|
#window { color: @lavender; }
|
|
/* When offscreen (offscreen-css = true) */
|
|
#window.offscreen { color: @overlay1; }
|
|
/* Subtle hover effect */
|
|
#window:hover { color: @rosewater; transition: color 120ms ease-in-out; }
|
|
|
|
/* Playerctl track text */
|
|
#custom-playerctl { color: @lavender; }
|
|
#custom-playerctl:hover { color: @rosewater; transition: color 120ms ease-in-out; }
|
|
|
|
/* Start menu and notifications in green; turn red on new alerts */
|
|
#custom-startmenu { color: @green; }
|
|
#custom-swaync { color: @green; }
|
|
#custom-swaync.notification,
|
|
#custom-swaync.dnd-notification,
|
|
#custom-swaync.inhibited-notification { color: @red; }
|
|
/* Group drawer button color */
|
|
#group-mobo_drawer { color: @green; }
|
|
|
|
#backlight-slider slider, #pulseaudio-slider slider {
|
|
min-height: 7px; min-width: 15px; opacity: 0; background-color: @text; border-radius: 3px; box-shadow: 1px 5px 6px 1px #272727;
|
|
}
|
|
#backlight-slider trough, #pulseaudio-slider trough {
|
|
min-height: 100px; min-width: 7px; border-radius: 5px; background-color: @surface0;
|
|
}
|
|
#backlight-slider highlight, #pulseaudio-slider highlight { min-width: 5px; border-radius: 5px; background-color: @blue; }
|
|
'';
|
|
};
|
|
}
|