diff --git a/.config/hypr/conf.d/10-appearance.conf b/.config/hypr/conf.d/10-appearance.conf
new file mode 100644
index 0000000..45b3e02
--- /dev/null
+++ b/.config/hypr/conf.d/10-appearance.conf
@@ -0,0 +1,130 @@
+#####################
+### LOOK AND FEEL ###
+#####################
+
+# Refer to https://wiki.hyprland.org/Configuring/Variables/
+
+# https://wiki.hyprland.org/Configuring/Variables/#general
+general {
+ layout = dwindle
+
+ gaps_in = 3
+ gaps_out = 0 2 2 2
+ border_size = 1
+
+ # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
+ #col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
+ #col.inactive_border = rgba(595959aa)
+ col.active_border = rgba(79,132,204,0.8)
+ col.inactive_border = rgba(21,40,64,0.5)
+
+ # Set to true enable resizing windows by clicking and dragging on borders and gaps
+ resize_on_border = false
+
+ # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
+ allow_tearing = false
+
+ layerrule = blur, waybar # Add blur to waybar
+ layerrule = blurpopups, waybar # Blur waybar popups too!
+ layerrule = ignorealpha 0.2, waybar # Make it so transparent parts are ignored
+
+ # give kitty that frosted-glass effect
+ layerrule = blur, kitty
+ layerrule = ignorealpha 0.1, kitty
+}
+
+group {
+ #col.border_active = rgba(33ccffee) rgba(00ff99ee) 45deg
+ #col.border_inactive = 0x66777700
+ col.border_active = rgba(79,132,204,0.8)
+ col.border_inactive = rgba(21,40,64,0.4)
+
+ col.border_locked_active = 0xfc6a0300
+ col.border_locked_inactive = 0x66775500
+
+ groupbar {
+ font_size = 12
+ height = 18
+ gradients = true
+ #col.active = rgb(293B6E)
+ #col.inactive = rgba(595959aa)
+ col.active = rgb(79,132,204)
+ col.inactive = rgba(21,40,64,0.3)
+ }
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#decoration
+decoration {
+ rounding = 5
+ rounding_power = 4.0
+
+ # Change transparency of focused and unfocused windows
+ active_opacity = 1
+ inactive_opacity = 1
+ fullscreen_opacity = 1
+
+ dim_inactive = false
+ dim_strength = 0.2
+ dim_around = 1.0
+
+ # https://wiki.hyprland.org/Configuring/Variables/#blur
+ blur {
+ enabled = true
+ size = 2
+ passes = 3
+ xray = true
+ #vibrancy = 0.1696
+ vibrancy = 0.18
+ }
+
+ # https://wiki.hyprland.org/Configuring/Variables/#shadow
+ shadow {
+ enabled = true
+ range = 6
+ render_power = 2
+ sharp = false
+ ignore_window = true
+ #color = 0xee1a1a1a
+ color = 0xdd0b1b2b
+ #color_inactive = unset
+ #offset = [ 0, 0 ]
+ scale = 1.0
+ }
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#animations
+animations {
+ enabled = true
+
+ # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
+
+ bezier = myBezier, 0.05, 0.9, 0.1, 1.05
+
+ animation = windows, 1, 7, myBezier
+ animation = windowsOut, 1, 7, default, popin 80%
+ animation = border, 1, 10, default
+ animation = borderangle, 1, 8, default
+ animation = fade, 1, 7, default
+ animation = workspaces, 1, 6, default
+}
+
+# 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
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#misc
+misc {
+ force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers
+ disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
+}
+
+xwayland {
+ force_zero_scaling = true
+}
diff --git a/.config/hypr/conf.d/20-monitors.conf b/.config/hypr/conf.d/20-monitors.conf
new file mode 100644
index 0000000..14c1990
--- /dev/null
+++ b/.config/hypr/conf.d/20-monitors.conf
@@ -0,0 +1,6 @@
+# Generated by nwg-displays on 2025-03-08 at 15:08:59. Do not edit manually.
+
+monitor=DP-1,3440x1440@100.0,0x144,1.0
+monitor=DP-2,2560x1440@99.95,3440x480,1.0
+monitor=HDMI-A-2,1920x1080@60.0,6000x0,1.0
+monitor=HDMI-A-2,transform,1
diff --git a/.config/hypr/conf.d/30-workspaces.conf b/.config/hypr/conf.d/30-workspaces.conf
new file mode 100644
index 0000000..84c18b8
--- /dev/null
+++ b/.config/hypr/conf.d/30-workspaces.conf
@@ -0,0 +1,12 @@
+# Generated by nwg-displays on 2025-03-08 at 15:11:02. Do not edit manually.
+
+workspace=1,monitor:DP-2,persistent:true,default:true
+workspace=2,monitor:DP-2,persistent:true
+workspace=3,monitor:DP-2,persistent:true
+workspace=4,monitor:DP-2,persistent:true
+workspace=5,monitor:DP-2,persistent:true
+workspace=6,monitor:DP-1,persistent:true,default:true
+workspace=7,monitor:DP-1,persistent:true
+workspace=8,monitor:DP-1,persistent:true
+workspace=9,monitor:DP-1,persistent:true
+workspace=10,monitor:HDMI-A-2,persistent:true,default:true
diff --git a/.config/hypr/conf.d/40-keybinds.conf b/.config/hypr/conf.d/40-keybinds.conf
new file mode 100644
index 0000000..093b0a5
--- /dev/null
+++ b/.config/hypr/conf.d/40-keybinds.conf
@@ -0,0 +1,137 @@
+##############
+### KEYMAP ###
+##############
+
+input {
+ kb_layout = eu
+ #kb_layout = us
+ #kb_variant = altgr-intl
+ #kb_options = lv3:ralt_switch
+}
+
+###################
+### KEYBINDINGS ###
+###################
+
+# See https://wiki.hyprland.org/Configuring/Keywords/
+$mainMod = SUPER # Sets "Windows" key as main modifier
+
+# Apps
+$terminal = uwsm app -- kitty
+$fileManager = uwsm app -- nautilus
+$launcher = uwsm app -- walker
+$uuctl = uwsm app -- uuctl walker -d
+$emote = uwsm app -- emote
+
+$notcenter = uwsm app -- swaync-client -t -sw
+$notdnd = uwsm app -- swaync-client -d
+$nothide = uwsm app -- swaync-client --hide-latest
+$notclose = uwsm app -- swaync-client --close-latest
+$notcloseall = uwsm app -- swaync-client --close-all
+
+$lockcmd = hyprlock
+
+# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
+# Layout Binds
+bind = $mainMod, P, pseudo, # dwindle
+bind = $mainMod, J, togglesplit, # dwindle
+bind = $mainMod SHIFT, J, swapsplit, # dwindle
+bind = $mainMod SHIFT, T, togglegroup, # tabbed i3 like
+bind = $mainMod, T, changegroupactive, # tabbed change active
+bind = $mainMod, F, fullscreen,
+bind = $mainMod, V, togglefloating,
+bind = $mainMod ALT_L, H, movewindoworgroup, l
+bind = $mainMod ALT_L, J, movewindoworgroup, d
+bind = $mainMod ALT_L, K, movewindoworgroup, u
+bind = $mainMod ALT_L, L, movewindoworgroup, r
+
+# Usability
+bind = $mainMod SHIFT, Q, killactive,
+bind = $mainMod, L, exec, $lockcmd
+bind = $mainMod, M, exit,
+
+# App Binds
+bind = $mainMod, return, exec, $terminal
+bind = $mainMod, E, exec, $fileManager
+bind = $mainMod, D, exec, $launcher
+bind = $mainMod SHIFT, D, exec, $uuctl
+bind = $mainMod, PERIOD, exec, $emote
+
+# swaync Binds
+bind = $mainMod, Grave, exec, $notcenter
+bind = $mainMod SHIFT, Grave, exec, $notdnd
+bind = $mainMod, A, exec, $nothide
+bind = $mainMod SHIFT, A, exec, $notclose
+bind = $mainMod CTRL, A, exec, $notcloseall
+
+# Screenshot
+bind = ALT SHIFT, 3, exec, GRIMBLAST_EDITOR="satty -f" grimblast --notify edit output
+bind = ALT SHIFT, 4, exec, GRIMBLAST_EDITOR="satty -f" grimblast --notify edit area
+
+# Move focus with mainMod + arrow keys
+bind = $mainMod, left, movefocus, l
+bind = $mainMod, right, movefocus, r
+bind = $mainMod, up, movefocus, u
+bind = $mainMod, down, movefocus, d
+bind = $mainMod SHIFT, left, movewindow, l
+bind = $mainMod SHIFT, right, movewindow, r
+bind = $mainMod SHIFT, up, movewindow, u
+bind = $mainMod SHIFT, down, movewindow, d
+
+# Switch workspaces with mainMod + [0-9]
+bind = $mainMod, 1, workspace, 1
+bind = $mainMod, 2, workspace, 2
+bind = $mainMod, 3, workspace, 3
+bind = $mainMod, 4, workspace, 4
+bind = $mainMod, 5, workspace, 5
+bind = $mainMod, 6, workspace, 6
+bind = $mainMod, 7, workspace, 7
+bind = $mainMod, 8, workspace, 8
+bind = $mainMod, 9, workspace, 9
+bind = $mainMod, 0, workspace, 10
+
+# Move active window to a workspace with mainMod + SHIFT + [0-9]
+bind = $mainMod SHIFT, 1, movetoworkspace, 1
+bind = $mainMod SHIFT, 2, movetoworkspace, 2
+bind = $mainMod SHIFT, 3, movetoworkspace, 3
+bind = $mainMod SHIFT, 4, movetoworkspace, 4
+bind = $mainMod SHIFT, 5, movetoworkspace, 5
+bind = $mainMod SHIFT, 6, movetoworkspace, 6
+bind = $mainMod SHIFT, 7, movetoworkspace, 7
+bind = $mainMod SHIFT, 8, movetoworkspace, 8
+bind = $mainMod SHIFT, 9, movetoworkspace, 9
+bind = $mainMod SHIFT, 0, movetoworkspace, 10
+
+# Example special workspace (scratchpad)
+bind = $mainMod, S, togglespecialworkspace, magic
+bind = $mainMod SHIFT, S, movetoworkspace, special:magic
+
+# Scroll through existing workspaces with mainMod + scroll
+bind = $mainMod SHIFT, mouse_down, workspace, e+1
+bind = $mainMod SHIFT, mouse_up, workspace, e-1
+
+# Move/resize windows with mainMod + LMB/RMB and dragging
+bindm = $mainMod SHIFT, mouse:272, movewindow # LMB
+bindm = $mainMod SHIFT, mouse:273, resizewindow # RMB
+
+# Media
+bindl = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
+bindl = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
+bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
+# Requires playerctl
+bindl = , XF86AudioPlay, exec, playerctl play-pause
+bindl = , XF86AudioPrev, exec, playerctl previous
+bindl = , XF86AudioNext, exec, playerctl next
+
+# SwayOSD
+# Sink volume change
+bindel = , XF86AudioRaiseVolume, exec, swayosd-client --output-volume raise
+bindel = , XF86AudioLowerVolume, exec, swayosd-client --output-volume lower
+# Sink volume toggle mute
+bindel = , XF86AudioMute, exec, swayosd-client --output-volume mute-toggle
+# Source volume toggle mute
+bindel = , XF86AudioMicMute, exec, swayosd-client --input-volume mute-toggle
+# Brightness change
+bindel = , XF86MonBrightnessUp, exec, swayosd-client --brightness raise
+bindel = , XF86MonBrightnessDown, exec, swayosd-client --brightness lower
+
diff --git a/.config/hypr/conf.d/50-autostart.conf b/.config/hypr/conf.d/50-autostart.conf
new file mode 100644
index 0000000..e3faab5
--- /dev/null
+++ b/.config/hypr/conf.d/50-autostart.conf
@@ -0,0 +1,5 @@
+exec-once = swaync
+exec-once = waybar
+
+exec = swayosd-server
+
diff --git a/.config/hypr/conf.d/60-windowrules.conf b/.config/hypr/conf.d/60-windowrules.conf
new file mode 100644
index 0000000..c95fd57
--- /dev/null
+++ b/.config/hypr/conf.d/60-windowrules.conf
@@ -0,0 +1,68 @@
+###############################
+### WINDOWS AND WORKSPACES ###
+###############################
+
+# https://wiki.hyprland.org/Configuring/Window-Rules/
+# https://wiki.hyprland.org/Configuring/Workspace-Rules/
+
+## ========== Communication ==========
+# Mumble & Discord & TeamSpeak
+windowrule = workspace 9, class:^(info\.mumble\.Mumble|discord|TeamSpeak|vesktop)$
+# Signal & Telegram
+windowrule = workspace 8, class:^(Element|signal|Signal|org\.telegram\.desktop)$
+
+## ========== Multimedia ==========
+windowrule = workspace 7, class:Spotify
+
+## ========== Development ==========
+windowrule = float, class:jetbrains-webstorm, title:Welcome to WebStorm
+windowrule = size 1080 720, class:jetbrains-webstorm, title:Welcome to WebStorm
+
+## ========== Games ==========
+# World of Warcraft (Classic & Retail)
+windowrule = workspace 1,force, class:^(wowclassic|wow)\.exe$, title:World of Warcraft
+windowrule = fullscreen, class:^(wowclassic|wow)\.exe$, title:World of Warcraft
+
+## ========== Launcher ==========
+# Steam & Battle.net & Lutris
+windowrule = workspace 2, class:^(steam|battle\.net\.exe|net\.lutris\.Lutris)$
+windowrule = center 1, class:^(battle\.net\.exe|net\.lutris\.Lutris)$
+windowrule = float, class:^(battle\.net\.exe|net\.lutris\.Lutris)$
+windowrule = float, class:steam, title:Friends List
+windowrule = workspace 1, class:steam, title:Launching...
+
+# Lutris
+windowrule = size 1600 1000, class:net.lutris.Lutris
+windowrule = float, class:net.lutris.Lutris, title:^Configure.*$
+windowrule = size 1080 720, class:net.lutris.Lutris, title:^Configure.*$
+
+# Battle.net Systray
+windowrule = workspace 2, class:explorer.exe
+windowrule = move onscreen 1725 1869, class:explorer.exe
+
+# ProtonUp-Qt
+windowrule = float, class:net.davidotek.pupgui2
+windowrule = size 869 642, class:net.davidotek.pupgui2
+
+## ========== 3D Slicer & Printing ==========
+windowrule = workspace 3, class:BambuStudio
+#windowrule = float, class:BambuStudio
+
+windowrule = workspace 3, class:OrcaSlicer
+windowrule = float, class:OrcaSlicer
+
+## ========== System ==========
+windowrule = float, class:org.keepassxc.KeePassXC
+windowrule = float, class:org.kde.dolphin
+windowrule = float, class:com.saivert.pwvucontrol
+windowrule = float, class:org.gnome.Nautilus
+windowrule = float, class:org.gnome.NautilusPreviewer
+windowrule = float, class:org.gnome.FileRoller
+
+## ========== Screenshot ==========
+windowrule = float, class:com.gabm.satty
+windowrule = size >700 >400, class:com.gabm.satty
+
+## ========== Misc ==========
+windowrule = focusonactivate, class:zen
+
diff --git a/.config/hypr/hypridle.conf b/.config/hypr/hypridle.conf
new file mode 100644
index 0000000..9d73333
--- /dev/null
+++ b/.config/hypr/hypridle.conf
@@ -0,0 +1,44 @@
+### based on the example config from hyprland.org
+
+general {
+ lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
+ before_sleep_cmd = loginctl lock-session # lock before suspend.
+ after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
+ ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
+ ignore_systemd_inhibit = false # whether to ignore systemd-inhibit --what=idle inhibitors
+ on_lock_cmd = dbus-send --session --dest=org.freedesktop.secrets \
+ --type=method_call \
+ /org/freedesktop/secrets \
+ org.freedesktop.Secret.Service.Lock \
+ array:objpath:/org/freedesktop/secrets/collection/login
+}
+
+
+#listener {
+# timeout = 150 # 2.5min.
+# on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
+# on-resume = brightnessctl -r # monitor backlight restore.
+#}
+
+# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
+#listener {
+# timeout = 150 # 2.5min.
+# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
+# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
+#}
+
+listener {
+ timeout = 300 # 5min
+ on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
+ on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired.
+}
+
+listener {
+ timeout = 1800 # 30min
+ on-timeout = loginctl lock-session # lock screen when timeout has passed
+}
+
+listener {
+ timeout = 3600 # 60min
+ on-timeout = systemctl hibernate # hibernate and suspend pc
+}
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
new file mode 100644
index 0000000..6059864
--- /dev/null
+++ b/.config/hypr/hyprland.conf
@@ -0,0 +1,2 @@
+# ~/.config/hyprland/hyprland.conf
+source = ~/.config/hypr/conf.d/*.conf
diff --git a/.config/hypr/hyprlock.conf b/.config/hypr/hyprlock.conf
new file mode 100644
index 0000000..6db9ef7
--- /dev/null
+++ b/.config/hypr/hyprlock.conf
@@ -0,0 +1,85 @@
+# ~/.config/hypr/hyprlock.conf
+
+general {
+ hide_cursor = true
+ ignore_empty_input = true
+}
+
+##################
+### BACKGROUND ###
+##################
+
+background {
+ monitor = DP-1
+ path = $HOME/.config/hypr/images/ultrawide.jpg
+}
+
+background {
+ monitor = DP-2
+ path = $HOME/.config/hypr/images/standard.jpg
+}
+
+background {
+ monitor = HDMI-A-2
+ path = $HOME/.config/hypr/images/vertical.jpg
+}
+
+#############
+### INPUT ###
+#############
+
+input-field {
+ size = 250, 60
+ outline_thickness= 2
+ dots_size = 0.2 # you control the look of the dots manually
+ dots_spacing = 0.35
+ dots_center = true
+
+ # Outer ring transparent, inner pill matches Waybar bg
+ outer_color = rgba(11, 27, 43, 0) # bg_main fully transparent
+ inner_color = rgba(11, 27, 43, 0.85) # bg_main at 85% opacity
+
+ font_color = rgba(202, 211, 232, 0.8) # content_main at 80%
+ fade_on_empty = false
+
+ rounding = 20 # nice pill shape
+ check_color = #4F84CC # Abyss Accent
+
+ placeholder_text =
+ hide_input = false
+
+ position = 0, -200
+ halign = center
+ valign = center
+}
+
+############
+### DATE ###
+############
+
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +"%A, %B %d")"
+ color = rgba(202, 211, 232, 0.75) # Sea Foam a bit lighter
+ font_size = 22
+ font_family = Inconsolata Nerd Font Mono
+ position = 0, 300
+ halign = center
+ valign = center
+}
+
+############
+### TIME ###
+############
+
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +"%-I:%M")"
+ color = rgba(202, 211, 232, 0.75)
+ font_size = 95
+ font_family = Inconsolata Nerd Font Mono Bold
+ position = 0, 200
+ halign = center
+ valign = center
+}
+
diff --git a/.config/hypr/hyprpaper.conf b/.config/hypr/hyprpaper.conf
new file mode 100644
index 0000000..9798fa1
--- /dev/null
+++ b/.config/hypr/hyprpaper.conf
@@ -0,0 +1,15 @@
+# ~/.config/hypr/hyprpaper.conf
+
+#splash = true
+splash_color = 4F84CCFF # Abyss Accent w/ full opacity
+splash_offset = 2.0
+ipc = true
+
+# Preload your ultrawide as a quick fallback
+preload = $HOME/.config/hypr/images/standard.jpg
+
+# Per-monitor wallpaper assignments
+wallpaper = DP-1, $HOME/.config/hypr/images/ultrawide.jpg
+wallpaper = DP-2, $HOME/.config/hypr/images/standard.jpg
+wallpaper = HDMI-A-2,$HOME/.config/hypr/images/vertical.jpg
+
diff --git a/.config/hypr/images/standard.jpg b/.config/hypr/images/standard.jpg
new file mode 100644
index 0000000..1e9b82c
Binary files /dev/null and b/.config/hypr/images/standard.jpg differ
diff --git a/.config/hypr/images/ultrawide.jpg b/.config/hypr/images/ultrawide.jpg
new file mode 100644
index 0000000..2924504
Binary files /dev/null and b/.config/hypr/images/ultrawide.jpg differ
diff --git a/.config/hypr/images/vertical.jpg b/.config/hypr/images/vertical.jpg
new file mode 100644
index 0000000..1877d35
Binary files /dev/null and b/.config/hypr/images/vertical.jpg differ
diff --git a/.config/hypr/scripts/hyprfetch.sh b/.config/hypr/scripts/hyprfetch.sh
new file mode 100755
index 0000000..69e3ffa
--- /dev/null
+++ b/.config/hypr/scripts/hyprfetch.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+
+# hyprfetch.sh — a little fetch for your Hyprland setup
+
+# colours (true-color ANSI)
+ACCENT='\033[38;2;79;132;204m' # #4F84CC
+FOREGROUND='\033[38;2;202;211;232m' # #CAD3E8
+RESET='\033[0m'
+
+# helper to print a labeled field
+print_field() {
+ printf "${ACCENT}%-10s${FOREGROUND}%s${RESET}\n" "$1:" "$2"
+}
+
+# ASCII Art Hyprland logo (simplified)
+printf "${ACCENT}"
+cat <<'EOF'
+ __ __
+| \/ |__ _ _ _ ___
+| |\/| / _` | '_/ -_)
+|_| |_\__,_|_| \___|
+EOF
+printf "${RESET}\n"
+
+# now the fields
+print_field "OS" "$(grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2 | tr -d '"')"
+print_field "Kernel" "$(uname -r)"
+print_field "Uptime" "$(uptime -p)"
+print_field "Shell" "$(basename "$SHELL")"
+print_field "WM" "Hyprland $(hyprctl version | grep -oP '\d+\.\d+\.\d+')"
+
+# hardware
+print_field "CPU" "$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | sed 's/^ //')"
+print_field "RAM" "$(free -h | awk '/^Mem:/ {print $3 \" / \" $2}')"
+if command -v acpi &>/dev/null; then
+ print_field "Battery" "$(acpi -b | awk -F', ' '{print $2 \" — \" $3}')"
+fi
+
diff --git a/.config/walker/config.toml b/.config/walker/config.toml
new file mode 100644
index 0000000..011b302
--- /dev/null
+++ b/.config/walker/config.toml
@@ -0,0 +1,235 @@
+app_launch_prefix = "uwsm app -- "
+terminal_title_flag = ""
+locale = ""
+close_when_open = false
+theme = "vikingowl"
+monitor = ""
+hotreload_theme = false
+as_window = false
+timeout = 0
+disable_click_to_close = false
+force_keyboard_focus = false
+
+[keys]
+accept_typeahead = ["tab"]
+trigger_labels = "lalt"
+next = ["down"]
+prev = ["up"]
+close = ["esc"]
+remove_from_history = ["shift backspace"]
+resume_query = ["ctrl r"]
+toggle_exact_search = ["ctrl m"]
+
+[keys.activation_modifiers]
+keep_open = "shift"
+alternate = "alt"
+
+[keys.ai]
+clear_session = ["ctrl x"]
+copy_last_response = ["ctrl c"]
+resume_session = ["ctrl r"]
+run_last_response = ["ctrl e"]
+
+[events]
+on_activate = ""
+on_selection = ""
+on_exit = ""
+on_launch = ""
+on_query_change = ""
+
+[list]
+dynamic_sub = true
+keyboard_scroll_style = "emacs"
+max_entries = 50
+show_initial_entries = true
+single_click = true
+visibility_threshold = 20
+placeholder = "No Results"
+
+[search]
+argument_delimiter = "#"
+placeholder = "Search..."
+delay = 0
+resume_last_query = false
+
+[activation_mode]
+labels = "jkl;asdf"
+
+[builtins.applications]
+weight = 5
+name = "applications"
+placeholder = "Applications"
+prioritize_new = true
+hide_actions_with_empty_query = true
+context_aware = true
+refresh = true
+show_sub_when_single = true
+show_icon_when_single = true
+show_generic = true
+history = true
+
+[builtins.applications.actions]
+enabled = true
+hide_category = false
+hide_without_query = true
+
+[builtins.bookmarks]
+weight = 5
+placeholder = "Bookmarks"
+name = "bookmarks"
+icon = "bookmark"
+switcher_only = true
+
+[[builtins.bookmarks.entries]]
+label = "Walker"
+url = "https://github.com/abenz1267/walker"
+keywords = ["walker", "github"]
+
+[builtins.xdph_picker]
+hidden = true
+weight = 5
+placeholder = "Screen/Window Picker"
+show_sub_when_single = true
+name = "xdphpicker"
+switcher_only = true
+
+[builtins.ai]
+weight = 5
+placeholder = "AI"
+name = "ai"
+icon = "help-browser"
+switcher_only = true
+
+[[builtins.ai.anthropic.prompts]]
+model = "claude-3-5-sonnet-20241022"
+temperature = 1
+max_tokens = 1_000
+label = "General Assistant"
+prompt = "You are a helpful general assistant. Keep your answers short and precise."
+
+[builtins.calc]
+require_number = true
+weight = 5
+name = "calc"
+icon = "accessories-calculator"
+placeholder = "Calculator"
+min_chars = 4
+
+[builtins.windows]
+weight = 5
+icon = "view-restore"
+name = "windows"
+placeholder = "Windows"
+show_icon_when_single = true
+
+[builtins.clipboard]
+exec = "wl-copy"
+weight = 5
+name = "clipboard"
+avoid_line_breaks = true
+placeholder = "Clipboard"
+image_height = 300
+max_entries = 10
+switcher_only = true
+
+[builtins.commands]
+weight = 5
+icon = "utilities-terminal"
+switcher_only = true
+name = "commands"
+placeholder = "Commands"
+
+[builtins.custom_commands]
+weight = 5
+icon = "utilities-terminal"
+name = "custom_commands"
+placeholder = "Custom Commands"
+
+[builtins.emojis]
+exec = "wl-copy"
+weight = 5
+name = "emojis"
+placeholder = "Emojis"
+switcher_only = true
+history = true
+typeahead = true
+show_unqualified = false
+
+[builtins.symbols]
+after_copy = ""
+weight = 5
+name = "symbols"
+placeholder = "Symbols"
+switcher_only = true
+history = true
+typeahead = true
+
+[builtins.finder]
+use_fd = false
+weight = 5
+icon = "file"
+name = "finder"
+placeholder = "Finder"
+switcher_only = true
+ignore_gitignore = true
+refresh = true
+concurrency = 8
+show_icon_when_single = true
+
+[builtins.runner]
+weight = 5
+icon = "utilities-terminal"
+name = "runner"
+placeholder = "Runner"
+typeahead = true
+history = true
+generic_entry = false
+refresh = true
+
+[builtins.ssh]
+weight = 5
+icon = "preferences-system-network"
+name = "ssh"
+placeholder = "SSH"
+switcher_only = true
+history = true
+refresh = true
+
+[builtins.switcher]
+weight = 5
+name = "switcher"
+placeholder = "Switcher"
+prefix = "/"
+
+[builtins.websearch]
+weight = 5
+icon = "applications-internet"
+name = "websearch"
+placeholder = "Websearch"
+
+[[builtins.websearch.entries]]
+name = "Google"
+url = "https://www.google.com/search?q=%TERM%"
+switcher_only = true
+
+[[builtins.websearch.entries]]
+name = "DuckDuckGo"
+url = "https://duckduckgo.com/?q=%TERM%"
+#switcher_only = true
+
+[[builtins.websearch.entries]]
+name = "Ecosia"
+url = "https://www.ecosia.org/search?q=%TERM%"
+switcher_only = true
+
+[[builtins.websearch.entries]]
+name = "Yandex"
+url = "https://yandex.com/search/?text=%TERM%"
+switcher_only = true
+
+[builtins.dmenu]
+hidden = true
+weight = 5
+name = "dmenu"
+placeholder = "Dmenu"
+switcher_only = true
diff --git a/.config/walker/themes/default.css b/.config/walker/themes/default.css
new file mode 100644
index 0000000..7b4bdcb
--- /dev/null
+++ b/.config/walker/themes/default.css
@@ -0,0 +1,162 @@
+/* AUTO GENERATED. DO NOT EDIT. CHANGES WILL BE OVERWRITTEN. */
+
+@define-color foreground rgba(255, 255, 255, 0.8);
+@define-color background hsla(240, 12.7%, 13.9%, 0.98);
+@define-color color1 hsl(172, 100%, 25.3%);
+/* AUTO GENERATED. DO NOT EDIT. CHANGES WILL BE OVERWRITTEN. */
+
+#window,
+#box,
+#aiScroll,
+#aiList,
+#search,
+#password,
+#input,
+#prompt,
+#clear,
+#typeahead,
+#list,
+child,
+scrollbar,
+slider,
+#item,
+#text,
+#label,
+#bar,
+#sub,
+#activationlabel {
+ all: unset;
+}
+
+#cfgerr {
+ background: rgba(255, 0, 0, 0.4);
+ margin-top: 20px;
+ padding: 8px;
+ font-size: 1.2em;
+}
+
+#window {
+ color: @foreground;
+}
+
+#box {
+ border-radius: 2px;
+ background: @background;
+ padding: 32px;
+ border: 1px solid lighter(@background);
+ box-shadow:
+ 0 19px 38px rgba(0, 0, 0, 0.3),
+ 0 15px 12px rgba(0, 0, 0, 0.22);
+}
+
+#search {
+ box-shadow:
+ 0 1px 3px rgba(0, 0, 0, 0.1),
+ 0 1px 2px rgba(0, 0, 0, 0.22);
+ background: lighter(@background);
+ padding: 8px;
+}
+
+#prompt {
+ margin-left: 4px;
+ margin-right: 12px;
+ color: @foreground;
+ opacity: 0.2;
+}
+
+#clear {
+ color: @foreground;
+ opacity: 0.8;
+}
+
+#password,
+#input,
+#typeahead {
+ border-radius: 2px;
+}
+
+#input {
+ background: none;
+}
+
+#password {
+}
+
+#spinner {
+ padding: 8px;
+}
+
+#typeahead {
+ color: @foreground;
+ opacity: 0.8;
+}
+
+#input placeholder {
+ opacity: 0.5;
+}
+
+#list {
+}
+
+child {
+ padding: 8px;
+ border-radius: 2px;
+}
+
+child:selected,
+child:hover {
+ background: alpha(@color1, 0.4);
+}
+
+#item {
+}
+
+#icon {
+ margin-right: 8px;
+}
+
+#text {
+}
+
+#label {
+ font-weight: 500;
+}
+
+#sub {
+ opacity: 0.5;
+ font-size: 0.8em;
+}
+
+#activationlabel {
+}
+
+#bar {
+}
+
+.barentry {
+}
+
+.activation #activationlabel {
+}
+
+.activation #text,
+.activation #icon,
+.activation #search {
+ opacity: 0.5;
+}
+
+.aiItem {
+ padding: 10px;
+ border-radius: 2px;
+ color: @foreground;
+ background: @background;
+}
+
+.aiItem.user {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.aiItem.assistant {
+ background: lighter(@background);
+}
diff --git a/.config/walker/themes/default.toml b/.config/walker/themes/default.toml
new file mode 100644
index 0000000..38d1ac6
--- /dev/null
+++ b/.config/walker/themes/default.toml
@@ -0,0 +1,103 @@
+# AUTO GENERATED. DO NOT EDIT. CHANGES WILL BE OVERWRITTEN.
+
+[ui.anchors]
+bottom = true
+left = true
+right = true
+top = true
+
+[ui.window]
+h_align = "fill"
+v_align = "fill"
+
+[ui.window.box]
+h_align = "center"
+width = 450
+
+[ui.window.box.bar]
+orientation = "horizontal"
+position = "end"
+
+[ui.window.box.bar.entry]
+h_align = "fill"
+h_expand = true
+
+[ui.window.box.bar.entry.icon]
+h_align = "center"
+h_expand = true
+pixel_size = 24
+theme = ""
+
+[ui.window.box.margins]
+top = 200
+
+[ui.window.box.ai_scroll]
+name = "aiScroll"
+h_align = "fill"
+v_align = "fill"
+max_height = 300
+min_width = 400
+height = 300
+width = 400
+
+[ui.window.box.ai_scroll.margins]
+top = 8
+
+[ui.window.box.ai_scroll.list]
+name = "aiList"
+orientation = "vertical"
+width = 400
+spacing = 10
+
+[ui.window.box.ai_scroll.list.item]
+name = "aiItem"
+h_align = "fill"
+v_align = "fill"
+x_align = 0
+y_align = 0
+wrap = true
+
+[ui.window.box.scroll.list]
+marker_color = "#1BFFE1"
+max_height = 300
+max_width = 400
+min_width = 400
+width = 400
+
+[ui.window.box.scroll.list.item.activation_label]
+h_align = "fill"
+v_align = "fill"
+width = 20
+x_align = 0.5
+y_align = 0.5
+
+[ui.window.box.scroll.list.item.icon]
+pixel_size = 26
+theme = ""
+
+[ui.window.box.scroll.list.margins]
+top = 8
+
+[ui.window.box.search.prompt]
+name = "prompt"
+icon = "edit-find"
+theme = ""
+pixel_size = 18
+h_align = "center"
+v_align = "center"
+
+[ui.window.box.search.clear]
+name = "clear"
+icon = "edit-clear"
+theme = ""
+pixel_size = 18
+h_align = "center"
+v_align = "center"
+
+[ui.window.box.search.input]
+h_align = "fill"
+h_expand = true
+icons = true
+
+[ui.window.box.search.spinner]
+hide = true
diff --git a/.config/walker/themes/midnight-ocean.css b/.config/walker/themes/midnight-ocean.css
new file mode 100644
index 0000000..598fc46
--- /dev/null
+++ b/.config/walker/themes/midnight-ocean.css
@@ -0,0 +1,172 @@
+/* AUTO GENERATED. DO NOT EDIT. CHANGES WILL BE OVERWRITTEN. */
+
+/* Palette */
+@define-color foreground rgba(202, 211, 232, 0.9); /* Sea Foam */
+@define-color background rgba(11, 27, 43, 0.98); /* Deep Ocean */
+@define-color color1 #4F84CC; /* Abyss Accent */
+@define-color selection_bg rgba(79, 132, 204, 0.5); /* Bubble Fade */
+@define-color search_bg rgba(15, 35, 55, 0.85); /* Searchbar BG */
+
+/* Reset & Globals */
+#window,
+#box,
+#aiScroll,
+#aiList,
+#search,
+#password,
+#input,
+#prompt,
+#clear,
+#typeahead,
+#list,
+child,
+scrollbar,
+slider,
+#item,
+#text,
+#label,
+#sub,
+#activationlabel {
+ all: unset;
+ box-sizing: border-box;
+ font-family: "Inconsolata Go Nerd Font", monospace;
+ color: @foreground;
+}
+
+/* Error */
+#cfgerr {
+ background: rgba(255, 0, 0, 0.4);
+ margin-top: 20px;
+ padding: 8px;
+ font-size: 1.2em;
+}
+
+/* Main window */
+#window {
+ color: @foreground;
+}
+
+/* Outer box */
+#box {
+ padding: 32px;
+ background: @background;
+ border-radius: 16px; /* bigger rounding */
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
+ backdrop-filter: blur(25px);
+ border-image: linear-gradient(45deg, color1, background) 1;
+ border-width: 1px;
+ border-style: solid;
+}
+
+/* ── SEARCH BAR ───────────────────────────────────────────────────────────── */
+#search {
+ display: flex;
+ align-items: center;
+ padding: 12px 16px;
+ background: @search_bg; /* new tinted BG */
+ border-radius: 20px; /* fully rounded */
+ transition:
+ background 150ms ease,
+ border 150ms ease;
+}
+#search:focus-within {
+ background: rgba(15, 35, 55, 0.95);
+ border: 1px solid color1;
+}
+#prompt {
+ margin-right: 12px;
+ opacity: 0.3;
+}
+#input,
+#text {
+ flex: 1;
+ background: none;
+ border: none;
+ outline: none;
+ font-size: 1em;
+ line-height: 1.2em;
+ color: @foreground;
+}
+#input::placeholder,
+#text::placeholder {
+ opacity: 0.5;
+}
+#clear {
+ margin-left: 12px;
+ cursor: pointer;
+ opacity: 0.7;
+ transition: opacity 150ms ease;
+}
+#clear:hover {
+ opacity: 1;
+}
+
+/* ── RESULTS LIST & ITEMS ─────────────────────────────────────────────────── */
+#list {
+ display: flex;
+ flex-direction: column;
+ max-height: 300px;
+ overflow-y: auto;
+}
+child {
+ display: flex;
+ align-items: center;
+ padding: 10px 14px;
+ border-radius: 12px; /* rounded items */
+ transition:
+ background 120ms ease,
+ transform 120ms ease;
+}
+child + child {
+ margin-top: 4px; /* small gap instead of border */
+}
+child:hover {
+ background: @selection_bg;
+ transform: translateX(3px);
+}
+child:selected {
+ background: @selection_bg;
+ border-left: 4px solid color1;
+ padding-left: 10px; /* adjust for border */
+}
+
+/* Icons & text */
+#icon {
+ margin-right: 10px;
+ opacity: 0.9;
+}
+#label {
+ font-weight: 500;
+}
+#sub {
+ margin-left: auto;
+ opacity: 0.6;
+ font-size: 0.85em;
+}
+
+/* ── SCROLLBAR ─────────────────────────────────────────────────────────────── */
+scrollbar,
+slider {
+ background: none;
+ width: 6px;
+}
+scrollbar:hover {
+ background: rgba(79, 132, 204, 0.2);
+}
+slider {
+ background: color1;
+ border-radius: 3px;
+}
+
+/* ── AI PANEL ITEMS ───────────────────────────────────────────────────────── */
+.aiItem {
+ padding: 12px 16px;
+ border-radius: 12px;
+ background: @background;
+}
+.aiItem.user {
+ background: rgba(15, 35, 55, 0.8);
+}
+.aiItem.assistant {
+ background: rgba(15, 35, 55, 0.9);
+}
diff --git a/.config/walker/themes/midnight-ocean.toml b/.config/walker/themes/midnight-ocean.toml
new file mode 100644
index 0000000..7569514
--- /dev/null
+++ b/.config/walker/themes/midnight-ocean.toml
@@ -0,0 +1,103 @@
+# AUTO GENERATED. DO NOT EDIT. CHANGES WILL BE OVERWRITTEN.
+
+[ui.anchors]
+bottom = true
+left = true
+right = true
+top = true
+
+[ui.window]
+h_align = "fill"
+v_align = "fill"
+
+[ui.window.box]
+h_align = "center"
+width = 450
+
+[ui.window.box.bar]
+orientation = "horizontal"
+position = "end"
+
+[ui.window.box.bar.entry]
+h_align = "fill"
+h_expand = true
+
+[ui.window.box.bar.entry.icon]
+h_align = "center"
+h_expand = true
+pixel_size = 24
+theme = ""
+
+[ui.window.box.margins]
+top = 200
+
+[ui.window.box.ai_scroll]
+name = "aiScroll"
+h_align = "fill"
+v_align = "fill"
+max_height = 300
+min_width = 400
+height = 300
+width = 400
+
+[ui.window.box.ai_scroll.margins]
+top = 8
+
+[ui.window.box.ai_scroll.list]
+name = "aiList"
+orientation = "vertical"
+width = 400
+spacing = 10
+
+[ui.window.box.ai_scroll.list.item]
+name = "aiItem"
+h_align = "fill"
+v_align = "fill"
+x_align = 0
+y_align = 0
+wrap = true
+
+[ui.window.box.scroll.list]
+marker_color = "#4F84CC"
+max_height = 300
+max_width = 400
+min_width = 400
+width = 400
+
+[ui.window.box.scroll.list.item.activation_label]
+h_align = "fill"
+v_align = "fill"
+width = 20
+x_align = 0.5
+y_align = 0.5
+
+[ui.window.box.scroll.list.item.icon]
+pixel_size = 26
+theme = ""
+
+[ui.window.box.scroll.list.margins]
+top = 8
+
+[ui.window.box.search.prompt]
+name = "prompt"
+icon = "edit-find"
+theme = ""
+pixel_size = 26
+h_align = "center"
+v_align = "center"
+
+[ui.window.box.search.clear]
+name = "clear"
+icon = "edit-clear"
+theme = ""
+pixel_size = 18
+h_align = "center"
+v_align = "center"
+
+[ui.window.box.search.input]
+h_align = "fill"
+h_expand = true
+icons = true
+
+[ui.window.box.search.spinner]
+hide = true
diff --git a/.config/waybar/config.jsonc##hostname.cn-arch b/.config/waybar/config.jsonc##hostname.cn-arch
index d3ff436..107fa8d 100644
--- a/.config/waybar/config.jsonc##hostname.cn-arch
+++ b/.config/waybar/config.jsonc##hostname.cn-arch
@@ -1,4 +1,5 @@
{
+ // general bar settings
"layer": "bottom",
"output": ["DP-1", "DP-2", "!HDMI-A-2"],
"position": "bottom",
@@ -6,95 +7,70 @@
"exclusive": true,
"gtk-layer-shell": true,
"passthrough": false,
- "height": 30,
+ "height": 32,
+ // which modules to show
"modules-left": ["hyprland/workspaces"],
"modules-center": ["mpris", "privacy"],
"modules-right": [
- "custom/alhp",
"cpu",
"memory",
"disk",
- "bluetooth",
- "pulseaudio",
"network",
+ "pulseaudio",
+ "bluetooth",
"battery",
+ "custom/alhp",
"custom/razer-mouse-battery",
"tray",
"clock",
],
"hyprland/workspaces": {
- "icon-size": 32,
- "spacing": 16,
+ "icon-size": 28,
+ "spacing": 12,
"on-scroll-up": "hyprctl dispatch workspace r+1",
"on-scroll-down": "hyprctl dispatch workspace r-1",
},
"cpu": {
"interval": 5,
- "format": " {usage}%",
- "max-length": 10,
- },
- "disk": {
- "interval": 30,
- "format": " {percentage_used}%",
- "path": "/",
- "tooltip": true,
- "unit": "GB",
- "tooltip-format": "Available {free} of {total}",
+ "format": " {usage}%",
},
"memory": {
"interval": 10,
- "format": " {percentage}%",
- "max-length": 10,
+ "format": " {percentage}%",
"tooltip": true,
- "tooltip-format": "RAM - {used:0.1f}GiB used",
+ "tooltip-format": "RAM: {used:.1f}GiB / {total:.1f}GiB",
},
- "wlr/taskbar": {
- "format": "{icon} {title:.17}",
- "icon-size": 28,
- "spacing": 3,
- "on-click-middle": "close",
- "tooltip-format": "{title}",
- "ignore-list": [],
- "on-click": "activate",
- },
- "tray": {
- "icon-size": 18,
- "spacing": 3,
- },
- "clock": {
- "format": "{:%R | %d.%m.%Y}",
- "tooltip-format": "{calendar}",
- "calendar": {
- "mode": "year",
- "mode-mon-col": 3,
- "weeks-pos": "right",
- "on-scroll": 1,
- "on-click-right": "mode",
- "format": {
- "months": "{}",
- "days": "{}",
- "weeks": "W{}",
- "weekdays": "{}",
- "today": "{}",
- },
- },
- "actions": {
- "on-click-right": "mode",
- "on-click-forward": "tz_up",
- "on-click-backward": "tz_down",
- "on-scroll-up": "shift_up",
- "on-scroll-down": "shift_down",
- },
+ "disk": {
+ "interval": 30,
+ "format": " {percentage_used}%",
+ "tooltip": true,
+ "tooltip-format": "Avail: {free} / {total}",
},
"network": {
- "format-wifi": "{essid} ({signalStrength}%) {icon}",
- "format-ethernet": "{ifname}",
- "format-disconnected": "",
- "tooltip-format": "{ifname} via {gwaddr} ",
- "tooltip-format-wifi": "{essid} ({signalStrength}%) ",
- "tooltip-format-ethernet": "{ifname} ",
- "tooltip-format-disconnected": "Disconnected",
- "format-icons": [" ", " ", " ", " ", " "],
+ // only show the Wi-Fi glyph on wifi…
+ "format-wifi": " {essid} ({signalStrength}%)",
+ // …and this little link-icon on Ethernet
+ "format-ethernet": " {ifname}",
+ "format-disconnected": " Disconnected",
+ "tooltip-format": "{ifname} via {gwaddr}",
+ },
+ "pulseaudio": {
+ "format": "{icon} {volume}%",
+ "format-muted": " Muted",
+ "scroll-step": 5,
+ "on-click": "pavucontrol",
+ "interval": 30,
+ "format-icons": {
+ // match these to the sink NAMES you see in `pactl list sinks`
+ "alsa_output.usb-SteelSeries_Arctis_7_-00.analog-stereo": "", // SteelSeries headset
+ "alsa_output.pci-0000_0a_00.4.iec958-stereo": "", // speaker icon for your soundbar
+ "bluez_output.50_5E_5C_2D_F3_B2.1": "", // Bluetooth earbud icon
+ "default": ["", ""], // fallback (low/hi)
+ },
+ },
+ "bluetooth": {
+ "format": " {status}",
+ "format-connected": " {device_alias} ({device_battery_percentage}%)",
},
"battery": {
"states": {
@@ -102,89 +78,38 @@
"warning": 30,
"critical": 20,
},
- "format": "{icon} {capacity}%",
- "format-charging": " {capacity}%",
- "format-plugged": " {capacity}%",
- "format-alt": "{time} {icon}",
- "format-icons": ["", "", "", "", "", "", "", "", "", "", ""],
- },
- "pulseaudio": {
- "format": "{volume}% {icon} ",
- "format-bluetooth": "{volume}% {icon} ",
- "format-muted": " ",
- "format-icons": {
- "alsa_output.pci-0000_00_1f.3.analog-stereo": "",
- "alsa_output.pci-0000_00_1f.3.analog-stereo-muted": "",
- "headphone": "",
- "hands-free": "",
- "headset": "\uF025",
- "phone": "",
- "phone-muted": "",
- "portable": "",
- "car": "",
- "default": ["", ""],
- },
- "scroll-step": 5,
- "on-click": "pavucontrol",
- "ignored-sinks": ["Easy Effects Sink"],
- },
- "privacy": {
- "icon-spacing": 4,
- "icon-size": 14,
- "transition-duration": 250,
- "modules": [
- {
- "type": "screenshare",
- "tooltip": true,
- "tooltip-icon-size": 12,
- },
- {
- "type": "audio-out",
- "tooltip": true,
- "tooltip-icon-size": 12,
- },
- {
- "type": "audio-in",
- "tooltip": true,
- "tooltip-icon-size": 12,
- },
- ],
- },
- "mpris": {
- "format": "{player_icon} {dynamic}",
- "format-paused": "{status_icon} {dynamic}",
- "dynamic-len": 50,
- "ellipsis": "…",
- "player-icons": {
- "default": "▶",
- "mpv": "🎵",
- },
- "status-icons": {
- "paused": "⏸",
- },
- },
- "bluetooth": {
- "format": " {status}",
- //"on-click": "",
- "format-connected": " {device_alias}",
- "format-connected-battery": " {device_alias} {device_battery_percentage}%",
- "tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected",
- "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}",
- "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
- "tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%",
+ "format": "{icon} {capacity}%",
+ "format-charging": " {capacity}%",
},
"custom/alhp": {
- "id": "custom-alhp",
"exec": "$HOME/.config/waybar/scripts/alhp.sh",
"return-type": "json",
"interval": 60,
+ "format": "{text}",
"tooltip": true,
- "format": "{text}",
},
"custom/razer-mouse-battery": {
- "format": "{text}",
- "return-type": "json",
"exec": "$HOME/.config/waybar/scripts/razer_basilisk_v3_pro_battery_info.sh",
+ "return-type": "json",
"interval": 10,
+ "format": "{text}",
+ },
+ "tray": {
+ "icon-size": 18,
+ "spacing": 4,
+ },
+ "clock": {
+ "format": "{:%R | %d.%m.%Y}",
+ "tooltip-format": "{calendar}",
+ "calendar": {
+ "mode": "year",
+ "mode-mon-col": 3,
+ "weeks-pos": "right",
+ },
+ "actions": {
+ "on-click-right": "mode",
+ "on-scroll-up": "shift_up",
+ "on-scroll-down": "shift_down",
+ },
},
}
diff --git a/.config/waybar/scripts/razer_basilisk_v3_pro_battery_info.sh b/.config/waybar/scripts/razer_basilisk_v3_pro_battery_info.sh
index 016770d..6963675 100755
--- a/.config/waybar/scripts/razer_basilisk_v3_pro_battery_info.sh
+++ b/.config/waybar/scripts/razer_basilisk_v3_pro_battery_info.sh
@@ -2,12 +2,12 @@
# Path to your Razer HID battery info
#BASE="/sys/bus/hid/drivers/razermouse/0003:1532:00AB.000A"
-BASE="/sys/devices/pci0000:00/0000:00:01.2/0000:02:00.0/usb1/1-8/1-8.1/1-8.1.2/1-8.1.2:1.0/0003:1532:00AB.0009"
+BASE_MOUSE="/sys/devices/pci0000:00/0000:00:01.2/0000:02:00.0/usb1/1-8/1-8.1/1-8.1.2/1-8.1.2:1.0/0003:1532:00AB.0009"
# Read raw level and charging status
-raw=$(cat "$BASE/charge_level")
-status=$(cat "$BASE/charge_status") # 1=charging, 0=not charging
-type=$(cat "$BASE/device_type")
+raw=$(cat "$BASE_MOUSE/charge_level")
+status=$(cat "$BASE_MOUSE/charge_status") # 1=charging, 0=not charging
+type=$(cat "$BASE_MOUSE/device_type")
# Compute %
percent=$(( raw * 100 / 255 ))
@@ -18,10 +18,10 @@ tooltip="$type"
if [[ $status -eq 1 ]]; then
icon="⚡"
cls="charging"
- text="$icon $percent%"
+ text=" $icon $percent%"
else
cls="not_charging"
- text="$percent%"
+ text=" $percent%"
fi
# Output Waybar‐friendly JSON
diff --git a/.config/waybar/style.css##hostname.cn-arch b/.config/waybar/style.css##hostname.cn-arch
index d8959a2..8039625 100644
--- a/.config/waybar/style.css##hostname.cn-arch
+++ b/.config/waybar/style.css##hostname.cn-arch
@@ -1,218 +1,85 @@
-/*base background color*/
-@define-color bg_main rgba(25, 25, 25, 0.65);
-@define-color bg_main_tooltip rgba(0, 0, 0, 0.7);
-
-/*base background color of selections */
-@define-color bg_hover rgba(200, 200, 200, 0.3);
-/*base background color of active elements */
-@define-color bg_active rgba(100, 100, 100, 0.5);
-
-/*base border color*/
-@define-color border_main rgba(255, 255, 255, 0.2);
-
-/*text color for entries, views and content in general */
-@define-color content_main white;
-/*text color for entries that are unselected */
-@define-color content_inactive rgba(255, 255, 255, 0.25);
+/* Palette */
+@define-color bg_main rgba(11, 27, 43, 0.85);
+@define-color bg_main_tooltip rgba(11, 27, 43, 0.95);
+@define-color bg_hover rgba(79, 132, 204, 0.3);
+@define-color bg_active rgba(53, 107, 171, 0.7);
+@define-color border_main rgba(79, 132, 204, 0.5);
+@define-color content_main #CAD3E8;
+@define-color content_inactive rgba(202, 211, 232, 0.4);
+@define-color warning_color #FFCC33;
+/* Reset & Font */
* {
- text-shadow: none;
- box-shadow: none;
- border: none;
- border-radius: 0;
font-family: "Inconsolata Go Nerd Font";
font-size: 14px;
+ text-shadow: none;
+ box-shadow: none;
+ border-radius: 0;
+ margin: 0;
+ padding: 0;
}
+/* Bar Background */
window#waybar {
background: @bg_main;
+ color: @content_main;
border-top: 1px solid @border_main;
- color: @content_main;
}
+/* Tooltips */
tooltip {
- font-size: 14px;
background: @bg_main_tooltip;
- border-radius: 5px;
- border-width: 1px;
- border-style: solid;
- border-color: @border_main;
-}
-tooltip label {
- color: @content_main;
+ border: 1px solid @border_main;
+ border-radius: 4px;
+ padding: 4px 6px;
}
+/* Module Spacing & Hover */
.module {
- margin-left: 2px;
- margin-right: 2px;
+ padding: 0 6px;
+ margin: 0 2px;
+}
+.module:hover {
+ background: @bg_hover;
}
-#workspaces {
- color: transparent;
- margin-right: 1.5px;
- margin-left: 1.5px;
+/* Separator Border */
+#cpu,
+#memory,
+#disk,
+#network,
+#pulseaudio,
+#bluetooth,
+#custom-alhp,
+#custom-razer-mouse-battery {
+ border-right: 1px solid @border_main;
}
+
+/* Workspaces Buttons */
#workspaces button {
- padding: 3px;
+ padding: 4px 6px;
color: @content_inactive;
}
#workspaces button.active {
- color: whitesmoke;
background: @bg_active;
+ color: @content_main;
}
#workspaces button.focused {
- color: @bg_active;
-}
-#workspaces button.urgent {
- background: rgba(255, 200, 0, 0.35);
- color: @warning_color;
-}
-#workspaces button:hover {
background: @bg_hover;
color: @content_main;
}
-
-#cpu,
-#disk,
-#memory {
- border-bottom: 1px solid grey;
- padding-right: 5px;
- padding-left: 5px;
-}
-
-#tray {
- padding-left: 5px;
- padding-right: 5px;
-}
-#tray > .passive {
- border-bottom: none;
-}
-#tray > .active {
-}
-#tray > .needs-attention {
- border-bottom: 3px solid @warning_color;
-}
-#tray > widget {
- transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
-}
-#tray > widget:hover {
- background: @bg_hover;
-}
-
-#pulseaudio {
- border-bottom: 1px solid grey;
- padding-right: 5px;
- padding-left: 5px;
- transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
-}
-#pulseaudio:hover {
- background: @bg_hover;
-}
-
-#network {
- border-bottom: 1px solid grey;
- padding-right: 5px;
- padding-left: 5px;
+#workspaces button.urgent {
+ background: rgba(255, 204, 51, 0.35);
+ color: @warning_color;
}
+/* Tray & Clock Padding */
+#tray,
#clock {
- padding-right: 5px;
- padding-left: 5px;
- transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
-}
-#clock:hover {
- background: @bg_hover;
+ padding: 0 6px;
}
-#privacy {
-}
-#privacy-item {
- padding-left: 5px;
- padding-right: 5px;
-}
-#privacy-item.screenshare {
- background: #850404;
-}
-#privacy-item.audio-in {
- background: #6c045e;
-}
-#privacy-item.audio-out {
- background: #02605b;
-}
-
-#mpris {
- padding-left: 5px;
- padding-right: 5px;
-}
-#mpris.playing {
-}
-#mpris.paused {
-}
-#mpris.stopped {
-}
-#mpris.firefox {
- border-bottom: 1px solid #fd8728;
-}
-#mpris.spotify {
- border-bottom: 1px solid #17d860;
-}
-#mpris.mpv {
- border-bottom: 1px solid #420042;
-}
-#mpris.chromium {
- border-bottom: 1px solid #1a73e8;
-}
-
-#bluetooth {
- padding-right: 5px;
- padding-left: 5px;
-}
-#bluetooth.disabled {
- border-bottom: 1px solid grey;
-}
-#bluetooth.off {
- border-bottom: 1px solid grey;
-}
-#bluetooth.on {
- border-bottom: 1px solid #0059fd;
-}
-#bluetooth.connected {
- border-bottom: 1px solid #00b7fa;
-}
-#bluetooth.discoverable {
-}
-#bluetooth.discovering {
-}
-#bluetooth.pairable {
-}
-#bluetooth.no-controller {
- background: darkred;
-}
-
-#custom-alhp {
- padding-left: 5px;
- padding-right: 5px;
-}
-#custom-alhp.good {
- border-bottom: 1px solid #adff2f;
-}
-#custom-alhp.stale {
- border-bottom: 1px solid #f6ac00;
-}
-#custom-alhp.bad {
- border-bottom: 1px solid #ff4500;
-}
-#custom-alhp.down {
- border-bottom: 1px solid #800000;
-}
-
-#custom-razer-mouse-battery {
- padding-left: 5px;
- padding-right: 5px;
-}
-#custom-razer-mouse-battery.charging {
- border-bottom: 1px solid #adff2f;
-}
-#custom-razer-mouse-battery.not_charging {
- border-bottom: 1px solid #f6ac00;
+/* Critical Battery Color */
+#battery.critical span {
+ color: @warning_color;
}