Initial commit: Moonarch reproduzierbares Arch-Linux-Setup
Niri-basierter Wayland-Desktop mit greetd/regreet, Catppuccin Mocha Theming, Rofi-Menus, Waybar und vollstaendiger Post-Install-Automatisierung. Archinstall-Config klont das Repo automatisch via custom-commands, danach genuegt ein einzelner Befehl fuer die komplette Einrichtung.
This commit is contained in:
commit
5d2ce00455
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
# ABOUTME: Gitignore für Moonarch.
|
||||
# ABOUTME: Schließt temporäre Dateien und Build-Artefakte aus.
|
||||
|
||||
*.pyc
|
||||
__pycache__/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
20
CLAUDE.md
Normal file
20
CLAUDE.md
Normal file
@ -0,0 +1,20 @@
|
||||
# Moonarch
|
||||
|
||||
Reproduzierbares Arch-Linux-Setup basierend auf archinstall + Post-Install-Automatisierung.
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
- `config/` — archinstall-Konfiguration (inkl. custom-commands die das Repo nach /opt/moonarch klonen)
|
||||
- `scripts/` — Post-Install- und Helper-Scripts
|
||||
- `packages/` — Paketlisten (offiziell + AUR), getrennt gepflegt
|
||||
- `defaults/` — XDG-Configs, Shell-Config, Helper-Binaries, greetd-Config, Wallpaper
|
||||
|
||||
## Konventionen
|
||||
|
||||
- Paketlisten sind einfache Textdateien, ein Paket pro Zeile, Kommentare mit `#`
|
||||
- Shell-Scripts müssen POSIX-kompatibel oder explizit bash/zsh sein
|
||||
- Alle Pfade im archinstall-Config relativ zum Installationsziel
|
||||
|
||||
## Ich bin Apollo
|
||||
|
||||
Benannt nach dem Programm, das Menschen zum Mond gebracht hat — passend für ein Projekt namens Moonarch.
|
||||
48
README.md
Normal file
48
README.md
Normal file
@ -0,0 +1,48 @@
|
||||
# Moonarch
|
||||
|
||||
Reproduzierbares Arch-Linux-Setup mit Niri (Wayland Compositor), greetd/regreet, Catppuccin Mocha Theming und durchgehender Automatisierung.
|
||||
|
||||
## Schnellstart
|
||||
|
||||
1. Arch ISO booten
|
||||
2. `archinstall --config /pfad/zur/user_configuration.json` (Disk + Kernel interaktiv)
|
||||
3. Reboot — das Repo liegt bereits in `/opt/moonarch`
|
||||
4. Einloggen, dann:
|
||||
|
||||
```bash
|
||||
/opt/moonarch/scripts/post-install.sh
|
||||
```
|
||||
|
||||
5. Nochmal rebooten — fertig
|
||||
|
||||
## Struktur
|
||||
|
||||
```
|
||||
config/ archinstall-Konfiguration
|
||||
packages/ Paketlisten (official.txt + aur.txt)
|
||||
scripts/ Bootstrap, Post-Install, Update, Theme-Installer
|
||||
defaults/
|
||||
bin/ moonarch-* Helper-Scripts (/usr/local/bin/)
|
||||
xdg/ XDG-Defaults (/etc/xdg/)
|
||||
shell/ Zsh-Konfiguration
|
||||
etc/ greetd/regreet Konfiguration
|
||||
backgrounds/ Greeter-Wallpaper
|
||||
```
|
||||
|
||||
## Update
|
||||
|
||||
```bash
|
||||
moonarch-update
|
||||
```
|
||||
|
||||
Aktualisiert Repo, Systempakete, fehlende Pakete und Defaults — alles interaktiv mit Bestaetigungen.
|
||||
|
||||
## Stack
|
||||
|
||||
- **Compositor:** Niri (Scrollable Tiling Wayland)
|
||||
- **Greeter:** greetd + regreet
|
||||
- **Bar:** Waybar
|
||||
- **Launcher:** Rofi (lbonn Wayland Fork)
|
||||
- **Terminal:** Foot
|
||||
- **Theme:** Catppuccin Mocha + Sweet Cursors + Newaita Icons
|
||||
- **Shell:** Zsh
|
||||
77
config/user_configuration.json
Normal file
77
config/user_configuration.json
Normal file
@ -0,0 +1,77 @@
|
||||
{
|
||||
"__comment": "ABOUTME: archinstall-Konfiguration für Moonarch.",
|
||||
"__comment2": "ABOUTME: Basis-Setup — Kernel, Disk und Filesystem werden interaktiv gewählt.",
|
||||
|
||||
"audio_config": {
|
||||
"audio": "pipewire"
|
||||
},
|
||||
|
||||
"bootloader": "Systemd-boot",
|
||||
|
||||
"hostname": "moonarch",
|
||||
|
||||
"locale_config": {
|
||||
"sys_lang": "de_DE.UTF-8",
|
||||
"sys_enc": "UTF-8",
|
||||
"kb_layout": "de"
|
||||
},
|
||||
|
||||
"network_config": {
|
||||
"type": "nm"
|
||||
},
|
||||
|
||||
"ntp": true,
|
||||
|
||||
"packages": [
|
||||
"base-devel",
|
||||
"btrfs-progs",
|
||||
"efibootmgr",
|
||||
"man-db",
|
||||
"git",
|
||||
"neovim",
|
||||
"zsh",
|
||||
"networkmanager",
|
||||
"pipewire",
|
||||
"pipewire-alsa",
|
||||
"pipewire-jack",
|
||||
"pipewire-pulse",
|
||||
"wireplumber",
|
||||
"docker",
|
||||
"docker-compose",
|
||||
"fwupd",
|
||||
"ufw",
|
||||
"greetd",
|
||||
"greetd-regreet",
|
||||
"niri",
|
||||
"waybar",
|
||||
"foot",
|
||||
"dunst",
|
||||
"polkit-gnome",
|
||||
"stow"
|
||||
],
|
||||
|
||||
"profile_config": {
|
||||
"gfx_driver": "All open-source",
|
||||
"greeter": "greetd",
|
||||
"profile": {
|
||||
"main": "Desktop",
|
||||
"details": []
|
||||
}
|
||||
},
|
||||
|
||||
"services": [
|
||||
"NetworkManager",
|
||||
"bluetooth",
|
||||
"docker",
|
||||
"greetd",
|
||||
"systemd-timesyncd",
|
||||
"ufw"
|
||||
],
|
||||
|
||||
"timezone": "Europe/Berlin",
|
||||
|
||||
"custom-commands": [
|
||||
"git clone https://gitea.moonarch.de/nevaforget/moonarch.git /opt/moonarch",
|
||||
"chown -R 1000:1000 /opt/moonarch"
|
||||
]
|
||||
}
|
||||
BIN
defaults/backgrounds/moonarch-greeter.jpg
Normal file
BIN
defaults/backgrounds/moonarch-greeter.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 366 KiB |
142
defaults/bin/moonarch-bangs
Executable file
142
defaults/bin/moonarch-bangs
Executable file
@ -0,0 +1,142 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Rofi-based tool launcher that provides a searchable menu of system utilities.
|
||||
# ABOUTME: Includes VPN, sound, bluetooth, shortcuts, and other system management tools.
|
||||
|
||||
declare -A LABELS
|
||||
declare -A COMMANDS
|
||||
|
||||
###
|
||||
# List of defined 'bangs'
|
||||
|
||||
# launch programs
|
||||
# COMMANDS["apps"]="rofi -combi-modi window,drun -show combi"
|
||||
# LABELS["apps"]=""
|
||||
|
||||
# open bookmarks
|
||||
# COMMANDS["bookmarks"]="~/.scripts/rofi-scripts-collection/rofi-surfraw-bookmarks.sh"
|
||||
# LABELS["bookmarks"]=""
|
||||
|
||||
# search local files
|
||||
COMMANDS[""]="moonarch-locate"
|
||||
LABELS[""]="Locate"
|
||||
|
||||
COMMANDS[""]="wlogout -P 1 -s -r 10 -c 10"
|
||||
LABELS[""]="Session Menu"
|
||||
|
||||
# open custom web searches
|
||||
# COMMANDS["websearch"]="~/.scripts/rofi-scripts-collection/rofi-surfraw-websearch.sh"
|
||||
# LABELS["websearch"]=""
|
||||
|
||||
# show clipboard history
|
||||
# source: https://bitbucket.org/pandozer/rofi-clipboard-manager/overview
|
||||
# COMMANDS["clipboard"]='rofi -modi "clipboard:~/.bin/rofi-clipboard-manager/mclip.py menu" -show clipboard && ~/.bin/rofi-clipboard-manager/mclip.py paste'
|
||||
# LABELS["clipboard"]=""
|
||||
|
||||
# references --------------------------
|
||||
# COMMANDS[";sr2"]="chromium 'wikipedia.org/search-redirect.php?search=\" \${input}\""
|
||||
# LABELS[";sr2"]=""
|
||||
|
||||
# COMMANDS[";piratebay"]="chromium --disk-cache-dir=/tmp/cache http://thepiratebay.org/search/\" \${input}\""
|
||||
# LABELS[";piratebay"]=""
|
||||
|
||||
# COMMANDS[".bin"]="spacefm -r '/home/dka/bin'"
|
||||
# LABELS[".bin"]=".bin"
|
||||
|
||||
# COMMANDS["#screenshot"]='/home/dka/bin/screenshot-scripts/myscreenshot.sh'
|
||||
# LABELS["#screenshot"]="screenshot"
|
||||
|
||||
# greenclip clipboard history
|
||||
# source: https://github.com/erebe/greenclip
|
||||
COMMANDS[""]='rofi -modi "clipboard:greenclip print" -show Clipboard'
|
||||
LABELS[""]="Clipboard"
|
||||
|
||||
COMMANDS[""]='moonarch-vpn'
|
||||
LABELS[""]='VPN Connection Manager'
|
||||
|
||||
COMMANDS[""]='moonarch-volume'
|
||||
LABELS[""]='Sound Manager'
|
||||
|
||||
#COMMANDS[""]='shortcuts module was removed'
|
||||
#LABELS[""]='Hotkey List'
|
||||
|
||||
COMMANDS[""]='wdisplays'
|
||||
LABELS[""]='Display Setup'
|
||||
|
||||
COMMANDS[""]='nwg-look'
|
||||
LABELS[""]='Appearance Settings'
|
||||
|
||||
COMMANDS[""]='noisetorch'
|
||||
LABELS[""]='Audio Noise Reduction'
|
||||
|
||||
COMMANDS[""]='$HOME/.local/share/headset-charge-indicator/headset-charge-indicator.py &'
|
||||
LABELS[""]='Headset Control'
|
||||
|
||||
COMMANDS[""]='moonarch-bluetooth'
|
||||
LABELS[""]='Bluetooth Control'
|
||||
|
||||
COMMANDS[""]='nm-applet --indicator &'
|
||||
LABELS[""]='Networker Manager'
|
||||
|
||||
COMMANDS[""]='wl-color-picker'
|
||||
LABELS[""]='Color Picker'
|
||||
|
||||
COMMANDS[""]='font-manager'
|
||||
LABELS[""]='Font Manager'
|
||||
|
||||
COMMANDS[""]='gufw'
|
||||
LABELS[""]='Firewall Settings'
|
||||
|
||||
COMMANDS[""]='stacer'
|
||||
LABELS[" "]='System Maintenance'
|
||||
|
||||
|
||||
################################################################################
|
||||
# do not edit below
|
||||
################################################################################
|
||||
##
|
||||
# Generate menu
|
||||
##
|
||||
function print_menu()
|
||||
{
|
||||
for key in ${!LABELS[@]}
|
||||
do
|
||||
# echo "$key ${LABELS}"
|
||||
echo "$key ${LABELS[$key]}"
|
||||
# my top version just shows the first field in labels row, not two words side by side
|
||||
done
|
||||
}
|
||||
##
|
||||
# Show rofi.
|
||||
##
|
||||
function start()
|
||||
{
|
||||
# print_menu | rofi -dmenu -p "?=>"
|
||||
print_menu | sort | rofi -show "Tools" -dmenu -mesg " Tools" -i -p "rofi-bangs: "
|
||||
}
|
||||
|
||||
|
||||
# Run it
|
||||
value="$(start)"
|
||||
|
||||
# Split input.
|
||||
# grab upto first space.
|
||||
choice=${value%%\ *}
|
||||
# graph remainder, minus space.
|
||||
input=${value:$((${#choice}+1))}
|
||||
|
||||
##
|
||||
# Cancelled? bail out
|
||||
##
|
||||
if test -z ${choice}
|
||||
then
|
||||
exit
|
||||
fi
|
||||
|
||||
# check if choice exists
|
||||
if test ${COMMANDS[$choice]+isset}
|
||||
then
|
||||
# Execute the choice
|
||||
${COMMANDS[$choice]}
|
||||
else
|
||||
echo "Unknown command: ${choice}" | rofi -dmenu -p "error"
|
||||
fi
|
||||
314
defaults/bin/moonarch-bluetooth
Executable file
314
defaults/bin/moonarch-bluetooth
Executable file
@ -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/bluetooth/bluetooth.rasi -mesg -Bluetooth-Control"
|
||||
|
||||
case "$1" in
|
||||
--status)
|
||||
print_status
|
||||
;;
|
||||
*)
|
||||
show_menu
|
||||
;;
|
||||
esac
|
||||
19
defaults/bin/moonarch-btnote
Executable file
19
defaults/bin/moonarch-btnote
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
# ABOUTME: Prüft Bluetooth-Geräte auf niedrigen Akkustand und sendet Notification.
|
||||
# ABOUTME: Kann per Timer oder Cron regelmäßig ausgeführt werden.
|
||||
|
||||
NOTIFY_AT_PERCENTAGE=70
|
||||
ICON="/usr/share/icons/Newaita-reborn/status/symbolic/battery-empty-symbolic.svg"
|
||||
|
||||
for d in $(upower -e); do
|
||||
DEVICE_DATA=$(upower -i "$d")
|
||||
PERCENTAGE=$(echo $DEVICE_DATA | grep -Po '(?<=(percentage: )).*(?= icon)')
|
||||
PER_INT=$(echo "${PERCENTAGE//%}")
|
||||
DEVICE_NAME=$(echo $DEVICE_DATA | grep -Po '(?<=(model: )).*(?= serial)')
|
||||
|
||||
if [ ! -z "$DEVICE_NAME" ] && [ "$PER_INT" -lt "$NOTIFY_AT_PERCENTAGE" ]; then
|
||||
notify-send -t 5000 -e "Low battery $DEVICE_NAME $PER_INT%" -i "$ICON" \
|
||||
-h string:x-canonical-private-synchronous:battery \
|
||||
-h int:value:"$PER_INT" -u critical
|
||||
fi
|
||||
done
|
||||
98
defaults/bin/moonarch-calendar
Executable file
98
defaults/bin/moonarch-calendar
Executable file
@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Rofi-based calendar widget with month navigation.
|
||||
# ABOUTME: Displays a calendar grid and highlights the current day.
|
||||
|
||||
DIR=$(dirname $PWD)
|
||||
|
||||
current_day=$(date +"%e")
|
||||
current_month=$(date +"%m")
|
||||
current_year=$(date +"%Y")
|
||||
|
||||
month=$(date +"%-m")
|
||||
year=$(date +"%Y")
|
||||
previous_month="◀"
|
||||
next_month="▶"
|
||||
last_selected_option=""
|
||||
|
||||
format_calendar () {
|
||||
echo "$1" \
|
||||
| sed -E 's/([[:alpha:]])__/\1\n/g' \
|
||||
| sed -E 's/___([[:digit:]])/.\n\1/g' \
|
||||
| sed -e 's/___/\n./g' \
|
||||
| sed -e 's/__/\n/g' \
|
||||
| sed -e 's/_/\n/g'
|
||||
}
|
||||
|
||||
print_month() {
|
||||
calendar="$(cal -v -- $1 $2 | tail -n +2 | sed -e 's/ /_/g')"
|
||||
echo "$(format_calendar "$calendar")"
|
||||
}
|
||||
|
||||
find_day_index() {
|
||||
index=0
|
||||
while IFS=' ' read -ra arr; do
|
||||
for i in "${arr[@]}"; do
|
||||
if [[ "$i" == "$2" ]]; then
|
||||
echo "$index"
|
||||
break
|
||||
fi
|
||||
((index++))
|
||||
done
|
||||
done <<< "$1"
|
||||
}
|
||||
|
||||
calendar_menu() {
|
||||
calendar_header=$(cal -v -- $month $year | head -n 1)
|
||||
|
||||
month_page="$(print_month $month $year)"
|
||||
calendar_body="\n\n\n$previous_month\n\n\n\n$month_page\n\n\n\n$next_month\n\n\n"
|
||||
|
||||
previous_month_index="3"
|
||||
next_month_index="59"
|
||||
calendar_body_column="7"
|
||||
urgent="-u $previous_month_index,$next_month_index"
|
||||
active=""
|
||||
selected_row=""
|
||||
|
||||
if [[ "$(echo $current_month | bc) $current_year" == "$(echo $month | bc) $year" ]]; then
|
||||
current_day_index=$(($(find_day_index "$month_page" $current_day) + $calendar_body_column))
|
||||
active="-a $current_day_index"
|
||||
selected_row="-selected-row $current_day_index"
|
||||
fi
|
||||
|
||||
if [[ $last_selected_option == $previous_month ]]; then
|
||||
selected_row="-selected-row $previous_month_index"
|
||||
fi
|
||||
|
||||
if [[ $last_selected_option == $next_month ]]; then
|
||||
selected_row="-selected-row $next_month_index"
|
||||
fi
|
||||
|
||||
echo -e "$calendar_body" | rofi -dmenu \
|
||||
-theme /etc/xdg/rofi/calendar/rofi-calendar.rasi \
|
||||
-p "$calendar_header" $urgent $active $selected_row
|
||||
}
|
||||
|
||||
while [[ true ]]; do
|
||||
selected=$(calendar_menu)
|
||||
last_selected_option="$selected"
|
||||
case $selected in
|
||||
$previous_month)
|
||||
((month--))
|
||||
if [[ $month -lt 1 ]]; then
|
||||
month=12
|
||||
((year--))
|
||||
fi
|
||||
;;
|
||||
$next_month)
|
||||
((month++))
|
||||
if [[ $month -gt 12 ]]; then
|
||||
month=1
|
||||
((year++))
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
19
defaults/bin/moonarch-capsnote
Executable file
19
defaults/bin/moonarch-capsnote
Executable file
@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Zeigt eine Notification beim Umschalten von Caps Lock an.
|
||||
# ABOUTME: Gedacht für Keybinding oder Input-Event-Trigger.
|
||||
|
||||
sleep 0.2
|
||||
|
||||
value=($(cat /sys/class/leds/input*::capslock/brightness | cut -f1 -d,))
|
||||
|
||||
if [ ${value[2]} == 1 ]; then
|
||||
icon_name="capslock-enabled-symbolic"
|
||||
output="caps lock on"
|
||||
else
|
||||
icon_name="capslock-disabled-symbolic"
|
||||
output="caps lock off"
|
||||
fi
|
||||
|
||||
notify-send -e "$output" -i "$icon_name" \
|
||||
-h string:x-canonical-private-synchronous:state \
|
||||
-h boolean:value:"${value[2]}" -r 555
|
||||
72
defaults/bin/moonarch-cpugov
Executable file
72
defaults/bin/moonarch-cpugov
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Rofi-based CPU governor switcher using auto-cpufreq.
|
||||
# ABOUTME: Allows switching between performance, powersave, and reset modes.
|
||||
|
||||
declare -A LABELS
|
||||
declare -A COMMANDS
|
||||
|
||||
###
|
||||
# List of defined 'bangs'
|
||||
|
||||
COMMANDS[""]="pkexec auto-cpufreq --force=performance"
|
||||
LABELS[""]="Performance"
|
||||
|
||||
COMMANDS[""]='pkexec auto-cpufreq --force=powersave'
|
||||
LABELS[""]="Powersave"
|
||||
|
||||
COMMANDS[""]='pkexec auto-cpufreq --force=reset'
|
||||
LABELS[""]="Reset"
|
||||
|
||||
|
||||
################################################################################
|
||||
# do not edit below
|
||||
################################################################################
|
||||
##
|
||||
# Generate menu
|
||||
##
|
||||
function print_menu()
|
||||
{
|
||||
for key in ${!LABELS[@]}
|
||||
do
|
||||
# echo "$key ${LABELS}"
|
||||
echo "$key ${LABELS[$key]}"
|
||||
# my top version just shows the first field in labels row, not two words side by side
|
||||
done
|
||||
}
|
||||
##
|
||||
# Show rofi.
|
||||
##
|
||||
function start()
|
||||
{
|
||||
# print_menu | rofi -dmenu -p "?=>"
|
||||
print_menu | sort | rofi -theme /etc/xdg/rofi/cpugov/rofi-cpugov.rasi -show "CPU Modes" -dmenu -mesg " CPU Modes" -i -p "rofi-bangs: "
|
||||
}
|
||||
|
||||
|
||||
# Run it
|
||||
value="$(start)"
|
||||
|
||||
# Split input.
|
||||
# grab upto first space.
|
||||
choice=${value%%\ *}
|
||||
# graph remainder, minus space.
|
||||
input=${value:$((${#choice}+1))}
|
||||
|
||||
##
|
||||
# Cancelled? bail out
|
||||
##
|
||||
if test -z ${choice}
|
||||
then
|
||||
exit
|
||||
fi
|
||||
|
||||
# check if choice exists
|
||||
if test ${COMMANDS[$choice]+isset}
|
||||
then
|
||||
# Execute the choice
|
||||
${COMMANDS[$choice]}
|
||||
|
||||
dunstify --replace 553 -i "/usr/share/icons/zafiro-dark/devices/48/cpu.svg" "CPU Mode" "Set to $choice ${LABELS[$choice]}"
|
||||
else
|
||||
echo "Unknown command: ${choice}" | rofi -dmenu -p "error"
|
||||
fi
|
||||
26
defaults/bin/moonarch-dnd
Executable file
26
defaults/bin/moonarch-dnd
Executable file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Waybar-Modul das den DND-Status von dunst als JSON ausgibt.
|
||||
# ABOUTME: Wird von der Waybar custom/dnd Config referenziert.
|
||||
set -euo pipefail
|
||||
|
||||
readonly ENABLED=''
|
||||
readonly DISABLED=''
|
||||
|
||||
dbus-monitor path='/org/freedesktop/Notifications',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged' --profile |
|
||||
while read -r _; do
|
||||
PAUSED="$(dunstctl is-paused)"
|
||||
if [ "$PAUSED" == 'false' ]; then
|
||||
CLASS="enabled"
|
||||
TEXT="$ENABLED"
|
||||
TOOLTIP="Notifications are on"
|
||||
else
|
||||
CLASS="disabled"
|
||||
TEXT="$DISABLED"
|
||||
TOOLTIP="Notifications are off"
|
||||
COUNT="$(dunstctl count waiting)"
|
||||
if [ "$COUNT" != '0' ]; then
|
||||
TEXT="$DISABLED ($COUNT)"
|
||||
fi
|
||||
fi
|
||||
printf '{"text": "%s", "class": "%s", "tooltip": "%s"}\n' "$TEXT" "$CLASS" "$TOOLTIP"
|
||||
done
|
||||
14
defaults/bin/moonarch-emojis
Executable file
14
defaults/bin/moonarch-emojis
Executable file
@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
# ABOUTME: Rofi emoji picker that copies selected emoji to clipboard.
|
||||
# ABOUTME: Reads emoji list from /etc/xdg/rofi/emojis/emojis.txt.
|
||||
|
||||
FILE="/etc/xdg/rofi/emojis/emojis.txt"
|
||||
|
||||
if [ "$@" ]
|
||||
then
|
||||
smiley=$(echo $@ | cut -d' ' -f1)
|
||||
echo -n "$smiley" | xsel -bi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
cat $FILE
|
||||
63
defaults/bin/moonarch-gtk-style
Executable file
63
defaults/bin/moonarch-gtk-style
Executable file
@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python3
|
||||
# ABOUTME: Converts GTK theme colors to rofi-compatible CSS color values.
|
||||
# ABOUTME: Reads a template file and replaces {@theme_*_color} placeholders with hex values.
|
||||
|
||||
# https://github.com/Git-Fal7/gtk-rofi/
|
||||
# Taken from MATE-HUD github.com/ubuntu-mate/mate-hud
|
||||
# Used for rofi css
|
||||
|
||||
# Usage
|
||||
# ./moonarch-gtk-style [input file] > [output file]
|
||||
|
||||
# examples
|
||||
# background-color: {@theme_bg_color}
|
||||
|
||||
# see the array below for list of style context to use
|
||||
|
||||
import sys
|
||||
|
||||
if len(sys.argv)<2:
|
||||
sys.exit(1)
|
||||
|
||||
import gi
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gio, GLib, Gtk
|
||||
|
||||
#Converts from rgba <GTK R, G, B> to hex #RRGGBB
|
||||
def rgba_to_hex(color):
|
||||
return "#{0:02x}{1:02x}{2:02x}".format( int(color.red * 255), int(color.green * 255), int(color.blue * 255))
|
||||
|
||||
window = Gtk.Window()
|
||||
style_context = window.get_style_context()
|
||||
|
||||
#List of style contexts
|
||||
lists = [
|
||||
#Foreground
|
||||
'theme_fg_color', 'theme_selected_fg_color', 'theme_fg_color',
|
||||
'warning_fg_color', 'info_fg_color',
|
||||
#Background
|
||||
'theme_bg_color', 'theme_selected_bg_color', 'error_bg_color',
|
||||
'warning_bg_color', 'info_bg_color',
|
||||
#Others
|
||||
'theme_unfocused_fg_color', 'theme_text_color',
|
||||
'theme_unfocused_text_color',
|
||||
'theme_base_color',
|
||||
'theme_unfocused_fg_color',
|
||||
'theme_unfocused_text_color',
|
||||
'theme_unfocused_bg_color',
|
||||
'theme_unfocused_base_color',
|
||||
'theme_unfocused_selected_bg_color',
|
||||
'theme_unfocused_selected_fg_color',
|
||||
'unfocused_insensitive_color',
|
||||
'borders',
|
||||
'unfocused_borders',
|
||||
'warning_color',
|
||||
'error_color',
|
||||
'success_color'
|
||||
]
|
||||
|
||||
with open(sys.argv[1]) as f:
|
||||
file=f.read()
|
||||
for style in lists:
|
||||
file=file.replace("{@" + style + "}", rgba_to_hex(style_context.lookup_color(style)[1]))
|
||||
print(file)
|
||||
52
defaults/bin/moonarch-json
Executable file
52
defaults/bin/moonarch-json
Executable file
@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
# ABOUTME: Rofi helper that reads a JSON config file to build a dynamic menu.
|
||||
# ABOUTME: Parses name/command/icon fields from JSON and launches selected entries.
|
||||
|
||||
#https://github.com/luiscrjunior/rofi-json
|
||||
|
||||
user_file="${1/#\~/$HOME}"
|
||||
|
||||
if [[ "$user_file" = /* ]]
|
||||
then
|
||||
config_file="$user_file"
|
||||
else
|
||||
cwd=$(dirname $0)
|
||||
config_file="${cwd}/${user_file}"
|
||||
fi
|
||||
|
||||
json=$(cat ${config_file})
|
||||
|
||||
if [ $# -eq 1 ]; then
|
||||
echo $json | jq -cr '.[] | "\(.name)|\(.command)|\(.icon)"' |
|
||||
while IFS="|" read -r name command icon
|
||||
do
|
||||
if [[ $name == "null" ]]; then
|
||||
continue
|
||||
fi
|
||||
if [[ $icon == "null" ]]; then
|
||||
icon="system-run"
|
||||
fi
|
||||
echo -en "${name}\0icon\x1f${icon}\n"
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $# -eq 2 ]; then
|
||||
|
||||
selected=$2
|
||||
task=$(echo $json | jq ".[] | select(.name == \"$selected\")")
|
||||
|
||||
if [[ $task == "" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
command=$(echo $task | jq -j ".command")
|
||||
|
||||
if [[ $command == "null" ]]; then
|
||||
command=$(echo $task | jq -j ".name")
|
||||
fi
|
||||
|
||||
coproc bash -c "$command"
|
||||
exit
|
||||
|
||||
fi
|
||||
41
defaults/bin/moonarch-launcher
Executable file
41
defaults/bin/moonarch-launcher
Executable file
@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Application launcher using rofi with GTK theme integration.
|
||||
# ABOUTME: Supports window, files, run, and drun modes.
|
||||
|
||||
SETTINGS=/etc/xdg/rofi/gtk-theme.ini
|
||||
|
||||
#Gets the current gtk using gsettings and removes the quotes
|
||||
CURRENT_GTK_THEME=$(gsettings get org.gnome.desktop.interface gtk-theme)
|
||||
CURRENT_GTK_THEME="${CURRENT_GTK_THEME#?}"
|
||||
CURRENT_GTK_THEME="${CURRENT_GTK_THEME%?}"
|
||||
|
||||
#Gets the gtk theme that is in the settings.ini file
|
||||
SETTINGS_GTK_THEME=$(grep "GTK_THEME" "${SETTINGS}" | cut -b 11-)
|
||||
|
||||
#create new colors.rasi from template
|
||||
if [ "${SETTINGS_GTK_THEME}" != "${CURRENT_GTK_THEME}" ]; then
|
||||
sed -i "s:GTK_THEME=${SETTINGS_GTK_THEME}:GTK_THEME=${CURRENT_GTK_THEME}:g" "${SETTINGS}"
|
||||
|
||||
python3 moonarch-gtk-style /etc/xdg/rofi/_template/colors.rasi > /etc/xdg/rofi/colors.rasi
|
||||
fi
|
||||
|
||||
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/launcher/launcher.rasi
|
||||
9
defaults/bin/moonarch-locate
Executable file
9
defaults/bin/moonarch-locate
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
# ABOUTME: Rofi-based file search using the locate/mlocate database.
|
||||
# ABOUTME: Opens selected files with xdg-open.
|
||||
|
||||
# info: rofi-locate is a script to search local files and folders on your computer using the locate command and the updatedb database
|
||||
# requirements: rofi mlocate
|
||||
# playlist: rofi https://www.youtube.com/playlist?list=PLqv94xWU9zZ0LVP1SEFQsLEYjZC_SUB3m
|
||||
|
||||
xdg-open "$(locate home media | rofi -threads 0 -width 100 -dmenu -i -p "locate:")"
|
||||
84
defaults/bin/moonarch-powermenu
Executable file
84
defaults/bin/moonarch-powermenu
Executable file
@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Rofi-basiertes Power-Menü für Moonarch (Niri).
|
||||
# ABOUTME: Bietet Shutdown, Reboot, Lock, Suspend und Logout.
|
||||
|
||||
# CMDs
|
||||
uptime="`uptime -p | sed -e 's/up //g'`"
|
||||
host="$USER@"`hostname`
|
||||
|
||||
# Options
|
||||
shutdown=''
|
||||
reboot=''
|
||||
lock=''
|
||||
suspend=''
|
||||
logout=''
|
||||
yes=''
|
||||
no=''
|
||||
|
||||
# Rofi CMD
|
||||
rofi_cmd() {
|
||||
rofi -dmenu \
|
||||
-p "$host uptime: $uptime" \
|
||||
-mesg "$host uptime: $uptime" \
|
||||
-theme /etc/xdg/rofi/powermenu/powermenu.rasi
|
||||
}
|
||||
|
||||
# Confirmation CMD
|
||||
confirm_cmd() {
|
||||
rofi -dmenu \
|
||||
-p 'Confirmation' \
|
||||
-normal-window \
|
||||
-mesg 'Confirm '${chosen} \
|
||||
-theme /etc/xdg/rofi/powermenu/confirm.rasi
|
||||
}
|
||||
|
||||
# Ask for confirmation
|
||||
confirm_exit() {
|
||||
echo -e "$yes\n$no" | confirm_cmd ${chosen}
|
||||
}
|
||||
|
||||
# Pass variables to rofi dmenu
|
||||
run_rofi() {
|
||||
echo -e "$lock\n$suspend\n$logout\n$reboot\n$shutdown" | rofi_cmd
|
||||
}
|
||||
|
||||
# Execute Command
|
||||
run_cmd() {
|
||||
selected="$(confirm_exit)"
|
||||
if [[ "$selected" == "$yes" ]]; then
|
||||
if [[ $1 == '--shutdown' ]]; then
|
||||
systemctl poweroff
|
||||
elif [[ $1 == '--reboot' ]]; then
|
||||
systemctl reboot
|
||||
elif [[ $1 == '--suspend' ]]; then
|
||||
mpc -q pause
|
||||
amixer set Master mute
|
||||
systemctl suspend
|
||||
elif [[ $1 == '--logout' ]]; then
|
||||
niri msg action quit
|
||||
fi
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
# Actions
|
||||
chosen="$(run_rofi)"
|
||||
case ${chosen} in
|
||||
$shutdown)
|
||||
run_cmd --shutdown
|
||||
;;
|
||||
$reboot)
|
||||
run_cmd --reboot
|
||||
;;
|
||||
$lock)
|
||||
killall rofi
|
||||
wlogout -P 1 -s -r 10 -c 10
|
||||
;;
|
||||
$suspend)
|
||||
run_cmd --suspend
|
||||
;;
|
||||
$logout)
|
||||
run_cmd --logout
|
||||
;;
|
||||
esac
|
||||
66
defaults/bin/moonarch-setmen
Executable file
66
defaults/bin/moonarch-setmen
Executable file
@ -0,0 +1,66 @@
|
||||
#!/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/settings-menu/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
|
||||
135
defaults/bin/moonarch-settings
Executable file
135
defaults/bin/moonarch-settings
Executable file
@ -0,0 +1,135 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Rofi-based settings menu that launches various system tools and scripts.
|
||||
# ABOUTME: Provides a searchable list of system utilities like VPN, sound, bluetooth, etc.
|
||||
|
||||
declare -A LABELS
|
||||
declare -A COMMANDS
|
||||
|
||||
###
|
||||
# List of defined 'bangs'
|
||||
|
||||
# launch programs
|
||||
# COMMANDS["apps"]="rofi -combi-modi window,drun -show combi"
|
||||
# LABELS["apps"]=""
|
||||
|
||||
# open bookmarks
|
||||
# COMMANDS["bookmarks"]="~/.scripts/rofi-scripts-collection/rofi-surfraw-bookmarks.sh"
|
||||
# LABELS["bookmarks"]=""
|
||||
|
||||
# search local files
|
||||
# COMMANDS[""]="moonarch-locate"
|
||||
# LABELS[""]="Locate"
|
||||
|
||||
COMMANDS[""]="wlogout -P 1 -s -r 10 -c 10"
|
||||
LABELS[""]="Session Menu"
|
||||
|
||||
# greenclip clipboard history
|
||||
# source: https://github.com/erebe/greenclip
|
||||
COMMANDS[""]='cliphist -db-path /run/user/1000/cliphist/db list | rofi -dmenu | cliphist -db-path /run/user/1000/cliphist/db decode | wl-copy'
|
||||
LABELS[""]="Clipboard"
|
||||
|
||||
COMMANDS[""]='moonarch-vpn'
|
||||
LABELS[""]='VPN Connection Manager'
|
||||
|
||||
COMMANDS[""]='waypaper'
|
||||
LABELS[""]='Wallpaper Settings'
|
||||
|
||||
COMMANDS[""]='moonarch-volume'
|
||||
LABELS[""]='Sound Manager'
|
||||
|
||||
#COMMANDS[""]='shortcuts module was removed'
|
||||
#LABELS[""]='Hotkey List'
|
||||
|
||||
COMMANDS[""]='wdisplays'
|
||||
LABELS[""]='Display Setup'
|
||||
|
||||
COMMANDS[""]='nwg-look'
|
||||
LABELS[""]='Appearance Settings'
|
||||
|
||||
COMMANDS[""]='noisetorch'
|
||||
LABELS[""]='Audio Noise Reduction'
|
||||
|
||||
COMMANDS[""]='$HOME/.local/share/headset-charge-indicator/headset-charge-indicator.py &'
|
||||
LABELS[""]='Headset Control'
|
||||
|
||||
COMMANDS[""]='moonarch-bluetooth'
|
||||
LABELS[""]='Bluetooth Control'
|
||||
|
||||
COMMANDS[""]='nm-applet --indicator &'
|
||||
LABELS[""]='Networker Manager'
|
||||
|
||||
COMMANDS[""]='wl-color-picker'
|
||||
LABELS[""]='Color Picker'
|
||||
|
||||
COMMANDS[""]='font-manager'
|
||||
LABELS[""]='Font Manager'
|
||||
|
||||
COMMANDS[""]='gufw'
|
||||
LABELS[""]='Firewall Settings'
|
||||
|
||||
COMMANDS[""]='env GTK_THEME=Adwaita:dark resources'
|
||||
LABELS[""]='System Resources'
|
||||
|
||||
COMMANDS[""]='moonarch-cpugov'
|
||||
LABELS[""]='CPU Modes'
|
||||
|
||||
COMMANDS[""]='hardinfo'
|
||||
LABELS[""]='System Profiler and Benchmark'
|
||||
|
||||
COMMANDS[""]='alarm-clock-applet'
|
||||
LABELS[""]='Alarm & Timer'
|
||||
|
||||
COMMANDS[""]='moonarch-launcher'
|
||||
LABELS[""]='App Launcher'
|
||||
|
||||
################################################################################
|
||||
# do not edit below
|
||||
################################################################################
|
||||
##
|
||||
# Generate menu
|
||||
##
|
||||
function print_menu()
|
||||
{
|
||||
for key in ${!LABELS[@]}
|
||||
do
|
||||
# echo "$key ${LABELS}"
|
||||
echo "$key ${LABELS[$key]}"
|
||||
# my top version just shows the first field in labels row, not two words side by side
|
||||
done
|
||||
}
|
||||
##
|
||||
# Show rofi.
|
||||
##
|
||||
function start()
|
||||
{
|
||||
# print_menu | rofi -dmenu -p "?=>"
|
||||
title="MoonArch \ $USER \ $(date +"%H:%M") \ $(uptime -p | sed 's/up //')"
|
||||
print_menu | sort | rofi -theme /etc/xdg/rofi/settings-menu/settings-menu.rasi -show $title -dmenu -markup-rows -mesg " $title" -i -p "rofi-bangs: "
|
||||
}
|
||||
|
||||
|
||||
# Run it
|
||||
value="$(start)"
|
||||
|
||||
# Split input.
|
||||
# grab upto first space.
|
||||
choice=${value%%\ *}
|
||||
# graph remainder, minus space.
|
||||
input=${value:$((${#choice}+1))}
|
||||
|
||||
##
|
||||
# Cancelled? bail out
|
||||
##
|
||||
if test -z ${choice}
|
||||
then
|
||||
exit
|
||||
fi
|
||||
|
||||
# check if choice exists
|
||||
if test ${COMMANDS[$choice]+isset}
|
||||
then
|
||||
# Execute the choice
|
||||
${COMMANDS[$choice]}
|
||||
else
|
||||
echo "Unknown command: ${choice}" | rofi -dmenu -p "error"
|
||||
fi
|
||||
16
defaults/bin/moonarch-sink-switcher
Executable file
16
defaults/bin/moonarch-sink-switcher
Executable file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/bash
|
||||
# ABOUTME: Rofi-based PulseAudio sink switcher using ponymix.
|
||||
# ABOUTME: Changes the default sink and moves all active streams to it.
|
||||
|
||||
# choose pulseaudio sink via rofi or dmenu
|
||||
# changes default sink and moves all streams to that sink
|
||||
#https://gist.github.com/Nervengift/844a597104631c36513c?permalink_comment_id=1826282
|
||||
|
||||
sink=$(ponymix -t sink list|awk '/^sink/ {s=$1" "$2;getline;gsub(/^ +/,"",$0);print s" "$0}'|rofi -dmenu -theme '/etc/xdg/rofi/volume/volume.rasi' -mesg ' Sink Switcher' -p 'pulseaudio sink:' -location 6 -width 100|grep -Po '[0-9]+(?=:)') &&
|
||||
|
||||
|
||||
ponymix set-default -d $sink &&
|
||||
for input in $(ponymix list -t sink-input|grep -Po '[0-9]+(?=:)');do
|
||||
echo "$input -> $sink"
|
||||
ponymix -t sink-input -d $input move $sink
|
||||
done
|
||||
142
defaults/bin/moonarch-ssh
Executable file
142
defaults/bin/moonarch-ssh
Executable file
@ -0,0 +1,142 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Rofi-based tool launcher with SSH and system utility shortcuts.
|
||||
# ABOUTME: Provides a searchable menu of tools including VPN, sound, bluetooth, etc.
|
||||
|
||||
declare -A LABELS
|
||||
declare -A COMMANDS
|
||||
|
||||
###
|
||||
# List of defined 'bangs'
|
||||
|
||||
# launch programs
|
||||
# COMMANDS["apps"]="rofi -combi-modi window,drun -show combi"
|
||||
# LABELS["apps"]=""
|
||||
|
||||
# open bookmarks
|
||||
# COMMANDS["bookmarks"]="~/.scripts/rofi-scripts-collection/rofi-surfraw-bookmarks.sh"
|
||||
# LABELS["bookmarks"]=""
|
||||
|
||||
# search local files
|
||||
COMMANDS[""]="moonarch-locate"
|
||||
LABELS[""]="Locate"
|
||||
|
||||
# open custom web searches
|
||||
# COMMANDS["websearch"]="~/.scripts/rofi-scripts-collection/rofi-surfraw-websearch.sh"
|
||||
# LABELS["websearch"]=""
|
||||
|
||||
# show clipboard history
|
||||
# source: https://bitbucket.org/pandozer/rofi-clipboard-manager/overview
|
||||
# COMMANDS["clipboard"]='rofi -modi "clipboard:~/.bin/rofi-clipboard-manager/mclip.py menu" -show clipboard && ~/.bin/rofi-clipboard-manager/mclip.py paste'
|
||||
# LABELS["clipboard"]=""
|
||||
|
||||
# references --------------------------
|
||||
# COMMANDS[";sr2"]="chromium 'wikipedia.org/search-redirect.php?search=\" \${input}\""
|
||||
# LABELS[";sr2"]=""
|
||||
|
||||
# COMMANDS[";piratebay"]="chromium --disk-cache-dir=/tmp/cache http://thepiratebay.org/search/\" \${input}\""
|
||||
# LABELS[";piratebay"]=""
|
||||
|
||||
# COMMANDS[".bin"]="spacefm -r '/home/dka/bin'"
|
||||
# LABELS[".bin"]=".bin"
|
||||
|
||||
# COMMANDS["#screenshot"]='/home/dka/bin/screenshot-scripts/myscreenshot.sh'
|
||||
# LABELS["#screenshot"]="screenshot"
|
||||
|
||||
# greenclip clipboard history
|
||||
# source: https://github.com/erebe/greenclip
|
||||
COMMANDS[""]='rofi -modi "clipboard:greenclip print" -show Clipboard'
|
||||
LABELS[""]="Clipboard"
|
||||
|
||||
COMMANDS[""]='moonarch-vpn'
|
||||
LABELS[""]='VPN Connection Manager'
|
||||
|
||||
COMMANDS[""]='moonarch-volume'
|
||||
LABELS[""]='Sound Manager'
|
||||
|
||||
#COMMANDS[""]='shortcuts module was removed'
|
||||
#LABELS[""]='Hotkey List'
|
||||
|
||||
COMMANDS[""]='wlogout'
|
||||
LABELS[""]='Session Menu'
|
||||
|
||||
COMMANDS[""]='wdisplays'
|
||||
LABELS[""]='Display Setup'
|
||||
|
||||
COMMANDS[""]='nwg-look'
|
||||
LABELS[""]='Appearance Settings'
|
||||
|
||||
COMMANDS[""]='noisetorch'
|
||||
LABELS[""]='Audio Noise Reduction'
|
||||
|
||||
COMMANDS[""]='$HOME/.local/share/headset-charge-indicator/headset-charge-indicator.py &'
|
||||
LABELS[""]='Headset Control'
|
||||
|
||||
COMMANDS[""]='moonarch-bluetooth'
|
||||
LABELS[""]='Bluetooth Control'
|
||||
|
||||
COMMANDS[""]='nm-applet --indicator &'
|
||||
LABELS[""]='Networker Manager'
|
||||
|
||||
COMMANDS[""]='wl-color-picker'
|
||||
LABELS[""]='Color Picker'
|
||||
|
||||
COMMANDS[""]='font-manager'
|
||||
LABELS[""]='Font Manager'
|
||||
|
||||
COMMANDS[""]='gufw'
|
||||
LABELS[""]='Firewall Settings'
|
||||
|
||||
COMMANDS[""]='stacer'
|
||||
LABELS[" "]='System Maintenance'
|
||||
|
||||
|
||||
################################################################################
|
||||
# do not edit below
|
||||
################################################################################
|
||||
##
|
||||
# Generate menu
|
||||
##
|
||||
function print_menu()
|
||||
{
|
||||
for key in ${!LABELS[@]}
|
||||
do
|
||||
# echo "$key ${LABELS}"
|
||||
echo "$key ${LABELS[$key]}"
|
||||
# my top version just shows the first field in labels row, not two words side by side
|
||||
done
|
||||
}
|
||||
##
|
||||
# Show rofi.
|
||||
##
|
||||
function start()
|
||||
{
|
||||
# print_menu | rofi -dmenu -p "?=>"
|
||||
print_menu | sort | rofi -show "Tools" -dmenu -mesg " Tools" -i -p "rofi-bangs: "
|
||||
}
|
||||
|
||||
|
||||
# Run it
|
||||
value="$(start)"
|
||||
|
||||
# Split input.
|
||||
# grab upto first space.
|
||||
choice=${value%%\ *}
|
||||
# graph remainder, minus space.
|
||||
input=${value:$((${#choice}+1))}
|
||||
|
||||
##
|
||||
# Cancelled? bail out
|
||||
##
|
||||
if test -z ${choice}
|
||||
then
|
||||
exit
|
||||
fi
|
||||
|
||||
# check if choice exists
|
||||
if test ${COMMANDS[$choice]+isset}
|
||||
then
|
||||
# Execute the choice
|
||||
${COMMANDS[$choice]}
|
||||
else
|
||||
echo "Unknown command: ${choice}" | rofi -dmenu -p "error"
|
||||
fi
|
||||
122
defaults/bin/moonarch-volume
Executable file
122
defaults/bin/moonarch-volume
Executable file
@ -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/volume/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=$(ponymix defaults|awk '/^sink/ {s=$1" "$2;getline;gsub(/^ +/,"",$0);print s" "$0}' | cut -d':' -f2)
|
||||
currentsource=$(ponymix defaults|awk '/^source/ {s=$1" "$2;getline;gsub(/^ +/,"",$0);print s" "$0}' | cut -d':' -f2)
|
||||
|
||||
|
||||
# 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
|
||||
101
defaults/bin/moonarch-vpn
Executable file
101
defaults/bin/moonarch-vpn
Executable file
@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env bash
|
||||
# ABOUTME: Rofi-based VPN connection manager using NetworkManager (nmcli).
|
||||
# ABOUTME: Lists VPN connections and toggles them on/off.
|
||||
|
||||
# Copyright (C) 2021 Damien Cassou
|
||||
|
||||
# Author: Damien Cassou <damien@cassou.me>
|
||||
# Url: https://gitlab.com/DamienCassou/rofi-vpn
|
||||
# Version: 0.2.0
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Commentary:
|
||||
|
||||
# This program uses rofi and nmcli to let the user enable/disable VPN
|
||||
# connections.
|
||||
|
||||
# Code:
|
||||
|
||||
# What to show in front of an active VPN connection:
|
||||
ACTIVE_PREFIX=" "
|
||||
|
||||
# What to show in front of an inactive VPN connection:
|
||||
INACTIVE_PREFIX=" "
|
||||
|
||||
# Display on standard output all VPN connections, one per line. An
|
||||
# active VPN connection is prefixed with `ACTIVE_PREFIX` and an inactive
|
||||
# one is prefixed with `INACTIVE_PREFIX`.
|
||||
function list_vpn_connections() {
|
||||
nmcli --get-values ACTIVE,NAME,TYPE connection show \
|
||||
| grep ':vpn$' \
|
||||
| sed \
|
||||
-e "s/^no:/${INACTIVE_PREFIX}/" \
|
||||
-e "s/^yes:/${ACTIVE_PREFIX}/" \
|
||||
-e 's/:vpn$//'
|
||||
}
|
||||
|
||||
# Take a line as displayed by `list_vpn_connections()` as argument and
|
||||
# use nmcli to toggle the corresponding connection.
|
||||
function toggle_vpn_connection() {
|
||||
local result="$1"
|
||||
local connection
|
||||
|
||||
connection=$(extract_connection_name_from_result "${result}")
|
||||
|
||||
if [[ $result = ${ACTIVE_PREFIX}* ]]; then
|
||||
feedback=$(nmcli connection down "$connection")
|
||||
notify-send "VPN Status '$connection'" "$feedback"
|
||||
else
|
||||
foot -a="vpn-prompt" -T="VPN Connection" nmcli connection --ask up "$connection"
|
||||
#feedback=$(nmcli connection up "$connection")
|
||||
notify-send "VPN Status '$connection'" "Trying to connect"
|
||||
fi
|
||||
}
|
||||
|
||||
# Take a line as displayed by `list_vpn_connections()` as argument and
|
||||
# remove `ACTIVE_PREFIX` or `INACTIVE_PREFIX` to only display the
|
||||
# connection name.
|
||||
function extract_connection_name_from_result() {
|
||||
local result="$1"
|
||||
|
||||
# I don't know how to use plain bash to remove the prefix so I'm
|
||||
# using sed:
|
||||
# shellcheck disable=SC2001
|
||||
sed -e 's/^.* \([^ ]\+\)$/\1/' <<< "$result"
|
||||
}
|
||||
|
||||
# Execute the `rofi` command. The first argument of the function is
|
||||
# used as lines to select from.
|
||||
function start_rofi() {
|
||||
local content="$1"
|
||||
echo -e "$content" | rofi -dmenu -theme /etc/xdg/rofi/nm-vpn/nm-vpn.rasi -mesg " VPN Connection Manager" -icon ""
|
||||
}
|
||||
|
||||
# List the VPN connections and let the user toggle one using rofi.
|
||||
function main() {
|
||||
local connections
|
||||
local result
|
||||
|
||||
connections=$(list_vpn_connections)
|
||||
result=$(start_rofi "$connections")
|
||||
|
||||
if [ -n "$result" ]; then
|
||||
toggle_vpn_connection "$result"
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
main
|
||||
48
defaults/bin/moonarch-waybar-cpugov
Executable file
48
defaults/bin/moonarch-waybar-cpugov
Executable file
@ -0,0 +1,48 @@
|
||||
#!/usr/bin/bash
|
||||
# ABOUTME: Waybar-Modul das den CPU-Governor als JSON ausgibt.
|
||||
# ABOUTME: Wird von der Waybar custom/cpugov Config referenziert.
|
||||
|
||||
while :
|
||||
do
|
||||
CPU_GOV=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
|
||||
|
||||
case $CPU_GOV in
|
||||
performance)
|
||||
CPU_GOV_SHORT=
|
||||
;;
|
||||
balanced)
|
||||
CPU_GOV_SHORT=
|
||||
;;
|
||||
powersave)
|
||||
CPU_GOV_SHORT=
|
||||
;;
|
||||
userspace)
|
||||
CPU_GOV_SHORT=uspace
|
||||
;;
|
||||
ondemand)
|
||||
CPU_GOV_SHORT=ondmnd
|
||||
;;
|
||||
conservative)
|
||||
CPU_GOV_SHORT=cons
|
||||
;;
|
||||
schedutil)
|
||||
CPU_GOV_SHORT=sutil
|
||||
;;
|
||||
*)
|
||||
CPU_GOV_SHORT="?"
|
||||
;;
|
||||
esac
|
||||
|
||||
CPU_GOV_FULL="${CPU_GOV^}"
|
||||
|
||||
s="text|alt|tooltip|class
|
||||
$CPU_GOV_SHORT|$CPU_GOV_FULL|CPU Mode: $CPU_GOV_FULL|cpugov"
|
||||
|
||||
jq --unbuffered --compact-output -Rn '
|
||||
( input | split("|") ) as $keys |
|
||||
( inputs | split("|") ) as $vals |
|
||||
[[$keys, $vals] | transpose[] | {key:.[0],value:.[1]}] | from_entries
|
||||
' <<<"$s"
|
||||
|
||||
sleep 5
|
||||
done
|
||||
38
defaults/bin/moonarch-waybar-gpustat
Executable file
38
defaults/bin/moonarch-waybar-gpustat
Executable file
@ -0,0 +1,38 @@
|
||||
#!/usr/bin/bash
|
||||
# ABOUTME: Waybar-Modul das die GPU-Auslastung als JSON ausgibt.
|
||||
# ABOUTME: Wird von der Waybar custom/gpu-usage Config referenziert.
|
||||
|
||||
while :
|
||||
do
|
||||
GPU_STAT=$(cat /sys/class/hwmon/hwmon5/device/gpu_busy_percent 2>/dev/null || echo "0")
|
||||
ICON="<span color='#69ff94' size='8pt' rise='1.5pt'>▁</span>"
|
||||
|
||||
if [ "$GPU_STAT" -lt 10 ]; then
|
||||
ICON="<span color='#69ff94' size='8pt' rise='1.5pt'>▁</span>"
|
||||
elif [ "$GPU_STAT" -lt 20 ]; then
|
||||
ICON="<span color='#2aa9ff' size='8pt' rise='1.5pt'>▂</span>"
|
||||
elif [ "$GPU_STAT" -lt 40 ]; then
|
||||
ICON="<span color='#f8f8f2' size='8pt' rise='1.5pt'>▃</span>"
|
||||
elif [ "$GPU_STAT" -lt 50 ]; then
|
||||
ICON="<span color='#f8f8f2' size='8pt' rise='1.5pt'>▄</span>"
|
||||
elif [ "$GPU_STAT" -lt 60 ]; then
|
||||
ICON="<span color='#ffffa5' size='8pt' rise='1.5pt'>▅</span>"
|
||||
elif [ "$GPU_STAT" -lt 70 ]; then
|
||||
ICON="<span color='#ffffa5' size='8pt' rise='1.5pt'>▆</span>"
|
||||
elif [ "$GPU_STAT" -lt 80 ]; then
|
||||
ICON="<span color='#ff9977' size='8pt' rise='1.5pt'>▇</span>"
|
||||
elif [ "$GPU_STAT" -lt 100 ]; then
|
||||
ICON="<span color='#dd532e' size='8pt' rise='1.5pt'>█</span>"
|
||||
fi
|
||||
|
||||
s="text|alt|tooltip|class|percentage
|
||||
GPU $ICON|GPU $ICON $GPU_STAT%|GPU $ICON $GPU_STAT%|gpustat|$GPU_STAT"
|
||||
|
||||
jq --unbuffered --compact-output -Rn '
|
||||
( input | split("|") ) as $keys |
|
||||
( inputs | split("|") ) as $vals |
|
||||
[[$keys, $vals] | transpose[] | {key:.[0],value:.[1]}] | from_entries
|
||||
' <<<"$s"
|
||||
|
||||
sleep 5
|
||||
done
|
||||
9
defaults/etc/greetd/config.toml
Normal file
9
defaults/etc/greetd/config.toml
Normal file
@ -0,0 +1,9 @@
|
||||
# ABOUTME: greetd-Konfiguration fuer Moonarch.
|
||||
# ABOUTME: Startet regreet unter niri als Wayland-Compositor.
|
||||
|
||||
[terminal]
|
||||
vt = 1
|
||||
|
||||
[default_session]
|
||||
command = "niri -c /etc/greetd/niri-greeter.kdl"
|
||||
user = "greeter"
|
||||
58
defaults/etc/greetd/niri-greeter.kdl
Normal file
58
defaults/etc/greetd/niri-greeter.kdl
Normal file
@ -0,0 +1,58 @@
|
||||
// ABOUTME: Minimale Niri-Konfiguration fuer den regreet Login-Greeter.
|
||||
// ABOUTME: Wird von greetd gestartet statt cage, um Multi-Monitor korrekt zu handhaben.
|
||||
|
||||
input {
|
||||
keyboard {
|
||||
xkb {
|
||||
layout "de"
|
||||
}
|
||||
numlock
|
||||
}
|
||||
|
||||
touchpad {
|
||||
tap
|
||||
natural-scroll
|
||||
}
|
||||
|
||||
mouse {
|
||||
accel-profile "flat"
|
||||
}
|
||||
}
|
||||
|
||||
cursor {
|
||||
xcursor-theme "Sweet-cursors"
|
||||
}
|
||||
|
||||
layout {
|
||||
gaps 0
|
||||
|
||||
focus-ring {
|
||||
off
|
||||
}
|
||||
|
||||
border {
|
||||
off
|
||||
}
|
||||
}
|
||||
|
||||
// regreet starten und niri beenden, sobald regreet sich schliesst
|
||||
spawn-at-startup "sh" "-c" "regreet; niri msg action quit --skip-confirmation"
|
||||
|
||||
// Greeter-Fenster maximiert darstellen
|
||||
window-rule {
|
||||
open-maximized true
|
||||
}
|
||||
|
||||
hotkey-overlay {
|
||||
skip-at-startup
|
||||
}
|
||||
|
||||
prefer-no-csd
|
||||
|
||||
animations {
|
||||
off
|
||||
}
|
||||
|
||||
binds {
|
||||
// Keine Keybinds noetig fuer den Greeter
|
||||
}
|
||||
40
defaults/etc/greetd/regreet.css
Normal file
40
defaults/etc/greetd/regreet.css
Normal file
@ -0,0 +1,40 @@
|
||||
/* ABOUTME: Catppuccin Mocha CSS-Overrides fuer regreet. */
|
||||
/* ABOUTME: Ergaenzt das GTK-Theme mit greeter-spezifischem Styling. */
|
||||
|
||||
window {
|
||||
background-color: #1e1e2e;
|
||||
}
|
||||
|
||||
entry {
|
||||
border-radius: 8px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #45475a;
|
||||
background-color: #313244;
|
||||
color: #cdd6f4;
|
||||
}
|
||||
|
||||
entry:focus {
|
||||
border-color: #b4befe;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 8px;
|
||||
padding: 8px 16px;
|
||||
background-color: #313244;
|
||||
color: #cdd6f4;
|
||||
border: 1px solid #45475a;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #45475a;
|
||||
}
|
||||
|
||||
button.suggested-action {
|
||||
background-color: #b4befe;
|
||||
color: #1e1e2e;
|
||||
border: none;
|
||||
}
|
||||
|
||||
button.suggested-action:hover {
|
||||
background-color: #89b4fa;
|
||||
}
|
||||
17
defaults/etc/greetd/regreet.toml
Normal file
17
defaults/etc/greetd/regreet.toml
Normal file
@ -0,0 +1,17 @@
|
||||
# ABOUTME: regreet-Konfiguration fuer Moonarch.
|
||||
# ABOUTME: Definiert Aussehen und Verhalten des Login-Greeters.
|
||||
|
||||
[background]
|
||||
path = "/usr/share/backgrounds/moonarch-greeter.jpg"
|
||||
fit = "Cover"
|
||||
|
||||
[GTK]
|
||||
application_prefer_dark_theme = true
|
||||
cursor_theme_name = "Sweet-cursors"
|
||||
font_name = "Hack Nerd Font 12"
|
||||
icon_theme_name = "Newaita-reborn-gray-dark"
|
||||
theme_name = "catppuccin-mocha-lavender-standard+default"
|
||||
|
||||
[commands]
|
||||
reboot = ["systemctl", "reboot"]
|
||||
poweroff = ["systemctl", "poweroff"]
|
||||
130
defaults/shell/zshrc
Normal file
130
defaults/shell/zshrc
Normal file
@ -0,0 +1,130 @@
|
||||
# ABOUTME: Moonarch default zsh configuration with Catppuccin-themed prompt.
|
||||
# ABOUTME: Sources user overrides from ~/.zshrc.d/ and ~/.zshrc.local
|
||||
|
||||
# --- History ---
|
||||
HISTFILE=~/.histfile
|
||||
HISTSIZE=1000
|
||||
SAVEHIST=1000
|
||||
setopt autocd nomatch notify appendhistory sharehistory hist_ignore_space hist_ignore_all_dups hist_save_no_dups hist_find_no_dups
|
||||
unsetopt beep extendedglob
|
||||
bindkey -e
|
||||
|
||||
# --- Completion ---
|
||||
zstyle :compinstall filename "$HOME/.zshrc"
|
||||
autoload -Uz compinit
|
||||
compinit
|
||||
|
||||
# --- Window title ---
|
||||
autoload -Uz add-zsh-hook
|
||||
|
||||
_precmd_title() {
|
||||
print -Pn "\e]0;%~\a"
|
||||
}
|
||||
|
||||
_preexec_title() {
|
||||
print -Pn "\e]0;$2\a"
|
||||
}
|
||||
|
||||
add-zsh-hook precmd _precmd_title
|
||||
add-zsh-hook preexec _preexec_title
|
||||
|
||||
# --- Prompt (Catppuccin Mocha) ---
|
||||
parse_git_branch() {
|
||||
local branch=""
|
||||
branch=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
|
||||
local git_status=$(git status --porcelain 2>/dev/null)
|
||||
local color=green
|
||||
if echo "$git_status" | grep -q "^ M"; then
|
||||
color=yellow
|
||||
branch="${branch}*"
|
||||
fi
|
||||
if echo "$git_status" | grep -qE "^ A|^\?\?"; then
|
||||
color=yellow
|
||||
branch="${branch}+"
|
||||
fi
|
||||
if echo "$git_status" | grep -q "^ D"; then
|
||||
color=yellow
|
||||
branch="${branch}-"
|
||||
fi
|
||||
if [[ -n "$branch" ]]; then
|
||||
branch=[%F{${color}}${branch}%F{reset}]
|
||||
fi
|
||||
echo " $branch"
|
||||
}
|
||||
|
||||
precmd() {
|
||||
print ""
|
||||
print -rP "%F{#b4befe}%B%n@%M%b %2~%F{#f5e0dc}$(parse_git_branch)%f"
|
||||
}
|
||||
|
||||
PROMPT="%B%F{#b4befe}$%f%b "
|
||||
RPROMPT="%F{241}%B%T%b%f"
|
||||
|
||||
# --- PATH ---
|
||||
if [ -d "$HOME/.local/bin" ]; then
|
||||
PATH="$HOME/.local/bin:$PATH"
|
||||
fi
|
||||
|
||||
# --- Key bindings ---
|
||||
bindkey "^[[3~" delete-char
|
||||
bindkey "^[[H" beginning-of-line
|
||||
bindkey "^[[F" end-of-line
|
||||
bindkey "^[[1;5C" forward-word
|
||||
bindkey "^[[1;5D" backward-word
|
||||
|
||||
# --- Aliases ---
|
||||
alias ssh="TERM=xterm-256color ssh"
|
||||
alias orphans='[[ -n $(pacman -Qdt) ]] && sudo pacman -Rs $(pacman -Qdtq) || echo "no orphans to remove"'
|
||||
alias ls='eza --icons --color=always --group-directories-first'
|
||||
alias ll='eza -lF --icons --color=always --group-directories-first'
|
||||
alias la='eza -a --icons --color=always --group-directories-first'
|
||||
alias l='eza -F --icons --color=always --group-directories-first'
|
||||
alias vim='nvim'
|
||||
alias uninstall='sudo pacman -Rsn'
|
||||
|
||||
# --- FZF ---
|
||||
if command -v fzf &>/dev/null; then
|
||||
eval "$(fzf --zsh)"
|
||||
export FZF_DEFAULT_COMMAND="fd --hidden --strip-cwd-prefix --exclude .git"
|
||||
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
||||
export FZF_ALT_C_COMMAND="fd --type=d --hidden --strip-cwd-prefix --exclude .git"
|
||||
export FZF_DEFAULT_OPTS="--height 50% --layout=default --border --color=hl:#2dd4bf"
|
||||
export FZF_CTRL_T_OPTS="--preview 'bat --color=always -n --line-range :500 {}'"
|
||||
export FZF_ALT_C_OPTS="--preview 'eza --tree --color=always {} | head -200'"
|
||||
fi
|
||||
|
||||
# --- Plugins (oh-my-zsh) ---
|
||||
if [[ -d "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" ]]; then
|
||||
source "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
|
||||
fi
|
||||
if [[ -d "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" ]]; then
|
||||
source "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
|
||||
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
|
||||
fi
|
||||
|
||||
# --- Wayland environment ---
|
||||
export TERMINAL="footclient"
|
||||
export GDK_BACKEND="wayland,x11,*"
|
||||
export QT_QPA_PLATFORM="wayland;xcb"
|
||||
export QT_QPA_PLATFORMTHEME="qt6ct"
|
||||
export QT_AUTO_SCREEN_SCALE_FACTOR="1"
|
||||
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
|
||||
export SDL_VIDEODRIVER="wayland"
|
||||
export CLUTTER_BACKEND="wayland"
|
||||
export XDG_CURRENT_DESKTOP="niri"
|
||||
export XDG_SESSION_DESKTOP="niri"
|
||||
export XDG_SESSION_TYPE="wayland"
|
||||
export EDITOR="nvim"
|
||||
export SUDO_EDITOR="nvim"
|
||||
export MOZ_ENABLE_WAYLAND="1"
|
||||
|
||||
# --- User override scripts ---
|
||||
# Drop custom config snippets into ~/.zshrc.d/*.zsh
|
||||
if [[ -d "$HOME/.zshrc.d" ]]; then
|
||||
for f in "$HOME/.zshrc.d"/*.zsh(N); do
|
||||
source "$f"
|
||||
done
|
||||
fi
|
||||
|
||||
# Single-file user override (for simple additions)
|
||||
[[ -f "$HOME/.zshrc.local" ]] && source "$HOME/.zshrc.local"
|
||||
460
defaults/xdg/dunst/dunstrc
Normal file
460
defaults/xdg/dunst/dunstrc
Normal file
@ -0,0 +1,460 @@
|
||||
# ABOUTME: Moonarch default dunst notification daemon config with Catppuccin Mocha colors.
|
||||
# ABOUTME: User overrides go in ~/.config/dunst/dunstrc
|
||||
|
||||
# See dunst(5) for all configuration options
|
||||
|
||||
[global]
|
||||
### Display ###
|
||||
|
||||
enable_posix_regex = true
|
||||
|
||||
# Which monitor should the notifications be displayed on.
|
||||
monitor = 0
|
||||
|
||||
# Display notification on focused monitor. Possible modes are:
|
||||
# mouse: follow mouse pointer
|
||||
# keyboard: follow window with keyboard focus
|
||||
# none: don't follow anything
|
||||
#
|
||||
# "keyboard" needs a window manager that exports the
|
||||
# _NET_ACTIVE_WINDOW property.
|
||||
# This should be the case for almost all modern window managers.
|
||||
#
|
||||
# If this option is set to mouse or keyboard, the monitor option
|
||||
# will be ignored.
|
||||
follow = mouse
|
||||
|
||||
### Geometry ###
|
||||
|
||||
# dynamic width from 0 to 300
|
||||
# width = (0, 300)
|
||||
# constant width of 300
|
||||
width = 300
|
||||
|
||||
# The maximum height of a single notification, excluding the frame.
|
||||
#height = 300
|
||||
|
||||
# Position the notification in the top right corner
|
||||
origin = top-right
|
||||
|
||||
# Offset from the origin
|
||||
offset = 15x15
|
||||
|
||||
# Scale factor. It is auto-detected if value is 0.
|
||||
scale = 0
|
||||
|
||||
# Maximum number of notification (0 means no limit)
|
||||
notification_limit = 10
|
||||
|
||||
### Progress bar ###
|
||||
|
||||
# Turn on the progess bar. It appears when a progress hint is passed with
|
||||
# for example dunstify -h int:value:12
|
||||
progress_bar = true
|
||||
|
||||
# Set the progress bar height. This includes the frame, so make sure
|
||||
# it's at least twice as big as the frame width.
|
||||
progress_bar_height = 8
|
||||
|
||||
# Set the frame width of the progress bar
|
||||
progress_bar_frame_width = 1
|
||||
|
||||
# Set the minimum width for the progress bar
|
||||
progress_bar_min_width = 150
|
||||
|
||||
# Set the maximum width for the progress bar
|
||||
progress_bar_max_width = 300
|
||||
|
||||
highlight = "#b4befe"
|
||||
|
||||
# Show how many messages are currently hidden (because of
|
||||
# notification_limit).
|
||||
indicate_hidden = yes
|
||||
|
||||
# The transparency of the window. Range: [0; 100].
|
||||
# This option will only work if a compositing window manager is
|
||||
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
|
||||
transparency = 0
|
||||
|
||||
# Draw a line of "separator_height" pixel height between two
|
||||
# notifications.
|
||||
# Set to 0 to disable.
|
||||
# If gap_size is greater than 0, this setting will be ignored.
|
||||
separator_height = 2
|
||||
|
||||
# Padding between text and separator.
|
||||
padding = 16
|
||||
|
||||
# Horizontal padding.
|
||||
horizontal_padding = 16
|
||||
|
||||
# Padding between text and icon.
|
||||
text_icon_padding = 0
|
||||
|
||||
# Defines width in pixels of frame around the notification window.
|
||||
# Set to 0 to disable.
|
||||
frame_width = 2
|
||||
|
||||
# Defines color of the frame around the notification window.
|
||||
frame_color = "#b4befe"
|
||||
|
||||
# Size of gap to display between notifications - requires a compositor.
|
||||
# If value is greater than 0, separator_height will be ignored and a border
|
||||
# of size frame_width will be drawn around each notification instead.
|
||||
# Click events on gaps do not currently propagate to applications below.
|
||||
gap_size = 5
|
||||
|
||||
# Define a color for the separator.
|
||||
# possible values are:
|
||||
# * auto: dunst tries to find a color fitting to the background;
|
||||
# * foreground: use the same color as the foreground;
|
||||
# * frame: use the same color as the frame;
|
||||
# * anything else will be interpreted as a X color.
|
||||
separator_color = frame
|
||||
|
||||
# Sort messages by urgency.
|
||||
sort = yes
|
||||
|
||||
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||
# for longer than idle_threshold seconds.
|
||||
# Set to 0 to disable.
|
||||
# A client can set the 'transient' hint to bypass this. See the rules
|
||||
# section for how to disable this if necessary
|
||||
# idle_threshold = 120
|
||||
|
||||
### Text ###
|
||||
|
||||
font = JetBrainsMono Nerd Font 10
|
||||
|
||||
# The spacing between lines. If the height is smaller than the
|
||||
# font height, it will get raised to the font height.
|
||||
line_height = 0
|
||||
|
||||
# Possible values are:
|
||||
# full: Allow a small subset of html markup in notifications:
|
||||
# <b>bold</b>
|
||||
# <i>italic</i>
|
||||
# <s>strikethrough</s>
|
||||
# <u>underline</u>
|
||||
#
|
||||
# For a complete reference see
|
||||
# <https://docs.gtk.org/Pango/pango_markup.html>.
|
||||
#
|
||||
# strip: This setting is provided for compatibility with some broken
|
||||
# clients that send markup even though it's not enabled on the
|
||||
# server. Dunst will try to strip the markup but the parsing is
|
||||
# simplistic so using this option outside of matching rules for
|
||||
# specific applications *IS GREATLY DISCOURAGED*.
|
||||
#
|
||||
# no: Disable markup parsing, incoming notifications will be treated as
|
||||
# plain text. Dunst will not advertise that it has the body-markup
|
||||
# capability if this is set as a global setting.
|
||||
#
|
||||
# It's important to note that markup inside the format option will be parsed
|
||||
# regardless of what this is set to.
|
||||
markup = full
|
||||
|
||||
# The format of the message. Possible variables are:
|
||||
# %a appname
|
||||
# %s summary
|
||||
# %b body
|
||||
# %i iconname (including its path)
|
||||
# %I iconname (without its path)
|
||||
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||
# %n progress value if set without any extra characters
|
||||
# %% Literal %
|
||||
# Markup is allowed
|
||||
format = "<b>%s</b>\n%b"
|
||||
|
||||
# Alignment of message text.
|
||||
# Possible values are "left", "center" and "right".
|
||||
alignment = left
|
||||
|
||||
# Vertical alignment of message text and icon.
|
||||
# Possible values are "top", "center" and "bottom".
|
||||
vertical_alignment = center
|
||||
|
||||
# Show age of message if message is older than show_age_threshold
|
||||
# seconds.
|
||||
# Set to -1 to disable.
|
||||
show_age_threshold = 60
|
||||
|
||||
# Specify where to make an ellipsis in long lines.
|
||||
# Possible values are "start", "middle" and "end".
|
||||
ellipsize = middle
|
||||
|
||||
# Ignore newlines '\n' in notifications.
|
||||
ignore_newline = no
|
||||
|
||||
# Stack together notifications with the same content
|
||||
stack_duplicates = true
|
||||
|
||||
# Hide the count of stacked notifications with the same content
|
||||
hide_duplicate_count = false
|
||||
|
||||
# Display indicators for URLs (U) and actions (A).
|
||||
show_indicators = yes
|
||||
|
||||
### Icons ###
|
||||
|
||||
# Recursive icon lookup. You can set a single theme, instead of having to
|
||||
# define all lookup paths.
|
||||
enable_recursive_icon_lookup = true
|
||||
|
||||
# Set icon theme (only used for recursive icon lookup)
|
||||
icon_theme = "Tela-purple-dark"
|
||||
# You can also set multiple icon themes, with the leftmost one being used first.
|
||||
# icon_theme = "Adwaita, breeze"
|
||||
|
||||
# Align icons left/right/top/off
|
||||
icon_position = left
|
||||
|
||||
# Scale small icons up to this size, set to 0 to disable. Helpful
|
||||
# for e.g. small files or high-dpi screens. In case of conflict,
|
||||
# max_icon_size takes precedence over this.
|
||||
min_icon_size = 16
|
||||
|
||||
# Scale larger icons down to this size, set to 0 to disable
|
||||
max_icon_size = 64
|
||||
|
||||
# Paths to default icons (only neccesary when not using recursive icon lookup)
|
||||
#icon_path = /usr/share/icons/Tela-purple-dark/16x16/status/:/usr/share/icons/Tela-purple-dark/16x16/devices/
|
||||
|
||||
### History ###
|
||||
|
||||
# Should a notification popped up from history be sticky or timeout
|
||||
# as if it would normally do.
|
||||
sticky_history = yes
|
||||
|
||||
# Maximum amount of notifications kept in history
|
||||
history_length = 20
|
||||
|
||||
### Misc/Advanced ###
|
||||
|
||||
# dmenu path.
|
||||
dmenu = /usr/bin/dmenu -p dunst:
|
||||
|
||||
# Browser for opening urls in context menu.
|
||||
browser = /usr/bin/xdg-open
|
||||
|
||||
# Always run rule-defined scripts, even if the notification is suppressed
|
||||
always_run_script = true
|
||||
|
||||
# Define the title of the windows spawned by dunst
|
||||
title = Dunst
|
||||
|
||||
# Define the class of the windows spawned by dunst
|
||||
class = Dunst
|
||||
|
||||
# Define the corner radius of the notification window
|
||||
# in pixel size. If the radius is 0, you have no rounded
|
||||
# corners.
|
||||
# The radius will be automatically lowered if it exceeds half of the
|
||||
# notification height to avoid clipping text and/or icons.
|
||||
corner_radius = 10
|
||||
|
||||
# Ignore the dbus closeNotification message.
|
||||
# Useful to enforce the timeout set by dunst configuration. Without this
|
||||
# parameter, an application may close the notification sent before the
|
||||
# user defined timeout.
|
||||
ignore_dbusclose = false
|
||||
|
||||
### Wayland ###
|
||||
# These settings are Wayland-specific. They have no effect when using X11
|
||||
|
||||
# Uncomment this if you want to let notications appear under fullscreen
|
||||
# applications (default: overlay)
|
||||
layer = overlay
|
||||
|
||||
# Set this to true to use X11 output on Wayland.
|
||||
force_xwayland = false
|
||||
|
||||
### Legacy
|
||||
|
||||
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
||||
# This setting is provided for compatibility with older nVidia drivers that
|
||||
# do not support RandR and using it on systems that support RandR is highly
|
||||
# discouraged.
|
||||
#
|
||||
# By enabling this setting dunst will not be able to detect when a monitor
|
||||
# is connected or disconnected which might break follow mode if the screen
|
||||
# layout changes.
|
||||
force_xinerama = false
|
||||
|
||||
### mouse
|
||||
|
||||
# Defines list of actions for each mouse event
|
||||
# Possible values are:
|
||||
# * none: Don't do anything.
|
||||
# * do_action: Invoke the action determined by the action_name rule. If there is no
|
||||
# such action, open the context menu.
|
||||
# * open_url: If the notification has exactly one url, open it. If there are multiple
|
||||
# ones, open the context menu.
|
||||
# * close_current: Close current notification.
|
||||
# * close_all: Close all notifications.
|
||||
# * context: Open context menu for the notification.
|
||||
# * context_all: Open context menu for all notifications.
|
||||
# These values can be strung together for each mouse event, and
|
||||
# will be executed in sequence.
|
||||
mouse_left_click = close_current
|
||||
mouse_middle_click = do_action, close_current
|
||||
mouse_right_click = close_all
|
||||
|
||||
# Experimental features that may or may not work correctly. Do not expect them
|
||||
# to have a consistent behaviour across releases.
|
||||
[experimental]
|
||||
# Calculate the dpi to use on a per-monitor basis.
|
||||
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||
# using the resolution and physical size. This might be useful in setups
|
||||
# where there are multiple screens with very different dpi values.
|
||||
per_monitor_dpi = true
|
||||
|
||||
|
||||
[urgency_low]
|
||||
# IMPORTANT: colors have to be defined in quotation marks.
|
||||
# Otherwise the "#" and following would be interpreted as a comment.
|
||||
background = "#1e1e2e"
|
||||
foreground = "#eff1f5"
|
||||
timeout = 10
|
||||
# Icon for notifications with low urgency, uncomment to enable
|
||||
#default_icon = /path/to/icon
|
||||
|
||||
[urgency_normal]
|
||||
background = "#1e1e2e"
|
||||
foreground = "#eff1f5"
|
||||
timeout = 10
|
||||
# Icon for notifications with normal urgency, uncomment to enable
|
||||
#default_icon = /path/to/icon
|
||||
|
||||
[urgency_critical]
|
||||
background = "#313244"
|
||||
foreground = "#CDD6F4"
|
||||
frame_color = "#eba0ac"
|
||||
timeout = 60
|
||||
# Icon for notifications with critical urgency, uncomment to enable
|
||||
#default_icon = /path/to/icon
|
||||
|
||||
# Every section that isn't one of the above is interpreted as a rules to
|
||||
# override settings for certain messages.
|
||||
#
|
||||
# Messages can be matched by
|
||||
# appname (discouraged, see desktop_entry)
|
||||
# body
|
||||
# category
|
||||
# desktop_entry
|
||||
# icon
|
||||
# match_transient
|
||||
# msg_urgency
|
||||
# stack_tag
|
||||
# summary
|
||||
#
|
||||
# and you can override the
|
||||
# background
|
||||
# foreground
|
||||
# format
|
||||
# frame_color
|
||||
# fullscreen
|
||||
# new_icon
|
||||
# set_stack_tag
|
||||
# set_transient
|
||||
# set_category
|
||||
# timeout
|
||||
# urgency
|
||||
# icon_position
|
||||
# skip_display
|
||||
# history_ignore
|
||||
# action_name
|
||||
# word_wrap
|
||||
# ellipsize
|
||||
# alignment
|
||||
# hide_text
|
||||
#
|
||||
# Shell-like globbing will get expanded.
|
||||
#
|
||||
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
|
||||
# GLib based applications export their desktop-entry name. In comparison to the appname,
|
||||
# the desktop-entry won't get localized.
|
||||
#
|
||||
# SCRIPTING
|
||||
# You can specify a script that gets run when the rule matches by
|
||||
# setting the "script" option.
|
||||
# The script will be called as follows:
|
||||
# script appname summary body icon urgency
|
||||
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
||||
#
|
||||
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
||||
# to find fitting options for rules.
|
||||
|
||||
# Disable the transient hint so that idle_threshold cannot be bypassed from the
|
||||
# client
|
||||
#[transient_disable]
|
||||
# match_transient = yes
|
||||
# set_transient = no
|
||||
#
|
||||
# Make the handling of transient notifications more strict by making them not
|
||||
# be placed in history.
|
||||
#[transient_history_ignore]
|
||||
# match_transient = yes
|
||||
# history_ignore = yes
|
||||
|
||||
# fullscreen values
|
||||
# show: show the notifications, regardless if there is a fullscreen window opened
|
||||
# delay: displays the new notification, if there is no fullscreen window active
|
||||
# If the notification is already drawn, it won't get undrawn.
|
||||
# pushback: same as delay, but when switching into fullscreen, the notification will get
|
||||
# withdrawn from screen again and will get delayed like a new notification
|
||||
#[fullscreen_delay_everything]
|
||||
# fullscreen = delay
|
||||
[fullscreen_show_critical]
|
||||
msg_urgency = critical
|
||||
fullscreen = pushback
|
||||
|
||||
#[espeak]
|
||||
# summary = "*"
|
||||
# script = dunst_espeak.sh
|
||||
|
||||
#[script-test]
|
||||
# summary = "*script*"
|
||||
# script = dunst_test.sh
|
||||
|
||||
#[ignore]
|
||||
# # This notification will not be displayed
|
||||
# summary = "foobar"
|
||||
# skip_display = true
|
||||
|
||||
#[history-ignore]
|
||||
# # This notification will not be saved in history
|
||||
# summary = "foobar"
|
||||
# history_ignore = yes
|
||||
|
||||
#[skip-display]
|
||||
# # This notification will not be displayed, but will be included in the history
|
||||
# summary = "foobar"
|
||||
# skip_display = yes
|
||||
|
||||
#[signed_on]
|
||||
# appname = Pidgin
|
||||
# summary = "*signed on*"
|
||||
# urgency = low
|
||||
#
|
||||
#[signed_off]
|
||||
# appname = Pidgin
|
||||
# summary = *signed off*
|
||||
# urgency = low
|
||||
#
|
||||
#[says]
|
||||
# appname = Pidgin
|
||||
# summary = *says*
|
||||
# urgency = critical
|
||||
#
|
||||
#[twitter]
|
||||
# appname = Pidgin
|
||||
# summary = *twitter.com*
|
||||
# urgency = normal
|
||||
#
|
||||
#[stack-volumes]
|
||||
# appname = "some_volume_notifiers"
|
||||
# set_stack_tag = "volume"
|
||||
#
|
||||
# vim: ft=cfg
|
||||
136
defaults/xdg/fastfetch/config.jsonc
Normal file
136
defaults/xdg/fastfetch/config.jsonc
Normal file
@ -0,0 +1,136 @@
|
||||
// Load with --load-config examples/2.jsonc
|
||||
// Note that you must replace the image path to an existing image to display it.
|
||||
|
||||
{
|
||||
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||
"logo": {
|
||||
"type": "none"
|
||||
},
|
||||
"display": {
|
||||
"separator": " -> ",
|
||||
"constants": [
|
||||
"──────────────────────────────"
|
||||
],
|
||||
"key": {
|
||||
"paddingLeft": 2
|
||||
}
|
||||
},
|
||||
"modules": [
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "┌{$1}{$1}┐",
|
||||
"outputColor": "90"
|
||||
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"keyWidth": 10
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "└{$1}{$1}┘",
|
||||
"outputColor": "90"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": " {#90} {#31} {#32} {#33} {#34} {#35} {#36} {#37} {#38} {#39} {#38} {#37} {#36} {#35} {#34} {#33} {#32} {#31} {#90}"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "┌{$1}{$1}┐",
|
||||
"outputColor": "90"
|
||||
},
|
||||
{
|
||||
"type": "os",
|
||||
"key": "{icon} OS",
|
||||
"keyColor": "yellow"
|
||||
},
|
||||
{
|
||||
"type": "kernel",
|
||||
"key": "│ ├",
|
||||
"keyColor": "yellow"
|
||||
},
|
||||
{
|
||||
"type": "packages",
|
||||
"key": "│ ├",
|
||||
"keyColor": "yellow"
|
||||
},
|
||||
{
|
||||
"type": "shell",
|
||||
"key": "│ └",
|
||||
"keyColor": "yellow"
|
||||
},
|
||||
{
|
||||
"type": "wm",
|
||||
"key": " DE/WM",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "wmtheme",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "terminal",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "wallpaper",
|
||||
"key": "│ └",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "host",
|
||||
"key": " PC",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "cpu",
|
||||
"key": "│ ├",
|
||||
"keyColor": "magenta"
|
||||
},
|
||||
{
|
||||
"type": "gpu",
|
||||
"key": "│ ├",
|
||||
"keyColor": "magenta"
|
||||
},
|
||||
{
|
||||
"type": "disk",
|
||||
"key": "│ ├",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "memory",
|
||||
"key": "│ ├",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "uptime",
|
||||
"key": "│ ├",
|
||||
"keyColor": "green"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "sound",
|
||||
"key": " SND",
|
||||
"keyColor": "cyan"
|
||||
},
|
||||
{
|
||||
"type": "player",
|
||||
"key": "│ ├",
|
||||
"keyColor": "cyan"
|
||||
},
|
||||
{
|
||||
"type": "media",
|
||||
"key": "│ └",
|
||||
"keyColor": "cyan"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "└{$1}{$1}┘",
|
||||
"outputColor": "90"
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
260
defaults/xdg/foot/foot.ini
Normal file
260
defaults/xdg/foot/foot.ini
Normal file
@ -0,0 +1,260 @@
|
||||
# ABOUTME: Moonarch default foot terminal configuration with Catppuccin Mocha colors.
|
||||
# ABOUTME: User overrides go in ~/.config/foot/foot.ini
|
||||
# -*- conf -*-
|
||||
|
||||
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
|
||||
# term=foot (or xterm-256color if built with -Dterminfo=disabled)
|
||||
# login-shell=no
|
||||
|
||||
# app-id=foot # globally set wayland app-id. Default values are "foot" and "footclient" for desktop and server mode
|
||||
# title=foot
|
||||
# locked-title=no
|
||||
|
||||
font=Hack Nerd Font:size=11
|
||||
# font-bold=<bold variant of regular font>
|
||||
# font-italic=<italic variant of regular font>
|
||||
# font-bold-italic=<bold+italic variant of regular font>
|
||||
# font-size-adjustment=0.5
|
||||
# line-height=<font metrics>
|
||||
# letter-spacing=0
|
||||
# horizontal-letter-offset=0
|
||||
# vertical-letter-offset=0
|
||||
# underline-offset=<font metrics>
|
||||
# underline-thickness=<font underline thickness>
|
||||
# strikeout-thickness=<font strikeout thickness>
|
||||
# box-drawings-uses-font-glyphs=no
|
||||
# dpi-aware=no
|
||||
# gamma-correct-blending=no
|
||||
|
||||
# initial-color-theme=1
|
||||
# initial-window-size-pixels=700x500 # Or,
|
||||
# initial-window-size-chars=<COLSxROWS>
|
||||
# initial-window-mode=windowed
|
||||
# pad=0x0 center-when-maximized-and-fullscreen
|
||||
# resize-by-cells=yes
|
||||
# resize-keep-grid=yes
|
||||
# resize-delay-ms=100
|
||||
|
||||
# bold-text-in-bright=no
|
||||
# word-delimiters=,│`|:"'()[]{}<>
|
||||
# selection-target=primary
|
||||
# workers=<number of logical CPUs>
|
||||
# utmp-helper=/usr/lib/utempter/utempter # When utmp backend is 'libutempter' (Linux)
|
||||
# utmp-helper=/usr/libexec/ulog-helper # When utmp backend is 'ulog' (FreeBSD)
|
||||
|
||||
# uppercase-regex-insert=yes
|
||||
|
||||
[environment]
|
||||
# name=value
|
||||
|
||||
[security]
|
||||
# osc52=enabled # disabled|copy-enabled|paste-enabled|enabled
|
||||
|
||||
[bell]
|
||||
# system=yes
|
||||
# urgent=no
|
||||
# notify=no
|
||||
# visual=no
|
||||
# command=
|
||||
# command-focused=no
|
||||
|
||||
[desktop-notifications]
|
||||
# command=notify-send --wait --app-name ${app-id} --icon ${app-id} --category ${category} --urgency ${urgency} --expire-time ${expire-time} --hint STRING:image-path:${icon} --hint BOOLEAN:suppress-sound:${muted} --hint STRING:sound-name:${sound-name} --replace-id ${replace-id} ${action-argument} --print-id -- ${title} ${body}
|
||||
# command-action-argument=--action ${action-name}=${action-label}
|
||||
# close=""
|
||||
# inhibit-when-focused=yes
|
||||
|
||||
|
||||
[scrollback]
|
||||
# lines=1000
|
||||
# multiplier=3.0
|
||||
# indicator-position=relative
|
||||
# indicator-format=""
|
||||
|
||||
[url]
|
||||
# launch=xdg-open ${url}
|
||||
# label-letters=sadfjklewcmpgh
|
||||
# osc8-underline=url-mode
|
||||
# regex=(((https?://|mailto:|ftp://|file:|ssh:|ssh://|git://|tel:|magnet:|ipfs://|ipns://|gemini://|gopher://|news:)|www\.)([0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]+|\([]\["0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\)|\[[\(\)"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\]|"[]\[\(\)0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*"|'[]\[\(\)0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]*')+([0-9a-zA-Z/#@$&*+=~_%^\-]|\([]\["0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\)|\[[\(\)"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\]|"[]\[\(\)0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*"|'[]\[\(\)0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]*'))
|
||||
|
||||
# You can define your own regex's, by adding a section called
|
||||
# 'regex:<ID>' with a 'regex' and 'launch' key. These can then be tied
|
||||
# to a key-binding. See foot.ini(5) for details
|
||||
|
||||
# [regex:your-fancy-name]
|
||||
# regex=<a POSIX-Extended Regular Expression>
|
||||
# launch=<path to script or application> ${match}
|
||||
#
|
||||
# [key-bindings]
|
||||
# regex-launch=[your-fancy-name] Control+Shift+q
|
||||
# regex-copy=[your-fancy-name] Control+Alt+Shift+q
|
||||
|
||||
[cursor]
|
||||
# style=block
|
||||
# blink=no
|
||||
# blink-rate=500
|
||||
# beam-thickness=1.5
|
||||
# underline-thickness=<font underline thickness>
|
||||
|
||||
[mouse]
|
||||
# hide-when-typing=no
|
||||
# alternate-scroll-mode=yes
|
||||
|
||||
[touch]
|
||||
# long-press-delay=400
|
||||
|
||||
[colors-dark]
|
||||
alpha=0.9
|
||||
# alpha-mode=default # Can be `default`, `matching` or `all`
|
||||
cursor=11111b f5e0dc
|
||||
foreground=cdd6f4
|
||||
background=1e1e2e
|
||||
|
||||
regular0=45475a
|
||||
regular1=f38ba8
|
||||
regular2=a6e3a1
|
||||
regular3=f9e2af
|
||||
regular4=89b4fa
|
||||
regular5=f5c2e7
|
||||
regular6=94e2d5
|
||||
regular7=bac2de
|
||||
|
||||
bright0=585b70
|
||||
bright1=f38ba8
|
||||
bright2=a6e3a1
|
||||
bright3=f9e2af
|
||||
bright4=89b4fa
|
||||
bright5=f5c2e7
|
||||
bright6=94e2d5
|
||||
bright7=a6adc8
|
||||
|
||||
16=fab387
|
||||
17=f5e0dc
|
||||
|
||||
selection-foreground=cdd6f4
|
||||
selection-background=414356
|
||||
|
||||
search-box-no-match=11111b f38ba8
|
||||
search-box-match=cdd6f4 313244
|
||||
|
||||
jump-labels=11111b fab387
|
||||
urls=89b4fa
|
||||
|
||||
[colors2]
|
||||
# Alternative color theme, see man page foot.ini(5)
|
||||
# Same builtin defaults as [color], except for:
|
||||
# dim-blend-towards=white
|
||||
|
||||
[csd]
|
||||
# preferred=server
|
||||
# size=26
|
||||
# font=<primary font>
|
||||
# color=<foreground color>
|
||||
# hide-when-maximized=no
|
||||
# double-click-to-maximize=yes
|
||||
# border-width=0
|
||||
# border-color=<csd.color>
|
||||
# button-width=26
|
||||
# button-color=<background color>
|
||||
# button-minimize-color=<regular4>
|
||||
# button-maximize-color=<regular2>
|
||||
# button-close-color=<regular1>
|
||||
|
||||
[key-bindings]
|
||||
# scrollback-up-page=Shift+Page_Up Shift+KP_Page_Up
|
||||
# scrollback-up-half-page=none
|
||||
# scrollback-up-line=none
|
||||
# scrollback-down-page=Shift+Page_Down Shift+KP_Page_Down
|
||||
# scrollback-down-half-page=none
|
||||
# scrollback-down-line=none
|
||||
# scrollback-home=none
|
||||
# scrollback-end=none
|
||||
# clipboard-copy=Control+Shift+c XF86Copy
|
||||
# clipboard-paste=Control+Shift+v XF86Paste
|
||||
# primary-paste=Shift+Insert
|
||||
# search-start=Control+Shift+r
|
||||
# font-increase=Control+plus Control+equal Control+KP_Add
|
||||
# font-decrease=Control+minus Control+KP_Subtract
|
||||
# font-reset=Control+0 Control+KP_0
|
||||
# spawn-terminal=Control+Shift+n
|
||||
# minimize=none
|
||||
# maximize=none
|
||||
# fullscreen=none
|
||||
# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
|
||||
# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
|
||||
# pipe-selected=[xargs -r firefox] none
|
||||
# pipe-command-output=[wl-copy] none # Copy last command's output to the clipboard
|
||||
# show-urls-launch=Control+Shift+o
|
||||
# show-urls-copy=none
|
||||
# show-urls-persistent=none
|
||||
# prompt-prev=Control+Shift+z
|
||||
# prompt-next=Control+Shift+x
|
||||
# unicode-input=Control+Shift+u
|
||||
# color-theme-switch-1=none
|
||||
# color-theme-switch-2=none
|
||||
# color-theme-toggle=none
|
||||
# noop=none
|
||||
# quit=none
|
||||
|
||||
[search-bindings]
|
||||
# cancel=Control+g Control+c Escape
|
||||
# commit=Return KP_Enter
|
||||
# find-prev=Control+r
|
||||
# find-next=Control+s
|
||||
# cursor-left=Left Control+b
|
||||
# cursor-left-word=Control+Left Mod1+b
|
||||
# cursor-right=Right Control+f
|
||||
# cursor-right-word=Control+Right Mod1+f
|
||||
# cursor-home=Home Control+a
|
||||
# cursor-end=End Control+e
|
||||
# delete-prev=BackSpace
|
||||
# delete-prev-word=Mod1+BackSpace Control+BackSpace
|
||||
# delete-next=Delete
|
||||
# delete-next-word=Mod1+d Control+Delete
|
||||
# delete-to-start=Control+u
|
||||
# delete-to-end=Control+k
|
||||
# extend-char=Shift+Right
|
||||
# extend-to-word-boundary=Control+w Control+Shift+Right
|
||||
# extend-to-next-whitespace=Control+Shift+w
|
||||
# extend-line-down=Shift+Down
|
||||
# extend-backward-char=Shift+Left
|
||||
# extend-backward-to-word-boundary=Control+Shift+Left
|
||||
# extend-backward-to-next-whitespace=none
|
||||
# extend-line-up=Shift+Up
|
||||
# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
|
||||
# primary-paste=Shift+Insert
|
||||
# unicode-input=none
|
||||
# scrollback-up-page=Shift+Page_Up Shift+KP_Page_Up
|
||||
# scrollback-up-half-page=none
|
||||
# scrollback-up-line=none
|
||||
# scrollback-down-page=Shift+Page_Down Shift+KP_Page_Down
|
||||
# scrollback-down-half-page=none
|
||||
# scrollback-down-line=none
|
||||
# scrollback-home=none
|
||||
# scrollback-end=none
|
||||
|
||||
[url-bindings]
|
||||
# cancel=Control+g Control+c Control+d Escape
|
||||
# toggle-url-visible=t
|
||||
|
||||
[text-bindings]
|
||||
# \x03=Mod4+c # Map Super+c -> Ctrl+c
|
||||
\x1b\x5b\x31\x33\x3b\x32\x75=Shift+Return
|
||||
|
||||
[mouse-bindings]
|
||||
# scrollback-up-mouse=BTN_WHEEL_BACK
|
||||
# scrollback-down-mouse=BTN_WHEEL_FORWARD
|
||||
# font-increase=Control+BTN_WHEEL_BACK
|
||||
# font-decrease=Control+BTN_WHEEL_FORWARD
|
||||
# selection-override-modifiers=Shift
|
||||
# primary-paste=BTN_MIDDLE
|
||||
# select-begin=BTN_LEFT
|
||||
# select-begin-block=Control+BTN_LEFT
|
||||
# select-extend=BTN_RIGHT
|
||||
# select-extend-character-wise=Control+BTN_RIGHT
|
||||
# select-word=BTN_LEFT-2
|
||||
# select-word-whitespace=Control+BTN_LEFT-2
|
||||
# select-quote = BTN_LEFT-3
|
||||
# select-row=BTN_LEFT-4
|
||||
|
||||
# vim: ft=dosini
|
||||
20
defaults/xdg/gtk-3.0/settings.ini
Normal file
20
defaults/xdg/gtk-3.0/settings.ini
Normal file
@ -0,0 +1,20 @@
|
||||
# ABOUTME: Moonarch default GTK3 settings.
|
||||
# ABOUTME: User overrides go in ~/.config/gtk-3.0/settings.ini
|
||||
|
||||
[Settings]
|
||||
gtk-theme-name=catppuccin-mocha-lavender-standard+default
|
||||
gtk-icon-theme-name=Newaita-reborn-gray-dark
|
||||
gtk-font-name=Hack Nerd Font 11
|
||||
gtk-cursor-theme-name=Sweet-cursors
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_SMALL_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=1
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle=hintslight
|
||||
gtk-xft-rgba=rgb
|
||||
gtk-application-prefer-dark-theme=1
|
||||
5
defaults/xdg/gtk-4.0/settings.ini
Normal file
5
defaults/xdg/gtk-4.0/settings.ini
Normal file
@ -0,0 +1,5 @@
|
||||
# ABOUTME: Moonarch default GTK4 settings.
|
||||
# ABOUTME: User overrides go in ~/.config/gtk-4.0/settings.ini
|
||||
|
||||
[Settings]
|
||||
gtk-application-prefer-dark-theme=1
|
||||
29
defaults/xdg/gtklock/config.ini
Normal file
29
defaults/xdg/gtklock/config.ini
Normal file
@ -0,0 +1,29 @@
|
||||
# ABOUTME: Moonarch default gtklock configuration.
|
||||
# ABOUTME: User overrides go in ~/.config/gtklock/config.ini
|
||||
|
||||
[main]
|
||||
modules=powerbar-module;userinfo-module;playerctl-module;dpms
|
||||
follow-focus=true
|
||||
layout=/etc/xdg/gtklock/gtklock.ui
|
||||
|
||||
[powerbar]
|
||||
show-labels=false
|
||||
linked-buttons=true
|
||||
reboot-command=systemctl reboot
|
||||
poweroff-command=systemctl -i poweroff
|
||||
suspend-command=systemctl suspend
|
||||
userswitch-command=
|
||||
logout-command=
|
||||
|
||||
[playerctl]
|
||||
art-size=64
|
||||
position=under-clock
|
||||
|
||||
[userinfo]
|
||||
round-image=true
|
||||
horizontal-layout=false
|
||||
under-clock=false
|
||||
|
||||
[dpms]
|
||||
idle-hide=true
|
||||
idle-timeout=10
|
||||
138
defaults/xdg/gtklock/gtklock.ui
Normal file
138
defaults/xdg/gtklock/gtklock.ui
Normal file
@ -0,0 +1,138 @@
|
||||
<!-- ABOUTME: Moonarch default gtklock UI layout definition. -->
|
||||
<!-- ABOUTME: User overrides go in ~/.config/gtklock/gtklock.ui -->
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkBox" id="window-box">
|
||||
<property name="name">window-box</property>
|
||||
<property name="margin">20</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">50</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="info-box">
|
||||
<property name="name">info-box</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="time-box">
|
||||
<property name="name">time-box</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="clock-label">
|
||||
<property name="name">clock-label</property>
|
||||
<property name="halign">center</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="date-label">
|
||||
<property name="name">date-label</property>
|
||||
<property name="halign">center</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="body-revealer">
|
||||
<property name="transition-type">none</property>
|
||||
<property name="reveal-child">0</property>
|
||||
<child>
|
||||
<object class="GtkGrid" id="body-grid">
|
||||
<property name="row-spacing">5</property>
|
||||
<property name="column-spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="input-label">
|
||||
<property name="name">input-label</property>
|
||||
<property name="label" translatable="yes">Password:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="input-field">
|
||||
<property name="name">input-field</property>
|
||||
<property name="width-request">380</property>
|
||||
<property name="visibility">0</property>
|
||||
<property name="caps-lock-warning">0</property>
|
||||
<property name="input-purpose">password</property>
|
||||
<property name="secondary-icon-name">view-reveal-symbolic</property>
|
||||
<signal name="icon-release" handler="window_pw_toggle_vis"/>
|
||||
<signal name="activate" handler="window_pw_check"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="message-revealer">
|
||||
<property name="transition-type">none</property>
|
||||
<property name="no-show-all">1</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="message-scrolled-window">
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="max-content-height">256</property>
|
||||
<property name="propagate-natural-height">1</property>
|
||||
<child>
|
||||
<object class="GtkViewport">
|
||||
<child>
|
||||
<object class="GtkBox" id="message-box">
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="homogeneous">1</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="halign">end</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="warning-label">
|
||||
<property name="name">warning-label</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="error-label">
|
||||
<property name="name">error-label</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="unlock-button">
|
||||
<property name="name">unlock-button</property>
|
||||
<property name="label" translatable="yes">Unlock</property>
|
||||
<style>
|
||||
<class name="suggested-action"/>
|
||||
</style>
|
||||
<signal name="clicked" handler="window_pw_check"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
12
defaults/xdg/gtklock/style.css
Normal file
12
defaults/xdg/gtklock/style.css
Normal file
@ -0,0 +1,12 @@
|
||||
/* ABOUTME: Moonarch default gtklock stylesheet. */
|
||||
/* ABOUTME: User overrides go in ~/.config/gtklock/style.css */
|
||||
|
||||
window {
|
||||
background-image: url("/usr/share/moonarch/wallpaper.jpg");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
#powerbar {
|
||||
padding-bottom: 100px;
|
||||
background: red;
|
||||
}
|
||||
280
defaults/xdg/niri/config.kdl
Normal file
280
defaults/xdg/niri/config.kdl
Normal file
@ -0,0 +1,280 @@
|
||||
// ABOUTME: Moonarch default Niri compositor configuration.
|
||||
// ABOUTME: User overrides go in ~/.config/niri/config.kdl
|
||||
|
||||
cursor {
|
||||
xcursor-theme "Sweet-cursors"
|
||||
hide-when-typing
|
||||
hide-after-inactive-ms 1000
|
||||
}
|
||||
|
||||
input {
|
||||
mod-key "Super"
|
||||
keyboard {
|
||||
xkb {
|
||||
layout "de"
|
||||
}
|
||||
numlock
|
||||
}
|
||||
|
||||
touchpad {
|
||||
tap
|
||||
natural-scroll
|
||||
}
|
||||
|
||||
mouse {
|
||||
accel-profile "flat"
|
||||
}
|
||||
|
||||
trackpoint {
|
||||
}
|
||||
|
||||
warp-mouse-to-focus
|
||||
focus-follows-mouse max-scroll-amount="0%"
|
||||
}
|
||||
|
||||
gestures {
|
||||
hot-corners {
|
||||
off
|
||||
}
|
||||
}
|
||||
|
||||
layout {
|
||||
gaps 8
|
||||
center-focused-column "never"
|
||||
|
||||
preset-column-widths {
|
||||
proportion 0.33333
|
||||
proportion 0.5
|
||||
proportion 0.66667
|
||||
}
|
||||
|
||||
default-column-width { proportion 0.5; }
|
||||
|
||||
focus-ring {
|
||||
width 2
|
||||
active-color "#7f849c80"
|
||||
inactive-color "#1e1e2e80"
|
||||
}
|
||||
|
||||
border {
|
||||
off
|
||||
width 2
|
||||
active-color "#ffc87f"
|
||||
inactive-color "#505050"
|
||||
urgent-color "#9b0000"
|
||||
}
|
||||
|
||||
shadow {
|
||||
off
|
||||
softness 30
|
||||
spread 2
|
||||
offset x=0 y=5
|
||||
color "#0007"
|
||||
}
|
||||
|
||||
struts {
|
||||
}
|
||||
}
|
||||
|
||||
spawn-at-startup "xwayland-satellite"
|
||||
spawn-at-startup "waybar"
|
||||
spawn-at-startup "dunst"
|
||||
spawn-at-startup "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
|
||||
spawn-sh-at-startup "waypaper --restore"
|
||||
// spawn-sh-at-startup "nemo . &> /dev/null &"
|
||||
spawn-sh-at-startup "foot --server"
|
||||
spawn-sh-at-startup "mkdir -p /run/user/1000/cliphist && wl-paste --watch cliphist -db-path /run/user/1000/cliphist/db store"
|
||||
spawn-sh-at-startup "mkdir -p /run/user/1000/cliphist && wl-paste --type image --watch cliphist -db-path /run/user/1000/cliphist/db store"
|
||||
|
||||
hotkey-overlay {
|
||||
hide-not-bound
|
||||
}
|
||||
|
||||
prefer-no-csd
|
||||
|
||||
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
|
||||
|
||||
animations {
|
||||
on
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r#"^org\.wezfurlong\.wezterm$"#
|
||||
default-column-width {}
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id=r#"waterfox$"# title="^Picture-in-Picture$"
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
geometry-corner-radius 4
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
binds {
|
||||
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||
|
||||
Super+C hotkey-overlay-title=null { spawn-sh "cliphist -db-path /run/user/1000/cliphist/db list | rofi -dmenu | cliphist -db-path /run/user/1000/cliphist/db decode | wl-copy"; }
|
||||
|
||||
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/settings-menu/settings-menu.rasi"; }
|
||||
|
||||
Super+N { spawn-sh "pkill rofi || 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"; }
|
||||
Super+Alt+L hotkey-overlay-title="Lock/Logout: wlogout" { spawn-sh "wlogout -P 1 -s -r 10 -c 10"; }
|
||||
|
||||
Mod+A { spawn-sh "pkill rofi || moonarch-volume"; }
|
||||
|
||||
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-"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
|
||||
|
||||
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
|
||||
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
|
||||
|
||||
Mod+O repeat=false { toggle-overview; }
|
||||
Mod+Tab repeat=false { toggle-overview; }
|
||||
|
||||
Mod+Q repeat=false { close-window; }
|
||||
|
||||
Mod+Left { focus-column-left; }
|
||||
Mod+Down { focus-window-down; }
|
||||
Mod+Up { focus-window-up; }
|
||||
Mod+Right { focus-column-right; }
|
||||
Mod+H { focus-column-left; }
|
||||
Mod+J { focus-window-down; }
|
||||
Mod+K { focus-window-up; }
|
||||
Mod+L { focus-column-right; }
|
||||
|
||||
Mod+Ctrl+Left { move-column-left; }
|
||||
Mod+Ctrl+Down { move-window-down; }
|
||||
Mod+Ctrl+Up { move-window-up; }
|
||||
Mod+Ctrl+Right { move-column-right; }
|
||||
Mod+Ctrl+H { move-column-left; }
|
||||
Mod+Ctrl+J { move-window-down; }
|
||||
Mod+Ctrl+K { move-window-up; }
|
||||
Mod+Ctrl+L { move-column-right; }
|
||||
|
||||
Mod+Home { focus-column-first; }
|
||||
Mod+End { focus-column-last; }
|
||||
Mod+Ctrl+Home { move-column-to-first; }
|
||||
Mod+Ctrl+End { move-column-to-last; }
|
||||
|
||||
Mod+Shift+Left { focus-monitor-left; }
|
||||
Mod+Shift+Down { focus-monitor-down; }
|
||||
Mod+Shift+Up { focus-monitor-up; }
|
||||
Mod+Shift+Right { focus-monitor-right; }
|
||||
Mod+Shift+H { focus-monitor-left; }
|
||||
Mod+Shift+J { focus-monitor-down; }
|
||||
Mod+Shift+K { focus-monitor-up; }
|
||||
Mod+Shift+L { focus-monitor-right; }
|
||||
|
||||
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||
|
||||
Mod+Page_Down { focus-workspace-down; }
|
||||
Mod+Page_Up { focus-workspace-up; }
|
||||
Mod+U { focus-workspace-down; }
|
||||
Mod+I { focus-workspace-up; }
|
||||
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||
|
||||
Mod+Shift+Page_Down { move-workspace-down; }
|
||||
Mod+Shift+Page_Up { move-workspace-up; }
|
||||
Mod+Shift+U { move-workspace-down; }
|
||||
Mod+Shift+I { move-workspace-up; }
|
||||
|
||||
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||
|
||||
Mod+WheelScrollRight { focus-column-right; }
|
||||
Mod+WheelScrollLeft { focus-column-left; }
|
||||
Mod+Ctrl+WheelScrollRight { move-column-right; }
|
||||
Mod+Ctrl+WheelScrollLeft { move-column-left; }
|
||||
|
||||
Mod+Shift+WheelScrollDown { focus-column-right; }
|
||||
Mod+Shift+WheelScrollUp { focus-column-left; }
|
||||
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
|
||||
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
|
||||
|
||||
Mod+1 { focus-workspace 1; }
|
||||
Mod+2 { focus-workspace 2; }
|
||||
Mod+3 { focus-workspace 3; }
|
||||
Mod+4 { focus-workspace 4; }
|
||||
Mod+5 { focus-workspace 5; }
|
||||
Mod+6 { focus-workspace 6; }
|
||||
Mod+7 { focus-workspace 7; }
|
||||
Mod+8 { focus-workspace 8; }
|
||||
Mod+9 { focus-workspace 9; }
|
||||
Mod+Ctrl+1 { move-column-to-workspace 1; }
|
||||
Mod+Ctrl+2 { move-column-to-workspace 2; }
|
||||
Mod+Ctrl+3 { move-column-to-workspace 3; }
|
||||
Mod+Ctrl+4 { move-column-to-workspace 4; }
|
||||
Mod+Ctrl+5 { move-column-to-workspace 5; }
|
||||
Mod+Ctrl+6 { move-column-to-workspace 6; }
|
||||
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
||||
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
||||
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
||||
|
||||
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||
Mod+BracketRight { consume-or-expel-window-right; }
|
||||
|
||||
Mod+Comma { consume-window-into-column; }
|
||||
Mod+Period { expel-window-from-column; }
|
||||
|
||||
Mod+R { switch-preset-column-width; }
|
||||
Mod+Shift+R { switch-preset-window-height; }
|
||||
Mod+Ctrl+R { reset-window-height; }
|
||||
Mod+F { maximize-column; }
|
||||
Mod+Shift+F { fullscreen-window; }
|
||||
|
||||
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||
|
||||
Mod+C { center-column; }
|
||||
Mod+Ctrl+C { center-visible-columns; }
|
||||
|
||||
Mod+Minus { set-column-width "-10%"; }
|
||||
Mod+Equal { set-column-width "+10%"; }
|
||||
|
||||
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||
|
||||
Mod+V { toggle-window-floating; }
|
||||
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||
|
||||
Mod+W { toggle-column-tabbed-display; }
|
||||
|
||||
Print { screenshot; }
|
||||
Ctrl+Print { screenshot-screen; }
|
||||
Alt+Print { screenshot-window; }
|
||||
|
||||
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||
|
||||
Mod+Shift+E { quit; }
|
||||
Ctrl+Alt+Delete { quit; }
|
||||
|
||||
Mod+Shift+P { power-off-monitors; }
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
# ABOUTME: Moonarch default PipeWire input denoising via RNNoise LADSPA plugin.
|
||||
# ABOUTME: User overrides go in ~/.config/pipewire/pipewire.conf.d/
|
||||
|
||||
context.modules = [
|
||||
{ name = libpipewire-module-filter-chain
|
||||
args = {
|
||||
node.description = "Noise Canceling source"
|
||||
media.name = "Noise Canceling source"
|
||||
filter.graph = {
|
||||
nodes = [
|
||||
{
|
||||
type = ladspa
|
||||
name = rnnoise
|
||||
plugin = librnnoise_ladspa
|
||||
label = noise_suppressor_mono
|
||||
control = {
|
||||
"VAD Threshold (%)" = 90.0
|
||||
"VAD Grace Period (ms)" = 150
|
||||
"Retroactive VAD Grace (ms)" = 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
capture.props = {
|
||||
node.name = "capture.rnnoise_source"
|
||||
node.passive = true
|
||||
audio.rate = 48000
|
||||
}
|
||||
playback.props = {
|
||||
node.name = "rnnoise_source"
|
||||
media.class = Audio/Source
|
||||
audio.rate = 48000
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
82
defaults/xdg/rofi/_template/colors.rasi
Normal file
82
defaults/xdg/rofi/_template/colors.rasi
Normal file
@ -0,0 +1,82 @@
|
||||
/**
|
||||
* @author Dominik Kressler
|
||||
* @package rofi-archer
|
||||
* @version 1.0.0
|
||||
**/
|
||||
|
||||
* {
|
||||
background: {@theme_bg_color};
|
||||
background-alt: {@theme_unfocused_fg_color}80;
|
||||
|
||||
|
||||
|
||||
foreground: {@theme_text_color};
|
||||
selected: #4c566a;
|
||||
border: {@borders};
|
||||
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: {@theme_text_color};
|
||||
subtext1: {@theme_text_color}80;
|
||||
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: {@theme_fg_color};
|
||||
theme-text-color: {@theme_text_color};
|
||||
theme-bg-color: {@theme_bg_color};
|
||||
theme-base-color: {@theme_base_color};
|
||||
|
||||
theme-bg-color-shade-1: {@theme_bg_color}EF;
|
||||
theme-bg-color-shade-2: {@theme_bg_color}D8;
|
||||
theme-bg-color-shade-3: {@theme_bg_color}C9;
|
||||
|
||||
theme-selected-bg-color: {@theme_selected_bg_color};
|
||||
theme-selected-fg-color: {@theme_selected_fg_color};
|
||||
|
||||
theme-unfocused-fg-color: {@theme_unfocused_fg_color};
|
||||
theme-unfocused-text-color: {@theme_unfocused_text_color};
|
||||
theme-unfocused-bg-color: {@theme_unfocused_bg_color};
|
||||
theme-unfocused-base-color: {@theme_unfocused_base_color};
|
||||
theme-unfocused-selected-bg-color: {@theme_unfocused_selected_bg_color};
|
||||
theme-unfocused-selected-fg-color: {@theme_unfocused_selected_fg_color};
|
||||
unfocused-insensitive-color: {@unfocused_insensitive_color};
|
||||
|
||||
borders: {@theme_selected_bg_color}30;
|
||||
unfocused-borders: {@unfocused_borders};
|
||||
|
||||
warning-color: {@warning_color};
|
||||
error-color: {@error_color};
|
||||
success-color: {@success_color};
|
||||
}
|
||||
295
defaults/xdg/rofi/bluetooth/bluetooth.rasi
Normal file
295
defaults/xdg/rofi/bluetooth/bluetooth.rasi
Normal file
@ -0,0 +1,295 @@
|
||||
/**
|
||||
*
|
||||
* Author : Aditya Shakya (adi1090x)
|
||||
* Github : @adi1090x
|
||||
*
|
||||
* Rofi Theme File
|
||||
* Rofi Version: 1.7.3
|
||||
**/
|
||||
|
||||
/*****----- Configuration -----*****/
|
||||
configuration {
|
||||
modi: "";
|
||||
show-icons: false;
|
||||
drun-display-format: "{name}";
|
||||
window-format: "{w} · {c} · {t}";
|
||||
}
|
||||
|
||||
/*****----- Global Properties -----*****/
|
||||
@import "../colors.rasi"
|
||||
@import "../fonts.rasi"
|
||||
|
||||
* {
|
||||
border-colour: var(border);
|
||||
handle-colour: var(selected);
|
||||
background-colour: var(background);
|
||||
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);
|
||||
}
|
||||
|
||||
/*****----- Main Window -----*****/
|
||||
window {
|
||||
/* properties for window widget */
|
||||
transparency: "real";
|
||||
location: center;
|
||||
anchor: center;
|
||||
fullscreen: false;
|
||||
width: 600px;
|
||||
x-offset: 0px;
|
||||
y-offset: 0px;
|
||||
|
||||
/* properties for all widgets */
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 1px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
cursor: "default";
|
||||
/* Backgroud Colors */
|
||||
background-color: @background-colour;
|
||||
/* Backgroud Image */
|
||||
//background-image: url("/path/to/image.png", none);
|
||||
/* Simple Linear Gradient */
|
||||
//background-image: linear-gradient(red, orange, pink, purple);
|
||||
/* Directional Linear Gradient */
|
||||
//background-image: linear-gradient(to bottom, pink, yellow, magenta);
|
||||
/* Angle Linear Gradient */
|
||||
//background-image: linear-gradient(45, cyan, purple, indigo);
|
||||
}
|
||||
|
||||
/*****----- Main Box -----*****/
|
||||
mainbox {
|
||||
enabled: true;
|
||||
spacing: 10px;
|
||||
margin: 0px;
|
||||
padding: 30px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px 0px 0px 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
children: [ "message", "listview", "inputbar" ];
|
||||
}
|
||||
|
||||
/*****----- Inputbar -----*****/
|
||||
inputbar {
|
||||
enabled: false;
|
||||
spacing: 10px;
|
||||
margin: 0;
|
||||
padding: 20px 0px 0;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
children: [ "textbox-prompt-colon", "entry", "mode-switcher" ];
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
enabled: true;
|
||||
padding: 5px 0px 0px 15px;
|
||||
expand: false;
|
||||
font: "MonarchOS 14";
|
||||
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: 5px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
cursor: "default";
|
||||
}
|
||||
scrollbar {
|
||||
handle-width: 5px;
|
||||
handle-color: @handle-colour;
|
||||
border-radius: 10px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/*****----- Elements -----*****/
|
||||
element {
|
||||
enabled: true;
|
||||
spacing: 10px;
|
||||
margin: 0px;
|
||||
padding: 5px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
cursor: pointer;
|
||||
}
|
||||
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(normal-background);
|
||||
}
|
||||
element selected.normal {
|
||||
background-color: var(selected-normal-background);
|
||||
text-color: var(normal-foreground);
|
||||
}
|
||||
element selected.urgent {
|
||||
background-color: var(selected-urgent-background);
|
||||
text-color: var(normal-background);
|
||||
}
|
||||
element selected.active {
|
||||
background-color: var(selected-active-background);
|
||||
text-color: var(normal-background);
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
size: 24px;
|
||||
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;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
button {
|
||||
padding: 7px 15px 7px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 100%;
|
||||
border-color: @border-colour;
|
||||
background-color: @alternate-background;
|
||||
text-color: inherit;
|
||||
cursor: pointer;
|
||||
}
|
||||
button selected {
|
||||
background-color: var(selected-normal-background);
|
||||
text-color: var(selected-normal-foreground);
|
||||
}
|
||||
|
||||
/*****----- Message -----*****/
|
||||
message {
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px 0px 0px 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
textbox {
|
||||
padding: 8px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: @alternate-background;
|
||||
text-color: @foreground-colour;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.0;
|
||||
highlight: none;
|
||||
placeholder-color: @foreground-colour;
|
||||
blink: true;
|
||||
markup: true;
|
||||
}
|
||||
error-message {
|
||||
padding: 10px;
|
||||
border: 2px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: @background-colour;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
157
defaults/xdg/rofi/calendar/rofi-calendar.rasi
Normal file
157
defaults/xdg/rofi/calendar/rofi-calendar.rasi
Normal file
@ -0,0 +1,157 @@
|
||||
* {
|
||||
on: #98B3C8;
|
||||
off: #CC9498;
|
||||
}
|
||||
|
||||
/*****----- Global Properties -----*****/
|
||||
@import "../colors.rasi"
|
||||
@import "../fonts.rasi"
|
||||
|
||||
configuration {
|
||||
show-icons: false;
|
||||
icon-theme: "Papirus";
|
||||
display-drun: ":";
|
||||
drun-display-format: "{name}";
|
||||
threads: 0;
|
||||
scroll-method: 0;
|
||||
disable-history: false;
|
||||
fullscreen: false;
|
||||
hide-scrollbar: true;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
width: 384px;
|
||||
location: center;
|
||||
anchor: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
padding: 4px 4px 6px 6px;
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
background-color: @background;
|
||||
text-color: @urgent;
|
||||
padding: 5px 0px 0px 4px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt ];
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
expand: false;
|
||||
border: 0px 0px 1px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px 0px 0px 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
|
||||
entry {
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
placeholder-color: @foreground;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search";
|
||||
blink: true;
|
||||
padding: 4px 0px 0px 0px;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @background;
|
||||
columns: 9;
|
||||
lines: 7;
|
||||
spacing: 5px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @background;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 5px;
|
||||
padding: 5px 5px 5px 5px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
orientation: horizontal;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
padding: 5px 5px 5px 5px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
size: 24px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0;
|
||||
margin: 2px 0px 2px 2px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @selected;
|
||||
text-color: @background;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
}
|
||||
|
||||
element.active,
|
||||
element.selected.urgent {
|
||||
background-color: @background-alt;
|
||||
text-color: @background;
|
||||
border-color: @background-alt;
|
||||
}
|
||||
|
||||
element.selected.urgent {
|
||||
border-color: @urgent;
|
||||
}
|
||||
|
||||
element.urgent,
|
||||
element.selected.active {
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
border-color: @background;
|
||||
}
|
||||
|
||||
element.selected.active {
|
||||
border-color: @selected;
|
||||
}
|
||||
|
||||
element-text, element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
82
defaults/xdg/rofi/colors.rasi
Normal file
82
defaults/xdg/rofi/colors.rasi
Normal file
@ -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;
|
||||
}
|
||||
305
defaults/xdg/rofi/config.rasi
Normal file
305
defaults/xdg/rofi/config.rasi
Normal file
@ -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: "JetBrainsMono 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-3;
|
||||
|
||||
}
|
||||
|
||||
/*****----- 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: "JetBrainsMono 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);
|
||||
}
|
||||
45
defaults/xdg/rofi/cpugov/rofi-cpugov.rasi
Normal file
45
defaults/xdg/rofi/cpugov/rofi-cpugov.rasi
Normal file
@ -0,0 +1,45 @@
|
||||
configuration {
|
||||
modi: "drun";
|
||||
show-icons: false;
|
||||
drun-display-format: "{name}";
|
||||
}
|
||||
|
||||
@import "../config.rasi"
|
||||
@import "../colors.rasi"
|
||||
|
||||
|
||||
window {
|
||||
enabled: true;
|
||||
cursor: "default";
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
280
defaults/xdg/rofi/emojis/emojis.rasi
Normal file
280
defaults/xdg/rofi/emojis/emojis.rasi
Normal file
@ -0,0 +1,280 @@
|
||||
/**
|
||||
*
|
||||
* Author : Aditya Shakya (adi1090x)
|
||||
* Github : @adi1090x
|
||||
*
|
||||
* Rofi Theme File
|
||||
* Rofi Version: 1.7.3
|
||||
**/
|
||||
|
||||
@import "../config.rasi"
|
||||
@import "../colors.rasi"
|
||||
/*****----- Configuration -----*****/
|
||||
configuration {
|
||||
|
||||
show-icons: true;
|
||||
display-emoji: "";
|
||||
}
|
||||
|
||||
/*****----- Global Properties -----*****/
|
||||
|
||||
* {
|
||||
border-colour: var(border);
|
||||
handle-colour: var(selected);
|
||||
background-colour: var(background);
|
||||
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);
|
||||
}
|
||||
|
||||
/*****----- Main Window -----*****/
|
||||
window {
|
||||
/* properties for window widget */
|
||||
transparency: "real";
|
||||
location: center;
|
||||
anchor: center;
|
||||
fullscreen: false;
|
||||
width: 600px;
|
||||
x-offset: 0px;
|
||||
y-offset: 0px;
|
||||
|
||||
/* properties for all widgets */
|
||||
enabled: true;
|
||||
|
||||
}
|
||||
|
||||
/*****----- Main Box -----*****/
|
||||
mainbox {
|
||||
enabled: true;
|
||||
spacing: 10px;
|
||||
margin: 0px;
|
||||
padding: 30px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px 0px 0px 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
children: [ "message", "listview", "inputbar" ];
|
||||
}
|
||||
|
||||
/*****----- Inputbar -----*****/
|
||||
inputbar {
|
||||
enabled: true;
|
||||
spacing: 10px;
|
||||
margin: 0;
|
||||
padding: 20px 0px 0;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
children: [ "textbox-prompt-colon", "entry" ];
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
enabled: true;
|
||||
padding: 5px 0px 0px 15px;
|
||||
expand: false;
|
||||
font: "MonarchOS 14";
|
||||
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: 4;
|
||||
lines: 8;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
scrollbar: true;
|
||||
layout: vertical;
|
||||
reverse: false;
|
||||
fixed-height: true;
|
||||
fixed-columns: true;
|
||||
|
||||
spacing: 5px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
|
||||
background-color: transparent;
|
||||
text-color: @subtext1;
|
||||
cursor: "default";
|
||||
}
|
||||
scrollbar {
|
||||
handle-width: 5px;
|
||||
handle-color: @handle-colour;
|
||||
border-radius: 10px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/*****----- Elements -----*****/
|
||||
element {
|
||||
enabled: true;
|
||||
spacing: 0px;
|
||||
margin: 0px;
|
||||
padding: 5px;
|
||||
border: 0px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @text;
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
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(normal-background);
|
||||
}
|
||||
element selected.normal {
|
||||
background-color: var(selected-normal-background);
|
||||
text-color: var(normal-foreground);
|
||||
}
|
||||
element selected.urgent {
|
||||
background-color: var(selected-urgent-background);
|
||||
text-color: var(normal-background);
|
||||
}
|
||||
element selected.active {
|
||||
background-color: var(selected-active-background);
|
||||
text-color: var(normal-background);
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
size: 0;
|
||||
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;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
button {
|
||||
padding: 7px 15px 7px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 100%;
|
||||
border-color: @border-colour;
|
||||
background-color: @alternate-background;
|
||||
text-color: inherit;
|
||||
cursor: pointer;
|
||||
}
|
||||
button selected {
|
||||
background-color: var(selected-normal-background);
|
||||
text-color: var(selected-normal-foreground);
|
||||
}
|
||||
|
||||
/*****----- Message -----*****/
|
||||
message {
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px 0px 0px 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
textbox {
|
||||
padding: 8px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: @alternate-background;
|
||||
text-color: @foreground-colour;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.0;
|
||||
highlight: none;
|
||||
placeholder-color: @foreground-colour;
|
||||
blink: true;
|
||||
markup: true;
|
||||
}
|
||||
error-message {
|
||||
padding: 10px;
|
||||
border: 2px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: @background-colour;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
3512
defaults/xdg/rofi/emojis/emojis.txt
Normal file
3512
defaults/xdg/rofi/emojis/emojis.txt
Normal file
File diff suppressed because it is too large
Load Diff
1
defaults/xdg/rofi/gtk-theme.ini
Normal file
1
defaults/xdg/rofi/gtk-theme.ini
Normal file
@ -0,0 +1 @@
|
||||
GTK_THEME=catppuccin-mocha-lavender-standard+default
|
||||
291
defaults/xdg/rofi/helper/rofi-bangs.rasi
Normal file
291
defaults/xdg/rofi/helper/rofi-bangs.rasi
Normal file
@ -0,0 +1,291 @@
|
||||
/**
|
||||
*
|
||||
* Author : Aditya Shakya (adi1090x)
|
||||
* Github : @adi1090x
|
||||
*
|
||||
* Rofi Theme File
|
||||
* Rofi Version: 1.7.3
|
||||
**/
|
||||
|
||||
/*****----- Configuration -----*****/
|
||||
configuration {
|
||||
modi: "drun,run,filebrowser,window";
|
||||
show-icons: true;
|
||||
drun-display-format: "{name}";
|
||||
}
|
||||
|
||||
/*****----- Global Properties -----*****/
|
||||
@import "../config.rasi"
|
||||
@import "../colors.rasi"
|
||||
@import "../fonts.rasi"
|
||||
|
||||
* {
|
||||
border-colour: var(border);
|
||||
handle-colour: var(selected);
|
||||
background-colour: var(background);
|
||||
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);
|
||||
}
|
||||
|
||||
/*****----- Main Window -----*****/
|
||||
window {
|
||||
/* properties for window widget */
|
||||
transparency: "real";
|
||||
location: center;
|
||||
anchor: center;
|
||||
fullscreen: false;
|
||||
width: 600px;
|
||||
x-offset: 0px;
|
||||
y-offset: 0px;
|
||||
|
||||
/* properties for all widgets */
|
||||
enabled: true;
|
||||
|
||||
cursor: "default";
|
||||
/* Backgroud Colors */
|
||||
background-color: @background-colour;
|
||||
/* Backgroud Image */
|
||||
//background-image: url("/path/to/image.png", none);
|
||||
/* Simple Linear Gradient */
|
||||
//background-image: linear-gradient(red, orange, pink, purple);
|
||||
/* Directional Linear Gradient */
|
||||
//background-image: linear-gradient(to bottom, pink, yellow, magenta);
|
||||
/* Angle Linear Gradient */
|
||||
//background-image: linear-gradient(45, cyan, purple, indigo);
|
||||
}
|
||||
|
||||
/*****----- Main Box -----*****/
|
||||
mainbox {
|
||||
enabled: true;
|
||||
spacing: 10px;
|
||||
margin: 0px;
|
||||
padding: 30px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px 0px 0px 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
children: [ "message", "listview", "inputbar" ];
|
||||
}
|
||||
|
||||
/*****----- Inputbar -----*****/
|
||||
inputbar {
|
||||
enabled: true;
|
||||
spacing: 10px;
|
||||
margin: 0;
|
||||
padding: 20px 0px 0;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
children: [ "textbox-prompt-colon", "entry", "mode-switcher" ];
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
enabled: true;
|
||||
padding: 5px 0px 0px 15px;
|
||||
expand: false;
|
||||
font: "MonarchOS 14";
|
||||
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: 2;
|
||||
lines: 8;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
scrollbar: false;
|
||||
layout: vertical;
|
||||
reverse: false;
|
||||
fixed-height: true;
|
||||
fixed-columns: true;
|
||||
|
||||
spacing: 5px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
cursor: "default";
|
||||
}
|
||||
scrollbar {
|
||||
handle-width: 5px;
|
||||
handle-color: @handle-colour;
|
||||
border-radius: 10px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/*****----- Elements -----*****/
|
||||
element {
|
||||
enabled: true;
|
||||
spacing: 0;
|
||||
margin: 0px;
|
||||
padding: 5px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
cursor: pointer;
|
||||
}
|
||||
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(normal-background);
|
||||
}
|
||||
element selected.normal {
|
||||
background-color: var(selected-normal-background);
|
||||
text-color: var(normal-foreground);
|
||||
}
|
||||
element selected.urgent {
|
||||
background-color: var(selected-urgent-background);
|
||||
text-color: var(normal-background);
|
||||
}
|
||||
element selected.active {
|
||||
background-color: var(selected-active-background);
|
||||
text-color: var(normal-background);
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
size: 0;
|
||||
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;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
button {
|
||||
padding: 7px 15px 7px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 100%;
|
||||
border-color: @border-colour;
|
||||
background-color: @alternate-background;
|
||||
text-color: inherit;
|
||||
cursor: pointer;
|
||||
}
|
||||
button selected {
|
||||
background-color: var(selected-normal-background);
|
||||
text-color: var(selected-normal-foreground);
|
||||
}
|
||||
|
||||
/*****----- Message -----*****/
|
||||
message {
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px 0px 0px 0px;
|
||||
border-color: @border-colour;
|
||||
background-color: transparent;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
textbox {
|
||||
padding: 8px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: @alternate-background;
|
||||
text-color: @foreground-colour;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.0;
|
||||
highlight: none;
|
||||
placeholder-color: @foreground-colour;
|
||||
blink: true;
|
||||
markup: true;
|
||||
}
|
||||
error-message {
|
||||
padding: 10px;
|
||||
border: 2px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @border-colour;
|
||||
background-color: @background-colour;
|
||||
text-color: @foreground-colour;
|
||||
}
|
||||
16
defaults/xdg/rofi/launcher/launcher.rasi
Normal file
16
defaults/xdg/rofi/launcher/launcher.rasi
Normal file
@ -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;
|
||||
}
|
||||
45
defaults/xdg/rofi/nm-vpn/nm-vpn.rasi
Normal file
45
defaults/xdg/rofi/nm-vpn/nm-vpn.rasi
Normal file
@ -0,0 +1,45 @@
|
||||
configuration {
|
||||
modi: "drun";
|
||||
show-icons: false;
|
||||
drun-display-format: "{name}";
|
||||
}
|
||||
|
||||
@import "../config.rasi"
|
||||
@import "../colors.rasi"
|
||||
|
||||
|
||||
window {
|
||||
enabled: true;
|
||||
cursor: "default";
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
76
defaults/xdg/rofi/powermenu/confirm.rasi
Normal file
76
defaults/xdg/rofi/powermenu/confirm.rasi
Normal file
@ -0,0 +1,76 @@
|
||||
@import "config.rasi"
|
||||
@import "colors.rasi"
|
||||
|
||||
configuration {
|
||||
show-icons: false;
|
||||
}
|
||||
|
||||
window {
|
||||
|
||||
width:200px;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
children: [ "message", "listview"];
|
||||
}
|
||||
|
||||
/*****----- Message -----*****/
|
||||
message {
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 8px;
|
||||
border: 0px solid;
|
||||
border-radius: 100%;
|
||||
background-color: transparent;
|
||||
text-color: var(theme-text-color);
|
||||
}
|
||||
textbox {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
|
||||
placeholder-color: var(theme-text-color);
|
||||
|
||||
font: "JetBrainsMono Nerd Font Bold 12";
|
||||
}
|
||||
error-message {
|
||||
padding: 12px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
background-color: var(theme-bg-color);
|
||||
text-color: var(theme-text-color);
|
||||
}
|
||||
|
||||
listview {
|
||||
columns: 2;
|
||||
lines: 1;
|
||||
layout:vertical;
|
||||
}
|
||||
|
||||
|
||||
element {
|
||||
enabled: true;
|
||||
spacing: 0px;
|
||||
margin: 0px;
|
||||
|
||||
border: 0px solid;
|
||||
border-radius: 100%;
|
||||
background-color: transparent;
|
||||
|
||||
cursor: "pointer";
|
||||
}
|
||||
element-text {
|
||||
background-color: transparent;
|
||||
text-color: var(theme-text-color);
|
||||
cursor: inherit;
|
||||
horizontal-align: 0.5;
|
||||
vertical-align:0;
|
||||
font: "JetBrainsMono Nerd Font 18";
|
||||
|
||||
}
|
||||
element selected.normal {
|
||||
background-color: var(theme-selected-bg-color);
|
||||
text-color: var(theme-selected-fg-color);
|
||||
}
|
||||
element-text selected.normal {
|
||||
text-color: var(mantle);
|
||||
}
|
||||
102
defaults/xdg/rofi/powermenu/powermenu.rasi
Normal file
102
defaults/xdg/rofi/powermenu/powermenu.rasi
Normal file
@ -0,0 +1,102 @@
|
||||
configuration {
|
||||
show-icons: false;
|
||||
}
|
||||
|
||||
@import "../config.rasi"
|
||||
|
||||
|
||||
window {
|
||||
fullscreen: true;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
enabled: true;
|
||||
spacing: 15px;
|
||||
margin: 0px;
|
||||
padding: 200px;
|
||||
background-color: transparent;
|
||||
children: ["inputbar", "listview" ];
|
||||
expand: true;
|
||||
}
|
||||
|
||||
|
||||
inputbar {
|
||||
enabled: true;
|
||||
spacing: 10px;
|
||||
margin: 0px;
|
||||
padding: 12px 19px 12px 16px;
|
||||
border-radius: 10px;
|
||||
text-color: var(theme-selected-bg-color);
|
||||
children: ["textbox-prompt-colon", "prompt"];
|
||||
background-color: var(theme-selected-fg-color);
|
||||
expand: false;
|
||||
}
|
||||
|
||||
|
||||
textbox-prompt-colon {
|
||||
enabled: true;
|
||||
expand: false;
|
||||
str: "";
|
||||
margin: 0;
|
||||
padding: 0 4px 0 0;
|
||||
font: "JetBrainsMono Nerd Font 16";
|
||||
}
|
||||
prompt {
|
||||
padding: 4px 0 0 0;
|
||||
}
|
||||
|
||||
dummy {
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
enabled: true;
|
||||
layout: horizontal;
|
||||
columns: 2;
|
||||
lines: 5;
|
||||
cycle: true;
|
||||
dynamic: false;
|
||||
scrollbar: false;
|
||||
reverse: false;
|
||||
fixed-height: true;
|
||||
fixed-columns: true;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.5;
|
||||
spacing: 15px;
|
||||
background-color: transparent;
|
||||
text-color: var(theme-text-color);
|
||||
cursor: "default";
|
||||
padding: 0;
|
||||
margin:0 ;
|
||||
}
|
||||
|
||||
element {
|
||||
enabled: true;
|
||||
spacing: 0px;
|
||||
margin: 0px;
|
||||
|
||||
border: 0px solid;
|
||||
border-radius: 10px;
|
||||
|
||||
background-color: transparent;
|
||||
|
||||
cursor: "pointer";
|
||||
}
|
||||
element-text {
|
||||
font: "JetBrainsMono Nerd Font 28";
|
||||
background-color: transparent;
|
||||
text-color: var(text);
|
||||
cursor: inherit;
|
||||
vertical-align: 0;
|
||||
horizontal-align: 1;
|
||||
padding: 0 10px;
|
||||
}
|
||||
element selected.normal {
|
||||
background-color: var(theme-selected-bg-color);
|
||||
}
|
||||
element-text selected.normal {
|
||||
text-color: var(theme-bg-color);
|
||||
}
|
||||
26
defaults/xdg/rofi/settings-menu/settings-menu.rasi
Normal file
26
defaults/xdg/rofi/settings-menu/settings-menu.rasi
Normal file
@ -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: "JetBrainsMono Nerd Font 9";
|
||||
}
|
||||
176
defaults/xdg/rofi/volume/-volume.rasi
Normal file
176
defaults/xdg/rofi/volume/-volume.rasi
Normal file
@ -0,0 +1,176 @@
|
||||
/**
|
||||
*
|
||||
* Author : Aditya Shakya (adi1090x)
|
||||
* Github : @adi1090x
|
||||
*
|
||||
* Rofi Theme File
|
||||
* Rofi Version: 1.7.3
|
||||
* ---
|
||||
*
|
||||
* @Modification Dominik Kressler
|
||||
* @package rofi-archer
|
||||
* @version 1.0.0
|
||||
**/
|
||||
|
||||
/*****----- Configuration -----*****/
|
||||
configuration {
|
||||
show-icons: false;
|
||||
}
|
||||
|
||||
/*****----- Global Properties -----*****/
|
||||
@import "../colors.rasi"
|
||||
@import "../fonts.rasi"
|
||||
|
||||
/*
|
||||
USE_BUTTONS=YES
|
||||
*/
|
||||
|
||||
/*****----- Main Window -----*****/
|
||||
window {
|
||||
/* properties for window widget */
|
||||
transparency: "real";
|
||||
location: center;
|
||||
anchor: center;
|
||||
fullscreen: false;
|
||||
width: 800px;
|
||||
x-offset: 0px;
|
||||
y-offset: 0px;
|
||||
|
||||
/* properties for all widgets */
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px solid;
|
||||
border-radius: 10px;
|
||||
border-color: @selected;
|
||||
cursor: "default";
|
||||
background-color: @background;
|
||||
}
|
||||
|
||||
/*****----- Main Box -----*****/
|
||||
mainbox {
|
||||
enabled: true;
|
||||
spacing: 15px;
|
||||
margin: 0px;
|
||||
padding: 30px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
background-color: transparent;
|
||||
children: [ "inputbar", "listview" ];
|
||||
}
|
||||
|
||||
/*****----- Inputbar -----*****/
|
||||
inputbar {
|
||||
enabled: true;
|
||||
spacing: 15px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
background-color: transparent;
|
||||
text-color: @foreground;
|
||||
children: [ "textbox-prompt-colon", "prompt"];
|
||||
}
|
||||
|
||||
dummy {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
enabled: true;
|
||||
expand: false;
|
||||
str: "";
|
||||
padding: 12px 20px 12px 16px;
|
||||
border-radius: 100%;
|
||||
background-color: @urgent;
|
||||
text-color: @background;
|
||||
}
|
||||
prompt {
|
||||
enabled: true;
|
||||
padding: 12px;
|
||||
border-radius: 100%;
|
||||
background-color: @active;
|
||||
text-color: @background;
|
||||
}
|
||||
|
||||
/*****----- Message -----*****/
|
||||
message {
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 12px;
|
||||
border: 0px solid;
|
||||
border-radius: 100%;
|
||||
border-color: @selected;
|
||||
background-color: transparent;
|
||||
text-color: @foreground;
|
||||
font-weight: bold;
|
||||
}
|
||||
textbox {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.5;
|
||||
placeholder-color: @foreground;
|
||||
blink: true;
|
||||
markup: true;
|
||||
}
|
||||
error-message {
|
||||
padding: 12px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
|
||||
/*****----- Listview -----*****/
|
||||
listview {
|
||||
enabled: true;
|
||||
columns: 5;
|
||||
lines: 1;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
scrollbar: false;
|
||||
layout: vertical;
|
||||
reverse: false;
|
||||
fixed-height: true;
|
||||
fixed-columns: true;
|
||||
|
||||
spacing: 15px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
background-color: transparent;
|
||||
text-color: @foreground;
|
||||
cursor: "default";
|
||||
}
|
||||
|
||||
/*****----- Elements -----*****/
|
||||
element {
|
||||
enabled: true;
|
||||
spacing: 0px;
|
||||
margin: 0px;
|
||||
padding: 40px 10px;
|
||||
border: 0px solid;
|
||||
border-radius: 100%;
|
||||
border-color: @selected;
|
||||
background-color: @selected;
|
||||
text-color: var(background-alt);
|
||||
cursor: pointer;
|
||||
}
|
||||
element-text {
|
||||
font: "JetBrainsMono Nerd Font bold 32";
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
cursor: inherit;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.5;
|
||||
}
|
||||
element selected.normal {
|
||||
background-color: var(background-alt);
|
||||
text-color: @foreground;
|
||||
}
|
||||
43
defaults/xdg/rofi/volume/volume.rasi
Normal file
43
defaults/xdg/rofi/volume/volume.rasi
Normal file
@ -0,0 +1,43 @@
|
||||
configuration {
|
||||
modi: "drun";
|
||||
show-icons: false;
|
||||
drun-display-format: "{name}";
|
||||
}
|
||||
|
||||
@import "../config.rasi"
|
||||
@import "../colors.rasi"
|
||||
|
||||
|
||||
window {
|
||||
enabled: true;
|
||||
cursor: "default";
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
559
defaults/xdg/waybar/config
Normal file
559
defaults/xdg/waybar/config
Normal file
@ -0,0 +1,559 @@
|
||||
{
|
||||
"__aboutme1": "Moonarch default waybar configuration for Niri.",
|
||||
"__aboutme2": "User overrides go in ~/.config/waybar/config",
|
||||
"layer": "top",
|
||||
"margin-top": 0,
|
||||
"spacing": 5,
|
||||
"fixed-center": true,
|
||||
"modules-left": [
|
||||
"group/sys",
|
||||
"niri/workspaces",
|
||||
"tray",
|
||||
"wlr/taskbar",
|
||||
"niri/window"
|
||||
],
|
||||
"modules-center": [
|
||||
|
||||
],
|
||||
"modules-right": [
|
||||
"mpris",
|
||||
"custom/cpugov",
|
||||
"group/net",
|
||||
"group/sound",
|
||||
"backlight",
|
||||
"battery",
|
||||
"group/indicators"
|
||||
],
|
||||
"group/indicators": {
|
||||
"orientation": "inherit",
|
||||
"modules": [
|
||||
"gamemode",
|
||||
//"custom/updates",
|
||||
"idle_inhibitor",
|
||||
"custom/dnd",
|
||||
"privacy"
|
||||
]
|
||||
},
|
||||
"group/net": {
|
||||
"orientation": "inherit",
|
||||
"modules": [
|
||||
"custom/vpn",
|
||||
"network",
|
||||
"bluetooth"
|
||||
]
|
||||
},
|
||||
"group/stats": {
|
||||
"orientation": "inherit",
|
||||
"modules": [
|
||||
"custom/cpugov",
|
||||
"cpu",
|
||||
"memory",
|
||||
"custom/gpu-usage"
|
||||
],
|
||||
"drawer": {
|
||||
"transition-duration": 500,
|
||||
"transition-left-to-right": false
|
||||
}
|
||||
},
|
||||
"group/sound": {
|
||||
"orientation": "inherit",
|
||||
"modules": [
|
||||
"pulseaudio",
|
||||
"pulseaudio/slider"
|
||||
],
|
||||
"drawer": {
|
||||
"transition-duration": 500,
|
||||
"transition-left-to-right": true
|
||||
}
|
||||
},
|
||||
"group/sys": {
|
||||
"orientation": "inherit",
|
||||
"modules": [
|
||||
"custom/power",
|
||||
"clock"
|
||||
]
|
||||
},
|
||||
"network": {
|
||||
"format-wifi": "{icon}",
|
||||
"format-ethernet": " {ifname}",
|
||||
"format-disconnected": " Offline",
|
||||
"tooltip-format": " {ifname} via {gwaddr}",
|
||||
"tooltip-format-wifi": " WiFi {essid} ({signalStrength}%)",
|
||||
"tooltip-format-ethernet": " {ifname}",
|
||||
"tooltip-format-disconnected": "Disconnected",
|
||||
"on-click": "nm-connection-editor",
|
||||
"format-icons": [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
],
|
||||
"max-length": 5
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 15,
|
||||
"spacing": 10
|
||||
},
|
||||
"clock": {
|
||||
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
||||
"format-alt": "<b>{:%d.%m.%Y %H:%M}</b>",
|
||||
"format": "<b>{:%d.%m. %H:%M}</b>",
|
||||
"timezone": "DE",
|
||||
"calendar": {
|
||||
"mode": "month",
|
||||
"mode-mon-col": 3,
|
||||
"weeks-pos": "right",
|
||||
"on-scroll": 1,
|
||||
"on-click-right": "mode",
|
||||
"format": {
|
||||
"months": "<span color='#b4befe'><b>{}</b></span>",
|
||||
"days": "<span color='#bac2de'><b>{}</b></span>",
|
||||
"weeks": "<span color='#f5e0dc'><b>W{}</b></span>",
|
||||
"weekdays": "<span color='#f9e2af'><b>{}</b></span>",
|
||||
"today": "<span color='#f38ba8'><b><u>{}</u></b></span>"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"on-click-right": "mode",
|
||||
"on-click-forward": "tz_up",
|
||||
"on-click-backward": "tz_down",
|
||||
"on-scroll-up": "shift_up",
|
||||
"on-scroll-down": "shift_down",
|
||||
"on-click-middle": "alarm-clock-applet"
|
||||
}
|
||||
// "on-click": "evolution"
|
||||
},
|
||||
"user": {
|
||||
"format": "{user}",
|
||||
"interval": 240,
|
||||
"icon": false,
|
||||
"height": 16,
|
||||
"width": 16,
|
||||
"open-on-click": false
|
||||
},
|
||||
"pulseaudio": {
|
||||
"format": "{format_source} {icon} <small>{volume}%</small>",
|
||||
"format-bluetooth": "{icon} {volume}% {format_source}",
|
||||
"format-bluetooth-muted": "{icon} {format_source}",
|
||||
"format-muted": "{icon} <b>0</b>%",
|
||||
"format-source": "",
|
||||
"format-source-muted": "",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"hands-free": "",
|
||||
"headset": "",
|
||||
"phone": "",
|
||||
"portable": "",
|
||||
"car": "",
|
||||
"default": [
|
||||
"",
|
||||
"",
|
||||
""
|
||||
]
|
||||
},
|
||||
"on-click": "moonarch-sink-switcher &",
|
||||
"on-click-right": "pavucontrol",
|
||||
"scroll-step": 5.0,
|
||||
"max-volume": 99
|
||||
},
|
||||
"pulseaudio/slider": {
|
||||
"min": 0,
|
||||
"max": 99,
|
||||
"orientation": "horizontal"
|
||||
},
|
||||
"mpris": {
|
||||
"format": "⏸ {title:.10}",
|
||||
"format-paused": "▶ {player}",
|
||||
"player-icons": {
|
||||
"default": "⏸",
|
||||
"mpv": "🎵",
|
||||
"spotify": "",
|
||||
"firefox": "",
|
||||
"mercury": ""
|
||||
},
|
||||
"status-icons": {
|
||||
"paused": "⏸"
|
||||
}
|
||||
},
|
||||
"custom/power": {
|
||||
"format": "",
|
||||
"menu": "on-click",
|
||||
"menu-file": "~/.config/waybar/session_menu.xml",
|
||||
"menu-actions": {
|
||||
"lock": "gtklock",
|
||||
"logout": "niri msg action quit",
|
||||
"hibernate": "systemctl hibernate",
|
||||
"reboot": "systemctl reboot",
|
||||
"suspend": "systemctl suspend",
|
||||
"shutdown": "systemctl poweroff"
|
||||
}
|
||||
},
|
||||
"gamemode": {
|
||||
"format": "{glyph}<small>{count}</small>",
|
||||
"format-alt": "{glyph}",
|
||||
"glyph": "",
|
||||
"hide-not-running": true,
|
||||
"use-icon": true,
|
||||
"icon-name": "input-gaming-symbolic",
|
||||
"icon-spacing": 1,
|
||||
"icon-size": 12,
|
||||
"tooltip": true,
|
||||
"tooltip-format": "Games running: {count}"
|
||||
},
|
||||
"wlr/taskbar": {
|
||||
"markup": true,
|
||||
"format": "{icon}",
|
||||
"icon-size": 16,
|
||||
"tooltip-format": "{title:.100}",
|
||||
// "sort-by-app-id": true,
|
||||
"on-click": "activate",
|
||||
"on-click-middle": "close",
|
||||
"on-right-middle": "minimize-raise",
|
||||
"ignore-list": ["title<>"],
|
||||
"app_ids-mapping": {
|
||||
"firefoxdeveloperedition": "firefox-developer-edition"
|
||||
},
|
||||
"rewrite": {
|
||||
"Mozilla Firefox": "Firefox",
|
||||
"firefox": "Firefox",
|
||||
"VSCodium": "Code",
|
||||
"codium": "Code",
|
||||
"Alacritty": "Terminal",
|
||||
},
|
||||
"squash-list": [
|
||||
"firefox"
|
||||
]
|
||||
},
|
||||
"custom/updates": {
|
||||
"format": "{icon}",
|
||||
"return-type": "json",
|
||||
"format-icons": {
|
||||
"has-updates": "",
|
||||
"updated": ""
|
||||
},
|
||||
"exec-if": "which waybar-module-pacman-updates",
|
||||
"exec": "waybar-module-pacman-updates",
|
||||
"on-click": "alacritty paru"
|
||||
},
|
||||
"custom/dnd": {
|
||||
"format": " {} ",
|
||||
"exec": "moonarch-dnd",
|
||||
"return-type": "json",
|
||||
"on-click": "dunstctl set-paused toggle",
|
||||
"restart-interval": 1,
|
||||
},
|
||||
"custom/notification": {
|
||||
"tooltip": false,
|
||||
"format": "{icon} {}",
|
||||
"format-icons": {
|
||||
"notification": "",
|
||||
"none": "",
|
||||
"dnd-notification": "",
|
||||
"dnd-none": "",
|
||||
"inhibited-notification": "",
|
||||
"inhibited-none": "",
|
||||
"dnd-inhibited-notification": "",
|
||||
"dnd-inhibited-none": ""
|
||||
},
|
||||
"return-type": "json",
|
||||
"exec-if": "which swaync-client",
|
||||
"exec": "swaync-client -swb",
|
||||
"on-click": "sh -c 'sleep 0.1s; swaync-client -t -sw; sleep 0.1s'",
|
||||
"on-click-right": "swaync-client -d -sw",
|
||||
"escape": true
|
||||
},
|
||||
"cava": {
|
||||
// "cava_config": "$XDG_CONFIG_HOME/cava/cava.conf",
|
||||
"framerate": 30,
|
||||
"autosens": 1,
|
||||
//"sensitivity": 50,
|
||||
"bars": 2,
|
||||
"lower_cutoff_freq": 50,
|
||||
"higher_cutoff_freq": 10000,
|
||||
"method": "pipewire",
|
||||
"source": "auto",
|
||||
"stereo": true,
|
||||
"reverse": false,
|
||||
"bar_delimiter": 0,
|
||||
"monstercat": true,
|
||||
"hide_on_silence": true,
|
||||
"waves": true,
|
||||
"noise_reduction": 0.77,
|
||||
"input_delay": 2,
|
||||
"sleep_timer": 5,
|
||||
"format-icons": [
|
||||
"▁",
|
||||
"▂",
|
||||
"▃",
|
||||
"▄",
|
||||
"▅",
|
||||
"▆",
|
||||
"▇",
|
||||
"█"
|
||||
],
|
||||
"actions": {
|
||||
"on-click-right": "mode"
|
||||
}
|
||||
},
|
||||
"cpu": {
|
||||
"interval": 10,
|
||||
"format": "CPU {icon}",
|
||||
"max-length": 10,
|
||||
"format-icons": [
|
||||
"<span color='#69ff94' size='8pt' rise='1.5pt'>▁</span>",
|
||||
"<span color='#2aa9ff' size='8pt' rise='1.5pt'>▂</span>",
|
||||
"<span color='#f8f8f2' size='8pt' rise='1.5pt'>▃</span>",
|
||||
"<span color='#f8f8f2' size='8pt' rise='1.5pt'>▄</span>",
|
||||
"<span color='#ffffa5' size='8pt' rise='1.5pt'>▅</span>",
|
||||
"<span color='#ffffa5' size='8pt' rise='1.5pt'>▆</span>",
|
||||
"<span color='#ff9977' size='8pt' rise='1.5pt'>▇</span>",
|
||||
"<span color='#dd532e' size='8pt' rise='1.5pt'>█</span>"
|
||||
]
|
||||
},
|
||||
"memory": {
|
||||
"interval": 30,
|
||||
"format": "MEM {icon}",
|
||||
"max-length": 10,
|
||||
"tooltip": true,
|
||||
"format-icons": [
|
||||
"<span color='#69ff94' size='8pt' rise='1.5pt'>▁</span>",
|
||||
"<span color='#2aa9ff' size='8pt' rise='1.5pt'>▂</span>",
|
||||
"<span color='#f8f8f2' size='8pt' rise='1.5pt'>▃</span>",
|
||||
"<span color='#f8f8f2' size='8pt' rise='1.5pt'>▄</span>",
|
||||
"<span color='#ffffa5' size='8pt' rise='1.5pt'>▅</span>",
|
||||
"<span color='#ffffa5' size='8pt' rise='1.5pt'>▆</span>",
|
||||
"<span color='#ff9977' size='8pt' rise='1.5pt'>▇</span>",
|
||||
"<span color='#dd532e' size='8pt' rise='1.5pt'>█</span>"
|
||||
]
|
||||
},
|
||||
"custom/cpugov": {
|
||||
"exec": "moonarch-waybar-cpugov",
|
||||
"return-type": "json",
|
||||
"restart-interval": 10,
|
||||
"on-click": "moonarch-cpugov"
|
||||
},
|
||||
"custom/gpu-usage": {
|
||||
"exec": "moonarch-waybar-gpustat",
|
||||
"return-type": "json",
|
||||
"restart-interval": 10
|
||||
},
|
||||
"battery": {
|
||||
"interval": 60,
|
||||
"states": {
|
||||
"warning": 30,
|
||||
"critical": 15
|
||||
},
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-icons": [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
],
|
||||
"max-length": 25
|
||||
},
|
||||
"bluetooth": {
|
||||
// "controller": "controller1", // specify the alias of the controller if there are more than 1 on the system
|
||||
"format": " {status}",
|
||||
"format-disabled": "", // an empty format will hide the module
|
||||
"format-connected": "<small>{num_connections}</small>",
|
||||
"tooltip-format": "{controller_alias}\t{controller_address}",
|
||||
"tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}\t{device_battery_percentage}%",
|
||||
"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
|
||||
"on-click": "blueberry"
|
||||
},
|
||||
"idle_inhibitor": {
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"activated": "",
|
||||
"deactivated": ""
|
||||
},
|
||||
"tooltip-format-activated": " No Lockscreen on idle",
|
||||
"tooltip-format-deactivated": " Lockscreen on idle"
|
||||
},
|
||||
"custom/vpn": {
|
||||
"format": "",
|
||||
"exec": "echo '{\"class\": \"connected\", \"tooltip\": \"VPN Connected\"}'",
|
||||
"exec-if": "test -d /proc/sys/net/ipv4/conf/tun0",
|
||||
"return-type": "json",
|
||||
"interval": 5
|
||||
},
|
||||
"power-profiles-daemon": {
|
||||
"format": "{icon}",
|
||||
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
|
||||
"tooltip": true,
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"performance": "",
|
||||
"balanced": "",
|
||||
"power-saver": ""
|
||||
}
|
||||
},
|
||||
"privacy": {
|
||||
"icon-spacing": 4,
|
||||
"icon-size": 12,
|
||||
"transition-duration": 250,
|
||||
"modules": [
|
||||
{
|
||||
"type": "screenshare",
|
||||
"tooltip": true,
|
||||
"tooltip-icon-size": 12
|
||||
},
|
||||
{
|
||||
"type": "audio-out",
|
||||
"tooltip": true,
|
||||
"tooltip-icon-size": 12
|
||||
},
|
||||
{
|
||||
"type": "audio-in",
|
||||
"tooltip": true,
|
||||
"tooltip-icon-size": 12
|
||||
}
|
||||
]
|
||||
},
|
||||
"niri/workspaces": {
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
// Named workspaces
|
||||
// (you need to configure them in niri)
|
||||
"browser": "",
|
||||
"discord": "",
|
||||
"chat": "<b></b>",
|
||||
|
||||
// Icons by state
|
||||
"active": "",
|
||||
"default": ""
|
||||
}
|
||||
},
|
||||
"niri/window": {
|
||||
"format": "{}",
|
||||
"rewrite": {
|
||||
"(.*) - Mozilla Firefox": "🌎 $1",
|
||||
"(.*) - zsh": "> [$1]"
|
||||
}
|
||||
},
|
||||
"backlight": {
|
||||
"device": "intel_backlight",
|
||||
"format": "{percent}% {icon}",
|
||||
"format-icons": ["", ""]
|
||||
},
|
||||
"backlight/slider": {
|
||||
"min": 10,
|
||||
"max": 100,
|
||||
"orientation": "horizontal",
|
||||
"device": "intel_backlight"
|
||||
},
|
||||
"cffi/niri-workspaces-enhanced": {
|
||||
// Make sure to set the path to the install location on your system
|
||||
// "module_path": "~/.config/waybar/niri-workspaces-enhanced.so",
|
||||
"module_path": "/usr/lib/waybar/libwaybar_niri_workspaces_enhanced.so",
|
||||
// Format string for workspace labels. Available placeholders:
|
||||
// {index} - Workspace index number
|
||||
// {name} - Workspace name (might be empty)
|
||||
// {index-and-name} - Index followed by name if present (e.g., "1 Work")
|
||||
// {value} - Name if present, otherwise index
|
||||
// {separator} - ": " when icons are present, "" when empty
|
||||
// {window-icons} - Formatted icons for windows in workspace
|
||||
"format": "{window-icons}",
|
||||
// Apply separate styles to icons depending on current state
|
||||
"window-icon-format": {
|
||||
"default": "{icon}",
|
||||
"urgent": "<span foreground='red'>{icon}</span>",
|
||||
"focused": "<span foreground='blue'>{icon}</span>",
|
||||
},
|
||||
// A mapping from window app_id to icon. Note that this module does
|
||||
// case-insensitive matching of app_ids, so capitalization doesn't matter.
|
||||
"window-icons": {
|
||||
"com.mitchellh.ghostty": "",
|
||||
"darktable": "",
|
||||
"foot": "",
|
||||
"google-chrome": "",
|
||||
"spotify": "",
|
||||
"steam": "",
|
||||
},
|
||||
// If no icon is found for a window, the default is used instead
|
||||
"window-icon-default": "*",
|
||||
},
|
||||
"height": 40,
|
||||
},
|
||||
"cffi/niri-windows": {
|
||||
// path where you placed the .so file
|
||||
"module_path": "/usr/lib/waybar-niri-windows.so",
|
||||
// configure the module's behavior
|
||||
"options": {
|
||||
// set the module mode
|
||||
// "graphical" (default): draw a minimap of windows in the current workspace
|
||||
// "text": draws symbols and a focus indicator for each column (mirrors v1 behavior)
|
||||
"mode": "graphical",
|
||||
|
||||
// ======= graphical mode options =======
|
||||
// when to show floating windows
|
||||
// - "always": always show floating window view, even if there are no floating windows
|
||||
// - "auto" (default): show floating window view if there are floating windows on the current workspace
|
||||
// - "never": never show floating windows
|
||||
"show-floating": "auto",
|
||||
// pick where the floating windows be shown relative to tiled windows
|
||||
// - "left": show floating windows on the left
|
||||
// - "right" (default): show floating windows on the right
|
||||
"floating-position": "right",
|
||||
// set minimum size of windows, in pixels (default: 1, minimum: 1)
|
||||
// if this value is too large to fit all windows (e.g. in a column with many windows),
|
||||
// it will be reduced
|
||||
"minimum-size": 1,
|
||||
// set spacing between windows/columns, in pixels (default: 1, minimum: 0)
|
||||
// if this value is too large, it will be reduced
|
||||
"spacing": 1,
|
||||
// set minimum size of windows, in pixels, to draw icons for (default: 0, minimum: 0)
|
||||
// if unset or 0, icons will only be drawn for tiled windows that are the only one in their column
|
||||
// if 1+, icons will be drawn for all windows where w >= icon-minimum-size and h >= icon-minimum-size
|
||||
// icons must be set in the "rules" section below for this to have any effect
|
||||
"icon-minimum-size": 0,
|
||||
// account for borders when calculating window sizes; see note below (default: 0, minimum: 0)
|
||||
"column-borders": 0, // border on .column
|
||||
"floating-borders": 0, // border on .floating
|
||||
// trigger actions on tile click (see https://yalter.github.io/niri/niri_ipc/enum.Action.html for available actions)
|
||||
// only actions that take a single window ID are supported
|
||||
// set to an empty string to disable
|
||||
"on-tile-click": "FocusWindow", // (default: FocusWindow)
|
||||
"on-tile-middle-click": "CloseWindow", // (default: CloseWindow)
|
||||
"on-tile-right-click": "", // (default: none)
|
||||
// add CSS classes/icons to windows based on their App ID/Title (see `niri msg windows`)
|
||||
// Go regular expression syntax is supported for app-id and title (see https://pkg.go.dev/regexp/syntax)
|
||||
// rules are checked in the order they are defined - first match wins and checking stops
|
||||
// set "continue" to true to also check and apply subsequent rules even if this rule matches
|
||||
// if multiple rules with icons are applied, the first one will be used
|
||||
// *icons are not drawn for floating windows by default*; set "icon-minimum-size" to enable (see above)
|
||||
"rules": [
|
||||
// .alacritty will be added to all windows with the App ID "Alacritty"
|
||||
// will be drawn in windows that match
|
||||
{ "app-id": "Alacritty", "class": "alacritty", "icon": "" },
|
||||
// .firefox will be added to all windows with the App ID "firefox"
|
||||
// subsequent rules are also checked and applied for firefox windows
|
||||
{ "app-id": "firefox", "class": "firefox", "continue": true },
|
||||
// .youtube-music will be added to all windows that have "YouTube Music" at the end of their title
|
||||
// will be drawn in windows that match
|
||||
{ "title": "YouTube Music$", "class": "youtube-music", "icon": "" }
|
||||
],
|
||||
|
||||
// ======= text mode options =======
|
||||
// customize the symbols used to draw the columns/windows
|
||||
"symbols": {
|
||||
"unfocused": "⋅",
|
||||
"focused": "⊙",
|
||||
"unfocused-floating": "∗",
|
||||
"focused-floating": "⊛",
|
||||
// text to display when there are no windows on the current workspace
|
||||
// if this is an empty string (default), the module will be hidden when there are no windows
|
||||
"empty": ""
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
// use niri IPC action names to trigger them (see https://yalter.github.io/niri/niri_ipc/enum.Action.html for available actions)
|
||||
// any action that has no fields is supported
|
||||
"on-scroll-up": "FocusColumnLeft",
|
||||
"on-scroll-down": "FocusColumnRight"
|
||||
// in graphical mode, don't configure click actions here—they're handled by the module above
|
||||
}
|
||||
}
|
||||
}
|
||||
28
defaults/xdg/waybar/power_menu.xml
Normal file
28
defaults/xdg/waybar/power_menu.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkMenu" id="menu">
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="suspend">
|
||||
<property name="label">Suspend</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="hibernate">
|
||||
<property name="label">Hibernate</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="shutdown">
|
||||
<property name="label">Shutdown</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparatorMenuItem" id="delimiter1"/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="reboot">
|
||||
<property name="label">Reboot</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
36
defaults/xdg/waybar/session_menu.xml
Normal file
36
defaults/xdg/waybar/session_menu.xml
Normal file
@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkMenu" id="menu">
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="lock">
|
||||
<property name="label"> Lock</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="logout">
|
||||
<property name="label"> Logout</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="hibernate">
|
||||
<property name="label"> Hibernate</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="reboot">
|
||||
<property name="label"> Reboot</property>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
|
||||
<child>
|
||||
<object class="GtkSeparatorMenuItem" id="delimiter1"/>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="shutdown">
|
||||
<property name="label"> Shutdown</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
351
defaults/xdg/waybar/style.css
Normal file
351
defaults/xdg/waybar/style.css
Normal file
@ -0,0 +1,351 @@
|
||||
/* ABOUTME: Moonarch default waybar stylesheet with Catppuccin Mocha inspired styling. */
|
||||
/* ABOUTME: User overrides go in ~/.config/waybar/style.css */
|
||||
|
||||
* {
|
||||
border: none;
|
||||
font-family: "Ubuntu Nerd Font", sans-serif;
|
||||
font-size: 13px;
|
||||
color: alpha(@theme_text_color, 0.8);
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
/*background: transparent;*/
|
||||
background: alpha(@theme_selected_fg_color, 0.2);
|
||||
}
|
||||
|
||||
/*-----main groups----*/
|
||||
.modules-right {
|
||||
margin: 0;
|
||||
padding-left: 5px;
|
||||
padding-right: 0;
|
||||
border-radius: 0;
|
||||
|
||||
}
|
||||
|
||||
.modules-center {
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.modules-left {
|
||||
margin: 0 0 0 5px;
|
||||
/* background-color:alpha(@theme_selected_bg_color, 0.15);
|
||||
background: @theme_bg_color */
|
||||
border-radius: 0;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/**
|
||||
## ALL MODULES
|
||||
**/
|
||||
#clock,
|
||||
#battery,
|
||||
#backlight,
|
||||
#cpu,
|
||||
#memory,
|
||||
#bluetooth,
|
||||
#temperature,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#tray,
|
||||
#mode,
|
||||
#idle_inhibitor,
|
||||
#workspaces,
|
||||
#custom-power,
|
||||
#custom-menu,
|
||||
#custom-media,
|
||||
#custom-notification,
|
||||
#custom-updates,
|
||||
#custom-pacman,
|
||||
#user,
|
||||
#cava,
|
||||
#custom-gpu-usage,
|
||||
#custom-cpugov,
|
||||
#custom-vpn.connected,
|
||||
#power-profiles-daemon,
|
||||
#privacy,
|
||||
#gamemode,
|
||||
#taskbar,
|
||||
#window {
|
||||
padding: 0px 10px;
|
||||
}
|
||||
|
||||
/**
|
||||
* GROUPS
|
||||
**/
|
||||
#sys,
|
||||
#stats,
|
||||
#net,
|
||||
#sound {
|
||||
margin: 0;
|
||||
color: alpha(@theme_text_color, 0.5);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* SYS
|
||||
**/
|
||||
#sys {
|
||||
padding: 0 0px 0 10px;
|
||||
}
|
||||
|
||||
#custom-power {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#user {
|
||||
padding-left: 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#custom-weather {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
|
||||
#stats .drawer-child {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
#tray {
|
||||
border-radius: 4px;
|
||||
padding: 0px 8px 0px 8px;
|
||||
margin: 8px 0px 8px 0px;
|
||||
background-color: alpha(@theme_selected_bg_color, 0.1);
|
||||
}
|
||||
|
||||
#custom-notification {
|
||||
padding-right: 0
|
||||
}
|
||||
|
||||
/**
|
||||
* SOUND
|
||||
**/
|
||||
|
||||
#cava {
|
||||
background-color: transparent;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#pulseaudio-slider {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
#pulseaudio-slider slider {
|
||||
min-height: 0px;
|
||||
min-width: 0px;
|
||||
opacity: 0;
|
||||
background-image: none;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
background-color: @insensitive_bg_color;
|
||||
border: 1px solid alpha(@theme_selected_bg_color, 0.1);
|
||||
}
|
||||
|
||||
#pulseaudio-slider trough {
|
||||
min-height: 4px;
|
||||
min-width: 80px;
|
||||
border-radius: 5px;
|
||||
background-color: alpha(@theme_selected_bg_color, 0.3);
|
||||
}
|
||||
|
||||
#pulseaudio-slider highlight {
|
||||
|
||||
min-width: 5px;
|
||||
border-radius: 5px;
|
||||
background-color: #6c7086;
|
||||
}
|
||||
|
||||
#custom-updates {
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* MISC
|
||||
**/
|
||||
#mpris {
|
||||
border-radius: 0;
|
||||
margin: 8px 10px 8px 0px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
/**
|
||||
* WORKSPACES
|
||||
**/
|
||||
/*#workspaces {
|
||||
padding: 0;
|
||||
border-radius: 0
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0px 10px 0px 8px;
|
||||
margin: 8px 2px 8px 0px;
|
||||
outline: none;
|
||||
border-radius: 4px;
|
||||
background-color: alpha(@theme_selected_bg_color, 0.05);
|
||||
}
|
||||
|
||||
#workspaces button:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#workspaces button.empty,
|
||||
#workspaces button.active.empty {
|
||||
color: inherit;
|
||||
padding: 0px 0px 0px 8px;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
background-color: transparent;
|
||||
padding: 0px 10px 0px 8px;
|
||||
}
|
||||
|
||||
#workspaces button.visible {
|
||||
background-color: alpha(@theme_selected_bg_color, 0.1);
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
color: #cc3436;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background-color: alpha(@theme_selected_bg_color, 0.05);
|
||||
box-shadow: inherit;
|
||||
text-shadow: inherit;
|
||||
}*/
|
||||
|
||||
#workspaces {
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
margin: 8px 2px 8px 0px;
|
||||
padding: 0;
|
||||
outline: none;
|
||||
border-radius: 4px;
|
||||
background-color: alpha(@theme_selected_bg_color, 0.05);
|
||||
}
|
||||
|
||||
#workspaces button:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#workspaces button.empty,
|
||||
#workspaces button.active.empty {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
#workspaces button.active {}
|
||||
|
||||
#workspaces button.visible {
|
||||
background-color: alpha(@theme_selected_bg_color, 0.1);
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
color: #cc3436;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background-color: alpha(@theme_selected_bg_color, 0.05);
|
||||
box-shadow: inherit;
|
||||
text-shadow: inherit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
## INDICATORS
|
||||
**/
|
||||
#pulseaudio.muted {
|
||||
color: #cc3436;
|
||||
}
|
||||
|
||||
#battery.charging {
|
||||
color: #2dcc36;
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
color: #e6e600;
|
||||
}
|
||||
|
||||
#battery.critical:not(.charging) {
|
||||
color: #cc3436;
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
color: #cc3436;
|
||||
}
|
||||
|
||||
#idle_inhibitor.activated {
|
||||
color: alpha(@theme_selected_bg_color, 0.9);
|
||||
}
|
||||
|
||||
#indicators {
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* TASKBAR
|
||||
**/
|
||||
#taskbar {
|
||||
font-size: 8px;
|
||||
margin: 0 0 0 5px;
|
||||
opacity: 1;
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
#taskbar.empty {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#taskbar button {
|
||||
padding: 3px 10px 3px 10px;
|
||||
transition: 100ms border ease-in-out;
|
||||
border-radius: 0;
|
||||
font-size: 8px;
|
||||
}
|
||||
|
||||
#taskbar button:not(:first-child) {
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
#taskbar button:first-child {}
|
||||
|
||||
#taskbar button:last-child {}
|
||||
|
||||
#taskbar button:last-child:first-child {}
|
||||
|
||||
#taskbar button.empty {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#taskbar button:hover {
|
||||
|
||||
background-color: alpha(@theme_selected_bg_color, 0.1);
|
||||
}
|
||||
|
||||
#taskbar button.active {
|
||||
background-color: alpha(@theme_selected_bg_color, 0.05);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
menu {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
menuitem {
|
||||
border-radius: 4px;
|
||||
|
||||
}
|
||||
29
defaults/xdg/waypaper/config.ini
Normal file
29
defaults/xdg/waypaper/config.ini
Normal file
@ -0,0 +1,29 @@
|
||||
# ABOUTME: Moonarch default waypaper configuration.
|
||||
# ABOUTME: User overrides go in ~/.config/waypaper/config.ini
|
||||
|
||||
[Settings]
|
||||
language = en
|
||||
folder = ~/Pictures/Wallpaper
|
||||
monitors = All
|
||||
wallpaper = /usr/share/moonarch/wallpaper.jpg
|
||||
backend = swww
|
||||
fill = fill
|
||||
sort = name
|
||||
color = #ffffff
|
||||
subfolders = False
|
||||
show_hidden = False
|
||||
show_gifs_only = False
|
||||
show_transition_options = True
|
||||
post_command =
|
||||
number_of_columns = 3
|
||||
swww_transition_type = any
|
||||
swww_transition_step = 90
|
||||
swww_transition_angle = 0
|
||||
swww_transition_duration = 2
|
||||
swww_transition_fps = 60
|
||||
use_xdg_state = False
|
||||
show_path_in_tooltip = True
|
||||
all_subfolders = False
|
||||
mpvpaper_sound = False
|
||||
mpvpaper_options =
|
||||
zen_mode = False
|
||||
38
defaults/xdg/wlogout/layout
Normal file
38
defaults/xdg/wlogout/layout
Normal file
@ -0,0 +1,38 @@
|
||||
// ABOUTME: Moonarch default wlogout layout.
|
||||
// ABOUTME: User overrides go in ~/.config/wlogout/layout
|
||||
{
|
||||
"label" : "lock",
|
||||
"action" : "gtklock",
|
||||
"text" : "Lock",
|
||||
"keybind" : "l"
|
||||
}
|
||||
{
|
||||
"label" : "hibernate",
|
||||
"action" : "systemctl hibernate",
|
||||
"text" : "Hibernate",
|
||||
"keybind" : "h"
|
||||
}
|
||||
{
|
||||
"label" : "logout",
|
||||
"action" : "niri msg action quit",
|
||||
"text" : "Logout",
|
||||
"keybind" : "e"
|
||||
}
|
||||
{
|
||||
"label" : "shutdown",
|
||||
"action" : "systemctl poweroff",
|
||||
"text" : "Shutdown",
|
||||
"keybind" : "s"
|
||||
}
|
||||
{
|
||||
"label" : "suspend",
|
||||
"action" : "systemctl suspend",
|
||||
"text" : "Suspend",
|
||||
"keybind" : "u"
|
||||
}
|
||||
{
|
||||
"label" : "reboot",
|
||||
"action" : "systemctl reboot",
|
||||
"text" : "Reboot",
|
||||
"keybind" : "r"
|
||||
}
|
||||
28
packages/aur.txt
Normal file
28
packages/aur.txt
Normal file
@ -0,0 +1,28 @@
|
||||
# ABOUTME: Liste der AUR-Pakete, die nach der Basisinstallation via paru installiert werden.
|
||||
# ABOUTME: Wird von post-install.sh verwendet.
|
||||
|
||||
# AUR Helper (wird zuerst manuell gebaut)
|
||||
# paru
|
||||
|
||||
# Theming
|
||||
catppuccin-gtk-theme-mocha
|
||||
newaita-reborn-icons-git
|
||||
|
||||
# Niri / Wayland Extras
|
||||
rofi-lbonn-wayland-git
|
||||
waybar-niri-windows-bin
|
||||
waybar-niri-workspaces-enhanced-git
|
||||
waypaper
|
||||
wdisplays-git
|
||||
wl-color-picker
|
||||
wlogout
|
||||
gtklock-dpms-module
|
||||
|
||||
# Anwendungen
|
||||
blueberry
|
||||
waterfox-bin
|
||||
|
||||
# System & Tools
|
||||
auto-cpufreq
|
||||
stasis
|
||||
timeshift-autosnap
|
||||
101
packages/official.txt
Normal file
101
packages/official.txt
Normal file
@ -0,0 +1,101 @@
|
||||
# ABOUTME: Liste der offiziell installierten Pakete aus den Arch-Repos.
|
||||
# ABOUTME: Wird von archinstall und post-install.sh verwendet.
|
||||
|
||||
# Base
|
||||
base
|
||||
base-devel
|
||||
linux-firmware
|
||||
efibootmgr
|
||||
btrfs-progs
|
||||
man-db
|
||||
cpio
|
||||
unzip
|
||||
zip
|
||||
|
||||
# Shell & Terminal
|
||||
zsh
|
||||
foot
|
||||
foot-terminfo
|
||||
bat
|
||||
btop
|
||||
eza
|
||||
fastfetch
|
||||
fd
|
||||
fzf
|
||||
jq
|
||||
ripgrep
|
||||
lazygit
|
||||
|
||||
# Netzwerk
|
||||
networkmanager
|
||||
network-manager-applet
|
||||
networkmanager-openvpn
|
||||
openvpn
|
||||
smbclient
|
||||
sshfs
|
||||
nmap
|
||||
wget
|
||||
|
||||
# Audio (PipeWire)
|
||||
pipewire
|
||||
pipewire-alsa
|
||||
pipewire-jack
|
||||
pipewire-pulse
|
||||
wireplumber
|
||||
libpulse
|
||||
gst-plugin-pipewire
|
||||
alsa-utils
|
||||
pavucontrol
|
||||
|
||||
# Wayland / Niri
|
||||
niri
|
||||
xwayland-satellite
|
||||
|
||||
# Desktop-Utilities
|
||||
waybar
|
||||
dunst
|
||||
cliphist
|
||||
swww
|
||||
brightnessctl
|
||||
gtklock
|
||||
gtklock-playerctl-module
|
||||
gtklock-powerbar-module
|
||||
gtklock-userinfo-module
|
||||
nwg-look
|
||||
greetd
|
||||
greetd-regreet
|
||||
polkit-gnome
|
||||
|
||||
# Dateimanager / XDG
|
||||
gvfs
|
||||
gvfs-dnssd
|
||||
gvfs-mtp
|
||||
gvfs-smb
|
||||
udisks2
|
||||
ntfs-3g
|
||||
xdg-desktop-portal-gnome
|
||||
xdg-desktop-portal-gtk
|
||||
qt6-5compat
|
||||
|
||||
# Themes & Fonts
|
||||
ttf-hack-nerd
|
||||
|
||||
# Anwendungen
|
||||
viewnior
|
||||
|
||||
# Entwicklung
|
||||
git
|
||||
glab
|
||||
go
|
||||
neovim
|
||||
npm
|
||||
rustup
|
||||
stow
|
||||
|
||||
# System
|
||||
docker
|
||||
docker-compose
|
||||
fwupd
|
||||
plocate
|
||||
timeshift
|
||||
ufw
|
||||
32
scripts/install-themes.sh
Executable file
32
scripts/install-themes.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
# ABOUTME: Installiert Themes die nicht via Pakete verfügbar sind (Cursor-Theme).
|
||||
# ABOUTME: Wird von post-install.sh aufgerufen.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
log() {
|
||||
echo -e "\e[1;34m[Moonarch]\e[0m $*"
|
||||
}
|
||||
|
||||
# --- Sweet-cursors ---
|
||||
CURSOR_DEST="/usr/share/icons/Sweet-cursors"
|
||||
|
||||
if [[ -d "$CURSOR_DEST" ]]; then
|
||||
log "Sweet-cursors bereits installiert."
|
||||
else
|
||||
log "Installiere Sweet-cursors..."
|
||||
TMPDIR=$(mktemp -d)
|
||||
git clone --depth 1 https://github.com/EliverLara/Sweet.git "$TMPDIR/sweet"
|
||||
|
||||
if [[ -d "$TMPDIR/sweet/kde/cursors/Sweet-cursors" ]]; then
|
||||
sudo cp -r "$TMPDIR/sweet/kde/cursors/Sweet-cursors" "$CURSOR_DEST"
|
||||
log "Sweet-cursors nach $CURSOR_DEST installiert."
|
||||
else
|
||||
echo "Cursor-Verzeichnis nicht gefunden im Repository." >&2
|
||||
echo "Bitte manuell installieren: https://github.com/EliverLara/Sweet" >&2
|
||||
fi
|
||||
|
||||
rm -rf "$TMPDIR"
|
||||
fi
|
||||
190
scripts/post-install.sh
Executable file
190
scripts/post-install.sh
Executable file
@ -0,0 +1,190 @@
|
||||
#!/bin/bash
|
||||
# ABOUTME: Post-Install-Script für Moonarch — installiert Pakete, Defaults und konfiguriert das System.
|
||||
# ABOUTME: Wird nach der archinstall-Basisinstallation als normaler User ausgeführt.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
OFFICIAL_PACKAGES="$PROJECT_DIR/packages/official.txt"
|
||||
AUR_PACKAGES="$PROJECT_DIR/packages/aur.txt"
|
||||
DEFAULTS_DIR="$PROJECT_DIR/defaults"
|
||||
|
||||
# --- Hilfsfunktionen ---
|
||||
|
||||
log() {
|
||||
echo -e "\e[1;34m[Moonarch]\e[0m $*"
|
||||
}
|
||||
|
||||
err() {
|
||||
echo -e "\e[1;31m[Moonarch FEHLER]\e[0m $*" >&2
|
||||
}
|
||||
|
||||
read_packages() {
|
||||
grep -v '^\s*#' "$1" | grep -v '^\s*$'
|
||||
}
|
||||
|
||||
# --- Voraussetzungen prüfen ---
|
||||
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
err "Bitte NICHT als root ausführen. Das Script nutzt sudo wo nötig."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v pacman &>/dev/null; then
|
||||
err "pacman nicht gefunden — ist das wirklich Arch Linux?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Offizielle Pakete installieren ---
|
||||
|
||||
log "Installiere offizielle Pakete..."
|
||||
if [[ -f "$OFFICIAL_PACKAGES" ]]; then
|
||||
# shellcheck disable=SC2046
|
||||
sudo pacman -S --needed --noconfirm $(read_packages "$OFFICIAL_PACKAGES")
|
||||
else
|
||||
err "Paketliste nicht gefunden: $OFFICIAL_PACKAGES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- paru installieren (AUR Helper) ---
|
||||
|
||||
if ! command -v paru &>/dev/null; then
|
||||
log "Installiere paru..."
|
||||
PARU_TMPDIR=$(mktemp -d)
|
||||
git clone https://aur.archlinux.org/paru.git "$PARU_TMPDIR/paru"
|
||||
(cd "$PARU_TMPDIR/paru" && makepkg -si --noconfirm)
|
||||
rm -rf "$PARU_TMPDIR"
|
||||
else
|
||||
log "paru bereits installiert."
|
||||
fi
|
||||
|
||||
# --- AUR-Pakete installieren ---
|
||||
|
||||
log "Installiere AUR-Pakete..."
|
||||
if [[ -f "$AUR_PACKAGES" ]]; then
|
||||
# shellcheck disable=SC2046
|
||||
paru -S --needed --noconfirm $(read_packages "$AUR_PACKAGES")
|
||||
else
|
||||
err "AUR-Paketliste nicht gefunden: $AUR_PACKAGES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Themes installieren (Cursor etc.) ---
|
||||
|
||||
log "Installiere Themes..."
|
||||
"$SCRIPT_DIR/install-themes.sh"
|
||||
|
||||
# --- XDG Defaults installieren ---
|
||||
|
||||
log "Installiere XDG-Defaults nach /etc/xdg/..."
|
||||
sudo cp -r "$DEFAULTS_DIR/xdg/"* /etc/xdg/
|
||||
|
||||
# Sicherstellen dass Rofi-Scripts ausführbar sind
|
||||
sudo find /etc/xdg/rofi -name "*.sh" -exec chmod +x {} \;
|
||||
|
||||
# --- Helper-Scripts installieren ---
|
||||
|
||||
log "Installiere Moonarch Helper-Scripts nach /usr/local/bin/..."
|
||||
sudo install -m 755 "$DEFAULTS_DIR/bin/moonarch-"* /usr/local/bin/
|
||||
|
||||
# --- Zsh-Konfiguration ---
|
||||
|
||||
log "Installiere Zsh-Default-Config..."
|
||||
sudo cp "$DEFAULTS_DIR/shell/zshrc" /etc/zsh/zshrc.moonarch
|
||||
|
||||
# Eintrag in /etc/zsh/zshrc damit Moonarch-Defaults geladen werden,
|
||||
# sofern der User keine eigene ~/.zshrc hat
|
||||
if ! grep -q "zshrc.moonarch" /etc/zsh/zshrc 2>/dev/null; then
|
||||
echo '# Moonarch defaults (wird durch ~/.zshrc überschrieben)' | sudo tee -a /etc/zsh/zshrc > /dev/null
|
||||
echo '[[ ! -f "$HOME/.zshrc" ]] && source /etc/zsh/zshrc.moonarch' | sudo tee -a /etc/zsh/zshrc > /dev/null
|
||||
fi
|
||||
|
||||
# Falls der User noch keine .zshrc hat, Moonarch-Default verlinken
|
||||
if [[ ! -f "$HOME/.zshrc" ]]; then
|
||||
log "Keine ~/.zshrc gefunden — sourcing Moonarch-Defaults."
|
||||
mkdir -p "$HOME/.zshrc.d"
|
||||
echo "# Moonarch-Defaults laden, eigene Overrides in ~/.zshrc.d/ oder hier unten" > "$HOME/.zshrc"
|
||||
echo "source /etc/zsh/zshrc.moonarch" >> "$HOME/.zshrc"
|
||||
fi
|
||||
|
||||
# --- greetd / regreet Konfiguration ---
|
||||
|
||||
log "Konfiguriere greetd + regreet..."
|
||||
sudo mkdir -p /etc/greetd
|
||||
sudo cp "$DEFAULTS_DIR/etc/greetd/config.toml" /etc/greetd/config.toml
|
||||
sudo cp "$DEFAULTS_DIR/etc/greetd/niri-greeter.kdl" /etc/greetd/niri-greeter.kdl
|
||||
sudo cp "$DEFAULTS_DIR/etc/greetd/regreet.toml" /etc/greetd/regreet.toml
|
||||
sudo cp "$DEFAULTS_DIR/etc/greetd/regreet.css" /etc/greetd/regreet.css
|
||||
|
||||
# Greeter-Wallpaper installieren
|
||||
log "Installiere Greeter-Wallpaper..."
|
||||
sudo mkdir -p /usr/share/backgrounds
|
||||
sudo cp "$DEFAULTS_DIR/backgrounds/moonarch-greeter.jpg" /usr/share/backgrounds/moonarch-greeter.jpg
|
||||
|
||||
# --- Systemd-Services aktivieren ---
|
||||
|
||||
log "Aktiviere Services..."
|
||||
SERVICES=(
|
||||
"NetworkManager"
|
||||
"bluetooth"
|
||||
"docker"
|
||||
"greetd"
|
||||
"systemd-timesyncd"
|
||||
"ufw"
|
||||
"auto-cpufreq"
|
||||
)
|
||||
|
||||
for service in "${SERVICES[@]}"; do
|
||||
if systemctl list-unit-files "${service}.service" &>/dev/null; then
|
||||
sudo systemctl enable "$service"
|
||||
log " + $service"
|
||||
else
|
||||
log " ~ $service nicht gefunden, uebersprungen."
|
||||
fi
|
||||
done
|
||||
|
||||
# --- Shell auf zsh setzen ---
|
||||
|
||||
if [[ "$SHELL" != */zsh ]]; then
|
||||
log "Setze Standard-Shell auf zsh..."
|
||||
chsh -s "$(which zsh)"
|
||||
fi
|
||||
|
||||
# --- Firewall aktivieren ---
|
||||
|
||||
log "Konfiguriere UFW..."
|
||||
sudo ufw default deny incoming
|
||||
sudo ufw default allow outgoing
|
||||
sudo ufw --force enable
|
||||
|
||||
# --- Docker-Gruppe ---
|
||||
|
||||
if ! groups | grep -q docker; then
|
||||
log "Fuege User zur docker-Gruppe hinzu..."
|
||||
sudo usermod -aG docker "$USER"
|
||||
fi
|
||||
|
||||
# --- Screenshots-Verzeichnis ---
|
||||
|
||||
mkdir -p "$HOME/Pictures/Screenshots"
|
||||
mkdir -p "$HOME/Pictures/Wallpaper"
|
||||
|
||||
# --- moonarch-update Symlink ---
|
||||
|
||||
log "Erstelle moonarch-update Kommando..."
|
||||
sudo ln -sf "$PROJECT_DIR/scripts/update.sh" /usr/local/bin/moonarch-update
|
||||
|
||||
# --- Fertig ---
|
||||
|
||||
log ""
|
||||
log "============================================"
|
||||
log " Moonarch Installation abgeschlossen!"
|
||||
log "============================================"
|
||||
log ""
|
||||
log "Naechste Schritte:"
|
||||
log " 1. Reboot"
|
||||
log " 2. Wallpaper in ~/Pictures/Wallpaper/ ablegen"
|
||||
log " 3. rustup default stable"
|
||||
log " 4. User-Overrides in ~/.config/ oder ~/.zshrc.d/"
|
||||
log ""
|
||||
196
scripts/update.sh
Executable file
196
scripts/update.sh
Executable file
@ -0,0 +1,196 @@
|
||||
#!/bin/bash
|
||||
# ABOUTME: Moonarch System-Updater — aktualisiert System, Repo und Defaults.
|
||||
# ABOUTME: Sollte regelmäßig ausgeführt werden um das System synchron zu halten.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
OFFICIAL_PACKAGES="$PROJECT_DIR/packages/official.txt"
|
||||
AUR_PACKAGES="$PROJECT_DIR/packages/aur.txt"
|
||||
DEFAULTS_DIR="$PROJECT_DIR/defaults"
|
||||
|
||||
# --- Hilfsfunktionen ---
|
||||
|
||||
log() {
|
||||
echo -e "\e[1;34m[Moonarch]\e[0m $*"
|
||||
}
|
||||
|
||||
err() {
|
||||
echo -e "\e[1;31m[Moonarch FEHLER]\e[0m $*" >&2
|
||||
}
|
||||
|
||||
read_packages() {
|
||||
grep -v '^\s*#' "$1" | grep -v '^\s*$'
|
||||
}
|
||||
|
||||
confirm() {
|
||||
read -r -p "$1 [j/N] " response
|
||||
[[ "$response" =~ ^[jJyY]$ ]]
|
||||
}
|
||||
|
||||
# --- Voraussetzungen ---
|
||||
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
err "Bitte NICHT als root ausfuehren."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- 1. Moonarch-Repo aktualisieren ---
|
||||
|
||||
log "=== Moonarch Repo aktualisieren ==="
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
if git rev-parse --is-inside-work-tree &>/dev/null; then
|
||||
LOCAL=$(git rev-parse HEAD)
|
||||
git fetch origin
|
||||
REMOTE=$(git rev-parse @{u} 2>/dev/null || echo "$LOCAL")
|
||||
|
||||
if [[ "$LOCAL" != "$REMOTE" ]]; then
|
||||
log "Updates verfuegbar."
|
||||
git --no-pager log --oneline "$LOCAL".."$REMOTE"
|
||||
echo ""
|
||||
if confirm "Repo aktualisieren?"; then
|
||||
git pull --ff-only
|
||||
log "Repo aktualisiert."
|
||||
else
|
||||
log "Repo-Update uebersprungen."
|
||||
fi
|
||||
else
|
||||
log "Repo ist aktuell."
|
||||
fi
|
||||
else
|
||||
log "Kein Git-Repo — Repo-Update uebersprungen."
|
||||
fi
|
||||
|
||||
# --- 2. System-Pakete aktualisieren ---
|
||||
|
||||
log "=== System-Pakete aktualisieren ==="
|
||||
|
||||
if confirm "pacman -Syu ausfuehren?"; then
|
||||
sudo pacman -Syu
|
||||
else
|
||||
log "System-Update uebersprungen."
|
||||
fi
|
||||
|
||||
if command -v paru &>/dev/null; then
|
||||
if confirm "AUR-Pakete aktualisieren (paru -Sua)?"; then
|
||||
paru -Sua
|
||||
else
|
||||
log "AUR-Update uebersprungen."
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- 3. Fehlende Pakete nachinstallieren ---
|
||||
|
||||
log "=== Paketlisten abgleichen ==="
|
||||
|
||||
if [[ -f "$OFFICIAL_PACKAGES" ]]; then
|
||||
MISSING_OFFICIAL=$(comm -23 <(read_packages "$OFFICIAL_PACKAGES" | sort) <(pacman -Qqe | sort) || true)
|
||||
if [[ -n "$MISSING_OFFICIAL" ]]; then
|
||||
log "Fehlende offizielle Pakete:"
|
||||
echo "$MISSING_OFFICIAL"
|
||||
if confirm "Installieren?"; then
|
||||
# shellcheck disable=SC2086
|
||||
sudo pacman -S --needed --noconfirm $MISSING_OFFICIAL
|
||||
fi
|
||||
else
|
||||
log "Alle offiziellen Pakete installiert."
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -f "$AUR_PACKAGES" ]] && command -v paru &>/dev/null; then
|
||||
MISSING_AUR=$(comm -23 <(read_packages "$AUR_PACKAGES" | sort) <(pacman -Qqe | sort) || true)
|
||||
if [[ -n "$MISSING_AUR" ]]; then
|
||||
log "Fehlende AUR-Pakete:"
|
||||
echo "$MISSING_AUR"
|
||||
if confirm "Installieren?"; then
|
||||
# shellcheck disable=SC2086
|
||||
paru -S --needed --noconfirm $MISSING_AUR
|
||||
fi
|
||||
else
|
||||
log "Alle AUR-Pakete installiert."
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- 4. Defaults aktualisieren ---
|
||||
|
||||
log "=== Defaults aktualisieren ==="
|
||||
|
||||
# XDG Defaults
|
||||
CHANGED_XDG=false
|
||||
if ! diff -rq "$DEFAULTS_DIR/xdg/" /etc/xdg/ --exclude='*.pyc' &>/dev/null 2>&1; then
|
||||
CHANGED_XDG=true
|
||||
fi
|
||||
|
||||
if $CHANGED_XDG; then
|
||||
log "XDG-Defaults haben sich geaendert."
|
||||
diff -rq "$DEFAULTS_DIR/xdg/" /etc/xdg/ --exclude='*.pyc' 2>/dev/null | head -20 || true
|
||||
echo ""
|
||||
if confirm "XDG-Defaults nach /etc/xdg/ deployen?"; then
|
||||
sudo cp -r "$DEFAULTS_DIR/xdg/"* /etc/xdg/
|
||||
log "XDG-Defaults aktualisiert."
|
||||
fi
|
||||
else
|
||||
log "XDG-Defaults sind aktuell."
|
||||
fi
|
||||
|
||||
# Binaries
|
||||
CHANGED_BIN=false
|
||||
for bin in "$DEFAULTS_DIR/bin/moonarch-"*; do
|
||||
name=$(basename "$bin")
|
||||
if ! cmp -s "$bin" "/usr/local/bin/$name" 2>/dev/null; then
|
||||
CHANGED_BIN=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if $CHANGED_BIN; then
|
||||
log "Moonarch-Binaries haben sich geaendert."
|
||||
for bin in "$DEFAULTS_DIR/bin/moonarch-"*; do
|
||||
name=$(basename "$bin")
|
||||
if ! cmp -s "$bin" "/usr/local/bin/$name" 2>/dev/null; then
|
||||
log " ~ $name"
|
||||
fi
|
||||
done
|
||||
if confirm "Binaries nach /usr/local/bin/ deployen?"; then
|
||||
sudo install -m 755 "$DEFAULTS_DIR/bin/moonarch-"* /usr/local/bin/
|
||||
log "Binaries aktualisiert."
|
||||
fi
|
||||
else
|
||||
log "Binaries sind aktuell."
|
||||
fi
|
||||
|
||||
# Zsh
|
||||
if ! cmp -s "$DEFAULTS_DIR/shell/zshrc" /etc/zsh/zshrc.moonarch 2>/dev/null; then
|
||||
log "Zsh-Defaults haben sich geaendert."
|
||||
if confirm "Zsh-Defaults aktualisieren?"; then
|
||||
sudo cp "$DEFAULTS_DIR/shell/zshrc" /etc/zsh/zshrc.moonarch
|
||||
log "Zsh-Defaults aktualisiert."
|
||||
fi
|
||||
else
|
||||
log "Zsh-Defaults sind aktuell."
|
||||
fi
|
||||
|
||||
# --- 5. Verwaiste Pakete ---
|
||||
|
||||
log "=== Verwaiste Pakete ==="
|
||||
|
||||
ORPHANS=$(pacman -Qdtq 2>/dev/null || true)
|
||||
if [[ -n "$ORPHANS" ]]; then
|
||||
log "Verwaiste Pakete gefunden:"
|
||||
echo "$ORPHANS"
|
||||
if confirm "Entfernen?"; then
|
||||
# shellcheck disable=SC2086
|
||||
sudo pacman -Rsn --noconfirm $ORPHANS
|
||||
fi
|
||||
else
|
||||
log "Keine verwaisten Pakete."
|
||||
fi
|
||||
|
||||
# --- Fertig ---
|
||||
|
||||
log ""
|
||||
log "============================================"
|
||||
log " Moonarch Update abgeschlossen!"
|
||||
log "============================================"
|
||||
Loading…
x
Reference in New Issue
Block a user