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:
1 parent
1b55ea648f
commit
f37dc00c7f
45 files changed
+1387
-102
No files matched your search
@@ -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.
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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-"; }
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
Executable
+41
@@ -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
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+11
-1
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user