From cbaf55cfc5bd4c9ad47ef7092b904c830dc225ef Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Mon, 10 Aug 2026 22:36:16 +0200 Subject: [PATCH] updated --- btop/btop.conf | 4 +- fish/config.fish | 4 + fish/functions/feh.fish | 3 + fish/functions/ls.fish | 2 +- fluxo/config.toml | 14 +- hypr/hyprpaper.conf | 2 +- hypr/lid_state.conf | 2 +- hypr/modules/env.conf | 1 + hypr/modules/input.conf | 14 +- hypr/modules/keybinds.conf | 7 +- hypr/modules/monitors.conf | 9 +- hypr/modules/plugins.conf | 38 --- hypr/modules/theme.conf | 17 +- hypr/modules/window_rules.conf | 2 +- hypr/scripts/screenshot_window.sh | 49 ++++ mimeapps.list | 20 +- .../default.target.wants/proton-drive.service | 1 + .../vaulthunters_mount.service | 1 - systemd/user/gdrive-mount.service | 2 +- systemd/user/narl_io_mount.service | 2 +- systemd/user/vaulthunters_mount.service | 22 -- waybar/config.jsonc | 3 +- waybar/q | 218 ++++++++++++++++++ 23 files changed, 328 insertions(+), 109 deletions(-) create mode 100644 fish/functions/feh.fish delete mode 100644 hypr/modules/plugins.conf create mode 100755 hypr/scripts/screenshot_window.sh create mode 120000 systemd/user/default.target.wants/proton-drive.service delete mode 120000 systemd/user/default.target.wants/vaulthunters_mount.service delete mode 100644 systemd/user/vaulthunters_mount.service create mode 100644 waybar/q diff --git a/btop/btop.conf b/btop/btop.conf index 5ae6c2b..861077f 100644 --- a/btop/btop.conf +++ b/btop/btop.conf @@ -68,7 +68,7 @@ update_ms = 1000 #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. -proc_sorting = "cpu lazy" +proc_sorting = "memory" #* Reverse sorting order, True or False. proc_reversed = false @@ -268,7 +268,7 @@ gpu_mirror_graph = true shown_gpus = "nvidia amd intel" #* Custom gpu0 model name, empty string to disable. -custom_gpu_name0 = "" +custom_gpu_name0 = "Radeon Vega" #* Custom gpu1 model name, empty string to disable. custom_gpu_name1 = "" diff --git a/fish/config.fish b/fish/config.fish index d89057c..d52835a 100644 --- a/fish/config.fish +++ b/fish/config.fish @@ -37,3 +37,7 @@ if status is-login && test -z "$DISPLAY" -a -z "$WAYLAND_DISPLAY" exec uwsm start default end end + +# Claude environments +alias claude="CLAUDE_CONFIG_DIR=~/.claude command claude" +alias claude-work="CLAUDE_CONFIG_DIR=~/.claude-work command claude" diff --git a/fish/functions/feh.fish b/fish/functions/feh.fish new file mode 100644 index 0000000..5f5c55e --- /dev/null +++ b/fish/functions/feh.fish @@ -0,0 +1,3 @@ +function feh --description 'alias feh=feh -.' + command feh -. $argv +end diff --git a/fish/functions/ls.fish b/fish/functions/ls.fish index e38f2d2..c595508 100644 --- a/fish/functions/ls.fish +++ b/fish/functions/ls.fish @@ -1,3 +1,3 @@ function ls --wraps='exa --long --color=auto' --description 'alias ls=exa --long --color=auto' - exa --long --color=auto $argv; + exa -l --color=auto $argv; end diff --git a/fluxo/config.toml b/fluxo/config.toml index db8bb2c..8ca6d9a 100644 --- a/fluxo/config.toml +++ b/fluxo/config.toml @@ -36,18 +36,18 @@ format = "{mount} {used:^3.0}/{total:^3.0}G" [power] -format = "{percentage:>3}% {icon}" +format = "{percentage:>3}% {icon}" [audio] -format_sink_unmuted = "{name} {volume:>3}% {icon}" +format_sink_unmuted = "{name} {volume:>3}% {icon}" format_sink_muted = "{name} {icon}" -format_source_unmuted = "{name} {volume:>3}% {icon}" -format_source_muted = "{name} {icon}" +format_source_unmuted = "{name} {volume:>3}% {icon}" +format_source_muted = "{name} {icon}" [bt] -format_plugin = "{alias} [{left}|{right}] {anc} 󰂰" -format_connected = "{alias} 󰂰" -format_disconnected = "Disconnected 󰂯" +format_plugin = "{alias} [{left}|{right}] {anc} 󰂰" +format_connected = "{alias} 󰂰" +format_disconnected = "Disconnected 󰂯" format_disabled = "󰂲" [game] diff --git a/hypr/hyprpaper.conf b/hypr/hyprpaper.conf index 44fa5fe..9e734d3 100644 --- a/hypr/hyprpaper.conf +++ b/hypr/hyprpaper.conf @@ -1,6 +1,6 @@ wallpaper { monitor = - path = ~/Pictures/reze/reze.png + path = ~/.wallpapers/takemi_2.jpg fit_mode = cover } diff --git a/hypr/lid_state.conf b/hypr/lid_state.conf index e8e4907..8b13789 100644 --- a/hypr/lid_state.conf +++ b/hypr/lid_state.conf @@ -1 +1 @@ -monitor=eDP-1, disable + diff --git a/hypr/modules/env.conf b/hypr/modules/env.conf index 21d8e78..f762335 100644 --- a/hypr/modules/env.conf +++ b/hypr/modules/env.conf @@ -12,6 +12,7 @@ env = XDG_CURRENT_DESKTOP,Hyprland env = QT_QPA_PLATFORMTHEME,qt6ct env = LIBVA_DRIVER_NAME,radeonsi env = VDPAU_DRIVER,radeonsi +env = AMD_VULKAN_ICD,RADV env = MOZ_ENABLE_WAYLAND,1 env = ELECTRON_OZONE_PLATFORM_HINT,wayland env = EDITOR,nvim diff --git a/hypr/modules/input.conf b/hypr/modules/input.conf index e2316db..6d06e3f 100644 --- a/hypr/modules/input.conf +++ b/hypr/modules/input.conf @@ -1,13 +1,13 @@ # https://wiki.hyprland.org/Configuring/Variables/#input input { + # index 0 = dvorak-intl (default), index 1 = us-intl + # switch with $mainMod ALT, SPACE (see keybinds.conf) kb_layout = us,us - kb_variant = dvorak-intl, intl - # kb_variant = intl + kb_variant = dvorak-intl,intl kb_model = - kb_options = kb_rules = - kb_options = ctrl:nocaps + kb_options = caps:backspace follow_mouse = 0 @@ -19,16 +19,14 @@ input { } } +# Layouts are inherited from the global input block so that layout +# switching applies to these too. Only bind resolution differs here. device { name = at-translated-set-2-keyboard resolve_binds_by_sym = 1 - kb_layout = us - kb_variant = dvorak-intl } device { name = topre-corporation-hhkb-professional resolve_binds_by_sym = 1 - kb_layout = us - kb_variant = dvorak-intl } diff --git a/hypr/modules/keybinds.conf b/hypr/modules/keybinds.conf index 4b0e8a2..72b52cb 100644 --- a/hypr/modules/keybinds.conf +++ b/hypr/modules/keybinds.conf @@ -7,11 +7,14 @@ bindl=,switch:off:Lid Switch,exec,~/.config/hypr/scripts/lid_handler.sh open bindr = ALT, m, exec, cliphist list | fuzzel --dmenu | cliphist decode | wl-copy bind = , PRINT, exec, grim -g "$(slurp)" - | wl-copy bind = SHIFT, PRINT, exec, grim -g "$(slurp)" ~/Pictures/Screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png +bind = CTRL, PRINT, exec, ~/.config/hypr/scripts/screenshot_window.sh copy +bind = CTRL SHIFT, PRINT, exec, ~/.config/hypr/scripts/screenshot_window.sh save bindr = ALT SHIFT, z, exec, ~/.config/hypr/scripts/replay-ctrl.sh save bindr = ALT, z, exec, ~/.config/hypr/scripts/replay-ctrl.sh toggle bindr = ALT SHIFT, c, exec, ~/.config/hypr/scripts/droidcam-ctrl.sh toggle # general binds +bind = $mainMod, M, exec, pdfs-prompt bind = $mainMod, B, exec, fluxo bt menu bind = $mainMod, RETURN, exec, $terminal bind = $mainMod SHIFT, Q, killactive, @@ -21,7 +24,9 @@ bind = $mainMod, V, togglefloating, bind = $mainMod, F, fullscreen, bind = $mainMod, SPACE, exec, $menu bind = $mainMod, P, exec, ~/.config/hypr/scripts/powermenu.sh -bind = $mainMod, t, togglesplit, # dwindle +# cycle keyboard layout (dvorak-intl <-> us-intl) +bind = $mainMod ALT, SPACE, exec, hyprctl switchxkblayout all next +# bind = $mainMod, t, togglesplit, # dwindle bind = $mainMod, n, togglegroup # Move focus with mainMod + arrow keys diff --git a/hypr/modules/monitors.conf b/hypr/modules/monitors.conf index 7e11ed7..21f0dc5 100644 --- a/hypr/modules/monitors.conf +++ b/hypr/modules/monitors.conf @@ -2,10 +2,11 @@ # laptop screen monitor = eDP-1, 1920x1080@60, 0x0, 1 # samsung home monitor -monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@240, 0x-1440, 1 -# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@144, 0x-1440, 1 -# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 1920x1080@144, 0x-1080, 1 -# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@60, 0x-1440, 1 +# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 1280x720@240, 0x0, 1 +monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@240, -2560x0, 1 +# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@144, 0x0, 1 +# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 1920x1080@144, 0x0, 1 +# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@60, 0x0, 1 # lid_state fallback diff --git a/hypr/modules/plugins.conf b/hypr/modules/plugins.conf deleted file mode 100644 index f324253..0000000 --- a/hypr/modules/plugins.conf +++ /dev/null @@ -1,38 +0,0 @@ -exec-once = hyprpm reload -n - -# plugin:hyprfocus { -# enabled = yes -# animate_floating = yes -# animate_workspacechange = yes -# focus_animation = shrink -# # Beziers for focus animations -# bezier = bezIn, 0.5,0.0,1.0,0.5 -# bezier = bezOut, 0.0,0.5,0.5,1.0 -# bezier = overshot, 0.05, 0.9, 0.1, 1.05 -# bezier = smoothOut, 0.36, 0, 0.66, -0.56 -# bezier = smoothIn, 0.25, 1, 0.5, 1 -# bezier = realsmooth, 0.28,0.29,.69,1.08 -# # Flash settings -# flash { -# flash_opacity = 0.95 -# in_bezier = realsmooth -# in_speed = 0.5 -# out_bezier = realsmooth -# out_speed = 3 -# } -# # Shrink settings -# shrink { -# shrink_percentage = 0.95 -# in_bezier = realsmooth -# in_speed = 1 -# out_bezier = realsmooth -# out_speed = 2 -# } -# } -# -# plugin:csgo-vulkan-fix { -# res_w = 1280 -# res_h = 960 -# class = gamescope -# fix_mouse = true -# } diff --git a/hypr/modules/theme.conf b/hypr/modules/theme.conf index 4b6e037..71d8043 100644 --- a/hypr/modules/theme.conf +++ b/hypr/modules/theme.conf @@ -80,12 +80,6 @@ animations { animation = workspacesOut, 1, 1.94, almostLinear, fade } -# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more -dwindle { - pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true # You probably want this -} - # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more master { new_status = master @@ -95,7 +89,8 @@ master { misc { force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( - vrr = 0 + # 0 = off, 1 = always, 2 = fullscreen only (G7 is a 240Hz VRR panel) + vrr = 2 font_family = FiraCode Nerd Font } @@ -123,12 +118,8 @@ group { # Dark surface background with dimmed, soft text col.inactive = $surface0 text_color_inactive = $subtext0 - height = 1 - font_size = 11 - # about half the indicator height - text_offset = -7 - - # Make the indicator tall enough to render text inside + + # Colored indicator bar, roughly half the groupbar height indicator_height = 15 } } diff --git a/hypr/modules/window_rules.conf b/hypr/modules/window_rules.conf index 26d5a0b..208bcd6 100644 --- a/hypr/modules/window_rules.conf +++ b/hypr/modules/window_rules.conf @@ -6,7 +6,7 @@ # ========================================== # Dialogs and utility apps that should float in the center $dialog_titles = ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory.*|Save As.*|Save File.*|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress|Open Files.*|Anmelden.*|File Upload.*|TRuDI-Export laden)$ -$dialog_classes = ^(pavucontrol|blueman-manager|nm-connection-editor|org.pulseaudio.pavucontrol)$ +$dialog_classes = ^(pavucontrol|blueman-manager|nm-connection-editor|org.pulseaudio.pavucontrol|io.narl.proton-drive-linux-prompt)$ # App classes $steam = ^(steam)$ diff --git a/hypr/scripts/screenshot_window.sh b/hypr/scripts/screenshot_window.sh new file mode 100755 index 0000000..39297ec --- /dev/null +++ b/hypr/scripts/screenshot_window.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# Get active window info in JSON format +WINDOW_INFO=$(hyprctl activewindow -j) + +# Extract window class name (app name) +APP_NAME=$(echo "$WINDOW_INFO" | jq -r '.class') + +# If app name is empty, null, or invalid, default to "unknown" +if [ -z "$APP_NAME" ] || [ "$APP_NAME" = "null" ]; then + APP_NAME="unknown" +fi + +# Sanitize app name: convert to lowercase and replace characters that aren't letters, numbers, hyphens, or underscores with underscores +APP_NAME_SAFE=$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9_-]/_/g') + +# Extract geometry: "x,y wxh" +GEOMETRY=$(echo "$WINDOW_INFO" | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"') + +# Check if geometry is valid +if [ -z "$GEOMETRY" ] || [ "$GEOMETRY" = "null,null nullxnull" ]; then + notify-send -u normal "Screenshot Error" "No active window found to screenshot." + exit 1 +fi + +ACTION=$1 + +case "$ACTION" in + copy) + grim -g "$GEOMETRY" - | wl-copy + notify-send -u low "Screenshot" "Active window ($APP_NAME) copied to clipboard" + ;; + save) + SCREENSHOTS_DIR="$HOME/Pictures/Screenshots" + APP_DIR="$SCREENSHOTS_DIR/$APP_NAME_SAFE" + mkdir -p "$APP_DIR" + FILE_NAME="$(date +'%Y-%m-%d_%H-%M-%S').png" + FILE_PATH="$APP_DIR/$FILE_NAME" + + grim -g "$GEOMETRY" "$FILE_PATH" + notify-send -u low "Screenshot" "Saved active window to $APP_NAME_SAFE/$FILE_NAME" + ;; + *) + echo "Usage: $0 {copy|save}" + exit 1 + ;; +esac + +exit 0 diff --git a/mimeapps.list b/mimeapps.list index 6ddad37..a03724f 100644 --- a/mimeapps.list +++ b/mimeapps.list @@ -2,23 +2,26 @@ application/pdf=org.pwmt.zathura-pdf-poppler.desktop image/jpeg=feh.desktop image/png=feh.desktop -x-scheme-handler/http=zen.desktop -x-scheme-handler/https=zen.desktop +x-scheme-handler/http=brave-browser.desktop +x-scheme-handler/https=brave-browser.desktop x-scheme-handler/chrome=zen.desktop -text/html=zen.desktop +text/html=brave-browser.desktop application/x-extension-htm=zen.desktop application/x-extension-html=zen.desktop application/x-extension-shtml=zen.desktop application/xhtml+xml=zen.desktop application/x-extension-xhtml=zen.desktop application/x-extension-xht=zen.desktop -x-scheme-handler/about=google-chrome.desktop -x-scheme-handler/unknown=google-chrome.desktop +x-scheme-handler/about=brave-browser.desktop +x-scheme-handler/unknown=brave-browser.desktop application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop x-scheme-handler/ror2mm=r2modman.desktop image/webp=feh.desktop x-scheme-handler/claude-cli=claude-code-url-handler.desktop x-scheme-handler/msteams=teams-for-linux.desktop +x-scheme-handler/slack=slack.desktop +audio/flac=mpv.desktop +x-scheme-handler/codex=ChatGPT.desktop [Added Associations] application/pdf=org.pwmt.zathura-pdf-poppler.desktop; @@ -30,3 +33,10 @@ text/html=zen.desktop; x-scheme-handler/chrome=zen.desktop; application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop; image/webp=feh.desktop; +application/x-extension-htm=zen.desktop; +application/x-extension-html=zen.desktop; +application/x-extension-shtml=zen.desktop; +application/xhtml+xml=zen.desktop; +application/x-extension-xhtml=zen.desktop; +application/x-extension-xht=zen.desktop; +audio/flac=mpv.desktop; diff --git a/systemd/user/default.target.wants/proton-drive.service b/systemd/user/default.target.wants/proton-drive.service new file mode 120000 index 0000000..3a1496f --- /dev/null +++ b/systemd/user/default.target.wants/proton-drive.service @@ -0,0 +1 @@ +/usr/lib/systemd/user/proton-drive.service \ No newline at end of file diff --git a/systemd/user/default.target.wants/vaulthunters_mount.service b/systemd/user/default.target.wants/vaulthunters_mount.service deleted file mode 120000 index 2b64689..0000000 --- a/systemd/user/default.target.wants/vaulthunters_mount.service +++ /dev/null @@ -1 +0,0 @@ -/home/narl/.config/systemd/user/vaulthunters_mount.service \ No newline at end of file diff --git a/systemd/user/gdrive-mount.service b/systemd/user/gdrive-mount.service index 7da6295..7c11393 100644 --- a/systemd/user/gdrive-mount.service +++ b/systemd/user/gdrive-mount.service @@ -15,7 +15,7 @@ ExecStart=rclone mount google_drive: %h/remote/gdrive \ --log-level INFO # The command to unmount gracefully. -ExecStop=fusermount -u %h/gdrive +ExecStop=fusermount -u %h/remote/gdrive Restart=on-failure RestartSec=10 diff --git a/systemd/user/narl_io_mount.service b/systemd/user/narl_io_mount.service index da2cbf7..80ce334 100644 --- a/systemd/user/narl_io_mount.service +++ b/systemd/user/narl_io_mount.service @@ -12,7 +12,7 @@ After=network-online.target ExecStart=sshfs -f -p 420 narl@narl.io:/opt %h/remote/narl.io # The command to unmount gracefully. -ExecStop=fusermount -u %h/narl_io +ExecStop=fusermount -u %h/remote/narl.io Restart=on-failure RestartSec=10 diff --git a/systemd/user/vaulthunters_mount.service b/systemd/user/vaulthunters_mount.service deleted file mode 100644 index 671652f..0000000 --- a/systemd/user/vaulthunters_mount.service +++ /dev/null @@ -1,22 +0,0 @@ - -# ~/.config/systemd/user/rclone-mount.service - -[Unit] -Description=sshfs mount for narl.io vaulthunters server -# This ensures your network is ready before it tries to mount -After=network-online.target - -[Service] -# The command to start the mount. -# Replace "my-remote:" and "/path/to/local/mount" accordingly. -# The flags below are highly recommended for a good experience. -ExecStart=sshfs -f -p 420 narl@vh3.narl.io:/opt/minecraft_vaulthunters %h/remote/vh3.narl.io - -# The command to unmount gracefully. -ExecStop=fusermount -u %h/vaulthunters_server -Restart=on-failure -RestartSec=10 - -[Install] -# This tells systemd to start the service at user login. -WantedBy=default.target diff --git a/waybar/config.jsonc b/waybar/config.jsonc index 2ce4eaa..4abebb6 100644 --- a/waybar/config.jsonc +++ b/waybar/config.jsonc @@ -22,8 +22,7 @@ // --- Standard Modules --- "hyprland/workspaces": { - "format": "{icon}", - "on-click": "activate" + "format": "{icon}" }, "hyprland/window": { "format": "{}", diff --git a/waybar/q b/waybar/q new file mode 100644 index 0000000..f9f958c --- /dev/null +++ b/waybar/q @@ -0,0 +1,218 @@ +/* ~/.config/waybar/style.css */ +@import "./catppuccin-waybar/themes/mocha.css"; + +/* ========================================================================== + Global Reset & Bar + ========================================================================== */ +* { + border: none; + border-radius: 12px; + min-height: 0; + font-family: "JetBrainsMono Nerd Font", sans-serif; + font-size: 12px; + transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); +} + +window#waybar { + background-color: transparent; + color: @text; +} + +/* ========================================================================== + Base Islands (Containers) + ========================================================================== */ +/* Groups and standalone modules receive the floating island styling */ +#spaces, +#powertray, +#hardware, +#center, +#custom-bluetooth-audio, +#custom-volume, +#custom-buds, +#custom-mic { + background-color: alpha(@surface0, 0.8); + margin: 4px 6px; + padding: 4px 16px; + border: 1px solid alpha(@surface1, 0.5); + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15); + color: @text; +} + +/* Group-specific sizing overrides */ +#hardware, +#powertray, +#spaces { + border-radius: 24px; + padding: 4px 10px; +} + +/* Center Pill (Clock + MPRIS) Override */ +#center { + background: linear-gradient(45deg, @mauve, @lavender); + color: @surface0; + font-weight: 900; + padding: 4px 20px; +} + +/* ========================================================================== + Grouped Modules (Inner Items) + ========================================================================== */ +/* Strip backgrounds and borders from items that live inside groups */ +#workspaces, +#window, +#custom-cpu, +#custom-mem, +#custom-sys, +#custom-gpu, +#custom-disk-root, +#custom-mpris, +#custom-network, +#custom-backlight, +#clock, +#tray, +#custom-gamemode, +#custom-dnd, +#custom-power_status { + background-color: transparent; + border: none; + box-shadow: none; + margin: 0; + padding: 0 8px; +} + +/* Subtle vertical separator line between inner items */ +#custom-cpu, +#custom-mem, +#custom-sys, +#custom-gpu, +#custom-disk-root, +#custom-mpris, +#custom-network, +#tray, +#custom-gamemode, +#custom-dnd { + border-right: 1px solid alpha(@surface1, 0.5); + border-radius: 0; +} + +/* ========================================================================== + Specific Module Overrides & Alerts + ========================================================================== */ + +/* --- Workspaces --- */ +#workspaces { + padding: 0px 8px; /* Override the inner item padding */ +} + +#workspaces button { + padding: 0; + margin: 4px; + min-width: 12px; + min-height: 12px; + background-color: @subtext0; + color: transparent; + border-radius: 12px; +} + +#workspaces button.active, +#workspaces button.active:hover { + min-width: 30px; + background-color: @mauve; +} + +#workspaces button:hover { + background-color: @lavender; + min-width: 20px; +} + +#workspaces button.urgent { + background-color: @red; +} + +/* --- Hardware Semantic Alerts --- */ +.normal { color: @mauve; } +.high { color: @peach; } +.max { color: @red; } + +#custom-network { color: @mauve; } +#custom-gamemode.active { color: @mauve; } + +/* --- Media / Controls --- */ +#custom-volume.unmuted, +#custom-mic.unmuted { + color: @mauve; +} +#custom-volume.muted, +#custom-mic.muted { + color: @overlay1; +} + +/* --- Bluetooth Audio --- */ +#custom-bluetooth-audio.disabled, +#custom-bluetooth-audio.disconnected { + color: @overlay1; +} + +#custom-bluetooth-audio.connected { + color: @blue; +} + +/* ANC States */ +#custom-bluetooth-audio.anc-active, +#custom-bluetooth-audio.connected.anc-active, +#custom-bluetooth-audio.connected\ anc-active { + color: @mauve; +} + +#custom-bluetooth-audio.anc-aware, +#custom-bluetooth-audio.connected.anc-aware, +#custom-bluetooth-audio.connected\ anc-aware { + color: @green; +} + +#custom-bluetooth-audio.anc-off, +#custom-bluetooth-audio.connected.anc-off, +#custom-bluetooth-audio.connected\ anc-off { + color: @blue; +} + +/* --- Power Status --- */ +#custom-power_status.charging { color: @green; } +#custom-power_status.warning { color: @peach; } +#custom-power_status.critical { + color: @red; + animation: blink 1s infinite alternate; +} + + +/* Interactive Hover States for Standalone Modules */ +#custom-volume:hover, +#custom-buds:hover, +#custom-mic:hover, +#custom-bluetooth-audio:hover, +#custom-power_status:hover { + background-color: @surface1; + color: @mauve; +} + + +/* ========================================================================== + Tooltips & Animations + ========================================================================== */ +tooltip { + background-color: alpha(@base, 0.9); + border: 1px solid @surface1; + border-radius: 8px; +} + +tooltip label { + color: @text; + padding: 8px; +} + +@keyframes blink { + to { + color: @base; + background-color: @red; + } +}