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:
Executable
+314
@@ -0,0 +1,314 @@
|
||||
#!/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
|
||||
Executable
+26
@@ -0,0 +1,26 @@
|
||||
#!/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
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/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
|
||||
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
|
||||
Executable
+122
@@ -0,0 +1,122 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* @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;
|
||||
}
|
||||
@@ -0,0 +1,305 @@
|
||||
/**
|
||||
*
|
||||
* 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);
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* ABOUTME: Rofi theme for CPU governor switcher applet.
|
||||
* ABOUTME: Compact window for performance/powersave/reset modes.
|
||||
**/
|
||||
|
||||
@import "applet.rasi"
|
||||
|
||||
window {
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
@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;
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* @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";
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
@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";
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
/**
|
||||
* ABOUTME: Rofi theme for volume control applet.
|
||||
* ABOUTME: Uses default applet layout — window width is set dynamically by the script.
|
||||
**/
|
||||
|
||||
@import "applet.rasi"
|
||||
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* ABOUTME: Rofi theme for VPN connection manager applet.
|
||||
* ABOUTME: Compact window for short VPN connection list.
|
||||
**/
|
||||
|
||||
@import "applet.rasi"
|
||||
|
||||
window {
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
}
|
||||
Reference in New Issue
Block a user