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;
+ }
+}