diff --git a/config/claude/settings.json b/config/claude/settings.json
index 15a5cfbc1..2074d3586 100644
--- a/config/claude/settings.json
+++ b/config/claude/settings.json
@@ -1,4 +1,8 @@
{
+ "model": "opus",
+ "env": {
+ "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
+ },
"cleanupPeriodDays": 99999,
"enabledPlugins": {
"commit-commands@claude-plugins-official": true,
diff --git a/config/default.nix b/config/default.nix
index 131aca6f2..af2fdb649 100644
--- a/config/default.nix
+++ b/config/default.nix
@@ -32,10 +32,8 @@ in
[
./gtk
./hyprland
- ./swaync
- ./waybar
- ./wlogout
- ./wofi
+ ./hyprpanel
+ ./walker
]
else
[ ]
diff --git a/config/ghostty/config b/config/ghostty/config
index d9ece2995..030b78277 100644
--- a/config/ghostty/config
+++ b/config/ghostty/config
@@ -3,7 +3,8 @@
#
auto-update-channel = tip
-theme = dark:Dracula,light:Catppuccin Latte
+# theme = dark:Dracula,light:Catppuccin Latte
+theme = Dracula
background-opacity = 0.8
confirm-close-surface = true
macos-option-as-alt = true
@@ -26,3 +27,25 @@ keybind = super+shift+left=move_tab:-1
keybind = super+shift+up=move_tab:-1
keybind = super+shift+right=move_tab:1
keybind = super+shift+down=move_tab:1
+
+# Navigate between splits (Vim-style)
+keybind = super+h=goto_split:left
+keybind = super+j=goto_split:down
+keybind = super+k=goto_split:up
+keybind = super+l=goto_split:right
+
+# Create new splits
+keybind = ctrl+shift+backslash=new_split:right
+keybind = ctrl+shift+minus=new_split:down
+
+# Split management
+keybind = ctrl+shift+z=toggle_split_zoom
+keybind = ctrl+shift+e=equalize_splits
+keybind = ctrl+shift+w=close_surface
+
+# Split border styling
+split-divider-color = #88c0d0
+
+# Active panel highlighting (dim unfocused splits)
+unfocused-split-opacity = 0.7
+unfocused-split-fill = #1e1e2e
diff --git a/config/hyprland/default.nix b/config/hyprland/default.nix
index ef522db13..26e229ec3 100644
--- a/config/hyprland/default.nix
+++ b/config/hyprland/default.nix
@@ -6,7 +6,6 @@
}:
let
hyprexpoPlugin = pkgs.hyprlandPlugins.hyprexpo;
- wallpaper = "${pkgs.nixos-artwork.wallpapers.nineish-catppuccin-mocha-alt}/share/backgrounds/nixos/nix-wallpaper-nineish-catppuccin-mocha-alt.png";
in
{
wayland.windowManager.hyprland = {
@@ -15,8 +14,7 @@ in
systemd.enable = false;
extraConfig = ''
plugin = ${hyprexpoPlugin}/lib/libhyprexpo.so
- exec-once = ${pkgs.swww}/bin/swww-daemon
- exec-once = sleep 1 && ${pkgs.swww}/bin/swww img ${wallpaper}
+ exec-once = ${pkgs.hyprpanel}/bin/hyprpanel
''
+ builtins.readFile ./hyprland.conf;
};
@@ -29,4 +27,15 @@ in
source = ./hyprlock.conf;
force = true;
};
+
+ xdg.configFile."hypr/scripts/toggle-terminal.sh" = {
+ source = ./scripts/toggle-terminal.sh;
+ executable = true;
+ force = true;
+ };
+ xdg.configFile."hypr/scripts/record-screen.sh" = {
+ source = ./scripts/record-screen.sh;
+ executable = true;
+ force = true;
+ };
}
diff --git a/config/hyprland/hypridle.conf b/config/hyprland/hypridle.conf
index 9298810d8..607acb292 100644
--- a/config/hyprland/hypridle.conf
+++ b/config/hyprland/hypridle.conf
@@ -2,6 +2,7 @@ general {
lock_cmd = pidof hyprlock || hyprlock
before_sleep_cmd = loginctl lock-session
after_sleep_cmd = hyprctl dispatch dpms on
+ inhibit_sleep = 3
}
# Dim screen after 2.5 minutes
diff --git a/config/hyprland/hyprland.conf b/config/hyprland/hyprland.conf
index 9f5199fa0..1b3a6dc8c 100644
--- a/config/hyprland/hyprland.conf
+++ b/config/hyprland/hyprland.conf
@@ -23,21 +23,24 @@ $mod = SUPER
# =============================================================================
env = XCURSOR_THEME,Adwaita
env = XCURSOR_SIZE,24
+env = HYPRCURSOR_SIZE,24
+env = HYPRCURSOR_THEME,Adwaita
env = GTK_THEME,Adwaita:dark
env = GDK_SCALE,1.5
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
+env = QT_QPA_PLATFORM,wayland
+env = SDL_VIDEODRIVER,wayland
+env = MOZ_ENABLE_WAYLAND,1
+env = ELECTRON_OZONE_PLATFORM_HINT,wayland
+env = OZONE_PLATFORM,wayland
+env = GDK_BACKEND,wayland
# =============================================================================
# Startup
# =============================================================================
exec-once = dbus-update-activation-environment --systemd --all
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE XDG_RUNTIME_DIR HYPRLAND_INSTANCE_SIGNATURE XDG_SESSION_DESKTOP
-
-# Status bar
-exec-once = waybar
-
-# Notification daemon
-exec-once = swaync
+exec-once = sleep 1 && systemctl --user restart xdg-desktop-portal-hyprland && sleep 0.5 && systemctl --user restart xdg-desktop-portal-gtk && sleep 0.5 && systemctl --user restart xdg-desktop-portal
# Clipboard history
exec-once = wl-paste --type text --watch cliphist store
@@ -46,8 +49,11 @@ exec-once = wl-paste --type image --watch cliphist store
# Idle management
exec-once = hypridle
-# Volume/brightness OSD
-exec-once = rm -f /tmp/wobpipe && mkfifo /tmp/wobpipe && tail -f /tmp/wobpipe | wob
+# Blue light filter
+exec-once = hyprsunset
+
+# Clipboard persistence
+exec-once = wl-clip-persist --clipboard regular & clipse -listen
# =============================================================================
# Monitor (Framework 13" 2256x1504)
@@ -136,6 +142,7 @@ animations {
animation = borderangle, 1, 30, liner, loop
animation = fade, 1, 3, default
animation = workspaces, 1, 3, snap
+ animation = specialWorkspace, 1, 3, snap, slidevert
}
# =============================================================================
@@ -145,24 +152,78 @@ misc {
disable_hyprland_logo = true
disable_splash_rendering = true
force_default_wallpaper = 0
+ focus_on_activate = true
+ background_color = rgb(000000)
+}
+
+ecosystem {
+ no_update_news = true
}
# =============================================================================
# Window Rules
# =============================================================================
-windowrule = float on, match:class ^(wofi)$
windowrule = float on, match:class ^(1Password)$
windowrule = float on, match:title ^(Picture-in-Picture)$
windowrule = pin on, match:title ^(Picture-in-Picture)$
-# Notification center blur
-layerrule = blur on, match:namespace swaync-control-center
-layerrule = blur on, match:namespace swaync-notification-window
-layerrule = ignore_alpha 0.0, match:namespace swaync-control-center
-layerrule = ignore_alpha 0.0, match:namespace swaync-notification-window
+# Screen-share indicator (auto-hide to special workspace)
+$shareIndicator = match:title ^(.*)(is sharing (your screen|a window).*)$
+windowrule = no_focus on, $shareIndicator
+windowrule = workspace special:share silent, $shareIndicator
+
+# Google Meet PIP
+$meetPip = match:title ^(Meet - .+)$
+windowrule = float on, $meetPip
+windowrule = pin on, $meetPip
+windowrule = size 320 540, $meetPip
+windowrule = move 100%-340 60, $meetPip
+
+# Workspace assignments removed — forced workspace rules apply to ALL
+# windows of that class (including Cmd+N new windows), breaking expected
+# behavior. Use Super+G/S/D focus-or-launch bindings instead.
+
+# Settings management (float for audio/bluetooth GUIs)
+windowrule = float on, match:class ^(org.pulseaudio.pavucontrol|.blueman-manager-wrapped|blueman-manager)$
+
+# Clipse clipboard manager (float centered)
+windowrule = float on, match:class ^(clipse)$
+windowrule = size 622 652, match:class ^(clipse)$
+windowrule = stay_focused on, match:class ^(clipse)$
+
+# Suppress maximize for all windows
+windowrule = suppress_event maximize, match:class .*
+
+# Slight opacity for visual depth
+windowrule = opacity 0.95 0.90, match:class ^(com.mitchellh.ghostty)$
+windowrule = opacity 0.90 0.85, match:class ^(google-chrome.*)$
+windowrule = opacity 0.95 0.90, match:class ^(Slack)$
+windowrule = opacity 0.90 0.85, match:class ^(code-url-handler)$
+
+# Full opacity in fullscreen
+windowrule = opacity 1.0 override 1.0 override, match:fullscreen 1
+
+# Ghostty scratchpad
+windowrule = workspace special:scratchpad silent, match:class ^(ghostty-scratchpad)$
+windowrule = float on, match:class ^(ghostty-scratchpad)$
+windowrule = size 90% 70%, match:class ^(ghostty-scratchpad)$
+windowrule = center on, match:class ^(ghostty-scratchpad)$
-# Prevent wofi animation
-layerrule = animation slide, match:namespace ^(wofi)$
+# =============================================================================
+# Layer Rules
+# =============================================================================
+# Blur for HyprPanel bar (frosted glass)
+layerrule = blur on, match:namespace ^(bar-\d+)$
+layerrule = ignore_alpha 0.3, match:namespace ^(bar-\d+)$
+
+# Blur for HyprPanel notifications (frosted glass)
+layerrule = blur on, match:namespace ^(notifications-window)$
+layerrule = ignore_alpha 0.3, match:namespace ^(notifications-window)$
+
+# Blur for walker
+layerrule = blur on, match:namespace ^(walker)$
+layerrule = ignore_alpha on, match:namespace ^(walker)$
+layerrule = animation slide top, match:namespace ^(walker)$
# =============================================================================
# App Launch Hotkeys (Super + letter)
@@ -173,15 +234,22 @@ bind = $mod, S, exec, hyprctl clients -j | grep -q '"class": "Slack"' && hyprctl
bind = $mod, C, exec, cursor
bind = $mod, P, exec, gtk-launch 1password
bind = $mod, M, exec, gtk-launch signal-desktop
+bind = $mod, D, exec, hyprctl clients -j | grep -q '"class": "discord"' && hyprctl dispatch focuswindow class:discord || discord
bind = $mod, N, exec, ghostty -e yazi
+# =============================================================================
+# System GUIs (WiFi / Bluetooth / Audio)
+# =============================================================================
+bind = $mod, I, exec, hyprpanel toggleWindow network-menu
+bind = $mod, B, exec, blueman-manager
+bind = $mod, A, exec, pavucontrol
+
# =============================================================================
# Launcher & Clipboard
# =============================================================================
+bind = CTRL ALT SHIFT, SPACE, exec, walker
bind = $mod, V, exec, code
-bind = $mod, D, exec, wofi --show drun
-bind = $mod, E, exec, wofi-emoji
-bind = $mod SHIFT, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy
+bind = $mod, E, exec, emote
# =============================================================================
# Window Management
@@ -190,7 +258,7 @@ bind = $mod, W, killactive,
bind = $mod, F, togglefloating,
bind = CTRL ALT SHIFT, F, exec, hyprctl --batch "dispatch movetoworkspace empty; dispatch fullscreen 0"
bind = SUPER CTRL, F, fullscreen, 0
-bind = $mod SHIFT, Q, exec, wlogout
+bind = $mod SHIFT, Q, exec, hyprpanel toggleWindow power-menu
bind = $mod, TAB, hyprexpo:expo, toggle
# Focus (vim keys)
@@ -259,9 +327,27 @@ bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow
# =============================================================================
-# Screenshot
+# Scratchpad & Recording
+# =============================================================================
+bind = $mod CTRL, T, exec, ~/.config/hypr/scripts/toggle-terminal.sh
+bind = $mod SHIFT, R, exec, ~/.config/hypr/scripts/record-screen.sh
+
+# Quick previous-window toggle (like macOS Cmd+`)
+bind = $mod, GRAVE, focuscurrentorlast
+
+# =============================================================================
+# Screenshot (grim+slurp+swappy for annotated, hyprshot for quick)
# =============================================================================
bind = $mod SHIFT, S, exec, grim -g "$(slurp)" - | swappy -f -
+bind = , PRINT, exec, hyprshot -m region
+bind = SHIFT, PRINT, exec, hyprshot -m window
+bind = CTRL, PRINT, exec, hyprshot -m output
+
+# Color picker
+bind = $mod, PRINT, exec, hyprpicker -a
+
+# Clipboard manager (clipse)
+bind = CTRL $mod, V, exec, ghostty --class clipse -e clipse
# =============================================================================
# Media / Hardware Keys (Framework 13 AI 300)
@@ -273,8 +359,8 @@ bindl = , F1, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = , F2, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
# F3: Volume up
-bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+
-bindel = , F3, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+
+bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
+bindel = , F3, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
# F4: Previous track
bindl = , XF86AudioPrev, exec, playerctl previous
bindl = , F4, exec, playerctl previous
@@ -297,9 +383,8 @@ bindl = , F9, exec, hyprctl -j monitors | jq -r '.[0].scale' | awk '{if($1>1.3)
# F10: Airplane mode
bindl = , XF86RFKill, exec, nmcli radio wifi toggle
bindl = , F10, exec, nmcli radio wifi toggle
-# F11: Print screen
-bind = , Print, exec, grim -g "$(slurp)" - | swappy -f -
-bind = , F11, exec, grim -g "$(slurp)" - | swappy -f -
+# F11: Print screen (full output via hyprshot)
+bind = , F11, exec, hyprshot -m output
# =============================================================================
# Display Zoom (Framework + / - , macOS-style)
@@ -312,12 +397,12 @@ binde = CTRL ALT SHIFT, minus, exec, hyprctl -j monitors | jq -r '.[0].scale' |
# =============================================================================
# Lock Screen
# =============================================================================
-bind = $mod CTRL, L, exec, hyprlock
+bind = $mod SHIFT, L, exec, hyprlock
# =============================================================================
# Notification Toggle
# =============================================================================
-bind = $mod SHIFT, D, exec, swaync-client -t -sw
+bind = $mod SHIFT, D, exec, hyprpanel toggleWindow notifications-center
# =============================================================================
# Plugins
diff --git a/config/hyprland/hyprlock.conf b/config/hyprland/hyprlock.conf
index 9edc57e7c..d1c0e38d4 100644
--- a/config/hyprland/hyprlock.conf
+++ b/config/hyprland/hyprlock.conf
@@ -1,3 +1,14 @@
+general {
+ hide_cursor = true
+ grace = 0
+}
+
+auth {
+ fingerprint {
+ enabled = true
+ }
+}
+
background {
monitor =
path = screenshot
@@ -10,29 +21,47 @@ background {
input-field {
monitor =
- size = 250, 50
- outline_thickness = 3
+ size = 600, 100
+ outline_thickness = 4
dots_size = 0.26
dots_spacing = 0.15
dots_center = true
outer_color = rgb(bd93f9)
inner_color = rgb(282a36)
font_color = rgb(f8f8f2)
- fade_on_empty = true
- placeholder_text = Password...
- hide_input = false
- position = 0, -20
+ font_family = JetBrainsMono Nerd Font
+ font_size = 32
+ fade_on_empty = false
+ placeholder_text = Enter Password
+ fail_text = Wrong
+ rounding = 0
+ shadow_passes = 0
+ position = 0, 0
halign = center
valign = center
}
+# Time display
label {
monitor =
- text = $TIME
+ text = cmd[update:1000] date +"%H:%M:%S"
color = rgb(f8f8f2)
font_size = 64
font_family = JetBrainsMono Nerd Font
- position = 0, 80
+ position = 0, 150
+ halign = center
+ valign = center
+}
+
+# Fingerprint prompt
+label {
+ monitor =
+ text = $FPRINTPROMPT
+ text_align = center
+ color = rgb(f8f8f2)
+ font_size = 24
+ font_family = JetBrainsMono Nerd Font
+ position = 0, -100
halign = center
valign = center
}
diff --git a/config/hyprland/scripts/record-screen.sh b/config/hyprland/scripts/record-screen.sh
new file mode 100644
index 000000000..bd80dafb4
--- /dev/null
+++ b/config/hyprland/scripts/record-screen.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+# Toggle screen recording with wf-recorder
+
+PIDFILE=/tmp/wf-recorder.pid
+OUTDIR="$HOME/Videos"
+
+if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
+ kill "$(cat "$PIDFILE")"
+ rm -f "$PIDFILE"
+ notify-send "Screen Recording" "Recording saved to $OUTDIR"
+else
+ mkdir -p "$OUTDIR"
+ FILENAME="$OUTDIR/recording-$(date +%Y%m%d-%H%M%S).mp4"
+ GEOMETRY=$(slurp)
+ if [ -n "$GEOMETRY" ]; then
+ wf-recorder -g "$GEOMETRY" -f "$FILENAME" &
+ echo $! >"$PIDFILE"
+ notify-send "Screen Recording" "Recording started..."
+ fi
+fi
diff --git a/config/hyprland/scripts/toggle-terminal.sh b/config/hyprland/scripts/toggle-terminal.sh
new file mode 100644
index 000000000..7cb6ca4b2
--- /dev/null
+++ b/config/hyprland/scripts/toggle-terminal.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+# Toggle Ghostty scratchpad terminal
+
+CLASS="ghostty-scratchpad"
+
+if hyprctl clients -j | grep -q "\"class\": \"$CLASS\""; then
+ hyprctl dispatch togglespecialworkspace scratchpad
+else
+ ghostty --class="$CLASS" &
+ sleep 0.3
+ hyprctl dispatch togglespecialworkspace scratchpad
+fi
diff --git a/config/hyprpanel/default.nix b/config/hyprpanel/default.nix
new file mode 100644
index 000000000..f7fee92db
--- /dev/null
+++ b/config/hyprpanel/default.nix
@@ -0,0 +1,558 @@
+{ pkgs, ... }:
+{
+ programs.hyprpanel = {
+ enable = true;
+ systemd.enable = false;
+ settings = {
+ # Bar layout: workspaces left, clock center, modules right
+ "bar.layouts" = {
+ "0" = {
+ left = [
+ "dashboard"
+ "workspaces"
+ ];
+ middle = [ "clock" ];
+ right = [
+ "cpu"
+ "ram"
+ "volume"
+ "battery"
+ "network"
+ "bluetooth"
+ "systray"
+ "notifications"
+ ];
+ };
+ };
+
+ # Dashboard
+ "bar.dashboard.icon" = "";
+
+ # Clock
+ "bar.clock.format" = "%Y/%m/%d %H:%M:%S";
+
+ # Battery
+ "bar.battery.label" = true;
+
+ # Network
+ "bar.network.label" = false;
+
+ # Bluetooth
+ "bar.bluetooth.label" = false;
+
+ # Workspaces
+ "bar.workspaces.show_icons" = true;
+ "bar.workspaces.numbered_active_indicator" = "underline";
+ "bar.workspaces.show_application_icons" = true;
+ "bar.workspaces.workspaceIconMap" = {
+ "1" = "";
+ "2" = "";
+ "3" = "";
+ "4" = "";
+ };
+ "bar.workspaces.applicationIconMap" = {
+ "google-chrome" = "";
+ "[sS]lack" = "";
+ "[dD]iscord" = "";
+ "com.mitchellh.ghostty" = "";
+ "cursor" = "";
+ "1[pP]assword" = "";
+ "code" = "";
+ };
+
+ # Dashboard shortcuts (left)
+ "menus.dashboard.shortcuts.left.shortcut1.icon" = "";
+ "menus.dashboard.shortcuts.left.shortcut1.tooltip" = "Google Chrome";
+ "menus.dashboard.shortcuts.left.shortcut1.command" = "google-chrome-stable";
+ "menus.dashboard.shortcuts.left.shortcut2.icon" = "";
+ "menus.dashboard.shortcuts.left.shortcut2.tooltip" = "Slack";
+ "menus.dashboard.shortcuts.left.shortcut2.command" = "slack";
+ "menus.dashboard.shortcuts.left.shortcut3.icon" = "";
+ "menus.dashboard.shortcuts.left.shortcut3.tooltip" = "Discord";
+ "menus.dashboard.shortcuts.left.shortcut3.command" = "discord";
+
+ # Dashboard shortcuts (right)
+ "menus.dashboard.shortcuts.right.shortcut1.icon" = "";
+ "menus.dashboard.shortcuts.right.shortcut1.tooltip" = "Screen Saver";
+ "menus.dashboard.shortcuts.right.shortcut1.command" = "hyprlock";
+ "menus.dashboard.shortcuts.right.shortcut2.icon" = "";
+ "menus.dashboard.shortcuts.right.shortcut2.tooltip" = "Files";
+ "menus.dashboard.shortcuts.right.shortcut2.command" = "ghostty -e yazi";
+ "menus.dashboard.shortcuts.right.shortcut3.icon" = "";
+ "menus.dashboard.shortcuts.right.shortcut3.tooltip" = "Terminal";
+ "menus.dashboard.shortcuts.right.shortcut3.command" = "ghostty";
+
+ # Font
+ "theme.font.name" = "JetBrainsMono Nerd Font";
+ "theme.font.size" = "14px";
+
+ # Bar
+ "theme.bar.transparent" = true;
+ "theme.bar.floating" = false;
+
+ # Notifications
+ "notifications.position" = "top right";
+ "notifications.cache_actions" = true;
+ "notifications.showActionsOnHover" = false;
+
+ # Scaling (fix dropdown menus overflowing on fractional scale)
+ "scalingPriority" = "hyprland";
+
+ # OSD
+ "theme.osd.enable" = true;
+ "theme.osd.orientation" = "vertical";
+ "theme.osd.location" = "right";
+
+ # ── Frosty Translucent Theme ─────────────────────────────────────
+ "theme.bar.background" = "#1a1b2680";
+ "theme.bar.border.color" = "#ffffff18";
+ "theme.bar.buttons.style" = "default";
+ "theme.bar.buttons.background" = "#ffffff0d";
+ "theme.bar.buttons.icon" = "#ffffffcc";
+ "theme.bar.buttons.text" = "#ffffffcc";
+ "theme.bar.buttons.hover" = "#ffffff1a";
+ "theme.bar.buttons.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.borderColor" = "#ffffff18";
+
+ # Dashboard
+ "theme.bar.buttons.dashboard.icon" = "#88c0d0";
+ "theme.bar.buttons.dashboard.border" = "#ffffff18";
+ "theme.bar.buttons.dashboard.background" = "#ffffff0d";
+
+ # Workspaces
+ "theme.bar.buttons.workspaces.numbered_active_underline_color" = "#88c0d0";
+ "theme.bar.buttons.workspaces.numbered_active_highlighted_text_color" = "#1a1b26";
+ "theme.bar.buttons.workspaces.hover" = "#ffffff1a";
+ "theme.bar.buttons.workspaces.active" = "#88c0d0";
+ "theme.bar.buttons.workspaces.occupied" = "#ffffffaa";
+ "theme.bar.buttons.workspaces.available" = "#ffffff55";
+ "theme.bar.buttons.workspaces.border" = "#ffffff18";
+ "theme.bar.buttons.workspaces.background" = "#ffffff0d";
+
+ # Window title
+ "theme.bar.buttons.windowtitle.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.windowtitle.icon" = "#ffffffcc";
+ "theme.bar.buttons.windowtitle.text" = "#ffffffaa";
+ "theme.bar.buttons.windowtitle.border" = "#ffffff18";
+ "theme.bar.buttons.windowtitle.background" = "#ffffff0d";
+
+ # Media
+ "theme.bar.buttons.media.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.media.icon" = "#ffffffcc";
+ "theme.bar.buttons.media.text" = "#ffffffaa";
+ "theme.bar.buttons.media.background" = "#ffffff0d";
+ "theme.bar.buttons.media.border" = "#ffffff18";
+
+ # Volume
+ "theme.bar.buttons.volume.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.volume.icon" = "#ffffffcc";
+ "theme.bar.buttons.volume.text" = "#ffffffaa";
+ "theme.bar.buttons.volume.background" = "#ffffff0d";
+ "theme.bar.buttons.volume.border" = "#ffffff18";
+
+ # Network
+ "theme.bar.buttons.network.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.network.icon" = "#ffffffcc";
+ "theme.bar.buttons.network.text" = "#ffffffaa";
+ "theme.bar.buttons.network.background" = "#ffffff0d";
+ "theme.bar.buttons.network.border" = "#ffffff18";
+
+ # Bluetooth
+ "theme.bar.buttons.bluetooth.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.bluetooth.icon" = "#ffffffcc";
+ "theme.bar.buttons.bluetooth.text" = "#ffffffaa";
+ "theme.bar.buttons.bluetooth.background" = "#ffffff0d";
+ "theme.bar.buttons.bluetooth.border" = "#ffffff18";
+
+ # Systray
+ "theme.bar.buttons.systray.background" = "#ffffff0d";
+ "theme.bar.buttons.systray.border" = "#ffffff18";
+ "theme.bar.buttons.systray.customIcon" = "#ffffffcc";
+
+ # Battery
+ "theme.bar.buttons.battery.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.battery.icon" = "#ffffffcc";
+ "theme.bar.buttons.battery.text" = "#ffffffaa";
+ "theme.bar.buttons.battery.background" = "#ffffff0d";
+ "theme.bar.buttons.battery.border" = "#ffffff18";
+
+ # Clock
+ "theme.bar.buttons.clock.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.clock.icon" = "#ffffffcc";
+ "theme.bar.buttons.clock.text" = "#ffffffdd";
+ "theme.bar.buttons.clock.background" = "#ffffff0d";
+ "theme.bar.buttons.clock.border" = "#ffffff18";
+
+ # Notifications
+ "theme.bar.buttons.notifications.total" = "#88c0d0";
+ "theme.bar.buttons.notifications.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.notifications.icon" = "#ffffffcc";
+ "theme.bar.buttons.notifications.background" = "#ffffff0d";
+ "theme.bar.buttons.notifications.border" = "#ffffff18";
+
+ # RAM
+ "theme.bar.buttons.modules.ram.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.ram.icon" = "#a3be8c";
+ "theme.bar.buttons.modules.ram.text" = "#a3be8c";
+ "theme.bar.buttons.modules.ram.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.ram.border" = "#ffffff18";
+
+ # CPU
+ "theme.bar.buttons.modules.cpu.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.cpu.icon" = "#88c0d0";
+ "theme.bar.buttons.modules.cpu.text" = "#88c0d0";
+ "theme.bar.buttons.modules.cpu.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.cpu.border" = "#ffffff18";
+
+ # Storage
+ "theme.bar.buttons.modules.storage.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.storage.icon" = "#b48ead";
+ "theme.bar.buttons.modules.storage.text" = "#b48ead";
+ "theme.bar.buttons.modules.storage.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.storage.border" = "#ffffff18";
+
+ # Netstat
+ "theme.bar.buttons.modules.netstat.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.netstat.icon" = "#a3be8c";
+ "theme.bar.buttons.modules.netstat.text" = "#a3be8c";
+ "theme.bar.buttons.modules.netstat.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.netstat.border" = "#ffffff18";
+
+ # Keyboard Layout
+ "theme.bar.buttons.modules.kbLayout.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.kbLayout.icon" = "#ffffffcc";
+ "theme.bar.buttons.modules.kbLayout.text" = "#ffffffcc";
+ "theme.bar.buttons.modules.kbLayout.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.kbLayout.border" = "#ffffff18";
+
+ # Updates
+ "theme.bar.buttons.modules.updates.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.updates.icon" = "#ebcb8b";
+ "theme.bar.buttons.modules.updates.text" = "#ebcb8b";
+ "theme.bar.buttons.modules.updates.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.updates.border" = "#ffffff18";
+
+ # Weather
+ "theme.bar.buttons.modules.weather.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.weather.icon" = "#ebcb8b";
+ "theme.bar.buttons.modules.weather.text" = "#ebcb8b";
+ "theme.bar.buttons.modules.weather.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.weather.border" = "#ffffff18";
+
+ # Power
+ "theme.bar.buttons.modules.power.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.power.icon" = "#bf616a";
+ "theme.bar.buttons.modules.power.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.power.border" = "#ffffff18";
+
+ # Submap
+ "theme.bar.buttons.modules.submap.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.submap.text" = "#88c0d0";
+ "theme.bar.buttons.modules.submap.border" = "#ffffff18";
+ "theme.bar.buttons.modules.submap.icon" = "#88c0d0";
+ "theme.bar.buttons.modules.submap.icon_background" = "#ffffff0d";
+
+ # Hyprsunset
+ "theme.bar.buttons.modules.hyprsunset.icon" = "#ebcb8b";
+ "theme.bar.buttons.modules.hyprsunset.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.hyprsunset.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.hyprsunset.text" = "#ebcb8b";
+ "theme.bar.buttons.modules.hyprsunset.border" = "#ffffff18";
+
+ # Hypridle
+ "theme.bar.buttons.modules.hypridle.icon" = "#b48ead";
+ "theme.bar.buttons.modules.hypridle.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.hypridle.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.hypridle.text" = "#b48ead";
+ "theme.bar.buttons.modules.hypridle.border" = "#ffffff18";
+
+ # Cava
+ "theme.bar.buttons.modules.cava.text" = "#88c0d0";
+ "theme.bar.buttons.modules.cava.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.cava.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.cava.icon" = "#88c0d0";
+ "theme.bar.buttons.modules.cava.border" = "#ffffff18";
+
+ # Microphone
+ "theme.bar.buttons.modules.microphone.border" = "#ffffff18";
+ "theme.bar.buttons.modules.microphone.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.microphone.text" = "#a3be8c";
+ "theme.bar.buttons.modules.microphone.icon" = "#a3be8c";
+ "theme.bar.buttons.modules.microphone.icon_background" = "#ffffff0d";
+
+ # World Clock
+ "theme.bar.buttons.modules.worldclock.text" = "#ffffffcc";
+ "theme.bar.buttons.modules.worldclock.background" = "#ffffff0d";
+ "theme.bar.buttons.modules.worldclock.icon_background" = "#ffffff0d";
+ "theme.bar.buttons.modules.worldclock.icon" = "#ffffffcc";
+ "theme.bar.buttons.modules.worldclock.border" = "#ffffff18";
+
+ # ── Menu Theme (frosted glass) ──────────────────────────────────
+ "theme.bar.menus.background" = "#1a1b26cc";
+ "theme.bar.menus.cards" = "#ffffff0d";
+ "theme.bar.menus.border.color" = "#ffffff18";
+ "theme.bar.menus.text" = "#ffffffdd";
+ "theme.bar.menus.dimtext" = "#ffffff66";
+ "theme.bar.menus.feinttext" = "#ffffff33";
+ "theme.bar.menus.label" = "#88c0d0";
+ "theme.bar.menus.popover.border" = "#ffffff18";
+ "theme.bar.menus.popover.background" = "#1a1b26ee";
+ "theme.bar.menus.popover.text" = "#88c0d0";
+ "theme.bar.menus.listitems.active" = "#88c0d0";
+ "theme.bar.menus.listitems.passive" = "#ffffffdd";
+ "theme.bar.menus.icons.active" = "#88c0d0";
+ "theme.bar.menus.icons.passive" = "#ffffff55";
+ "theme.bar.menus.switch.enabled" = "#88c0d0";
+ "theme.bar.menus.switch.disabled" = "#ffffff22";
+ "theme.bar.menus.switch.puck" = "#ffffff44";
+ "theme.bar.menus.check_radio_button.active" = "#88c0d0";
+ "theme.bar.menus.check_radio_button.background" = "#ffffff0d";
+ "theme.bar.menus.buttons.default" = "#88c0d0";
+ "theme.bar.menus.buttons.active" = "#81a1c1";
+ "theme.bar.menus.buttons.disabled" = "#ffffff22";
+ "theme.bar.menus.buttons.text" = "#1a1b26";
+ "theme.bar.menus.iconbuttons.active" = "#88c0d0";
+ "theme.bar.menus.iconbuttons.passive" = "#ffffffdd";
+ "theme.bar.menus.progressbar.foreground" = "#88c0d0";
+ "theme.bar.menus.progressbar.background" = "#ffffff22";
+ "theme.bar.menus.slider.primary" = "#88c0d0";
+ "theme.bar.menus.slider.background" = "#ffffff22";
+ "theme.bar.menus.slider.backgroundhover" = "#ffffff33";
+ "theme.bar.menus.slider.puck" = "#ffffff44";
+ "theme.bar.menus.dropdownmenu.background" = "#1a1b26ee";
+ "theme.bar.menus.dropdownmenu.text" = "#ffffffdd";
+ "theme.bar.menus.dropdownmenu.divider" = "#ffffff18";
+ "theme.bar.menus.tooltip.background" = "#1a1b26ee";
+ "theme.bar.menus.tooltip.text" = "#ffffffdd";
+
+ # Volume menu
+ "theme.bar.menus.menu.volume.card.color" = "#ffffff0d";
+ "theme.bar.menus.menu.volume.background.color" = "#1a1b26cc";
+ "theme.bar.menus.menu.volume.border.color" = "#ffffff18";
+ "theme.bar.menus.menu.volume.label.color" = "#ebcb8b";
+ "theme.bar.menus.menu.volume.text" = "#ffffffdd";
+ "theme.bar.menus.menu.volume.listitems.active" = "#ebcb8b";
+ "theme.bar.menus.menu.volume.listitems.passive" = "#ffffffdd";
+ "theme.bar.menus.menu.volume.iconbutton.active" = "#ebcb8b";
+ "theme.bar.menus.menu.volume.iconbutton.passive" = "#ffffffdd";
+ "theme.bar.menus.menu.volume.icons.active" = "#ebcb8b";
+ "theme.bar.menus.menu.volume.icons.passive" = "#ffffff55";
+ "theme.bar.menus.menu.volume.audio_slider.primary" = "#ebcb8b";
+ "theme.bar.menus.menu.volume.audio_slider.background" = "#ffffff22";
+ "theme.bar.menus.menu.volume.audio_slider.backgroundhover" = "#ffffff33";
+ "theme.bar.menus.menu.volume.audio_slider.puck" = "#ffffff44";
+ "theme.bar.menus.menu.volume.input_slider.primary" = "#ebcb8b";
+ "theme.bar.menus.menu.volume.input_slider.background" = "#ffffff22";
+ "theme.bar.menus.menu.volume.input_slider.backgroundhover" = "#ffffff33";
+ "theme.bar.menus.menu.volume.input_slider.puck" = "#ffffff44";
+
+ # Media menu
+ "theme.bar.menus.menu.media.background.color" = "#1a1b26cc";
+ "theme.bar.menus.menu.media.card.color" = "#ffffff0d";
+ "theme.bar.menus.menu.media.border.color" = "#ffffff18";
+ "theme.bar.menus.menu.media.song" = "#88c0d0";
+ "theme.bar.menus.menu.media.artist" = "#ffffffaa";
+ "theme.bar.menus.menu.media.album" = "#b48ead";
+ "theme.bar.menus.menu.media.timestamp" = "#ffffff88";
+ "theme.bar.menus.menu.media.buttons.inactive" = "#ffffff33";
+ "theme.bar.menus.menu.media.buttons.enabled" = "#88c0d0";
+ "theme.bar.menus.menu.media.buttons.background" = "#88c0d0";
+ "theme.bar.menus.menu.media.buttons.text" = "#1a1b26";
+ "theme.bar.menus.menu.media.slider.primary" = "#88c0d0";
+ "theme.bar.menus.menu.media.slider.background" = "#ffffff22";
+ "theme.bar.menus.menu.media.slider.backgroundhover" = "#ffffff33";
+ "theme.bar.menus.menu.media.slider.puck" = "#ffffff44";
+
+ # Network menu
+ "theme.bar.menus.menu.network.card.color" = "#ffffff0d";
+ "theme.bar.menus.menu.network.background.color" = "#1a1b26cc";
+ "theme.bar.menus.menu.network.border.color" = "#ffffff18";
+ "theme.bar.menus.menu.network.label.color" = "#88c0d0";
+ "theme.bar.menus.menu.network.text" = "#ffffffdd";
+ "theme.bar.menus.menu.network.status.color" = "#ffffff55";
+ "theme.bar.menus.menu.network.listitems.active" = "#88c0d0";
+ "theme.bar.menus.menu.network.listitems.passive" = "#ffffffdd";
+ "theme.bar.menus.menu.network.icons.active" = "#88c0d0";
+ "theme.bar.menus.menu.network.icons.passive" = "#ffffff55";
+ "theme.bar.menus.menu.network.iconbuttons.active" = "#88c0d0";
+ "theme.bar.menus.menu.network.iconbuttons.passive" = "#ffffffdd";
+ "theme.bar.menus.menu.network.switch.enabled" = "#88c0d0";
+ "theme.bar.menus.menu.network.switch.disabled" = "#ffffff22";
+ "theme.bar.menus.menu.network.switch.puck" = "#ffffff44";
+ "theme.bar.menus.menu.network.scroller.color" = "#88c0d0";
+
+ # Bluetooth menu
+ "theme.bar.menus.menu.bluetooth.card.color" = "#ffffff0d";
+ "theme.bar.menus.menu.bluetooth.background.color" = "#1a1b26cc";
+ "theme.bar.menus.menu.bluetooth.border.color" = "#ffffff18";
+ "theme.bar.menus.menu.bluetooth.label.color" = "#81a1c1";
+ "theme.bar.menus.menu.bluetooth.text" = "#ffffffdd";
+ "theme.bar.menus.menu.bluetooth.status" = "#ffffff55";
+ "theme.bar.menus.menu.bluetooth.switch_divider" = "#ffffff18";
+ "theme.bar.menus.menu.bluetooth.switch.enabled" = "#81a1c1";
+ "theme.bar.menus.menu.bluetooth.switch.disabled" = "#ffffff22";
+ "theme.bar.menus.menu.bluetooth.switch.puck" = "#ffffff44";
+ "theme.bar.menus.menu.bluetooth.listitems.active" = "#81a1c1";
+ "theme.bar.menus.menu.bluetooth.listitems.passive" = "#ffffffdd";
+ "theme.bar.menus.menu.bluetooth.icons.active" = "#81a1c1";
+ "theme.bar.menus.menu.bluetooth.icons.passive" = "#ffffff55";
+ "theme.bar.menus.menu.bluetooth.iconbutton.active" = "#81a1c1";
+ "theme.bar.menus.menu.bluetooth.iconbutton.passive" = "#ffffffdd";
+ "theme.bar.menus.menu.bluetooth.scroller.color" = "#81a1c1";
+
+ # Systray menu
+ "theme.bar.menus.menu.systray.dropdownmenu.background" = "#1a1b26ee";
+ "theme.bar.menus.menu.systray.dropdownmenu.text" = "#ffffffdd";
+ "theme.bar.menus.menu.systray.dropdownmenu.divider" = "#ffffff18";
+
+ # Battery menu
+ "theme.bar.menus.menu.battery.card.color" = "#ffffff0d";
+ "theme.bar.menus.menu.battery.background.color" = "#1a1b26cc";
+ "theme.bar.menus.menu.battery.border.color" = "#ffffff18";
+ "theme.bar.menus.menu.battery.label.color" = "#a3be8c";
+ "theme.bar.menus.menu.battery.text" = "#ffffffdd";
+ "theme.bar.menus.menu.battery.listitems.active" = "#a3be8c";
+ "theme.bar.menus.menu.battery.listitems.passive" = "#ffffffdd";
+ "theme.bar.menus.menu.battery.icons.active" = "#a3be8c";
+ "theme.bar.menus.menu.battery.icons.passive" = "#ffffff55";
+ "theme.bar.menus.menu.battery.slider.primary" = "#a3be8c";
+ "theme.bar.menus.menu.battery.slider.background" = "#ffffff22";
+ "theme.bar.menus.menu.battery.slider.backgroundhover" = "#ffffff33";
+ "theme.bar.menus.menu.battery.slider.puck" = "#ffffff44";
+
+ # Clock menu
+ "theme.bar.menus.menu.clock.card.color" = "#ffffff0d";
+ "theme.bar.menus.menu.clock.background.color" = "#1a1b26cc";
+ "theme.bar.menus.menu.clock.border.color" = "#ffffff18";
+ "theme.bar.menus.menu.clock.text" = "#ffffffdd";
+ "theme.bar.menus.menu.clock.time.time" = "#88c0d0";
+ "theme.bar.menus.menu.clock.time.timeperiod" = "#81a1c1";
+ "theme.bar.menus.menu.clock.calendar.yearmonth" = "#88c0d0";
+ "theme.bar.menus.menu.clock.calendar.weekdays" = "#81a1c1";
+ "theme.bar.menus.menu.clock.calendar.paginator" = "#88c0d0";
+ "theme.bar.menus.menu.clock.calendar.currentday" = "#88c0d0";
+ "theme.bar.menus.menu.clock.calendar.days" = "#ffffffdd";
+ "theme.bar.menus.menu.clock.calendar.contextdays" = "#ffffff33";
+ "theme.bar.menus.menu.clock.weather.icon" = "#ebcb8b";
+ "theme.bar.menus.menu.clock.weather.temperature" = "#ffffffdd";
+ "theme.bar.menus.menu.clock.weather.status" = "#88c0d0";
+ "theme.bar.menus.menu.clock.weather.stats" = "#81a1c1";
+ "theme.bar.menus.menu.clock.weather.thermometer.extremelyhot" = "#bf616a";
+ "theme.bar.menus.menu.clock.weather.thermometer.hot" = "#d08770";
+ "theme.bar.menus.menu.clock.weather.thermometer.moderate" = "#ebcb8b";
+ "theme.bar.menus.menu.clock.weather.thermometer.cold" = "#88c0d0";
+ "theme.bar.menus.menu.clock.weather.thermometer.extremelycold" = "#5e81ac";
+ "theme.bar.menus.menu.clock.weather.hourly.time" = "#81a1c1";
+ "theme.bar.menus.menu.clock.weather.hourly.icon" = "#88c0d0";
+ "theme.bar.menus.menu.clock.weather.hourly.temperature" = "#ffffffdd";
+
+ # Dashboard menu
+ "theme.bar.menus.menu.dashboard.card.color" = "#ffffff0d";
+ "theme.bar.menus.menu.dashboard.background.color" = "#1a1b26cc";
+ "theme.bar.menus.menu.dashboard.border.color" = "#ffffff18";
+ "theme.bar.menus.menu.dashboard.profile.name" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.powermenu.shutdown" = "#bf616a";
+ "theme.bar.menus.menu.dashboard.powermenu.restart" = "#d08770";
+ "theme.bar.menus.menu.dashboard.powermenu.logout" = "#a3be8c";
+ "theme.bar.menus.menu.dashboard.powermenu.sleep" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.powermenu.confirmation.card" = "#ffffff0d";
+ "theme.bar.menus.menu.dashboard.powermenu.confirmation.background" = "#1a1b26ee";
+ "theme.bar.menus.menu.dashboard.powermenu.confirmation.border" = "#ffffff18";
+ "theme.bar.menus.menu.dashboard.powermenu.confirmation.label" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.powermenu.confirmation.body" = "#ffffffdd";
+ "theme.bar.menus.menu.dashboard.powermenu.confirmation.confirm" = "#a3be8c";
+ "theme.bar.menus.menu.dashboard.powermenu.confirmation.deny" = "#bf616a";
+ "theme.bar.menus.menu.dashboard.powermenu.confirmation.button_text" = "#1a1b26";
+ "theme.bar.menus.menu.dashboard.shortcuts.background" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.shortcuts.text" = "#1a1b26";
+ "theme.bar.menus.menu.dashboard.shortcuts.recording" = "#a3be8c";
+ "theme.bar.menus.menu.dashboard.controls.disabled" = "#ffffff22";
+ "theme.bar.menus.menu.dashboard.controls.wifi.background" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.controls.wifi.text" = "#1a1b26";
+ "theme.bar.menus.menu.dashboard.controls.bluetooth.background" = "#81a1c1";
+ "theme.bar.menus.menu.dashboard.controls.bluetooth.text" = "#1a1b26";
+ "theme.bar.menus.menu.dashboard.controls.notifications.background" = "#ebcb8b";
+ "theme.bar.menus.menu.dashboard.controls.notifications.text" = "#1a1b26";
+ "theme.bar.menus.menu.dashboard.controls.volume.background" = "#d08770";
+ "theme.bar.menus.menu.dashboard.controls.volume.text" = "#1a1b26";
+ "theme.bar.menus.menu.dashboard.controls.input.background" = "#b48ead";
+ "theme.bar.menus.menu.dashboard.controls.input.text" = "#1a1b26";
+ "theme.bar.menus.menu.dashboard.directories.left.top.color" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.directories.left.middle.color" = "#a3be8c";
+ "theme.bar.menus.menu.dashboard.directories.left.bottom.color" = "#bf616a";
+ "theme.bar.menus.menu.dashboard.directories.right.top.color" = "#81a1c1";
+ "theme.bar.menus.menu.dashboard.directories.right.middle.color" = "#b48ead";
+ "theme.bar.menus.menu.dashboard.directories.right.bottom.color" = "#d08770";
+ "theme.bar.menus.menu.dashboard.monitors.bar_background" = "#ffffff22";
+ "theme.bar.menus.menu.dashboard.monitors.cpu.icon" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.monitors.cpu.bar" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.monitors.cpu.label" = "#88c0d0";
+ "theme.bar.menus.menu.dashboard.monitors.ram.icon" = "#a3be8c";
+ "theme.bar.menus.menu.dashboard.monitors.ram.bar" = "#a3be8c";
+ "theme.bar.menus.menu.dashboard.monitors.ram.label" = "#a3be8c";
+ "theme.bar.menus.menu.dashboard.monitors.gpu.icon" = "#ebcb8b";
+ "theme.bar.menus.menu.dashboard.monitors.gpu.bar" = "#ebcb8b";
+ "theme.bar.menus.menu.dashboard.monitors.gpu.label" = "#ebcb8b";
+ "theme.bar.menus.menu.dashboard.monitors.disk.icon" = "#b48ead";
+ "theme.bar.menus.menu.dashboard.monitors.disk.bar" = "#b48ead";
+ "theme.bar.menus.menu.dashboard.monitors.disk.label" = "#b48ead";
+
+ # Power menu
+ "theme.bar.menus.menu.power.background.color" = "#1a1b26cc";
+ "theme.bar.menus.menu.power.border.color" = "#ffffff18";
+ "theme.bar.menus.menu.power.buttons.shutdown.background" = "#ffffff0d";
+ "theme.bar.menus.menu.power.buttons.shutdown.icon_background" = "#bf616a";
+ "theme.bar.menus.menu.power.buttons.shutdown.text" = "#ffffffdd";
+ "theme.bar.menus.menu.power.buttons.shutdown.icon" = "#1a1b26";
+ "theme.bar.menus.menu.power.buttons.restart.background" = "#ffffff0d";
+ "theme.bar.menus.menu.power.buttons.restart.icon_background" = "#d08770";
+ "theme.bar.menus.menu.power.buttons.restart.text" = "#d08770";
+ "theme.bar.menus.menu.power.buttons.restart.icon" = "#1a1b26";
+ "theme.bar.menus.menu.power.buttons.logout.background" = "#ffffff0d";
+ "theme.bar.menus.menu.power.buttons.logout.icon_background" = "#a3be8c";
+ "theme.bar.menus.menu.power.buttons.logout.text" = "#a3be8c";
+ "theme.bar.menus.menu.power.buttons.logout.icon" = "#1a1b26";
+ "theme.bar.menus.menu.power.buttons.sleep.background" = "#ffffff0d";
+ "theme.bar.menus.menu.power.buttons.sleep.icon_background" = "#88c0d0";
+ "theme.bar.menus.menu.power.buttons.sleep.text" = "#88c0d0";
+ "theme.bar.menus.menu.power.buttons.sleep.icon" = "#1a1b26";
+
+ # Notifications menu
+ "theme.bar.menus.menu.notifications.background" = "#1a1b26cc";
+ "theme.bar.menus.menu.notifications.card" = "#ffffff0d";
+ "theme.bar.menus.menu.notifications.border" = "#ffffff18";
+ "theme.bar.menus.menu.notifications.label" = "#88c0d0";
+ "theme.bar.menus.menu.notifications.no_notifications_label" = "#ffffff44";
+ "theme.bar.menus.menu.notifications.switch_divider" = "#ffffff18";
+ "theme.bar.menus.menu.notifications.clear" = "#88c0d0";
+ "theme.bar.menus.menu.notifications.switch.enabled" = "#88c0d0";
+ "theme.bar.menus.menu.notifications.switch.disabled" = "#ffffff22";
+ "theme.bar.menus.menu.notifications.switch.puck" = "#ffffff44";
+ "theme.bar.menus.menu.notifications.pager.background" = "#ffffff0d";
+ "theme.bar.menus.menu.notifications.pager.button" = "#88c0d0";
+ "theme.bar.menus.menu.notifications.pager.label" = "#ffffff66";
+ "theme.bar.menus.menu.notifications.scrollbar.color" = "#88c0d0";
+
+ # ── OSD Theme ────────────────────────────────────────────────────
+ "theme.osd.bar_container" = "#1a1b26cc";
+ "theme.osd.icon_container" = "#88c0d0";
+ "theme.osd.bar_color" = "#88c0d0";
+ "theme.osd.bar_empty_color" = "#ffffff22";
+ "theme.osd.bar_overflow_color" = "#bf616a";
+ "theme.osd.icon" = "#1a1b26";
+ "theme.osd.label" = "#88c0d0";
+
+ # ── Notification Theme (frosted) ────────────────────────────────
+ "theme.notification.background" = "#1a1b26cc";
+ "theme.notification.actions.background" = "#88c0d0";
+ "theme.notification.actions.text" = "#1a1b26";
+ "theme.notification.label" = "#88c0d0";
+ "theme.notification.border" = "#ffffff18";
+ "theme.notification.time" = "#ffffff66";
+ "theme.notification.text" = "#ffffffdd";
+ "theme.notification.labelicon" = "#88c0d0";
+ "theme.notification.close_button.background" = "#88c0d0";
+ "theme.notification.close_button.label" = "#1a1b26";
+ };
+ };
+}
diff --git a/config/keyd/default.conf b/config/keyd/default.conf
index 6de897895..4c6406a4f 100644
--- a/config/keyd/default.conf
+++ b/config/keyd/default.conf
@@ -74,6 +74,9 @@ right = C-right
up = C-up
down = C-down
+# Walker launcher (Framework+Space → Ctrl+Alt+Shift+Space)
+space = C-A-S-space
+
# Display zoom (Hyprland intercepts these globally)
equal = C-A-S-equal
minus = C-A-S-minus
diff --git a/config/swaync/config.json b/config/swaync/config.json
deleted file mode 100644
index d9d6b1c26..000000000
--- a/config/swaync/config.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "$schema": "/etc/xdg/swaync/configSchema.json",
- "positionX": "right",
- "positionY": "top",
- "layer": "overlay",
- "control-center-width": 420,
- "control-center-height": 600,
- "notification-window-width": 380,
- "notification-icon-size": 48,
- "notification-body-image-height": 100,
- "notification-body-image-width": 200,
- "timeout": 5,
- "timeout-low": 3,
- "timeout-critical": 0,
- "fit-to-screen": true,
- "relative-timestamps": true,
- "hide-on-action": true,
- "hide-on-clear": true,
- "widgets": [
- "title",
- "dnd",
- "notifications"
- ],
- "widget-config": {
- "title": {
- "text": "Notifications",
- "clear-all-button": true,
- "button-text": "Clear"
- },
- "dnd": {
- "text": "Do Not Disturb"
- }
- }
-}
diff --git a/config/swaync/default.nix b/config/swaync/default.nix
deleted file mode 100644
index 0bf0a28d0..000000000
--- a/config/swaync/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ config, ... }:
-{
- xdg.configFile."swaync/config.json" = {
- source = ./config.json;
- force = true;
- };
- xdg.configFile."swaync/style.css" = {
- source = ./style.css;
- force = true;
- };
-}
diff --git a/config/swaync/style.css b/config/swaync/style.css
deleted file mode 100644
index 9e09f66bb..000000000
--- a/config/swaync/style.css
+++ /dev/null
@@ -1,119 +0,0 @@
-.notification-row {
- outline: none;
-}
-
-.notification-row:focus,
-.notification-row:hover {
- background: #44475a;
-}
-
-.notification {
- border-radius: 12px;
- margin: 4px 8px;
- padding: 0;
- border: 2px solid #44475a;
- background: #282a36;
-}
-
-.notification-content {
- padding: 8px;
-}
-
-.close-button {
- background: #ff5555;
- color: #282a36;
- border-radius: 50%;
- margin: 4px;
- padding: 2px;
- min-width: 20px;
- min-height: 20px;
-}
-
-.close-button:hover {
- background: #ff79c6;
-}
-
-.notification-default-action,
-.notification-action {
- border-radius: 8px;
- margin: 4px;
- padding: 4px 8px;
- background: #44475a;
- color: #f8f8f2;
- border: none;
-}
-
-.notification-default-action:hover,
-.notification-action:hover {
- background: #6272a4;
-}
-
-.summary {
- font-weight: bold;
- font-size: 14px;
- color: #f8f8f2;
-}
-
-.body {
- font-size: 13px;
- color: #f8f8f2;
-}
-
-.time {
- font-size: 11px;
- color: #6272a4;
- margin-right: 8px;
-}
-
-.control-center {
- background: #282a36;
- border: 2px solid #44475a;
- border-radius: 12px;
- margin: 8px;
- padding: 8px;
-}
-
-.control-center-list {
- background: transparent;
-}
-
-.widget-title {
- color: #f8f8f2;
- font-size: 16px;
- font-weight: bold;
- margin: 8px;
-}
-
-.widget-title > button {
- background: #bd93f9;
- color: #282a36;
- border-radius: 8px;
- padding: 4px 12px;
- border: none;
- font-weight: bold;
-}
-
-.widget-title > button:hover {
- background: #ff79c6;
-}
-
-.widget-dnd {
- color: #f8f8f2;
- margin: 4px 8px;
- font-size: 14px;
-}
-
-.widget-dnd > switch {
- background: #44475a;
- border-radius: 12px;
- border: 2px solid #6272a4;
-}
-
-.widget-dnd > switch:checked {
- background: #bd93f9;
-}
-
-.widget-dnd > switch slider {
- background: #f8f8f2;
- border-radius: 50%;
-}
diff --git a/config/walker/config.toml b/config/walker/config.toml
new file mode 100644
index 000000000..3b63d5191
--- /dev/null
+++ b/config/walker/config.toml
@@ -0,0 +1,75 @@
+force_keyboard_focus = true
+close_when_open = true
+click_to_close = true
+single_click_activation = true
+selection_wrap = true
+theme = "dracula"
+resume_last_query = false
+disable_mouse = false
+
+[shell]
+anchor_top = true
+anchor_bottom = false
+anchor_left = true
+anchor_right = true
+
+[placeholders]
+"default" = { input = "Search...", list = "No Results" }
+
+[keybinds]
+close = ["Escape"]
+next = ["Down"]
+previous = ["Up"]
+
+[providers]
+default = ["desktopapplications", "customcommands", "calc", "websearch"]
+empty = ["desktopapplications"]
+max_results = 8
+
+[[providers.prefixes]]
+prefix = "="
+provider = "calc"
+
+[[providers.prefixes]]
+prefix = "@"
+provider = "websearch"
+
+[[providers.prefixes]]
+prefix = ">"
+provider = "runner"
+
+[[providers.prefixes]]
+prefix = "/"
+provider = "files"
+
+[[providers.prefixes]]
+prefix = ":"
+provider = "clipboard"
+
+[[providers.prefixes]]
+prefix = "$"
+provider = "windows"
+
+[[providers.prefixes]]
+prefix = ";"
+provider = "providerlist"
+
+# =============================================================================
+# Custom Commands (searchable system actions)
+# =============================================================================
+[customcommands]
+"Lock Screen" = "hyprlock"
+"Start Screen Saver" = "hyprlock"
+"Suspend" = "systemctl suspend"
+"Reboot" = "systemctl reboot"
+"Shutdown" = "systemctl poweroff"
+"Logout" = "hyprctl dispatch exit"
+"Toggle WiFi" = "nmcli radio wifi toggle"
+"Bluetooth Manager" = "blueman-manager"
+"Audio Settings" = "pavucontrol"
+"Screenshot Region" = "grim -g \"$(slurp)\" - | swappy -f -"
+"Record Screen" = "~/.config/hypr/scripts/record-screen.sh"
+"Color Picker" = "hyprpicker -a"
+"Toggle Notifications" = "hyprpanel toggleWindow notifications-center"
+"Network Menu" = "hyprpanel toggleWindow network-menu"
+"Power Menu" = "hyprpanel toggleWindow power-menu"
diff --git a/config/walker/default.nix b/config/walker/default.nix
new file mode 100644
index 000000000..d0b1e4714
--- /dev/null
+++ b/config/walker/default.nix
@@ -0,0 +1,11 @@
+{ config, pkgs, ... }:
+{
+ xdg.configFile."walker/config.toml" = {
+ source = ./config.toml;
+ force = true;
+ };
+ xdg.configFile."walker/themes/dracula/style.css" = {
+ source = ./style.css;
+ force = true;
+ };
+}
diff --git a/config/walker/style.css b/config/walker/style.css
new file mode 100644
index 000000000..5c8ad1eb6
--- /dev/null
+++ b/config/walker/style.css
@@ -0,0 +1,75 @@
+#window {
+ background-color: rgba(40, 42, 54, 0.92);
+ border: 2px solid #bd93f9;
+ border-radius: 12px;
+}
+
+#box {
+ padding: 8px;
+}
+
+#input {
+ font-family: "JetBrainsMono Nerd Font", monospace;
+ font-size: 18px;
+ padding: 12px 16px;
+ background-color: #44475a;
+ color: #f8f8f2;
+ border: 2px solid transparent;
+ border-radius: 8px;
+ margin-bottom: 8px;
+}
+
+#input:focus {
+ border-color: #bd93f9;
+}
+
+#list {
+ background-color: transparent;
+}
+
+#list row {
+ padding: 8px 12px;
+ border-radius: 8px;
+ margin: 2px 0;
+}
+
+#list row:selected {
+ background-color: #bd93f9;
+}
+
+#list row:hover:not(:selected) {
+ background-color: #44475a;
+}
+
+.item-label {
+ font-family: "JetBrainsMono Nerd Font", monospace;
+ font-size: 14px;
+ color: #f8f8f2;
+}
+
+#list row:selected .item-label {
+ color: #282a36;
+}
+
+.item-sub {
+ font-family: "JetBrainsMono Nerd Font", monospace;
+ font-size: 12px;
+ color: #6272a4;
+}
+
+#list row:selected .item-sub {
+ color: #44475a;
+}
+
+.item-icon {
+ margin-right: 12px;
+}
+
+.activation-label {
+ font-family: "JetBrainsMono Nerd Font", monospace;
+ font-size: 12px;
+ color: #6272a4;
+ padding: 2px 6px;
+ background-color: #44475a;
+ border-radius: 4px;
+}
diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc
deleted file mode 100644
index 726855004..000000000
--- a/config/waybar/config.jsonc
+++ /dev/null
@@ -1,124 +0,0 @@
-{
- "layer": "top",
- "position": "top",
- "height": 36,
- "spacing": 4,
-
- "modules-left": ["hyprland/workspaces"],
- "modules-center": ["clock"],
- "modules-right": [
- "cpu",
- "memory",
- "pulseaudio",
- "backlight",
- "battery",
- "network",
- "bluetooth",
- "tray",
- "custom/notification"
- ],
-
- "hyprland/workspaces": {
- "format": "{id}",
- "on-click": "activate",
- "sort-by-number": true
- },
-
- "clock": {
- "interval": 1,
- "format": "{:%Y/%m/%d %H:%M:%S}",
- "tooltip-format": "{calendar}",
- "calendar": {
- "mode": "month",
- "weeks-pos": "left",
- "format": {
- "months": "{}",
- "weeks": "W{}",
- "weekdays": "{}",
- "today": "{}"
- }
- }
- },
-
- "cpu": {
- "interval": 5,
- "format": " {usage}%",
- "tooltip-format": "{avg_frequency} GHz\n{usage}% used"
- },
-
- "memory": {
- "interval": 5,
- "format": " {percentage}%",
- "tooltip-format": "{used:0.1f} / {total:0.1f} GiB"
- },
-
- "pulseaudio": {
- "format": "{icon} {volume}%",
- "format-muted": " muted",
- "format-icons": {
- "default": ["", "", ""]
- },
- "on-click": "pavucontrol",
- "scroll-step": 5,
- "tooltip": true
- },
-
- "backlight": {
- "format": "{icon} {percent}%",
- "format-icons": ["", "", ""],
- "tooltip": true
- },
-
- "battery": {
- "interval": 30,
- "states": {
- "warning": 30,
- "critical": 15
- },
- "format": "{icon} {capacity}%",
- "format-charging": " {capacity}%",
- "format-plugged": " {capacity}%",
- "format-icons": ["", "", "", "", "", "", "", "", "", "", ""],
- "tooltip-format": "{timeTo}\n{capacity}% - {power}W"
- },
-
- "network": {
- "format-wifi": " {essid}",
- "format-ethernet": " {ipaddr}",
- "format-disconnected": " disconnected",
- "tooltip-format-wifi": "{essid} ({signalStrength}%)\n{ipaddr}",
- "tooltip-format-ethernet": "{ifname}\n{ipaddr}",
- "on-click": "nm-connection-editor"
- },
-
- "bluetooth": {
- "format": "",
- "format-connected": " {num_connections}",
- "format-disabled": "",
- "tooltip-format": "{status}\n{device_enumerate}",
- "tooltip-format-enumerate-connected": "{device_alias}",
- "on-click": "blueman-manager"
- },
-
- "tray": {
- "icon-size": 16,
- "spacing": 8
- },
-
- "custom/notification": {
- "tooltip": false,
- "format": "{icon}",
- "format-icons": {
- "notification": "",
- "none": "",
- "dnd-notification": "",
- "dnd-none": ""
- },
- "return-type": "json",
- "exec-if": "which swaync-client",
- "exec": "swaync-client -swb",
- "on-click": "swaync-client -t -sw",
- "on-click-right": "swaync-client -d -sw",
- "escape": true
- }
-}
diff --git a/config/waybar/default.nix b/config/waybar/default.nix
deleted file mode 100644
index 88d5c2824..000000000
--- a/config/waybar/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ config, ... }:
-{
- xdg.configFile."waybar/config.jsonc" = {
- source = ./config.jsonc;
- force = true;
- };
- xdg.configFile."waybar/style.css" = {
- source = ./style.css;
- force = true;
- };
-}
diff --git a/config/waybar/style.css b/config/waybar/style.css
deleted file mode 100644
index 6e6b66a39..000000000
--- a/config/waybar/style.css
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Dracula */
-@define-color background #282a36;
-@define-color currentline #44475a;
-@define-color foreground #f8f8f2;
-@define-color comment #6272a4;
-@define-color cyan #8be9fd;
-@define-color green #50fa7b;
-@define-color orange #ffb86c;
-@define-color pink #ff79c6;
-@define-color purple #bd93f9;
-@define-color red #ff5555;
-@define-color yellow #f1fa8c;
-
-* {
- font-family: "JetBrainsMono Nerd Font", monospace;
- font-size: 13px;
- min-height: 0;
-}
-
-window#waybar {
- background-color: @background;
- color: @foreground;
- border-bottom: 2px solid @currentline;
-}
-
-tooltip {
- background-color: @background;
- border: 1px solid @comment;
- border-radius: 8px;
- color: @foreground;
-}
-
-#workspaces button {
- padding: 0 8px;
- color: @comment;
- border-radius: 6px;
- margin: 3px 2px;
- background-color: transparent;
-}
-
-#workspaces button.active {
- color: @background;
- background-color: @purple;
-}
-
-#workspaces button:hover {
- background-color: @currentline;
- color: @foreground;
-}
-
-#clock {
- color: @foreground;
- font-weight: bold;
-}
-
-#cpu {
- color: @orange;
-}
-
-#memory {
- color: @green;
-}
-
-#pulseaudio {
- color: @cyan;
-}
-
-#pulseaudio.muted {
- color: @comment;
-}
-
-#backlight {
- color: @yellow;
-}
-
-#battery {
- color: @green;
-}
-
-#battery.warning {
- color: @yellow;
-}
-
-#battery.critical {
- color: @red;
- animation: blink 1s linear infinite;
-}
-
-@keyframes blink {
- to {
- color: @background;
- background-color: @red;
- }
-}
-
-#battery.charging {
- color: @green;
-}
-
-#network {
- color: @cyan;
-}
-
-#network.disconnected {
- color: @comment;
-}
-
-#bluetooth {
- color: @purple;
-}
-
-#bluetooth.disabled {
- color: @comment;
-}
-
-#tray {
- color: @foreground;
-}
-
-#tray > .passive {
- -gtk-icon-effect: dim;
-}
-
-#custom-notification {
- color: @orange;
- padding: 0 6px;
-}
-
-/* Module spacing */
-#cpu,
-#memory,
-#pulseaudio,
-#backlight,
-#battery,
-#network,
-#bluetooth,
-#tray,
-#clock,
-#custom-notification {
- padding: 0 10px;
- margin: 3px 0;
- border-radius: 6px;
-}
diff --git a/config/wlogout/default.nix b/config/wlogout/default.nix
deleted file mode 100644
index 31e3f5204..000000000
--- a/config/wlogout/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ config, ... }:
-{
- xdg.configFile."wlogout/layout" = {
- source = ./layout;
- force = true;
- };
- xdg.configFile."wlogout/style.css" = {
- source = ./style.css;
- force = true;
- };
-}
diff --git a/config/wlogout/layout b/config/wlogout/layout
deleted file mode 100644
index bcb426522..000000000
--- a/config/wlogout/layout
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "label" : "lock",
- "action" : "hyprlock",
- "text" : "Lock",
- "keybind" : "l"
-}
-{
- "label" : "logout",
- "action" : "hyprctl dispatch exit",
- "text" : "Logout",
- "keybind" : "e"
-}
-{
- "label" : "suspend",
- "action" : "systemctl suspend",
- "text" : "Suspend",
- "keybind" : "s"
-}
-{
- "label" : "reboot",
- "action" : "systemctl reboot",
- "text" : "Reboot",
- "keybind" : "r"
-}
-{
- "label" : "shutdown",
- "action" : "systemctl poweroff",
- "text" : "Shutdown",
- "keybind" : "p"
-}
diff --git a/config/wlogout/style.css b/config/wlogout/style.css
deleted file mode 100644
index 86cee1020..000000000
--- a/config/wlogout/style.css
+++ /dev/null
@@ -1,49 +0,0 @@
-window {
- background-color: rgba(40, 42, 54, 0.9);
- font-family: "JetBrainsMono Nerd Font", monospace;
-}
-
-button {
- background-color: #44475a;
- border-radius: 12px;
- margin: 10px;
- padding: 20px;
- color: #f8f8f2;
- font-size: 18px;
- border: 2px solid #6272a4;
- background-repeat: no-repeat;
- background-position: center;
- background-size: 48px;
-}
-
-button:focus,
-button:hover {
- background-color: #6272a4;
- border-color: #bd93f9;
- outline: none;
-}
-
-button:active {
- background-color: #bd93f9;
- color: #282a36;
-}
-
-#lock {
- background-image: image(url("/usr/share/wlogout/icons/lock.png"));
-}
-
-#logout {
- background-image: image(url("/usr/share/wlogout/icons/logout.png"));
-}
-
-#suspend {
- background-image: image(url("/usr/share/wlogout/icons/suspend.png"));
-}
-
-#reboot {
- background-image: image(url("/usr/share/wlogout/icons/reboot.png"));
-}
-
-#shutdown {
- background-image: image(url("/usr/share/wlogout/icons/shutdown.png"));
-}
diff --git a/config/wofi/config b/config/wofi/config
deleted file mode 100644
index 678ed7bd7..000000000
--- a/config/wofi/config
+++ /dev/null
@@ -1,15 +0,0 @@
-width=600
-height=400
-location=center
-show=drun
-prompt=Search...
-filter_rate=100
-allow_markup=true
-no_actions=true
-halign=fill
-orientation=vertical
-content_halign=fill
-insensitive=true
-allow_images=true
-image_size=24
-layer=overlay
diff --git a/config/wofi/default.nix b/config/wofi/default.nix
deleted file mode 100644
index 11116bbfb..000000000
--- a/config/wofi/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ config, ... }:
-{
- xdg.configFile."wofi/config" = {
- source = ./config;
- force = true;
- };
- xdg.configFile."wofi/style.css" = {
- source = ./style.css;
- force = true;
- };
-}
diff --git a/config/wofi/style.css b/config/wofi/style.css
deleted file mode 100644
index 45c29b8fc..000000000
--- a/config/wofi/style.css
+++ /dev/null
@@ -1,58 +0,0 @@
-window {
- margin: 0;
- border: 2px solid #bd93f9;
- border-radius: 12px;
- background-color: #282a36;
- font-family: "JetBrainsMono Nerd Font", monospace;
- font-size: 14px;
-}
-
-#input {
- margin: 8px;
- padding: 8px 12px;
- border: none;
- border-radius: 8px;
- background-color: #44475a;
- color: #f8f8f2;
- font-size: 14px;
-}
-
-#input:focus {
- border: 2px solid #bd93f9;
-}
-
-#inner-box {
- margin: 4px 8px;
-}
-
-#outer-box {
- margin: 0;
- padding: 0;
-}
-
-#scroll {
- margin: 0;
-}
-
-#text {
- color: #f8f8f2;
- margin: 0 4px;
-}
-
-#entry {
- padding: 6px 8px;
- border-radius: 8px;
-}
-
-#entry:selected {
- background-color: #bd93f9;
- color: #282a36;
-}
-
-#entry:hover {
- background-color: #44475a;
-}
-
-#img {
- margin-right: 8px;
-}
diff --git a/flake.nix b/flake.nix
index 3e7191ed7..8ea444a4b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -182,7 +182,7 @@
treefmtSettings = lib.recursiveUpdate treefmtToml {
formatter = {
nix = (treefmtToml.formatter.nix or { }) // {
- command = lib.getExe pkgs.nixfmt-rfc-style;
+ command = lib.getExe pkgs.nixfmt;
};
biome = (treefmtToml.formatter.biome or { }) // {
command = lib.getExe pkgs.biome;
diff --git a/home-manager/packages/default.nix b/home-manager/packages/default.nix
index 6e45ad4dc..4ac5c2631 100644
--- a/home-manager/packages/default.nix
+++ b/home-manager/packages/default.nix
@@ -95,7 +95,7 @@ with pkgs;
atop
below
binutils
- blueberry
+ blueman
claude-code
cmake
codex
@@ -122,6 +122,7 @@ with pkgs;
chromium
clickup
cliphist
+ discord
emote
ffmpeg
ghostty
@@ -130,22 +131,21 @@ with pkgs;
grim
hypridle
hyprlock
+ hyprpicker
+ hyprshot
+ hyprsunset
libnotify
- networkmanagerapplet
pavucontrol
playerctl
signal-desktop
slack
slurp
swappy
- swaynotificationcenter
- swww
+ linux-wallpaperengine
vlc
vscode
- waybar
+ walker
+ wf-recorder
+ wl-clip-persist
wl-clipboard
- wlogout
- wob
- wofi
- wofi-emoji
]
diff --git a/home-manager/programs/fish/default.nix b/home-manager/programs/fish/default.nix
index 5ec74b63c..e42666780 100644
--- a/home-manager/programs/fish/default.nix
+++ b/home-manager/programs/fish/default.nix
@@ -111,6 +111,9 @@
pixeh = "_pixeh_function";
sag = "_ssh_add_github";
shortcuts = "_fish_shortcuts";
+ tdo = "_tdo_function";
+ tmo = "_tmo_function";
+ tpo = "_tpo_function";
zdo = "_zdo_function";
zmo = "_zmo_function";
zpo = "_zpo_function";
@@ -192,6 +195,9 @@
"_pixe_function"
"_pixeh_function"
"_ssh_add_github"
+ "_tdo_function"
+ "_tmo_function"
+ "_tpo_function"
"_zdo_function"
"_zmo_function"
"_zpo_function"
diff --git a/home-manager/programs/fish/functions/_tdo_function.fish b/home-manager/programs/fish/functions/_tdo_function.fish
new file mode 100644
index 000000000..075b20867
--- /dev/null
+++ b/home-manager/programs/fish/functions/_tdo_function.fish
@@ -0,0 +1,3 @@
+function _tdo_function --description "Attach to tmux desktop session"
+ tmux new-session -A -s desktop
+end
diff --git a/home-manager/programs/fish/functions/_tmo_function.fish b/home-manager/programs/fish/functions/_tmo_function.fish
new file mode 100644
index 000000000..232a6d165
--- /dev/null
+++ b/home-manager/programs/fish/functions/_tmo_function.fish
@@ -0,0 +1,3 @@
+function _tmo_function --description "Attach to tmux mobile session"
+ tmux new-session -A -s mobile
+end
diff --git a/home-manager/programs/fish/functions/_tpo_function.fish b/home-manager/programs/fish/functions/_tpo_function.fish
new file mode 100644
index 000000000..f759b03ed
--- /dev/null
+++ b/home-manager/programs/fish/functions/_tpo_function.fish
@@ -0,0 +1,3 @@
+function _tpo_function --description "Attach to tmux primary session"
+ tmux new-session -A -s primary
+end
diff --git a/home-manager/programs/tmux/default.nix b/home-manager/programs/tmux/default.nix
index 841289898..ad1f78216 100644
--- a/home-manager/programs/tmux/default.nix
+++ b/home-manager/programs/tmux/default.nix
@@ -4,10 +4,15 @@
enable = true;
extraConfig = builtins.readFile ./tmux.conf;
plugins = with pkgs.tmuxPlugins; [
- dracula
sensible
- tmux-fzf
yank
+ tmux-fzf
+ resurrect
+ continuum
+ tmux-sessionx
+ tmux-thumbs
+ open
+ extrakto
];
};
}
diff --git a/home-manager/programs/tmux/tmux.conf b/home-manager/programs/tmux/tmux.conf
index 183095546..feafaab0b 100644
--- a/home-manager/programs/tmux/tmux.conf
+++ b/home-manager/programs/tmux/tmux.conf
@@ -97,10 +97,40 @@ set -g display-panes-active-colour colour245
set -g clock-mode-colour colour39
set -g clock-mode-style 24
-# Dracula theme
-# From: https://github.com/dracula/tmux/blob/master/docs/CONFIG.md#Plugins
-set -g @dracula-plugins "git battery time"
-set -g @dracula-show-powerline false
-set -g @dracula-show-battery true
-set -g @dracula-refresh-rate 10
-set -g @dracula-time-format "%Y/%m/%d %H:%M"
+# =============================================================================
+# Status bar — clean green theme
+# =============================================================================
+set -g status-style "bg=colour22,fg=colour255"
+set -g status-left "#[bg=colour28,fg=colour255,bold] #S #[bg=colour22,fg=colour28] "
+set -g status-right "#[fg=colour250]#{?#{pane_current_command},#{pane_current_command},} #[fg=colour28]| #[fg=colour255]%Y/%m/%d %H:%M "
+set -g status-left-length 30
+set -g status-right-length 60
+
+# Window status
+set -g window-status-format " #I:#W "
+set -g window-status-current-format "#[bg=colour28,fg=colour255,bold] #I:#W "
+set -g window-status-separator ""
+
+# Pane border
+set -g pane-border-style "fg=colour238"
+set -g pane-active-border-style "fg=colour82,bold"
+
+# Message style
+set -g message-style "bg=colour28,fg=colour255"
+
+# =============================================================================
+# Plugin configuration
+# =============================================================================
+# Resurrect + Continuum (session persistence)
+set -g @resurrect-capture-pane-contents 'on'
+set -g @continuum-restore 'on'
+set -g @continuum-save-interval '15'
+
+# Tmux-thumbs (quick text copy)
+set -g @thumbs-key Space
+
+# Sessionx (session manager)
+set -g @sessionx-bind 'o'
+
+# Extrakto (text extraction)
+set -g @extrakto_key 'tab'
diff --git a/named-hosts/matic/default.nix b/named-hosts/matic/default.nix
index fb9bba17f..0a092f870 100644
--- a/named-hosts/matic/default.nix
+++ b/named-hosts/matic/default.nix
@@ -90,8 +90,12 @@ inputs.nixpkgs.lib.nixosSystem {
services.fwupd.enable = true;
# Power management
+ services.upower.enable = true;
services.power-profiles-daemon.enable = true;
+ # Power button behavior - lock screen instead of shutdown
+ services.logind.settings.Login.HandlePowerKey = "lock";
+
# Auto timezone (via geolocation)
services.geoclue2.enable = true;
services.localtimed.enable = true;
@@ -110,13 +114,25 @@ inputs.nixpkgs.lib.nixosSystem {
# Bluetooth
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
- services.blueman.enable = true;
- # Desktop environment (Hyprland)
- services.xserver.enable = true;
- services.displayManager.gdm.enable = true;
- services.displayManager.defaultSession = "hyprland";
- services.desktopManager.gnome.enable = false;
+ # Login manager (greetd + tuigreet)
+ services.greetd = {
+ enable = true;
+ settings = {
+ default_session = {
+ command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --remember-session --asterisks --sessions /etc/greetd/wayland-sessions";
+ user = "greeter";
+ };
+ };
+ };
+
+ # Provide Hyprland session file for tuigreet to discover
+ environment.etc."greetd/wayland-sessions/hyprland.desktop".text = ''
+ [Desktop Entry]
+ Name=Hyprland
+ Exec=uwsm start hyprland-uwsm.desktop
+ Type=Application
+ '';
programs.hyprland = {
enable = true;
@@ -126,6 +142,9 @@ inputs.nixpkgs.lib.nixosSystem {
withUWSM = true;
};
+ # Steam (for Wallpaper Engine assets)
+ programs.steam.enable = true;
+
programs.dconf.enable = true;
xdg.portal = {
@@ -133,6 +152,15 @@ inputs.nixpkgs.lib.nixosSystem {
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
+ config = {
+ hyprland = {
+ default = [
+ "hyprland"
+ "gtk"
+ ];
+ "org.freedesktop.impl.portal.Settings" = [ "gtk" ];
+ };
+ };
};
# WiFi MT7925e fix (disable ASPM)
@@ -249,6 +277,21 @@ inputs.nixpkgs.lib.nixosSystem {
})
];
+ # Animated wallpaper via Wallpaper Engine
+ services.linux-wallpaperengine = {
+ enable = true;
+ assetsPath = "${config.home.homeDirectory}/.local/share/Steam/steamapps/common/wallpaper_engine/assets";
+ wallpapers = [
+ {
+ monitor = "eDP-1";
+ wallpaperId = "3602362048";
+ scaling = "fill";
+ fps = 30;
+ audio.silent = true;
+ }
+ ];
+ };
+
# Agenix configuration for GitHub SSH key
age.identityPaths = [ "/home/${username}/.ssh/id_ed25519" ];
age.secrets = builtins.mapAttrs (
diff --git a/spec/coverage_spec.sh b/spec/coverage_spec.sh
index bc84ed6f3..775df54d3 100644
--- a/spec/coverage_spec.sh
+++ b/spec/coverage_spec.sh
@@ -21,6 +21,14 @@ It 'has spec file for config/claude/statusline-git.sh'
The path "spec/statusline_git_spec.sh" should be exist
End
+It 'has spec file for config/hyprland/scripts/record-screen.sh'
+The path "spec/hyprland_record_screen_spec.sh" should be exist
+End
+
+It 'has spec file for config/hyprland/scripts/toggle-terminal.sh'
+The path "spec/hyprland_toggle_terminal_spec.sh" should be exist
+End
+
It 'has spec file for home-manager/programs/neovim/run_tests.sh'
The path "spec/neovim_tests_spec.sh" should be exist
End
@@ -126,6 +134,8 @@ config/claude/notify.sh
config/claude/pushover.sh
config/claude/security.sh
config/claude/statusline-git.sh
+config/hyprland/scripts/record-screen.sh
+config/hyprland/scripts/toggle-terminal.sh
config/openclaw/hydrate.sh
home-manager/modules/cargo-globals/install-cargo-globals.sh
home-manager/modules/local-binaries/sync-local-binaries.sh
diff --git a/spec/hyprland_record_screen_spec.sh b/spec/hyprland_record_screen_spec.sh
new file mode 100644
index 000000000..af840d0fa
--- /dev/null
+++ b/spec/hyprland_record_screen_spec.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+# shellcheck disable=SC2329
+
+Describe 'record-screen.sh'
+SCRIPT="$PWD/config/hyprland/scripts/record-screen.sh"
+
+Describe 'script structure'
+It 'has a bash shebang'
+When run bash -c "head -1 '$SCRIPT'"
+The output should include '#!/usr/bin/env bash'
+End
+
+It 'uses wf-recorder for screen recording'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'wf-recorder'
+End
+
+It 'uses slurp for region selection'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'slurp'
+End
+
+It 'saves recordings to Videos directory'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'Videos'
+End
+
+It 'uses a PID file for toggle behavior'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'wf-recorder.pid'
+End
+
+It 'sends notification on recording stop'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'notify-send'
+End
+
+It 'timestamps recording filenames'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'date'
+End
+End
+
+End
diff --git a/spec/hyprland_toggle_terminal_spec.sh b/spec/hyprland_toggle_terminal_spec.sh
new file mode 100644
index 000000000..6cc433085
--- /dev/null
+++ b/spec/hyprland_toggle_terminal_spec.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+# shellcheck disable=SC2329
+
+Describe 'toggle-terminal.sh'
+SCRIPT="$PWD/config/hyprland/scripts/toggle-terminal.sh"
+
+Describe 'script structure'
+It 'has a bash shebang'
+When run bash -c "head -1 '$SCRIPT'"
+The output should include '#!/usr/bin/env bash'
+End
+
+It 'uses ghostty-scratchpad class name'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'ghostty-scratchpad'
+End
+
+It 'checks for existing client with hyprctl'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'hyprctl clients'
+End
+
+It 'toggles scratchpad workspace'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'togglespecialworkspace scratchpad'
+End
+
+It 'launches ghostty with custom class if not running'
+When run bash -c "cat '$SCRIPT'"
+The output should include 'ghostty --class'
+End
+End
+
+End