Replace Rofi with Walker as application launcher

Walker (GTK4 + Elephant backend) replaces rofi-lbonn-wayland-git as the
central launcher and menu framework.

Native Walker providers replace 5 custom rofi scripts:
- App launcher (desktopapplications provider)
- Clipboard (clipboard provider, replaces cliphist frontend)
- Bluetooth (bluetooth provider, replaces bluetoothctl script)
- Volume/audio (wireplumber provider)
- Sink switcher (wireplumber provider)

3 scripts ported to Walker dmenu mode:
- moonarch-vpn (nmcli)
- moonarch-cpugov (auto-cpufreq)
- moonarch-sink-switcher (pactl)

Settings menu (moonarch-setmen) removed — apps are findable via Walker
app search directly.

Walker theme (gtk-inherit) inherits all colors from the active GTK4
theme instead of hardcoding Catppuccin values.

Walker and Elephant run as systemd user services for instant startup.

Also standardizes GTK theme to Colloid-Grey-Dark-Catppuccin across all
config files (was inconsistent between gsettings and file configs).

Old rofi configs preserved in legacy/rofi/ for reference.
This commit is contained in:
2026-03-30 12:06:25 +02:00
parent ee5940dec1
commit 4d9cbe7ce2
45 changed files with 1387 additions and 102 deletions
-314
View File
@@ -1,314 +0,0 @@
#!/usr/bin/env bash
# ABOUTME: Rofi-based Bluetooth device manager using bluetoothctl.
# ABOUTME: Supports connecting, pairing, trusting devices, and toggling power/scan/discoverable.
# Author: Nick Clyde (clydedroid)
#
# A script that generates a rofi menu that uses bluetoothctl to
# connect to bluetooth devices and display status info.
#
# Inspired by networkmanager-dmenu (https://github.com/firecat53/networkmanager-dmenu)
# Thanks to x70b1 (https://github.com/polybar/polybar-scripts/tree/master/polybar-scripts/system-bluetooth-bluetoothctl)
#
# Depends on:
# Arch repositories: rofi, bluez-utils (contains bluetoothctl)
# Constants
divider="---------"
goback="Back"
# Checks if bluetooth controller is powered on
power_on() {
if bluetoothctl show | grep -q "Powered: yes"; then
return 0
else
return 1
fi
}
# Toggles power state
toggle_power() {
if power_on; then
bluetoothctl power off
show_menu
else
if rfkill list bluetooth | grep -q 'blocked: yes'; then
rfkill unblock bluetooth && sleep 3
fi
bluetoothctl power on
show_menu
fi
}
# Checks if controller is scanning for new devices
scan_on() {
if bluetoothctl show | grep -q "Discovering: yes"; then
echo "Scan: on"
return 0
else
echo "Scan: off"
return 1
fi
}
# Toggles scanning state
toggle_scan() {
if scan_on; then
kill $(pgrep -f "bluetoothctl scan on")
bluetoothctl scan off
show_menu
else
bluetoothctl scan on &
echo "Scanning..."
sleep 5
show_menu
fi
}
# Checks if controller is able to pair to devices
pairable_on() {
if bluetoothctl show | grep -q "Pairable: yes"; then
echo "Pairable: on"
return 0
else
echo "Pairable: off"
return 1
fi
}
# Toggles pairable state
toggle_pairable() {
if pairable_on; then
bluetoothctl pairable off
show_menu
else
bluetoothctl pairable on
show_menu
fi
}
# Checks if controller is discoverable by other devices
discoverable_on() {
if bluetoothctl show | grep -q "Discoverable: yes"; then
echo "Discoverable: on"
return 0
else
echo "Discoverable: off"
return 1
fi
}
# Toggles discoverable state
toggle_discoverable() {
if discoverable_on; then
bluetoothctl discoverable off
show_menu
else
bluetoothctl discoverable on
show_menu
fi
}
# Checks if a device is connected
device_connected() {
device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -q "Connected: yes"; then
return 0
else
return 1
fi
}
# Toggles device connection
toggle_connection() {
if device_connected "$1"; then
bluetoothctl disconnect "$1"
device_menu "$device"
else
bluetoothctl connect "$1"
device_menu "$device"
fi
}
# Checks if a device is paired
device_paired() {
device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -q "Paired: yes"; then
echo "Paired: yes"
return 0
else
echo "Paired: no"
return 1
fi
}
# Toggles device paired state
toggle_paired() {
if device_paired "$1"; then
bluetoothctl remove "$1"
device_menu "$device"
else
bluetoothctl pair "$1"
device_menu "$device"
fi
}
# Checks if a device is trusted
device_trusted() {
device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -q "Trusted: yes"; then
echo "Trusted: yes"
return 0
else
echo "Trusted: no"
return 1
fi
}
# Toggles device connection
toggle_trust() {
if device_trusted "$1"; then
bluetoothctl untrust "$1"
device_menu "$device"
else
bluetoothctl trust "$1"
device_menu "$device"
fi
}
# Prints a short string with the current bluetooth status
# Useful for status bars like polybar, etc.
print_status() {
if power_on; then
printf ''
paired_devices_cmd="devices Paired"
# Check if an outdated version of bluetoothctl is used to preserve backwards compatibility
if (( $(echo "$(bluetoothctl version | cut -d ' ' -f 2) < 5.65" | bc -l) )); then
paired_devices_cmd="paired-devices"
fi
mapfile -t paired_devices < <(bluetoothctl $paired_devices_cmd | grep Device | cut -d ' ' -f 2)
counter=0
for device in "${paired_devices[@]}"; do
if device_connected "$device"; then
device_alias=$(bluetoothctl info "$device" | grep "Alias" | cut -d ' ' -f 2-)
if [ $counter -gt 0 ]; then
printf ", %s" "$device_alias"
else
printf " %s" "$device_alias"
fi
((counter++))
fi
done
printf "\n"
else
echo ""
fi
}
# A submenu for a specific device that allows connecting, pairing, and trusting
device_menu() {
device=$1
# Get device name and mac address
device_name=$(echo "$device" | cut -d ' ' -f 3-)
mac=$(echo "$device" | cut -d ' ' -f 2)
# Build options
if device_connected "$mac"; then
connected="Connected: yes"
else
connected="Connected: no"
fi
paired=$(device_paired "$mac")
trusted=$(device_trusted "$mac")
options="$connected\n$paired\n$trusted\n$divider\n$goback\nExit"
# Open rofi menu, read chosen option
chosen="$(echo -e "$options" | $rofi_command "$device_name")"
# Match chosen option to command
case "$chosen" in
"" | "$divider")
echo "No option chosen."
;;
"$connected")
toggle_connection "$mac"
;;
"$paired")
toggle_paired "$mac"
;;
"$trusted")
toggle_trust "$mac"
;;
"$goback")
show_menu
;;
esac
}
# Opens a rofi menu with current bluetooth status and options to connect
show_menu() {
# Get menu options
if power_on; then
power="Power: on"
# Human-readable names of devices, one per line
# If scan is off, will only list paired devices
devices=$(bluetoothctl devices | grep Device | cut -d ' ' -f 3-)
# Get controller flags
scan=$(scan_on)
pairable=$(pairable_on)
discoverable=$(discoverable_on)
# Options passed to rofi
options="$devices\n$divider\n$power\n$scan\n$pairable\n$discoverable\nExit"
else
power="Power: off"
options="$power\nExit"
fi
# Open rofi menu, read chosen option
chosen="$(echo -e "$options" | $rofi_command "Bluetooth")"
# Match chosen option to command
case "$chosen" in
"" | "$divider")
echo "No option chosen."
;;
"$power")
toggle_power
;;
"$scan")
toggle_scan
;;
"$discoverable")
toggle_discoverable
;;
"$pairable")
toggle_pairable
;;
*)
device=$(bluetoothctl devices | grep "$chosen")
# Open a submenu if a device is selected
if [[ $device ]]; then device_menu "$device"; fi
;;
esac
}
# Rofi command to pipe into, can add any options here
rofi_command="rofi -dmenu $* -p -theme /etc/xdg/rofi/themes/bluetooth.rasi -mesg -Bluetooth-Control"
case "$1" in
--status)
print_status
;;
*)
show_menu
;;
esac
-26
View File
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# ABOUTME: Rofi-based clipboard history manager using cliphist and wl-copy.
# ABOUTME: Lists clipboard entries and copies the selected one.
CLIPHIST_DB="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/cliphist/db"
function start_rofi() {
local content="$1"
echo -e "$content" | rofi -dmenu -theme /etc/xdg/rofi/themes/clipboard.rasi -mesg "󰅍 Clipboard History"
}
function main() {
local entries
local result
entries=$(cliphist -db-path "$CLIPHIST_DB" list)
result=$(start_rofi "$entries")
if [ -n "$result" ]; then
echo "$result" | cliphist -db-path "$CLIPHIST_DB" decode | wl-copy
else
exit 1
fi
}
main
+3 -4
View File
@@ -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
-24
View File
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# ABOUTME: Application launcher using rofi with Catppuccin Mocha theme.
# ABOUTME: Supports window, files, run, and drun modes.
case $1 in
window)
showmode="window"
;;
files)
showmode="filebrowser"
;;
run)
showmode="run"
;;
*)
showmode="drun"
;;
esac
## Run
rofi \
-show $showmode \
-click-to-exit \
-theme /etc/xdg/rofi/themes/launcher.rasi
-66
View File
@@ -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
+2 -2
View File
@@ -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
-122
View File
@@ -1,122 +0,0 @@
#!/usr/bin/env bash
# ABOUTME: Rofi-based volume control applet for managing speakers and microphone.
# ABOUTME: Provides mute toggles, sink switching, mixer access, and NoiseTorch.
## Author : Aditya Shakya (adi1090x)
## Github : @adi1090x
#
## Applets : Volume
theme="/etc/xdg/rofi/themes/volume.rasi"
# Volume Info
mixer="`amixer info Master | grep 'Mixer name' | cut -d':' -f2 | tr -d \',' '`"
speaker="`amixer get Master | tail -n1 | awk -F ' ' '{print $5}' | tr -d '[]'`"
mic="`amixer get Capture | tail -n1 | awk -F ' ' '{print $5}' | tr -d '[]'`"
active=""
urgent=""
# Speaker Info
amixer get Master | grep '\[on\]' &>/dev/null
if [[ "$?" == 0 ]]; then
active="-a 1"
stext='Mute Speaker'
sicon='󰓃'
else
urgent="-u 1"
stext='Unmute Speaker'
sicon='󰓄'
fi
# Microphone Info
amixer get Capture | grep '\[on\]' &>/dev/null
if [[ "$?" == 0 ]]; then
[ -n "$active" ] && active+=",3" || active="-a 3"
mtext='Mute Mic'
micon=''
else
[ -n "$urgent" ] && urgent+=",3" || urgent="-u 3"
mtext='Unmute Mic'
micon=''
fi
currentsink=$(pactl get-default-sink)
currentsource=$(pactl get-default-source)
# Theme Elements
prompt="Speaker: $sicon Mic: $micon "
mesg="$mixer Speaker: $speaker Mic: $mic"
list_col='6'
list_row='3'
win_width='670px'
# Options
option_1="$micon $mtext $currentsource"
option_2="$sicon $stext $currentsink"
option_3="󱡫 Sink Switcher"
option_4=""
option_5=" Mixer"
option_6="󰍯 Noise Torch"
# Rofi CMD
#-theme-str "listview {columns: $list_col; lines: $list_row;}" \
rofi_cmd() {
rofi -theme-str "window {width: $win_width;}" \
-dmenu \
-p "$prompt" \
-mesg "$mesg" \
${active} ${urgent} \
-markup-rows \
-theme ${theme}
}
# Pass variables to rofi dmenu
run_rofi() {
echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd
}
# Execute Command
run_cmd() {
if [[ "$1" == '--opt3' ]]; then
#amixer -Mq set Master,0 5%+ unmute
moonarch-sink-switcher
elif [[ "$1" == '--opt2' ]]; then
amixer set Master toggle
elif [[ "$1" == '--opt4' ]]; then
amixer -Mq set Master,0 5%- unmute
elif [[ "$1" == '--opt1' ]]; then
amixer set Capture toggle
elif [[ "$1" == '--opt5' ]]; then
pavucontrol
elif [[ "$1" == '--opt6' ]]; then
noisetorch
fi
}
# Actions
chosen="$(run_rofi)"
case ${chosen} in
$option_1)
run_cmd --opt1
;;
$option_2)
run_cmd --opt2
;;
$option_3)
run_cmd --opt3
;;
$option_4)
run_cmd --opt4
;;
$option_5)
run_cmd --opt5
;;
$option_6)
run_cmd --opt6
;;
esac
+2 -2
View File
@@ -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.
+11
View File
@@ -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
+1 -1
View File
@@ -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
+4 -5
View File
@@ -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-"; }
-82
View File
@@ -1,82 +0,0 @@
/**
* @author Dominik Kressler
* @package rofi-archer
* @version 1.0.0
**/
* {
background: #1e1e2e;
background-alt: #eff1f580;
foreground: #eff1f5;
selected: #4c566a;
border: #eff1f5;
active: #98C37988;
urgent: var(error-color);
/*https://catppuccin.ryanccn.dev/palette*/
rosewater: #f5e0dc;
flamingo: #f2cdcd;
pink: #f5c2e7;
mauve: #cba6f7;
red: #f38ba8;
maroon: #eba0ac;
peach: #fab387;
yellow: #f9e2af;
green: #a6e3a1;
teal: #94e2d5;
sky: #89dceb;
sapphire: #74c7ec;
blue: #89b4fa;
lavender: #b4befe;
text: #eff1f5;
subtext1: #eff1f580;
subtext0: #a6adc8;
overlay0: #6c7086;
overlay1: #7f849c;
overlay2: #9399b2;
surface0: #313244;
surface1: #45475a;
surface2: #585b70;
base: #1e1e2e;
mantle: #181825;
crust: #11111b;
/* GTK THEME VARS*/
theme-fg-color: #eff1f5;
theme-text-color: #eff1f5;
theme-bg-color: #1e1e2e;
theme-base-color: #1e1e2e;
theme-bg-color-shade-1: #1e1e2eEF;
theme-bg-color-shade-2: #1e1e2eD8;
theme-bg-color-shade-3: #1e1e2eC9;
theme-selected-bg-color: #b4befe;
theme-selected-fg-color: #11111b;
theme-unfocused-fg-color: #eff1f5;
theme-unfocused-text-color: #eff1f5;
theme-unfocused-bg-color: #1e1e2e;
theme-unfocused-base-color: #1e1e2e;
theme-unfocused-selected-bg-color: #b4befe;
theme-unfocused-selected-fg-color: #11111b;
unfocused-insensitive-color: #eff1f5;
borders: #b4befe30;
unfocused-borders: #eff1f5;
warning-color: #f9e2af;
error-color: #f38ba8;
success-color: #a6e3a1;
}
-305
View File
@@ -1,305 +0,0 @@
/**
*
* Author : Aditya Shakya (adi1090x)
* Github : @adi1090x
*
* Rofi Theme File
* Rofi Version: 1.7.3
**/
/*****----- Configuration -----*****/
configuration {
modi: "drun,run,filebrowser,window";
show-icons: true;
display-drun: "";
display-run: "";
display-filebrowser: "";
display-window: "";
display-combi: "練";
drun-display-format: "{name}";
window-format: "{w} · {c} · {t}";
matching: "fuzzy";
sidebar-mode: true;
threads: 0;
scroll-method: 0;
ssh-command: "sshfs_connect {host}";
}
/*****----- Global Properties -----*****/
@import "colors.rasi"
* {
handle-colour: var(selected);
foreground-colour: var(foreground);
alternate-background: var(background-alt);
normal-background: var(background);
normal-foreground: var(foreground);
urgent-background: var(urgent);
urgent-foreground: var(background);
active-background: var(active);
active-foreground: var(background);
selected-normal-background: var(selected);
selected-normal-foreground: var(background);
selected-urgent-background: var(active);
selected-urgent-foreground: var(background);
selected-active-background: var(urgent);
selected-active-foreground: var(background);
alternate-normal-background: var(background);
alternate-normal-foreground: var(foreground);
alternate-urgent-background: var(urgent);
alternate-urgent-foreground: var(background);
alternate-active-background: var(active);
alternate-active-foreground: var(background);
font: "UbuntuSans Nerd Font 11";
border-radius: 4px;
frame-border: 1px solid;
}
/*****----- Main Window -----*****/
window {
/* properties for window widget */
transparency: "real";
location: center;
anchor: center;
fullscreen: false;
width: 600px;
x-offset: 0px;
y-offset: 60px;
/* properties for all widgets */
enabled: true;
margin: 0px;
padding: 0px;
border-radius: var(border-radius);
border: var(frame-border);
border-color: var(borders);
cursor: "default";
background-color: @theme-bg-color-shade-1;
}
/*****----- Main Box -----*****/
mainbox {
enabled: true;
spacing: 10px;
margin: 0px;
/*padding: 30px;*/
background-color: transparent;
children: [ "message", "listview", "inputbar" ];
padding: 0 0 30px 0;
}
/*****----- Inputbar -----*****/
inputbar {
enabled: true;
spacing: 10px;
margin: 0;
padding: 20px 0 0 30px;
border: 0px solid;
border-radius: 0px;
border-color: @borders;
background-color: transparent;
text-color: var(theme-text-color);
children: [ "textbox-prompt-colon", "entry", "mode-switcher" ];
}
prompt {
enabled: true;
background-color: inherit;
text-color: inherit;
}
textbox-prompt-colon {
enabled: true;
padding: 5px 3px 0px 0;
expand: false;
//font: "MonarchOS 14";
//str: "";
str: "󰍉";
background-color: inherit;
text-color: inherit;
}
entry {
enabled: true;
padding: 5px 0px;
background-color: inherit;
text-color: inherit;
cursor: text;
placeholder: "...";
placeholder-color: inherit;
}
num-filtered-rows {
enabled: true;
expand: false;
background-color: inherit;
text-color: inherit;
}
textbox-num-sep {
enabled: true;
expand: false;
str: "/";
background-color: inherit;
text-color: inherit;
}
num-rows {
enabled: true;
expand: false;
background-color: inherit;
text-color: inherit;
}
case-indicator {
enabled: true;
background-color: inherit;
text-color: inherit;
}
/*****----- Listview -----*****/
listview {
enabled: true;
columns: 1;
lines: 8;
cycle: true;
dynamic: true;
scrollbar: false;
layout: vertical;
reverse: false;
fixed-height: true;
fixed-columns: true;
spacing: 10px;
margin: 0px;
padding: 30px 30px 0px 30px;
border: 0px solid;
border-radius: 0px;
border-color: @borders;
background-color: transparent;
text-color: var(theme-text-color);
cursor: "default";
}
scrollbar {
handle-width: 5px;
handle-color: @handle-colour;
border-radius: var(border-radius);
background-color: transparent;
}
/*****----- Elements -----*****/
element {
enabled: true;
spacing: 10px;
margin: 0px;
padding: 5px 10px;
border: 0px solid;
border-radius: var(border-radius);
border-color: @borders;
background-color: transparent;
text-color: var(theme-text-color);
cursor: pointer;
orientation: horizontal;
children: ["element-text"];
}
element normal.normal {
background-color: transparent;
text-color: var(normal-foreground);
}
element normal.urgent {
background-color: var(urgent-background);
text-color: var(urgent-foreground);
}
element normal.active {
background-color: var(normal-foreground);
text-color: var(theme-bg-color-shade-1);
}
element selected.normal {
background-color: var(theme-selected-fg-color);
text-color: var(theme-selected-bg-color);
}
element selected.urgent {
background-color: var(theme-bg-color-shade-1);
text-color: var(theme-text-color);
}
element selected.active {
background-color: var(error-color);
text-color: var(theme-text-color);
}
element-icon {
background-color: transparent;
text-color: inherit;
size: 16px;
cursor: inherit;
}
element-text {
background-color: transparent;
text-color: inherit;
highlight: inherit;
cursor: inherit;
vertical-align: 0.5;
horizontal-align: 0.0;
}
/*****----- Mode Switcher -----*****/
mode-switcher{
enabled: true;
spacing: 10px;
margin: 0px;
padding: 0px 30px 0px 0;
border: 0px solid;
border-radius: 0px;
border-color: @borders;
background-color: transparent;
text-color: var(theme-text-color);
}
button {
padding: 2px 14px 2px 9px;
border: 0px solid;
border-radius: var(border-radius);
border-color: @borders;
background-color: @theme-bg-color-shade-1;
text-color: var(theme-selected-bg-color);
cursor: pointer;
}
button selected {
background-color: var(theme-selected-fg-color);
text-color: var(theme-selected-bg-color);
}
/*****----- Message -----*****/
message {
enabled: true;
margin: 0px;
padding: 0 0 0 0;
border: 0px solid;
border-radius: 0px 0px 0px 0px;
border-color: @borders;
background-color: transparent;
text-color: var(theme-text-color);
}
textbox {
padding: 30px 10px 0 10px;
border: 0px solid;
/*border-radius: 10px 10px 0 0;*/
border-radius: 0 0 0 0;
border-color: @borders;
background-color: transparent;
font: "UbuntuSans Nerd Font 12";
text-color: var(theme-text-color);
horizontal-align: 0.5;
highlight: none;
placeholder-color: var(theme-text-color);
blink: true;
markup: true;
}
error-message {
padding: 10px;
border: 2px solid;
border-radius: var(border-radius);
border-color: @borders;
background-color: @background;
text-color: var(theme-text-color);
}
-39
View File
@@ -1,39 +0,0 @@
/**
* ABOUTME: Shared base theme for simple list applets (clipboard, vpn, cpugov, volume, bluetooth).
* ABOUTME: Provides no-icon dmenu layout — individual themes override window size and listview lines.
**/
configuration {
modi: "drun";
show-icons: false;
drun-display-format: "{name}";
}
@import "../config.rasi"
@import "../colors.rasi"
mainbox {
children: [ "message", "listview", "inputbar" ];
}
inputbar {
enabled: true;
children: [ "textbox-prompt-colon", "entry", "mode-switcher" ];
}
listview {
enabled: true;
columns: 1;
lines: 8;
cycle: true;
dynamic: true;
scrollbar: false;
layout: vertical;
reverse: false;
fixed-height: true;
fixed-columns: true;
}
element-icon {
size: 0px;
}
-10
View File
@@ -1,10 +0,0 @@
/**
* ABOUTME: Rofi theme for Bluetooth device manager applet.
* ABOUTME: Hides inputbar since bluetooth script manages its own prompts via -p flag.
**/
@import "applet.rasi"
inputbar {
enabled: false;
}
-14
View File
@@ -1,14 +0,0 @@
/**
* ABOUTME: Rofi theme for clipboard history applet.
* ABOUTME: Wider window and more lines for browsing clipboard entries.
**/
@import "applet.rasi"
window {
width: 600px;
}
listview {
lines: 10;
}
-11
View File
@@ -1,11 +0,0 @@
/**
* ABOUTME: Rofi theme for CPU governor switcher applet.
* ABOUTME: Compact window for performance/powersave/reset modes.
**/
@import "applet.rasi"
window {
width: 300px;
height: 300px;
}
-16
View File
@@ -1,16 +0,0 @@
@import "../config.rasi"
@import "../colors.rasi"
element {
children: ["element-icon", "element-text"];
}
element-icon {
size: 32px;
}
element-text {
vertical-align: 0.5;
horizontal-align: 0.0;
}
-85
View File
@@ -1,85 +0,0 @@
/**
* @author Moonarch
* @description Rofi session menu — horizontal icon layout
**/
@import "../config.rasi"
@import "../colors.rasi"
window {
width: 674px;
location: center;
anchor: center;
border-radius: var(border-radius);
border: var(frame-border);
border-color: var(borders);
background-color: @theme-bg-color-shade-1;
}
mainbox {
enabled: true;
spacing: 15px;
padding: 30px;
background-color: transparent;
children: [ "message", "listview" ];
}
message {
enabled: true;
padding: 0;
background-color: transparent;
}
textbox {
background-color: transparent;
text-color: var(theme-text-color);
horizontal-align: 0.5;
font: "UbuntuSans Nerd Font 11";
markup: true;
}
listview {
enabled: true;
columns: 6;
lines: 1;
cycle: true;
dynamic: false;
scrollbar: false;
layout: vertical;
fixed-height: true;
fixed-columns: true;
spacing: 10px;
background-color: transparent;
}
element {
enabled: true;
padding: 15px;
border-radius: var(border-radius);
background-color: transparent;
text-color: var(theme-text-color);
cursor: pointer;
orientation: vertical;
children: [ "element-icon" ];
}
element selected.normal {
background-color: var(theme-selected-fg-color);
text-color: var(theme-selected-bg-color);
}
element-icon {
background-color: transparent;
size: 64px;
cursor: inherit;
horizontal-align: 0.5;
}
element-text {
background-color: transparent;
text-color: inherit;
cursor: inherit;
horizontal-align: 0.5;
vertical-align: 0.5;
font: "UbuntuSans Nerd Font 9";
}
@@ -1,26 +0,0 @@
@import "../config.rasi"
@import "../colors.rasi"
listview {
columns: 4;
lines: 4;
}
inputbar {
children: [ "textbox-prompt-colon", "entry"];
}
element {
orientation:vertical;
children: ["element-icon", "element-text"];
}
element-icon {
size: 32px;
}
element-text {
vertical-align: 0.5;
horizontal-align: 0.5;
font: "UbuntuSans Nerd Font 9";
}
-6
View File
@@ -1,6 +0,0 @@
/**
* ABOUTME: Rofi theme for volume control applet.
* ABOUTME: Uses default applet layout — window width is set dynamically by the script.
**/
@import "applet.rasi"
-11
View File
@@ -1,11 +0,0 @@
/**
* ABOUTME: Rofi theme for VPN connection manager applet.
* ABOUTME: Compact window for short VPN connection list.
**/
@import "applet.rasi"
window {
width: 300px;
height: 300px;
}
+187
View File
@@ -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" },
]
@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="ItemImageFont">
<style>
<class name="item-image-text"></class>
</style>
<property name="width-chars">2</property>
</object>
</child>
<child>
<object class="GtkImage" id="ItemImage">
<style>
<class name="item-image"></class>
</style>
<property name="icon-size">large</property>
</object>
</child>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="vexpand">true</property>
<property name="hexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="ellipsize">end</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="ItemSubtext">
<style>
<class name="item-subtext"></class>
</style>
<property name="ellipsize">end</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="vexpand">true</property>
<property name="hexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">false</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="ItemSubtext">
<style>
<class name="item-subtext"></class>
</style>
<property name="wrap">true</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="ItemImageFont">
<style>
<class name="item-image-text"></class>
</style>
<property name="width-chars">2</property>
</object>
</child>
<child>
<object class="GtkImage" id="ItemImage">
<style>
<class name="item-image"></class>
</style>
<property name="pixel-size">48</property>
</object>
</child>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">false</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="ItemSubtext">
<style>
<class name="item-subtext"></class>
</style>
<property name="wrap">true</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="lines">1</property>
<property name="wrap">true</property>
<property name="ellipsize">3</property>
<property name="single-line-mode">true</property>
</object>
</child>
<child>
<object class="GtkLabel" id="ItemSubtext">
<style>
<class name="item-subtext"></class>
</style>
<property name="xalign">0</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="lines">1</property>
<property name="ellipsize">3</property>
<property name="single-line-mode">true</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="vexpand">true</property>
<property name="hexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">false</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="ItemSubtext">
<style>
<class name="item-subtext"></class>
</style>
<property name="wrap">true</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkImage" id="ItemImage">
<style>
<class name="item-image"></class>
</style>
<property name="icon-size">large</property>
</object>
</child>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">false</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="ellipsize">1</property>
</object>
</child>
<child>
<object class="GtkLabel" id="ItemSubtext">
<style>
<class name="item-subtext"></class>
</style>
<property name="wrap">false</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="ellipsize">1</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="ItemImageFont">
<style>
<class name="item-image-text"></class>
</style>
<property name="width-chars">2</property>
</object>
</child>
<child>
<object class="GtkImage" id="ItemImage">
<style>
<class name="item-image"></class>
</style>
<property name="icon-size">large</property>
</object>
</child>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">false</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="ItemSubtext">
<style>
<class name="item-subtext"></class>
</style>
<property name="ellipsize">end</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="ItemImage">
<style>
<class name="item-image"></class>
</style>
<property name="width-chars">2</property>
</object>
</child>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">false</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="ItemImage">
<style>
<class name="item-image"></class>
</style>
</object>
</child>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="hexpand">true</property>
<property name="hexpand-set">true</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">true</property>
<property name="hexpand">true</property>
<property name="xalign">0.5</property>
<property name="justify">2</property>
</object>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkImage" id="ItemImage">
<style>
<class name="item-image"></class>
</style>
<property name="pixel-size">48</property>
</object>
</child>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">true</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="hexpand">true</property>
<property name="xalign">0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="ItemSubtext">
<style>
<class name="item-subtext"></class>
</style>
<property name="wrap">false</property>
<property name="hexpand">true</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="ItemImage">
<style>
<class name="item-image"></class>
</style>
<property name="width-chars">3</property>
</object>
</child>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="wrap">false</property>
<property name="vexpand_set">true</property>
<property name="vexpand">true</property>
<property name="xalign">0</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="Keybind">
<style>
<class name="keybind"></class>
</style>
<property name="orientation">vertical</property>
<child>
<object class="GtkButton" id="KeybindButton">
<style>
<class name="keybind-button"></class>
</style>
<child>
<object class="GtkLabel" id="KeybindLabel">
<style>
<class name="keybind-label"></class>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="KeybindBind">
<property name="margin-top">5</property>
<style>
<class name="keybind-bind"></class>
</style>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkWindow" id="Window">
<style>
<class name="window"></class>
</style>
<property name="resizable">true</property>
<property name="title">Walker</property>
<child>
<object class="GtkBox" id="BoxWrapper">
<style>
<class name="box-wrapper"></class>
</style>
<property name="overflow">hidden</property>
<property name="orientation">horizontal</property>
<property name="valign">center</property>
<property name="halign">center</property>
<property name="width-request">600</property>
<property name="height-request">570</property>
<child>
<object class="GtkBox" id="Box">
<style>
<class name="box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="SearchContainer">
<style>
<class name="search-container"></class>
</style>
<property name="overflow">hidden</property>
<property name="orientation">horizontal</property>
<property name="halign">fill</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
<child>
<object class="GtkEntry" id="Input">
<style>
<class name="input"></class>
</style>
<property name="halign">fill</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="ContentContainer">
<style>
<class name="content-container"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="ElephantHint">
<style>
<class name="elephant-hint"></class>
</style>
<property name="label">Waiting for elephant...</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="visible">false</property>
<property name="valign">0.5</property>
</object>
</child>
<child>
<object class="GtkLabel" id="Placeholder">
<style>
<class name="placeholder"></class>
</style>
<property name="label">No Results</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="valign">0.5</property>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="Scroll">
<style>
<class name="scroll"></class>
</style>
<property name="can_focus">false</property>
<property name="overlay-scrolling">true</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="max-content-width">500</property>
<property name="min-content-width">500</property>
<property name="max-content-height">400</property>
<property name="propagate-natural-height">true</property>
<property name="propagate-natural-width">true</property>
<property name="hscrollbar-policy">automatic</property>
<property name="vscrollbar-policy">automatic</property>
<child>
<object class="GtkGridView" id="List">
<style>
<class name="list"></class>
</style>
<property name="max_columns">1</property>
<property name="min_columns">1</property>
<property name="can_focus">false</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="Preview">
<style>
<class name="preview"></class>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="Keybinds">
<property name="hexpand">true</property>
<property name="margin-top">10</property>
<style>
<class name="keybinds"></class>
</style>
<child>
<object class="GtkBox" id="GlobalKeybinds">
<property name="spacing">10</property>
<style>
<class name="global-keybinds"></class>
</style>
</object>
</child>
<child>
<object class="GtkBox" id="ItemKeybinds">
<property name="hexpand">true</property>
<property name="halign">end</property>
<property name="spacing">10</property>
<style>
<class name="item-keybinds"></class>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="Error">
<style>
<class name="error"></class>
</style>
<property name="xalign">0</property>
<property name="visible">false</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="PreviewBox">
<style>
<class name="preview-box"></class>
</style>
<property name="height-request">300</property>
<property name="width-request">500</property>
<child>
<object class="GtkStack" id="PreviewStack">
<style>
<class name="preview-stack"></class>
</style>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
</object>
</child>
</object>
</interface>
@@ -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;
}