diff --git a/DECISIONS.md b/DECISIONS.md
index 8d1ebe2..8483d18 100644
--- a/DECISIONS.md
+++ b/DECISIONS.md
@@ -17,3 +17,15 @@
- **Why**: System artifacts (XDG configs, helper scripts, zsh config, wallpaper) should be managed by pacman for clean deployment, versioning, rollback, and deinstallation
- **Tradeoffs**: /etc/xdg/ configs NOT in backup= (moonarch philosophy: system defaults flow through, users override in ~/.config/). /etc/greetd/ and /etc/moongreet/ NOT owned by package (owned by greetd/moongreet-git, overwritten via .install hook). Helper scripts move from /usr/local/bin/ to /usr/bin/ (FHS for package-managed files)
- **How**: moonarch-git PKGBUILD in moonarch-pkgbuilds repo. sweet-cursors-git as separate package. moonarch-update simplified (no git-sync, pacman handles file deployment). Installer scripts (post-install.sh, transform.sh) remain for orchestration, will be refactored in a follow-up to delegate file deployment to `paru -S moonarch-git`
+
+## 2026-03-30 – Replace Rofi with Walker as application launcher
+- **Who**: Dominik, Ragnar
+- **Why**: Walker is Wayland-native (GTK4 + gtk4-layer-shell), has built-in providers for clipboard, bluetooth, audio (wireplumber), and Niri integration. Reduces custom shell scripts from 8 to 3. Rofi required a Wayland fork (rofi-lbonn-wayland-git) and every applet was a custom bash script.
+- **Tradeoffs**: Walker is newer/less battle-tested than Rofi. Requires separate Elephant daemon with per-provider packages. Dmenu mode lacks Rofi's `-a`/`-u` (active/urgent) and `-mesg` flags. Settings menu (moonarch-setmen) dropped entirely — apps are findable via Walker's app search.
+- **How**: Walker + Elephant as systemd user services. Native providers replace 5 rofi scripts (launcher, clipboard, bluetooth, volume, sink-switcher). 3 scripts ported to walker dmenu (vpn, cpugov, sink-switcher). Walker theme inherits GTK4 system theme colors (gtk-inherit). Old rofi configs preserved in `legacy/rofi/`.
+
+## 2026-03-30 – Standardize GTK theme to Colloid-Grey-Dark-Catppuccin
+- **Who**: Dominik, Ragnar
+- **Why**: gsettings had `Colloid-Dark-Catppuccin` while config files had `Colloid-Catppuccin` — inconsistent. Grey accent matches the icon theme (Colloid-Grey-Catppuccin-Dark). Explicit `-Dark` variant is more reliable than depending on `prefer-dark` color-scheme setting.
+- **Tradeoffs**: Explicit dark locks out light mode toggle — acceptable since Moonarch is dark-only by design.
+- **How**: Updated transform.sh, post-install.sh, gtk-3.0/settings.ini, and gsettings to `Colloid-Grey-Dark-Catppuccin`. GTK4 symlinks updated accordingly.
diff --git a/README.md b/README.md
index 510640b..7cbe83c 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ configured Niri (scrollable tiling Wayland) system with Catppuccin Mocha theming
Moonarch combines archinstall for the base system with post-install automation that
handles packages, XDG defaults, system services, greeter, idle management, and a
-suite of rofi-based helper tools. The result is a complete development/productivity
+Walker launcher with native providers and dmenu-based helper scripts. The result is a complete development/productivity
desktop that can be rebuilt from scratch in minutes.
## Why These Choices
@@ -18,14 +18,14 @@ desktop that can be rebuilt from scratch in minutes.
| **Power Menu** | [moonset](https://gitea.moonarch.de/nevaforget/moonset) | GTK4 Layer Shell overlay above Waybar. Lock, logout, hibernate, reboot, shutdown with confirmation. |
| **Idle Manager** | [stasis](https://aur.archlinux.org/packages/stasis) | Separate AC/battery power plans. Brightness dimming, DPMS, lock (via moonlock), and suspend on configurable timeouts. |
| **Bar** | [Waybar](https://github.com/Alexays/Waybar) | Wayland-native, highly customizable. Niri workspace/window modules via community plugins. |
-| **Launcher** | [Rofi](https://github.com/lbonn/rofi) (lbonn Wayland fork) | Versatile dmenu replacement. Powers app launcher, clipboard, bluetooth, volume, VPN, CPU governor, and session menus. |
+| **Launcher** | [Walker](https://github.com/abenz1267/walker) + [Elephant](https://github.com/abenz1267/elephant) | Wayland-native GTK4 launcher with built-in providers for apps, clipboard, bluetooth, audio, files, and calculator. Dmenu mode for custom scripts (VPN, CPU governor). |
| **Terminal** | [Foot](https://codeberg.org/dnkl/foot) | Fast, minimal Wayland-native terminal. Server mode for instant window spawning. |
| **Shell** | Zsh | Programmable completion, FZF integration, syntax highlighting. |
| **Audio** | PipeWire | Drop-in replacement for PulseAudio/JACK with lower latency. RNNoise input denoising configured out of the box. |
| **Display Management** | [kanshi](https://sr.ht/~emersion/kanshi/) + [wdisplays](https://github.com/artizirk/wdisplays) | kanshi auto-switches output profiles on hotplug. wdisplays for manual GUI configuration. |
| **Notifications** | [dunst](https://dunst-project.org/) | Lightweight, scriptable. DND mode exposed as Waybar module. |
-| **Clipboard** | [cliphist](https://github.com/sentriz/cliphist) + wl-clipboard | Text and image history. Rofi frontend for selection, wl-paste watches the clipboard. |
-| **Theme** | Catppuccin Mocha | Consistent dark palette across GTK, terminal, bar, rofi, notifications, and lock screen. |
+| **Clipboard** | Walker clipboard provider | Built-in clipboard history with image support. Managed by Elephant backend. |
+| **GTK Theme** | Colloid-Grey-Dark-Catppuccin | Catppuccin Mocha palette, grey accent, explicit dark variant. |
| **Icons** | Colloid-Grey-Catppuccin-Dark | Catppuccin-colored icon set matching the GTK theme. |
| **Cursor** | Sweet-cursors | Visible on dark backgrounds without clashing. |
| **Font** | UbuntuSans Nerd Font | Clean sans-serif with full Nerd Font glyph coverage for bar/terminal icons. |
@@ -113,7 +113,7 @@ defaults/
xdg/ System-wide XDG configs (deployed to /etc/xdg/)
niri/config.kdl Compositor: layout, keybinds, startup apps
waybar/config, style.css Bar: modules, layout, Catppuccin styling
- rofi/config.rasi, themes/ Launcher: config + 8 applet themes
+ walker/config.toml, themes/ Launcher: Walker config + gtk-inherit theme
foot/foot.ini Terminal: font, colors, keybinds
dunst/dunstrc Notifications: geometry, colors, behavior
kanshi/config Display profiles (empty, user-configured)
@@ -125,15 +125,9 @@ defaults/
gtk-3.0/, gtk-4.0/ GTK theme settings
bin/ Helper scripts (deployed to /usr/local/bin/)
- moonarch-launcher App launcher (rofi drun/run/filebrowser/window)
- moonarch-clipboard Clipboard history browser (rofi + cliphist)
- moonarch-bluetooth Bluetooth device manager (rofi + bluetoothctl)
- moonarch-volume Volume control applet (rofi + amixer/pactl)
- moonarch-sink-switcher Audio output switcher (rofi + pactl)
- moonarch-vpn VPN connection manager (rofi + nmcli)
- moonarch-cpugov CPU governor switcher (rofi + auto-cpufreq)
- moonarch-session Session menu (rofi: lock/logout/suspend/reboot/shutdown)
- moonarch-setmen Settings menu launcher (rofi script mode)
+ moonarch-sink-switcher Audio output switcher (walker dmenu + pactl)
+ moonarch-vpn VPN connection manager (walker dmenu + nmcli)
+ moonarch-cpugov CPU governor switcher (walker dmenu + auto-cpufreq)
moonarch-dnd Dunst Do Not Disturb toggle (Waybar JSON output)
moonarch-btnote Bluetooth device battery monitor (upower + notify-send)
moonarch-capsnote Caps Lock toggle notification
@@ -144,7 +138,7 @@ defaults/
shell/zshrc Zsh config: prompt, aliases, FZF, completion
etc/greetd/ greetd daemon + greeter Niri config
etc/moongreet/ moongreet configuration
- user/systemd/user/ Systemd user services (kanshi)
+ user/systemd/user/ Systemd user services (kanshi, walker, elephant)
user/waybar/ Per-user Waybar overrides (only copied if missing)
backgrounds/wallpaper.jpg Default wallpaper (shared by desktop, greeter, lock screen)
```
@@ -170,7 +164,7 @@ greetd ─► niri (greeter instance) ─► moongreet ─► user authenticates
| Key | Action |
|-----|--------|
| `Super+Return` | Open terminal (foot) |
-| `Super+Space` | App launcher (rofi) |
+| `Super+Space` | App launcher (walker) |
| `Super+Q` | Close window |
| `Super+O` / `Super+Tab` | Overview |
| `Super+F` | Maximize column |
@@ -182,8 +176,7 @@ greetd ─► niri (greeter instance) ─► moongreet ─► user authenticates
| `Super+1-9` | Switch workspace |
| `Super+C` | Clipboard history |
| `Super+E` | File manager |
-| `Super+A` | Volume control |
-| `Super+T` | Settings menu |
+| `Super+A` | Audio control (walker) |
| `Super+N` | VPN manager |
| `Super+Alt+L` | Session menu (wlogout) |
| `Print` | Screenshot |
@@ -198,7 +191,7 @@ All system configs live in `/etc/xdg/` and can be overridden per-user in `~/.con
|-----------|---------------|---------------|
| Niri | `/etc/xdg/niri/config.kdl` | `~/.config/niri/config.kdl` |
| Waybar | `/etc/xdg/waybar/` | `~/.config/waybar/` |
-| Rofi | `/etc/xdg/rofi/` | `~/.config/rofi/` |
+| Walker | `/etc/xdg/walker/` | `~/.config/walker/` |
| Foot | `/etc/xdg/foot/foot.ini` | `~/.config/foot/foot.ini` |
| Dunst | `/etc/xdg/dunst/dunstrc` | `~/.config/dunst/dunstrc` |
| kanshi | `/etc/xdg/kanshi/config` | `~/.config/kanshi/config` |
@@ -225,6 +218,8 @@ are part of the system and updated via `moonarch-update`.
| Service | Purpose |
|---------|---------|
| kanshi | Dynamic display configuration (auto-switch output profiles on hotplug) |
+| elephant | Walker data provider backend (apps, clipboard, bluetooth, audio) |
+| walker | Walker application launcher (GTK4 service mode for instant startup) |
## Moonarch Ecosystem
diff --git a/defaults/bin/moonarch-cpugov b/defaults/bin/moonarch-cpugov
index e262873..5e9dcc1 100755
--- a/defaults/bin/moonarch-cpugov
+++ b/defaults/bin/moonarch-cpugov
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-# ABOUTME: Rofi-based CPU governor switcher using auto-cpufreq.
+# ABOUTME: Walker-dmenu CPU governor switcher using auto-cpufreq.
# ABOUTME: Allows switching between performance, powersave, and reset modes.
declare -A LABELS
@@ -38,8 +38,7 @@ function print_menu()
##
function start()
{
- # print_menu | rofi -dmenu -p "?=>"
- print_menu | sort | rofi -theme /etc/xdg/rofi/themes/cpugov.rasi -show "CPU Modes" -dmenu -mesg " CPU Modes" -i -p "rofi-bangs: "
+ print_menu | sort | walker -d -p " CPU Mode"
}
@@ -66,5 +65,5 @@ then
notify-send -h string:x-canonical-private-synchronous:cpugov -i cpu "CPU Mode" "Set to $choice ${LABELS[$choice]}"
else
- echo "Unknown command: ${choice}" | rofi -dmenu -p "error"
+ notify-send -u critical "CPU Governor" "Unknown command: ${choice}"
fi
diff --git a/defaults/bin/moonarch-setmen b/defaults/bin/moonarch-setmen
deleted file mode 100755
index b6ae773..0000000
--- a/defaults/bin/moonarch-setmen
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/env bash
-# ABOUTME: Rofi script mode that lists desktop files from /usr/share/settings-menu/.
-# ABOUTME: Used with rofi -show fb -modes "fb:moonarch-setmen" for a settings launcher.
-
-####
-# @author moonarch.de (nevaforget)
-# script used with rofi to list desktop files of specific dir
-# dir: /usr/share/settings-menu/
-# @example rofi -show fb -modes "fb:moonarch-setmen" -theme /etc/xdg/rofi/themes/settings-menu.rasi
-# @dependencies glib >= 2.67.2
-####
-
-function get_name {
- local lang=$(locale | grep LANG | cut -d= -f2 | cut -d_ -f1)
- local find="Name\[$lang\]="
-
- local name=$(grep "^$find" $1 | tail -1 | sed "s/^$find//" | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')
-
- if [ "${name}" = "" ]
- then
- find="Name="
- name=$(grep "^$find" $1 | tail -1 | sed "s/^$find//" | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')
- fi
-
- echo "$name"
-}
-
-if [ "$ROFI_RETV" = "1" ]
-then
- for deskfile in /usr/share/settings-menu/*
- do
- match=$(grep "^Name" $deskfile | grep "$@" )
-
- if [ -n "$match" ]
- then
- #gio launch $deskfile
-
- # old way
- app=$(grep '^Exec' $deskfile | tail -1 | sed 's/^Exec=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')
- coproc ( $app > /dev/null 2>&1 )
-
- break
- fi
-
- done
- exit 0
-fi
-
-function init {
- for file in /usr/share/settings-menu/*
- do
- local name=$(get_name "$file")
-
- local iconline=$(sed -n -e '/^Icon=/p' "$file")
- local icon=${iconline/Icon=/""}
-
- if [ -n "$name" ]
- then
- echo -en "$name\0icon\x1f$icon\n"
-
- fi
-
- done
-}
-
-init
diff --git a/defaults/bin/moonarch-sink-switcher b/defaults/bin/moonarch-sink-switcher
index 0c5b097..984ef99 100755
--- a/defaults/bin/moonarch-sink-switcher
+++ b/defaults/bin/moonarch-sink-switcher
@@ -1,11 +1,11 @@
#!/usr/bin/bash
-# ABOUTME: Rofi-based PulseAudio sink switcher using pactl.
+# ABOUTME: Walker-dmenu PulseAudio sink switcher using pactl.
# ABOUTME: Changes the default sink and moves all active streams to it.
# choose audio sink via rofi
# changes default sink and moves all streams to that sink
-sink=$(pactl list sinks short | awk '{print $1, $2}' | rofi -dmenu -theme '/etc/xdg/rofi/themes/volume.rasi' -mesg ' Sink Switcher' -p 'audio sink:' -location 6 -width 100 | awk '{print $1}') &&
+sink=$(pactl list sinks short | awk '{print $1, $2}' | walker -d -p " Sink Switcher" | awk '{print $1}') &&
pactl set-default-sink "$sink" &&
for input in $(pactl list sink-inputs short | awk '{print $1}'); do
diff --git a/defaults/bin/moonarch-vpn b/defaults/bin/moonarch-vpn
index 790e492..c5c89d4 100755
--- a/defaults/bin/moonarch-vpn
+++ b/defaults/bin/moonarch-vpn
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-# ABOUTME: Rofi-based VPN connection manager using NetworkManager (nmcli).
+# ABOUTME: Walker-dmenu VPN connection manager using NetworkManager (nmcli).
# ABOUTME: Lists VPN connections and toggles them on/off.
# Copyright (C) 2021 Damien Cassou
@@ -80,7 +80,7 @@ function extract_connection_name_from_result() {
# used as lines to select from.
function start_rofi() {
local content="$1"
- echo -e "$content" | rofi -dmenu -theme /etc/xdg/rofi/themes/vpn.rasi -mesg " VPN Connection Manager" -icon ""
+ echo -e "$content" | walker -d -p " VPN"
}
# List the VPN connections and let the user toggle one using rofi.
diff --git a/defaults/user/systemd/user/walker.service b/defaults/user/systemd/user/walker.service
new file mode 100644
index 0000000..56f5bee
--- /dev/null
+++ b/defaults/user/systemd/user/walker.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Walker Application Launcher
+After=graphical-session.target elephant.service
+
+[Service]
+Type=simple
+ExecStart=walker --gapplication-service
+Restart=on-failure
+
+[Install]
+WantedBy=graphical-session.target
diff --git a/defaults/xdg/gtk-3.0/settings.ini b/defaults/xdg/gtk-3.0/settings.ini
index ed20b1b..a5d1a79 100644
--- a/defaults/xdg/gtk-3.0/settings.ini
+++ b/defaults/xdg/gtk-3.0/settings.ini
@@ -2,7 +2,7 @@
# ABOUTME: User overrides go in ~/.config/gtk-3.0/settings.ini
[Settings]
-gtk-theme-name=Colloid-Catppuccin
+gtk-theme-name=Colloid-Grey-Dark-Catppuccin
gtk-icon-theme-name=Colloid-Grey-Catppuccin-Dark
gtk-font-name=UbuntuSans Nerd Font 11
gtk-cursor-theme-name=Sweet-cursors
diff --git a/defaults/xdg/niri/config.kdl b/defaults/xdg/niri/config.kdl
index 4dbd7b6..c337439 100644
--- a/defaults/xdg/niri/config.kdl
+++ b/defaults/xdg/niri/config.kdl
@@ -122,21 +122,20 @@ window-rule {
binds {
Mod+Shift+Slash { show-hotkey-overlay; }
- Super+C hotkey-overlay-title=null { spawn "moonarch-clipboard"; }
+ Super+C hotkey-overlay-title=null { spawn "walker" "-s" "clipboard"; }
Alt+W { spawn-sh "killall waybar && waybar &"; }
Super+E { spawn-sh "xdg-open ~"; }
- Super+T { spawn-sh "pkill rofi || rofi -show fb -modes \"fb:moonarch-setmen\" -theme /etc/xdg/rofi/themes/settings-menu.rasi"; }
- Super+N { spawn-sh "pkill rofi || moonarch-vpn"; }
+ Super+N { spawn-sh "moonarch-vpn"; }
Mod+Return hotkey-overlay-title="Open a Terminal: foot" { spawn "foot"; }
- Mod+Space hotkey-overlay-title="Run an Application: rofi" { spawn-sh "pkill rofi || moonarch-launcher"; }
+ Mod+Space hotkey-overlay-title="Run an Application: walker" { spawn "walker"; }
Super+Alt+L hotkey-overlay-title="Session Menu: moonset" { spawn "moonset"; }
- Mod+A { spawn-sh "pkill rofi || moonarch-volume"; }
+ Mod+A { spawn "walker" "-s" "audio"; }
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
diff --git a/defaults/xdg/walker/config.toml b/defaults/xdg/walker/config.toml
new file mode 100644
index 0000000..d2a2642
--- /dev/null
+++ b/defaults/xdg/walker/config.toml
@@ -0,0 +1,187 @@
+# ABOUTME: Walker launcher configuration for moonarch.
+# ABOUTME: Catppuccin Mocha theme, Niri-aware, replaces rofi applets.
+
+force_keyboard_focus = false
+close_when_open = true
+click_to_close = true
+as_window = false
+single_click_activation = true
+selection_wrap = false
+theme = "gtk-inherit"
+disable_mouse = false
+page_jump_items = 10
+hide_quick_activation = false
+hide_action_hints = false
+hide_action_hints_dmenu = true
+hide_return_action = false
+resume_last_query = false
+
+[shell]
+exclusive_zone = -1
+layer = "overlay"
+anchor_top = true
+anchor_bottom = true
+anchor_left = true
+anchor_right = true
+
+[placeholders]
+"default" = { input = "Search…", list = "No Results" }
+"clipboard" = { input = "Clipboard…", list = "Empty" }
+"bluetooth" = { input = "Bluetooth…", list = "No Devices" }
+"wireplumber" = { input = "Audio…", list = "No Devices" }
+
+[keybinds]
+close = ["Escape"]
+next = ["Down"]
+previous = ["Up"]
+left = ["Left"]
+right = ["Right"]
+down = ["Down"]
+up = ["Up"]
+toggle_exact = ["ctrl e"]
+resume_last_query = ["ctrl r"]
+quick_activate = ["F1", "F2", "F3", "F4"]
+page_down = ["Page_Down"]
+page_up = ["Page_Up"]
+show_actions = ["alt j"]
+
+[providers]
+default = [
+ "desktopapplications",
+ "calc",
+ "websearch",
+]
+empty = ["desktopapplications"]
+max_results = 50
+
+[providers.sets.clipboard]
+default = ["clipboard"]
+empty = ["clipboard"]
+
+[providers.sets.bluetooth]
+default = ["bluetooth"]
+empty = ["bluetooth"]
+
+[providers.sets.audio]
+default = ["wireplumber"]
+empty = ["wireplumber"]
+
+[[providers.prefixes]]
+prefix = ";"
+provider = "providerlist"
+
+[[providers.prefixes]]
+prefix = ">"
+provider = "runner"
+
+[[providers.prefixes]]
+prefix = "/"
+provider = "files"
+
+[[providers.prefixes]]
+prefix = "."
+provider = "symbols"
+
+[[providers.prefixes]]
+prefix = "="
+provider = "calc"
+
+[[providers.prefixes]]
+prefix = "@"
+provider = "websearch"
+
+[[providers.prefixes]]
+prefix = ":"
+provider = "clipboard"
+
+[[providers.prefixes]]
+prefix = "$"
+provider = "windows"
+
+[providers.clipboard]
+time_format = "relative"
+
+[providers.actions]
+fallback = [
+ { action = "menus:open", label = "open", after = "Nothing" },
+ { action = "menus:default", label = "run", after = "Close" },
+ { action = "menus:parent", label = "back", bind = "Escape", after = "Nothing" },
+ { action = "erase_history", label = "clear hist", bind = "ctrl h", after = "AsyncReload" },
+]
+
+dmenu = [{ action = "select", default = true, bind = "Return" }]
+
+desktopapplications = [
+ { action = "start", default = true, bind = "Return" },
+ { action = "start:keep", label = "open+next", bind = "shift Return", after = "KeepOpen" },
+ { action = "new_instance", label = "new instance", bind = "ctrl Return" },
+ { action = "pin", bind = "ctrl p", after = "AsyncReload" },
+ { action = "unpin", bind = "ctrl p", after = "AsyncReload" },
+]
+
+bluetooth = [
+ { action = "find", bind = "ctrl f", after = "AsyncClearReload" },
+ { action = "remove", bind = "ctrl d", after = "AsyncReload" },
+ { action = "trust", bind = "ctrl t", after = "AsyncReload" },
+ { action = "untrust", bind = "ctrl t", after = "AsyncReload" },
+ { action = "pair", bind = "Return", after = "AsyncReload" },
+ { action = "connect", default = true, bind = "Return", after = "AsyncReload" },
+ { action = "disconnect", default = true, bind = "Return", after = "AsyncReload" },
+ { action = "power_on", label = "Power On", bind = "ctrl e", after = "AsyncReload" },
+ { action = "power_off", label = "Power Off", bind = "ctrl e", after = "AsyncReload" },
+]
+
+clipboard = [
+ { action = "copy", default = true, bind = "Return" },
+ { action = "remove", bind = "ctrl d", after = "AsyncClearReload" },
+ { action = "remove_all", label = "clear", bind = "ctrl shift d", after = "AsyncClearReload" },
+ { action = "show_images_only", label = "only images", bind = "ctrl i", after = "AsyncClearReload" },
+ { action = "show_text_only", label = "only text", bind = "ctrl i", after = "AsyncClearReload" },
+ { action = "show_combined", label = "show all", bind = "ctrl i", after = "AsyncClearReload" },
+ { action = "pin", bind = "ctrl p", after = "AsyncClearReload" },
+ { action = "unpin", bind = "ctrl p", after = "AsyncClearReload" },
+]
+
+wireplumber = [
+ { action = "increase_volume", label = "+volume", bind = "ctrl y", after = "Nothing" },
+ { action = "decrease_volume", label = "-volume", bind = "ctrl n", after = "Nothing" },
+ { action = "mute", bind = "ctrl m", after = "Nothing" },
+ { action = "unmute", bind = "ctrl m", after = "Nothing" },
+ { action = "set_default_device", label = "set default", bind = "ctrl d", after = "Nothing" },
+]
+
+archlinuxpkgs = [
+ { action = "install", bind = "Return", default = true },
+ { action = "remove", bind = "Return" },
+ { action = "show_all", label = "show all", bind = "ctrl i", after = "AsyncClearReload" },
+ { action = "refresh", label = "refresh", bind = "ctrl r", after = "AsyncReload" },
+ { action = "visit_url", label = "open URL", bind = "ctrl o" },
+ { action = "show_installed", label = "show installed", bind = "ctrl i", after = "AsyncClearReload" },
+]
+
+calc = [
+ { action = "copy", default = true, bind = "Return" },
+ { action = "delete", bind = "ctrl d", after = "AsyncReload" },
+ { action = "delete_all", bind = "ctrl shift d", after = "AsyncReload" },
+]
+
+websearch = [
+ { action = "search", default = true, bind = "Return" },
+ { action = "open_url", label = "open url", default = true, bind = "Return" },
+]
+
+files = [
+ { action = "open", default = true, bind = "Return" },
+ { action = "opendir", label = "open dir", bind = "ctrl Return" },
+ { action = "copypath", label = "copy path", bind = "ctrl shift c" },
+ { action = "copyfile", label = "copy file", bind = "ctrl c" },
+]
+
+runner = [
+ { action = "run", default = true, bind = "Return" },
+ { action = "runterminal", label = "run in terminal", bind = "shift Return" },
+]
+
+symbols = [
+ { action = "run_cmd", label = "select", default = true, bind = "Return" },
+]
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item.xml b/defaults/xdg/walker/themes/gtk-inherit/item.xml
new file mode 100644
index 0000000..ccaadd8
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_archlinuxpkgs.xml b/defaults/xdg/walker/themes/gtk-inherit/item_archlinuxpkgs.xml
new file mode 100644
index 0000000..eee87ff
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_archlinuxpkgs.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ vertical
+ true
+ true
+ true
+ 0
+
+
+
+ false
+ true
+ true
+ 0
+
+
+
+
+
+ true
+ true
+ true
+ 0
+ 0
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_calc.xml b/defaults/xdg/walker/themes/gtk-inherit/item_calc.xml
new file mode 100644
index 0000000..e668d1d
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_calc.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ 2
+
+
+
+
+
+ 48
+
+
+
+
+
+ vertical
+ true
+ true
+ true
+ 0
+
+
+
+ false
+ true
+ true
+ 0
+
+
+
+
+
+ true
+ true
+ true
+ 0
+ 0
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_clipboard.xml b/defaults/xdg/walker/themes/gtk-inherit/item_clipboard.xml
new file mode 100644
index 0000000..d1ed622
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_clipboard.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+ vertical
+ 5
+
+
+
+ vertical
+ true
+ true
+ true
+ 0
+
+
+
+ true
+ 0
+ 1
+ true
+ 3
+ true
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_dmenu.xml b/defaults/xdg/walker/themes/gtk-inherit/item_dmenu.xml
new file mode 100644
index 0000000..682bbe1
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_dmenu.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ vertical
+ true
+ true
+ true
+ 0
+
+
+
+ true
+ 0
+ 1
+ 3
+ true
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_dnfpackages.xml b/defaults/xdg/walker/themes/gtk-inherit/item_dnfpackages.xml
new file mode 100644
index 0000000..eee87ff
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_dnfpackages.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ vertical
+ true
+ true
+ true
+ 0
+
+
+
+ false
+ true
+ true
+ 0
+
+
+
+
+
+ true
+ true
+ true
+ 0
+ 0
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_files.xml b/defaults/xdg/walker/themes/gtk-inherit/item_files.xml
new file mode 100644
index 0000000..c5686ec
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_files.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ large
+
+
+
+
+
+ vertical
+ true
+ true
+ true
+ 0
+
+
+
+ false
+ true
+ true
+ 0
+ 1
+
+
+
+
+
+ false
+ true
+ true
+ 0
+ 1
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_providerlist.xml b/defaults/xdg/walker/themes/gtk-inherit/item_providerlist.xml
new file mode 100644
index 0000000..b06e437
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_providerlist.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ 2
+
+
+
+
+
+ large
+
+
+
+
+
+ horizontal
+ true
+ true
+ true
+ 5
+
+
+
+ false
+ true
+ true
+ 0
+
+
+
+
+
+ end
+ true
+ true
+ 0
+ 0.5
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_symbols.xml b/defaults/xdg/walker/themes/gtk-inherit/item_symbols.xml
new file mode 100644
index 0000000..09bb53a
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_symbols.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ 2
+
+
+
+
+
+ vertical
+ true
+ true
+ true
+ 0
+
+
+
+ false
+ true
+ true
+ 0
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_symbols_grid.xml b/defaults/xdg/walker/themes/gtk-inherit/item_symbols_grid.xml
new file mode 100644
index 0000000..3c586e7
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_symbols_grid.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+ vertical
+ 10
+
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+ true
+ true
+ 0.5
+ 2
+
+
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_todo.xml b/defaults/xdg/walker/themes/gtk-inherit/item_todo.xml
new file mode 100644
index 0000000..7a7a1d7
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_todo.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ 48
+
+
+
+
+
+ vertical
+ true
+ true
+ 0
+
+
+
+ true
+ true
+ true
+ true
+ 0
+
+
+
+
+
+ false
+ true
+ 0
+ 0
+
+
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/item_unicode.xml b/defaults/xdg/walker/themes/gtk-inherit/item_unicode.xml
new file mode 100644
index 0000000..a93cbab
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/item_unicode.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ 3
+
+
+
+
+
+ vertical
+ true
+ true
+ true
+ 0
+
+
+
+ false
+ true
+ true
+ 0
+
+
+
+
+
+
+
+ false
+ center
+ 0
+ 0.5
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/keybind.xml b/defaults/xdg/walker/themes/gtk-inherit/keybind.xml
new file mode 100644
index 0000000..b347a0c
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/keybind.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+ vertical
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/layout.xml b/defaults/xdg/walker/themes/gtk-inherit/layout.xml
new file mode 100644
index 0000000..070782b
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/layout.xml
@@ -0,0 +1,160 @@
+
+
+
+
+
+ true
+ Walker
+
+
+
+ hidden
+ horizontal
+ center
+ center
+ 600
+ 570
+
+
+
+ vertical
+ true
+ true
+ 10
+
+
+
+ hidden
+ horizontal
+ fill
+ true
+ true
+
+
+
+ fill
+ true
+ true
+
+
+
+
+
+
+
+ horizontal
+ 10
+
+
+
+ Waiting for elephant...
+ true
+ true
+ false
+ 0.5
+
+
+
+
+
+ No Results
+ true
+ true
+ 0.5
+
+
+
+
+
+ false
+ true
+ true
+ true
+ 500
+ 500
+ 400
+ true
+ true
+ automatic
+ automatic
+
+
+
+ 1
+ 1
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ 10
+
+
+
+ 10
+
+
+
+
+
+ true
+ end
+ 10
+
+
+
+
+
+
+
+
+ 0
+ false
+
+
+
+
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/preview.xml b/defaults/xdg/walker/themes/gtk-inherit/preview.xml
new file mode 100644
index 0000000..f8d6c74
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/preview.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ 300
+ 500
+
+
+
+ true
+ true
+
+
+
+
diff --git a/defaults/xdg/walker/themes/gtk-inherit/style.css b/defaults/xdg/walker/themes/gtk-inherit/style.css
new file mode 100644
index 0000000..2c81c2a
--- /dev/null
+++ b/defaults/xdg/walker/themes/gtk-inherit/style.css
@@ -0,0 +1,182 @@
+/* ABOUTME: Walker theme that inherits colors from the active GTK4 theme.
+ ABOUTME: Only overrides layout/spacing — colors come from Colloid-Dark-Catppuccin or whatever is active. */
+
+* {
+ all: unset;
+ font-family: "UbuntuSans Nerd Font", sans-serif;
+}
+
+popover {
+ background: lighter(@window_bg_color);
+ border: 1px solid darker(@accent_bg_color);
+ border-radius: 18px;
+ padding: 10px;
+}
+
+.normal-icons {
+ -gtk-icon-size: 16px;
+}
+
+.large-icons {
+ -gtk-icon-size: 32px;
+}
+
+scrollbar {
+ opacity: 0;
+}
+
+.box-wrapper {
+ box-shadow:
+ 0 19px 38px rgba(0, 0, 0, 0.3),
+ 0 15px 12px rgba(0, 0, 0, 0.22);
+ background: @window_bg_color;
+ padding: 20px;
+ border-radius: 20px;
+ border: 1px solid darker(@accent_bg_color);
+}
+
+.preview-box,
+.elephant-hint,
+.placeholder {
+ color: @theme_fg_color;
+ opacity: 0.6;
+}
+
+.search-container {
+ border-radius: 10px;
+}
+
+.input placeholder {
+ opacity: 0.5;
+}
+
+.input selection {
+ background: alpha(@accent_bg_color, 0.3);
+ color: @theme_fg_color;
+}
+
+.input {
+ caret-color: @accent_bg_color;
+ background: lighter(@window_bg_color);
+ padding: 10px;
+ color: @theme_fg_color;
+ border-radius: 10px;
+}
+
+.list {
+ color: @theme_fg_color;
+}
+
+.item-box {
+ border-radius: 10px;
+ padding: 10px;
+}
+
+.item-quick-activation {
+ background: alpha(@accent_bg_color, 0.15);
+ border-radius: 5px;
+ padding: 10px;
+ color: @accent_bg_color;
+}
+
+child:selected .item-box,
+row:selected .item-box {
+ background: alpha(@accent_bg_color, 0.15);
+}
+
+child:selected .item-text,
+row:selected .item-text {
+ color: @accent_bg_color;
+}
+
+.item-subtext {
+ font-size: 12px;
+ opacity: 0.5;
+}
+
+.providerlist .item-subtext {
+ font-size: unset;
+ opacity: 0.75;
+}
+
+.item-image-text {
+ font-size: 28px;
+}
+
+.preview {
+ border: 1px solid alpha(@accent_bg_color, 0.25);
+ border-radius: 10px;
+ color: @theme_fg_color;
+}
+
+.calc .item-text {
+ font-size: 24px;
+}
+
+.symbols .item-image {
+ font-size: 24px;
+}
+
+.todo.done .item-text-box {
+ opacity: 0.25;
+}
+
+.todo.urgent {
+ font-size: 24px;
+ color: @error_bg_color;
+}
+
+.todo.active {
+ font-weight: bold;
+}
+
+.bluetooth.disconnected {
+ opacity: 0.5;
+}
+
+.preview .large-icons {
+ -gtk-icon-size: 64px;
+}
+
+.keybinds {
+ padding-top: 10px;
+ border-top: 1px solid lighter(@window_bg_color);
+ font-size: 12px;
+ color: @theme_fg_color;
+ opacity: 0.6;
+}
+
+.keybind-button {
+ opacity: 0.5;
+}
+
+.keybind-button:hover {
+ opacity: 0.75;
+}
+
+.keybind-bind {
+ text-transform: lowercase;
+ opacity: 0.35;
+}
+
+.keybind-label {
+ padding: 2px 4px;
+ border-radius: 4px;
+ border: 1px solid @theme_fg_color;
+}
+
+.error {
+ padding: 10px;
+ background: @error_bg_color;
+ color: @error_fg_color;
+ border-radius: 10px;
+}
+
+:not(.calc).current {
+ font-style: italic;
+}
+
+.preview-content.archlinuxpkgs,
+.preview-content.dnfpackages {
+ font-family: monospace;
+}
diff --git a/defaults/bin/moonarch-bluetooth b/legacy/rofi/bin/moonarch-bluetooth
similarity index 100%
rename from defaults/bin/moonarch-bluetooth
rename to legacy/rofi/bin/moonarch-bluetooth
diff --git a/defaults/bin/moonarch-clipboard b/legacy/rofi/bin/moonarch-clipboard
similarity index 100%
rename from defaults/bin/moonarch-clipboard
rename to legacy/rofi/bin/moonarch-clipboard
diff --git a/defaults/bin/moonarch-launcher b/legacy/rofi/bin/moonarch-launcher
similarity index 100%
rename from defaults/bin/moonarch-launcher
rename to legacy/rofi/bin/moonarch-launcher
diff --git a/legacy/rofi/bin/moonarch-setmen b/legacy/rofi/bin/moonarch-setmen
new file mode 100755
index 0000000..4281081
--- /dev/null
+++ b/legacy/rofi/bin/moonarch-setmen
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+# ABOUTME: Walker-dmenu settings menu that lists desktop files from /usr/share/settings-menu/.
+# ABOUTME: Reads Name and Icon from .desktop files and launches the selected entry.
+
+SETTINGS_DIR="/usr/share/settings-menu"
+
+declare -A EXEC_MAP
+
+get_name() {
+ local lang
+ lang=$(locale | grep "^LANG=" | cut -d= -f2 | cut -d_ -f1)
+ local find="Name[$lang]="
+ local name
+
+ name=$(grep "^$find" "$1" | tail -1 | sed "s/^$find//" | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')
+
+ if [[ -z "$name" ]]; then
+ name=$(grep "^Name=" "$1" | tail -1 | sed 's/^Name=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')
+ fi
+
+ echo "$name"
+}
+
+get_exec() {
+ grep '^Exec=' "$1" | tail -1 | sed 's/^Exec=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g'
+}
+
+entries=""
+for file in "$SETTINGS_DIR"/*.desktop; do
+ [[ -f "$file" ]] || continue
+ name=$(get_name "$file")
+ [[ -z "$name" ]] && continue
+ EXEC_MAP["$name"]=$(get_exec "$file")
+ entries+="$name\n"
+done
+
+chosen=$(echo -e "$entries" | sed '/^$/d' | sort | walker -d -p "⚙ Settings")
+
+if [[ -n "$chosen" && -n "${EXEC_MAP[$chosen]}" ]]; then
+ ${EXEC_MAP[$chosen]} &disown
+fi
diff --git a/defaults/bin/moonarch-volume b/legacy/rofi/bin/moonarch-volume
similarity index 100%
rename from defaults/bin/moonarch-volume
rename to legacy/rofi/bin/moonarch-volume
diff --git a/defaults/xdg/rofi/colors.rasi b/legacy/rofi/colors.rasi
similarity index 100%
rename from defaults/xdg/rofi/colors.rasi
rename to legacy/rofi/colors.rasi
diff --git a/defaults/xdg/rofi/config.rasi b/legacy/rofi/config.rasi
similarity index 100%
rename from defaults/xdg/rofi/config.rasi
rename to legacy/rofi/config.rasi
diff --git a/defaults/xdg/rofi/themes/applet.rasi b/legacy/rofi/themes/applet.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/applet.rasi
rename to legacy/rofi/themes/applet.rasi
diff --git a/defaults/xdg/rofi/themes/bluetooth.rasi b/legacy/rofi/themes/bluetooth.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/bluetooth.rasi
rename to legacy/rofi/themes/bluetooth.rasi
diff --git a/defaults/xdg/rofi/themes/clipboard.rasi b/legacy/rofi/themes/clipboard.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/clipboard.rasi
rename to legacy/rofi/themes/clipboard.rasi
diff --git a/defaults/xdg/rofi/themes/cpugov.rasi b/legacy/rofi/themes/cpugov.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/cpugov.rasi
rename to legacy/rofi/themes/cpugov.rasi
diff --git a/defaults/xdg/rofi/themes/launcher.rasi b/legacy/rofi/themes/launcher.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/launcher.rasi
rename to legacy/rofi/themes/launcher.rasi
diff --git a/defaults/xdg/rofi/themes/session.rasi b/legacy/rofi/themes/session.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/session.rasi
rename to legacy/rofi/themes/session.rasi
diff --git a/defaults/xdg/rofi/themes/settings-menu.rasi b/legacy/rofi/themes/settings-menu.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/settings-menu.rasi
rename to legacy/rofi/themes/settings-menu.rasi
diff --git a/defaults/xdg/rofi/themes/volume.rasi b/legacy/rofi/themes/volume.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/volume.rasi
rename to legacy/rofi/themes/volume.rasi
diff --git a/defaults/xdg/rofi/themes/vpn.rasi b/legacy/rofi/themes/vpn.rasi
similarity index 100%
rename from defaults/xdg/rofi/themes/vpn.rasi
rename to legacy/rofi/themes/vpn.rasi
diff --git a/packages/aur.txt b/packages/aur.txt
index 20df2e3..bdbcf21 100644
--- a/packages/aur.txt
+++ b/packages/aur.txt
@@ -9,7 +9,17 @@ colloid-catppuccin-gtk-theme-git
colloid-catppuccin-theme-git
# Niri / Wayland Extras
-rofi-lbonn-wayland-git
+walker-bin
+elephant-bin
+elephant-desktopapplications-bin
+elephant-clipboard-bin
+elephant-bluetooth-bin
+elephant-calc-bin
+elephant-runner-bin
+elephant-files-bin
+elephant-providerlist-bin
+elephant-niriactions-bin
+elephant-wireplumber-bin
waybar-niri-windows-bin
waybar-niri-workspaces-enhanced-git
waypaper
diff --git a/scripts/post-install.sh b/scripts/post-install.sh
index b94c762..90ecff6 100755
--- a/scripts/post-install.sh
+++ b/scripts/post-install.sh
@@ -44,7 +44,7 @@ paru -S --needed --noconfirm moonarch-git
# --- User-level GTK4 symlinks for libadwaita apps ---
-THEME_NAME="Colloid-Catppuccin"
+THEME_NAME="Colloid-Grey-Dark-Catppuccin"
THEME_GTK4="/usr/share/themes/$THEME_NAME/gtk-4.0"
if [[ -d "$THEME_GTK4" ]]; then
diff --git a/scripts/transform.sh b/scripts/transform.sh
index 71f5192..133373b 100755
--- a/scripts/transform.sh
+++ b/scripts/transform.sh
@@ -223,7 +223,7 @@ paru -S --needed --noconfirm moonarch-git
# ============================================================
# User-level GTK4 symlinks for libadwaita apps
-THEME_NAME="Colloid-Catppuccin"
+THEME_NAME="Colloid-Grey-Dark-Catppuccin"
THEME_GTK4="/usr/share/themes/$THEME_NAME/gtk-4.0"
if [[ -d "$THEME_GTK4" ]]; then