@@ -0,0 +1,67 @@
|
|||||||
|
# Style
|
||||||
|
|
||||||
|
- Two spaces for indentation, no tabs
|
||||||
|
- Use bash 5 conditionals: use `[[ ]]` for string/file tests and `(( ))` for numeric tests
|
||||||
|
- In `[[ ]]`, don't quote variables, but do quote string literals when comparing values (e.g., `[[ $branch == "dev" ]]`)
|
||||||
|
- Prefer `(( ))` over numeric operators inside `[[ ]]` (e.g., `(( count < 50 ))`, not `[[ $count -lt 50 ]]`)
|
||||||
|
- For strings/paths with spaces, quote them instead of escaping spaces with `\ ` (e.g., `"$APP_DIR/Disk Usage.desktop"`, not `$APP_DIR/Disk\ Usage.desktop`)
|
||||||
|
- Shebangs must use `#!/bin/bash` consistently (never `#!/usr/bin/env bash`)
|
||||||
|
|
||||||
|
# Command Naming
|
||||||
|
|
||||||
|
All commands start with `omarchy-`. Prefixes indicate purpose:
|
||||||
|
|
||||||
|
- `cmd-` - check if commands exist, misc utility commands
|
||||||
|
- `pkg-` - package management helpers
|
||||||
|
- `hw-` - hardware detection (return exit codes for use in conditionals)
|
||||||
|
- `refresh-` - copy default config to user's `~/.config/`
|
||||||
|
- `restart-` - restart a component
|
||||||
|
- `launch-` - open applications
|
||||||
|
- `install-` - install optional software
|
||||||
|
- `setup-` - interactive setup wizards
|
||||||
|
- `toggle-` - toggle features on/off
|
||||||
|
- `theme-` - theme management
|
||||||
|
- `update-` - update components
|
||||||
|
|
||||||
|
# Helper Commands
|
||||||
|
|
||||||
|
Use these instead of raw shell commands:
|
||||||
|
|
||||||
|
- `omarchy-cmd-missing` / `omarchy-cmd-present` - check for commands
|
||||||
|
- `omarchy-pkg-missing` / `omarchy-pkg-present` - check for packages
|
||||||
|
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
|
||||||
|
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
|
||||||
|
|
||||||
|
# Config Structure
|
||||||
|
|
||||||
|
- `config/` - default configs copied to `~/.config/`
|
||||||
|
- `default/themed/*.tpl` - templates with `{{ variable }}` placeholders for theme colors
|
||||||
|
- `themes/*/colors.toml` - theme color definitions (accent, background, foreground, color0-15)
|
||||||
|
|
||||||
|
# Refresh Pattern
|
||||||
|
|
||||||
|
To copy a default config to user config with automatic backup:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
omarchy-refresh-config hypr/hyprlock.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
This copies `~/.local/share/omarchy/config/hypr/hyprlock.conf` to `~/.config/hypr/hyprlock.conf`.
|
||||||
|
|
||||||
|
# Migrations
|
||||||
|
|
||||||
|
To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit.
|
||||||
|
|
||||||
|
Migration format:
|
||||||
|
- No shebang line
|
||||||
|
- Start with an `echo` describing what the migration does
|
||||||
|
- Use `$OMARCHY_PATH` to reference the omarchy directory
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```bash
|
||||||
|
echo "Disable fingerprint in hyprlock if fingerprint auth is not configured"
|
||||||
|
|
||||||
|
if omarchy-cmd-missing fprintd-list || ! fprintd-list "$USER" 2>/dev/null | grep -q "finger"; then
|
||||||
|
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
|
||||||
|
fi
|
||||||
|
```
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
TryExec=alacritty
|
||||||
|
Exec=alacritty
|
||||||
|
Icon=Alacritty
|
||||||
|
Terminal=false
|
||||||
|
Categories=System;TerminalEmulator;
|
||||||
|
Name=Alacritty
|
||||||
|
GenericName=Terminal
|
||||||
|
Comment=A fast, cross-platform, OpenGL terminal emulator
|
||||||
|
StartupNotify=true
|
||||||
|
StartupWMClass=Alacritty
|
||||||
|
Actions=New;
|
||||||
|
X-TerminalArgExec=-e
|
||||||
|
X-TerminalArgAppId=--class=
|
||||||
|
X-TerminalArgTitle=--title=
|
||||||
|
X-TerminalArgDir=--working-directory=
|
||||||
|
|
||||||
|
[Desktop Action New]
|
||||||
|
Name=New Terminal
|
||||||
|
Exec=alacritty
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
@@ -11,8 +11,8 @@ send_notification() {
|
|||||||
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ -n "$BATTERY_LEVEL" && "$BATTERY_LEVEL" =~ ^[0-9]+$ ]]; then
|
if [[ -n $BATTERY_LEVEL && $BATTERY_LEVEL =~ ^[0-9]+$ ]]; then
|
||||||
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
|
if [[ $BATTERY_STATE == "discharging" ]] && (( BATTERY_LEVEL <= BATTERY_THRESHOLD )); then
|
||||||
if [[ ! -f $NOTIFICATION_FLAG ]]; then
|
if [[ ! -f $NOTIFICATION_FLAG ]]; then
|
||||||
send_notification $BATTERY_LEVEL
|
send_notification $BATTERY_LEVEL
|
||||||
touch $NOTIFICATION_FLAG
|
touch $NOTIFICATION_FLAG
|
||||||
|
|||||||
Executable
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Returns true if a battery is present on the system.
|
||||||
|
# Used by the battery monitor and other battery-related checks.
|
||||||
|
|
||||||
|
for bat in /sys/class/power_supply/BAT*; do
|
||||||
|
[[ -r $bat/present ]] &&
|
||||||
|
[[ $(cat $bat/present) == "1" ]] &&
|
||||||
|
[[ $(cat $bat/type) == "Battery" ]] &&
|
||||||
|
exit 0
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 1
|
||||||
@@ -3,10 +3,7 @@
|
|||||||
# Returns the battery percentage remaining as an integer.
|
# Returns the battery percentage remaining as an integer.
|
||||||
# Used by the battery monitor and the Ctrl + Shift + Super + B hotkey.
|
# Used by the battery monitor and the Ctrl + Shift + Super + B hotkey.
|
||||||
|
|
||||||
upower -i $(upower -e | grep BAT) \
|
upower -i $(upower -e | grep BAT) | awk '/percentage/ {
|
||||||
| awk -F: '/percentage/ {
|
print int($2)
|
||||||
gsub(/[%[:space:]]/, "", $2);
|
|
||||||
val=$2;
|
|
||||||
printf("%d\n", (val+0.5))
|
|
||||||
exit
|
exit
|
||||||
}'
|
}'
|
||||||
|
|||||||
@@ -3,14 +3,15 @@
|
|||||||
# Set the branch for Omarchy's git repository.
|
# Set the branch for Omarchy's git repository.
|
||||||
|
|
||||||
if (($# == 0)); then
|
if (($# == 0)); then
|
||||||
echo "Usage: omarchy-branch-set [master|dev]"
|
echo "Usage: omarchy-branch-set [master|rc|dev]"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
branch="$1"
|
branch="$1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$branch" in
|
if [[ $branch != "master" && $branch != "rc" && $branch != "dev" ]]; then
|
||||||
"master") git -C $OMARCHY_PATH switch master ;;
|
echo "Error: Invalid branch '$branch'. Must be one of: master, rc, dev"
|
||||||
"dev") git -C $OMARCHY_PATH switch dev ;;
|
exit 1
|
||||||
*) echo "Unknown branch: $branch"; exit 1; ;;
|
fi
|
||||||
esac
|
|
||||||
|
git -C $OMARCHY_PATH switch $branch
|
||||||
|
|||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Adjust brightness on the most likely display device.
|
||||||
|
# Usage: omarchy-brightness-display <step>
|
||||||
|
|
||||||
|
step="${1:-+5%}"
|
||||||
|
|
||||||
|
# Start with the first possible output, then refine to the most likely given an order heuristic.
|
||||||
|
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
|
||||||
|
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
||||||
|
if [[ -e /sys/class/backlight/$candidate ]]; then
|
||||||
|
device="$candidate"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set the actual brightness of the display device.
|
||||||
|
brightnessctl -d "$device" set "$step" >/dev/null
|
||||||
|
|
||||||
|
# Use SwayOSD to display the new brightness setting.
|
||||||
|
omarchy-swayosd-brightness "$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')"
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
|
||||||
|
|
||||||
|
if (( $# == 0 )); then
|
||||||
|
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
|
||||||
|
else
|
||||||
|
device="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
|
||||||
|
sudo asdcontrol "$device" -- "$1" >/dev/null
|
||||||
|
value="$(sudo asdcontrol "$device" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
|
||||||
|
omarchy-swayosd-brightness "$(( value * 100 / 60000 ))"
|
||||||
|
fi
|
||||||
Executable
+42
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Adjust keyboard backlight brightness using available steps.
|
||||||
|
# Usage: omarchy-brightness-keyboard <up|down|cycle>
|
||||||
|
|
||||||
|
direction="${1:-up}"
|
||||||
|
|
||||||
|
# Find keyboard backlight device (look for *kbd_backlight* pattern in leds class).
|
||||||
|
device=""
|
||||||
|
for candidate in /sys/class/leds/*kbd_backlight*; do
|
||||||
|
if [[ -e $candidate ]]; then
|
||||||
|
device="$(basename "$candidate")"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z $device ]]; then
|
||||||
|
echo "No keyboard backlight device found" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get current and max brightness to determine step size.
|
||||||
|
max_brightness="$(brightnessctl -d "$device" max)"
|
||||||
|
current_brightness="$(brightnessctl -d "$device" get)"
|
||||||
|
|
||||||
|
# Calculate step as one unit (keyboards typically have discrete levels like 0-3).
|
||||||
|
if [[ $direction == "cycle" ]]; then
|
||||||
|
new_brightness=$(( (current_brightness + 1) % (max_brightness + 1) ))
|
||||||
|
elif [[ $direction == "up" ]]; then
|
||||||
|
new_brightness=$((current_brightness + 1))
|
||||||
|
(( new_brightness > max_brightness )) && new_brightness=$max_brightness
|
||||||
|
else
|
||||||
|
new_brightness=$((current_brightness - 1))
|
||||||
|
(( new_brightness < 0 )) && new_brightness=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the new brightness.
|
||||||
|
brightnessctl -d "$device" set "$new_brightness" >/dev/null
|
||||||
|
|
||||||
|
# Use SwayOSD to display the new brightness setting.
|
||||||
|
percent=$((new_brightness * 100 / max_brightness))
|
||||||
|
omarchy-swayosd-kbd-brightness "$percent"
|
||||||
@@ -14,14 +14,15 @@
|
|||||||
# and people with a lot of experience managing Linux systems.
|
# and people with a lot of experience managing Linux systems.
|
||||||
|
|
||||||
if (($# == 0)); then
|
if (($# == 0)); then
|
||||||
echo "Usage: omarchy-channel-set [stable|edge|dev]"
|
echo "Usage: omarchy-channel-set [stable|rc|edge|dev]"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
channel="$1"
|
channel="$1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$channel" in
|
case "$channel" in
|
||||||
"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" && sudo pacman -Suu --noconfirm ;;
|
"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" ;;
|
||||||
|
"rc") omarchy-branch-set "rc" && omarchy-refresh-pacman "rc" ;;
|
||||||
"edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;;
|
"edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;;
|
||||||
"dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;;
|
"dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;;
|
||||||
*) echo "Unknown channel: $channel"; exit 1; ;;
|
*) echo "Unknown channel: $channel"; exit 1; ;;
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
|
|
||||||
|
|
||||||
if [[ $# -eq 0 ]]; then
|
|
||||||
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
|
|
||||||
else
|
|
||||||
DEVICE="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
|
|
||||||
sudo asdcontrol "$DEVICE" -- "$1" >/dev/null
|
|
||||||
VALUE="$(sudo asdcontrol "$DEVICE" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
|
|
||||||
swayosd-client \
|
|
||||||
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
|
|
||||||
--custom-icon display-brightness \
|
|
||||||
--custom-progress "$(awk -v v="$VALUE" 'BEGIN{printf "%.2f", v/60000}')" \
|
|
||||||
--custom-progress-text "$(( VALUE * 100 / 60000 ))%"
|
|
||||||
fi
|
|
||||||
@@ -7,7 +7,7 @@ focused_monitor="$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).n
|
|||||||
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
|
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
|
||||||
sinks_count=$(echo "$sinks" | jq '. | length')
|
sinks_count=$(echo "$sinks" | jq '. | length')
|
||||||
|
|
||||||
if [ "$sinks_count" -eq 0 ]; then
|
if (( sinks_count == 0 )); then
|
||||||
swayosd-client \
|
swayosd-client \
|
||||||
--monitor "$focused_monitor" \
|
--monitor "$focused_monitor" \
|
||||||
--custom-message "No audio devices found"
|
--custom-message "No audio devices found"
|
||||||
@@ -17,7 +17,7 @@ fi
|
|||||||
current_sink_name=$(pactl get-default-sink)
|
current_sink_name=$(pactl get-default-sink)
|
||||||
current_sink_index=$(echo "$sinks" | jq -r --arg name "$current_sink_name" 'map(.name) | index($name)')
|
current_sink_index=$(echo "$sinks" | jq -r --arg name "$current_sink_name" 'map(.name) | index($name)')
|
||||||
|
|
||||||
if [ "$current_sink_index" != "null" ]; then
|
if [[ $current_sink_index != "null" ]]; then
|
||||||
next_sink_index=$(((current_sink_index + 1) % sinks_count))
|
next_sink_index=$(((current_sink_index + 1) % sinks_count))
|
||||||
else
|
else
|
||||||
next_sink_index=0
|
next_sink_index=0
|
||||||
@@ -27,20 +27,28 @@ next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]")
|
|||||||
next_sink_name=$(echo "$next_sink" | jq -r '.name')
|
next_sink_name=$(echo "$next_sink" | jq -r '.name')
|
||||||
|
|
||||||
next_sink_description=$(echo "$next_sink" | jq -r '.description')
|
next_sink_description=$(echo "$next_sink" | jq -r '.description')
|
||||||
if [ "$next_sink_description" = "(null)" ] || [ "$next_sink_description" = "null" ] || [ -z "$next_sink_description" ]; then
|
if [[ $next_sink_description == "(null)" ]] || [[ $next_sink_description == "null" ]] || [[ -z $next_sink_description ]]; then
|
||||||
sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"')
|
# For Bluetooth devices, the friendly name is on the Device entry (device.id), not the Sink entry (object.id)
|
||||||
next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
|
device_id=$(echo "$next_sink" | jq -r '.properties."device.id"')
|
||||||
|
if [[ $device_id != "null" ]] && [[ -n $device_id ]]; then
|
||||||
|
next_sink_description=$(wpctl status | grep -E "^\s*│?\s+${device_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
|
||||||
|
fi
|
||||||
|
# Fall back to object.id lookup if device.id didn't yield a result
|
||||||
|
if [[ -z $next_sink_description ]]; then
|
||||||
|
sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"')
|
||||||
|
next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
next_sink_volume=$(echo "$next_sink" | jq -r \
|
next_sink_volume=$(echo "$next_sink" | jq -r \
|
||||||
'.volume | to_entries[0].value.value_percent | sub("%"; "")')
|
'.volume | to_entries[0].value.value_percent | sub("%"; "")')
|
||||||
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')
|
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')
|
||||||
|
|
||||||
if [ "$next_sink_is_muted" = "true" ] || [ "$next_sink_volume" -eq 0 ]; then
|
if [[ $next_sink_is_muted = "true" ]] || (( next_sink_volume == 0 )); then
|
||||||
icon_state="muted"
|
icon_state="muted"
|
||||||
elif [ "$next_sink_volume" -le 33 ]; then
|
elif (( next_sink_volume <= 33 )); then
|
||||||
icon_state="low"
|
icon_state="low"
|
||||||
elif [ "$next_sink_volume" -le 66 ]; then
|
elif (( next_sink_volume <= 66 )); then
|
||||||
icon_state="medium"
|
icon_state="medium"
|
||||||
else
|
else
|
||||||
icon_state="high"
|
icon_state="high"
|
||||||
@@ -48,7 +56,7 @@ fi
|
|||||||
|
|
||||||
next_sink_volume_icon="sink-volume-${icon_state}-symbolic"
|
next_sink_volume_icon="sink-volume-${icon_state}-symbolic"
|
||||||
|
|
||||||
if [ "$next_sink_name" != "$current_sink_name" ]; then
|
if [[ $next_sink_name != $current_sink_name ]]; then
|
||||||
pactl set-default-sink "$next_sink_name"
|
pactl set-default-sink "$next_sink_name"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ set -e
|
|||||||
|
|
||||||
FIRST_RUN_MODE=~/.local/state/omarchy/first-run.mode
|
FIRST_RUN_MODE=~/.local/state/omarchy/first-run.mode
|
||||||
|
|
||||||
if [[ -f "$FIRST_RUN_MODE" ]]; then
|
if [[ -f $FIRST_RUN_MODE ]]; then
|
||||||
rm -f "$FIRST_RUN_MODE"
|
rm -f "$FIRST_RUN_MODE"
|
||||||
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
|
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
|
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
|
||||||
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
|
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
|
||||||
|
|
||||||
if [[ ! -d "$OUTPUT_DIR" ]]; then
|
if [[ ! -d $OUTPUT_DIR ]]; then
|
||||||
notify-send "Screen recording directory does not exist: $OUTPUT_DIR" -u critical -t 3000
|
notify-send "Screen recording directory does not exist: $OUTPUT_DIR" -u critical -t 3000
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -35,9 +35,9 @@ start_webcam_overlay() {
|
|||||||
cleanup_webcam
|
cleanup_webcam
|
||||||
|
|
||||||
# Auto-detect first available webcam if none specified
|
# Auto-detect first available webcam if none specified
|
||||||
if [[ -z "$WEBCAM_DEVICE" ]]; then
|
if [[ -z $WEBCAM_DEVICE ]]; then
|
||||||
WEBCAM_DEVICE=$(v4l2-ctl --list-devices 2>/dev/null | grep -m1 "^\s*/dev/video" | tr -d '\t')
|
WEBCAM_DEVICE=$(v4l2-ctl --list-devices 2>/dev/null | grep -m1 "^\s*/dev/video" | tr -d '\t')
|
||||||
if [[ -z "$WEBCAM_DEVICE" ]]; then
|
if [[ -z $WEBCAM_DEVICE ]]; then
|
||||||
notify-send "No webcam devices found" -u critical -t 3000
|
notify-send "No webcam devices found" -u critical -t 3000
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -76,26 +76,38 @@ start_screenrecording() {
|
|||||||
local audio_devices=""
|
local audio_devices=""
|
||||||
local audio_args=""
|
local audio_args=""
|
||||||
|
|
||||||
[[ "$DESKTOP_AUDIO" == "true" ]] && audio_devices+="default_output"
|
[[ $DESKTOP_AUDIO == "true" ]] && audio_devices+="default_output"
|
||||||
|
|
||||||
if [[ "$MICROPHONE_AUDIO" == "true" ]]; then
|
if [[ $MICROPHONE_AUDIO == "true" ]]; then
|
||||||
# Merge audio tracks into one - separate tracks only play one at a time in most players
|
# Merge audio tracks into one - separate tracks only play one at a time in most players
|
||||||
[[ -n "$audio_devices" ]] && audio_devices+="|"
|
[[ -n $audio_devices ]] && audio_devices+="|"
|
||||||
audio_devices+="default_input"
|
audio_devices+="default_input"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[[ -n "$audio_devices" ]] && audio_args+="-a $audio_devices"
|
[[ -n $audio_devices ]] && audio_args+="-a $audio_devices"
|
||||||
|
|
||||||
gpu-screen-recorder -w portal -f 60 -fallback-cpu-encoding yes -o "$filename" $audio_args -ac aac &
|
gpu-screen-recorder -w portal -k h264 -f 60 -fallback-cpu-encoding yes -o "$filename" $audio_args -ac aac &
|
||||||
toggle_screenrecording_indicator
|
toggle_screenrecording_indicator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trim_first_frame() {
|
||||||
|
local latest=$(ls -t "$OUTPUT_DIR"/screenrecording-*.mp4 2>/dev/null | head -1)
|
||||||
|
if [[ -n $latest ]]; then
|
||||||
|
local trimmed="${latest%.mp4}-trimmed.mp4"
|
||||||
|
if ffmpeg -y -ss 0.1 -i "$latest" -c copy "$trimmed" -loglevel quiet 2>/dev/null; then
|
||||||
|
mv "$trimmed" "$latest"
|
||||||
|
else
|
||||||
|
rm -f "$trimmed"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
stop_screenrecording() {
|
stop_screenrecording() {
|
||||||
pkill -SIGINT -f "^gpu-screen-recorder" # SIGINT required to save video properly
|
pkill -SIGINT -f "^gpu-screen-recorder" # SIGINT required to save video properly
|
||||||
|
|
||||||
# Wait a maximum of 5 seconds to finish before hard killing
|
# Wait a maximum of 5 seconds to finish before hard killing
|
||||||
local count=0
|
local count=0
|
||||||
while pgrep -f "^gpu-screen-recorder" >/dev/null && [ $count -lt 50 ]; do
|
while pgrep -f "^gpu-screen-recorder" >/dev/null && (( count < 50 )); do
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
count=$((count + 1))
|
count=$((count + 1))
|
||||||
done
|
done
|
||||||
@@ -106,6 +118,7 @@ stop_screenrecording() {
|
|||||||
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
|
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
|
||||||
else
|
else
|
||||||
cleanup_webcam
|
cleanup_webcam
|
||||||
|
trim_first_frame
|
||||||
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
|
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
|
||||||
fi
|
fi
|
||||||
toggle_screenrecording_indicator
|
toggle_screenrecording_indicator
|
||||||
@@ -125,8 +138,8 @@ if screenrecording_active; then
|
|||||||
else
|
else
|
||||||
stop_screenrecording
|
stop_screenrecording
|
||||||
fi
|
fi
|
||||||
elif [[ "$STOP_RECORDING" == "false" ]]; then
|
elif [[ $STOP_RECORDING == "false" ]]; then
|
||||||
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay
|
[[ $WEBCAM == "true" ]] && start_webcam_overlay
|
||||||
|
|
||||||
start_screenrecording || cleanup_webcam
|
start_screenrecording || cleanup_webcam
|
||||||
else
|
else
|
||||||
|
|||||||
+77
-33
@@ -2,85 +2,129 @@
|
|||||||
|
|
||||||
# Take a screenshot of the whole screen, a specific window, or a user-drawn region.
|
# Take a screenshot of the whole screen, a specific window, or a user-drawn region.
|
||||||
# Saves to ~/Pictures by default, but that can be changed via OMARCHY_SCREENSHOT_DIR or XDG_PICTURES_DIR ENVs.
|
# Saves to ~/Pictures by default, but that can be changed via OMARCHY_SCREENSHOT_DIR or XDG_PICTURES_DIR ENVs.
|
||||||
|
# Editor defaults to Satty but can be changed via --editor=<name> or OMARCHY_SCREENSHOT_EDITOR env
|
||||||
|
|
||||||
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
|
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
|
||||||
OUTPUT_DIR="${OMARCHY_SCREENSHOT_DIR:-${XDG_PICTURES_DIR:-$HOME/Pictures}}"
|
OUTPUT_DIR="${OMARCHY_SCREENSHOT_DIR:-${XDG_PICTURES_DIR:-$HOME/Pictures}}"
|
||||||
|
|
||||||
if [[ ! -d "$OUTPUT_DIR" ]]; then
|
if [[ ! -d $OUTPUT_DIR ]]; then
|
||||||
notify-send "Screenshot directory does not exist: $OUTPUT_DIR" -u critical -t 3000
|
notify-send "Screenshot directory does not exist: $OUTPUT_DIR" -u critical -t 3000
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pkill slurp && exit 0
|
pkill slurp && exit 0
|
||||||
|
|
||||||
|
SCREENSHOT_EDITOR="${OMARCHY_SCREENSHOT_EDITOR:-satty}"
|
||||||
|
|
||||||
|
# Parse --editor flag from any position
|
||||||
|
ARGS=()
|
||||||
|
for arg in "$@"; do
|
||||||
|
if [[ $arg == --editor=* ]]; then
|
||||||
|
SCREENSHOT_EDITOR="${arg#--editor=}"
|
||||||
|
else
|
||||||
|
ARGS+=("$arg")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
set -- "${ARGS[@]}"
|
||||||
|
|
||||||
|
open_editor() {
|
||||||
|
local filepath="$1"
|
||||||
|
if [[ $SCREENSHOT_EDITOR == "satty" ]]; then
|
||||||
|
satty --filename "$filepath" \
|
||||||
|
--output-filename "$filepath" \
|
||||||
|
--actions-on-enter save-to-clipboard \
|
||||||
|
--save-after-copy \
|
||||||
|
--copy-command 'wl-copy'
|
||||||
|
else
|
||||||
|
$SCREENSHOT_EDITOR "$filepath"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
MODE="${1:-smart}"
|
MODE="${1:-smart}"
|
||||||
PROCESSING="${2:-slurp}"
|
PROCESSING="${2:-slurp}"
|
||||||
|
|
||||||
|
# accounting for portrait/transformed displays
|
||||||
|
JQ_MONITOR_GEO='
|
||||||
|
def format_geo:
|
||||||
|
.x as $x | .y as $y |
|
||||||
|
(.width / .scale | floor) as $w |
|
||||||
|
(.height / .scale | floor) as $h |
|
||||||
|
.transform as $t |
|
||||||
|
if $t == 1 or $t == 3 then
|
||||||
|
"\($x),\($y) \($h)x\($w)"
|
||||||
|
else
|
||||||
|
"\($x),\($y) \($w)x\($h)"
|
||||||
|
end;
|
||||||
|
'
|
||||||
|
|
||||||
get_rectangles() {
|
get_rectangles() {
|
||||||
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
||||||
hyprctl monitors -j | jq -r --arg ws "$active_workspace" '.[] | select(.activeWorkspace.id == ($ws | tonumber)) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"'
|
hyprctl monitors -j | jq -r --arg ws "$active_workspace" "${JQ_MONITOR_GEO} .[] | select(.activeWorkspace.id == (\$ws | tonumber)) | format_geo"
|
||||||
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
|
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Select based on mode
|
# Select based on mode
|
||||||
case "$MODE" in
|
case "$MODE" in
|
||||||
region)
|
region)
|
||||||
wayfreeze & PID=$!
|
hyprpicker -r -z >/dev/null 2>&1 & PID=$!
|
||||||
sleep .1
|
sleep .1
|
||||||
SELECTION=$(slurp 2>/dev/null)
|
SELECTION=$(slurp 2>/dev/null)
|
||||||
kill $PID 2>/dev/null
|
kill $PID 2>/dev/null
|
||||||
;;
|
;;
|
||||||
windows)
|
windows)
|
||||||
wayfreeze & PID=$!
|
hyprpicker -r -z >/dev/null 2>&1 & PID=$!
|
||||||
sleep .1
|
sleep .1
|
||||||
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
|
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
|
||||||
kill $PID 2>/dev/null
|
kill $PID 2>/dev/null
|
||||||
;;
|
;;
|
||||||
fullscreen)
|
fullscreen)
|
||||||
SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"')
|
SELECTION=$(hyprctl monitors -j | jq -r "${JQ_MONITOR_GEO} .[] | select(.focused == true) | format_geo")
|
||||||
;;
|
;;
|
||||||
smart|*)
|
smart|*)
|
||||||
RECTS=$(get_rectangles)
|
RECTS=$(get_rectangles)
|
||||||
wayfreeze & PID=$!
|
hyprpicker -r -z >/dev/null 2>&1 & PID=$!
|
||||||
sleep .1
|
sleep .1
|
||||||
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
|
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
|
||||||
kill $PID 2>/dev/null
|
kill $PID 2>/dev/null
|
||||||
|
|
||||||
# If the selction area is L * W < 20, we'll assume you were trying to select whichever
|
# If the selection area is L * W < 20, we'll assume you were trying to select whichever
|
||||||
# window or output it was inside of to prevent accidental 2px snapshots
|
# window or output it was inside of to prevent accidental 2px snapshots
|
||||||
if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
|
if [[ $SELECTION =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
|
||||||
if (( ${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20 )); then
|
if ((${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20)); then
|
||||||
click_x="${BASH_REMATCH[1]}"
|
click_x="${BASH_REMATCH[1]}"
|
||||||
click_y="${BASH_REMATCH[2]}"
|
click_y="${BASH_REMATCH[2]}"
|
||||||
|
|
||||||
while IFS= read -r rect; do
|
while IFS= read -r rect; do
|
||||||
if [[ "$rect" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
|
if [[ $rect =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
|
||||||
rect_x="${BASH_REMATCH[1]}"
|
rect_x="${BASH_REMATCH[1]}"
|
||||||
rect_y="${BASH_REMATCH[2]}"
|
rect_y="${BASH_REMATCH[2]}"
|
||||||
rect_width="${BASH_REMATCH[3]}"
|
rect_width="${BASH_REMATCH[3]}"
|
||||||
rect_height="${BASH_REMATCH[4]}"
|
rect_height="${BASH_REMATCH[4]}"
|
||||||
|
|
||||||
if (( click_x >= rect_x && click_x < rect_x+rect_width && click_y >= rect_y && click_y < rect_y+rect_height )); then
|
if ((click_x >= rect_x && click_x < rect_x + rect_width && click_y >= rect_y && click_y < rect_y + rect_height)); then
|
||||||
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
|
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
|
||||||
break
|
break
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
done <<< "$RECTS"
|
fi
|
||||||
fi
|
done <<<"$RECTS"
|
||||||
fi
|
fi
|
||||||
;;
|
fi
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
[ -z "$SELECTION" ] && exit 0
|
[[ -z $SELECTION ]] && exit 0
|
||||||
|
|
||||||
|
FILENAME="screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png"
|
||||||
|
FILEPATH="$OUTPUT_DIR/$FILENAME"
|
||||||
|
|
||||||
if [[ $PROCESSING == "slurp" ]]; then
|
if [[ $PROCESSING == "slurp" ]]; then
|
||||||
grim -g "$SELECTION" - |
|
grim -g "$SELECTION" "$FILEPATH" || exit 1
|
||||||
satty --filename - \
|
wl-copy <"$FILEPATH"
|
||||||
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
|
|
||||||
--early-exit \
|
(
|
||||||
--actions-on-enter save-to-clipboard \
|
ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit")
|
||||||
--save-after-copy \
|
[[ $ACTION == "default" ]] && open_editor "$FILEPATH"
|
||||||
--copy-command 'wl-copy'
|
) &
|
||||||
else
|
else
|
||||||
grim -g "$SELECTION" - | wl-copy
|
grim -g "$SELECTION" - | wl-copy
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ else
|
|||||||
# Pick one or more files from home directory
|
# Pick one or more files from home directory
|
||||||
FILES=$(find "$HOME" -type f 2>/dev/null | fzf --multi)
|
FILES=$(find "$HOME" -type f 2>/dev/null | fzf --multi)
|
||||||
fi
|
fi
|
||||||
[ -z "$FILES" ] && exit 0
|
[[ -z $FILES ]] && exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Executable
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Add an EFI boot entry for the Omarchy UKI, allowing the system to boot directly
|
||||||
|
# without a bootloader like Limine. Requires UEFI firmware and a built UKI.
|
||||||
|
|
||||||
|
if [[ ! -d /sys/firmware/efi ]]; then
|
||||||
|
echo "Error: System is not booted in UEFI mode" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! efibootmgr &>/dev/null; then
|
||||||
|
echo "Error: efibootmgr is not available or not functional" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "American Megatrends"; then
|
||||||
|
echo "Error: American Megatrends firmware may not safely support custom EFI entries" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then
|
||||||
|
echo "Error: Apple firmware uses its own boot manager" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1)
|
||||||
|
|
||||||
|
if [[ -z $uki_file ]]; then
|
||||||
|
echo "Error: No Omarchy UKI found in /boot/EFI/Linux/" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
boot_source=$(findmnt -n -o SOURCE /boot)
|
||||||
|
disk=$(echo "$boot_source" | sed 's/p\?[0-9]*$//')
|
||||||
|
part=$(echo "$boot_source" | grep -o 'p\?[0-9]*$' | sed 's/^p//')
|
||||||
|
|
||||||
|
if gum confirm "Setup direct boot (so snapshot booting must be done via bios)?"; then
|
||||||
|
echo "Creating EFI boot entry for $uki_file"
|
||||||
|
|
||||||
|
sudo efibootmgr --create \
|
||||||
|
--disk "$disk" \
|
||||||
|
--part "$part" \
|
||||||
|
--label "Omarchy" \
|
||||||
|
--loader "\\EFI\\Linux\\$uki_file"
|
||||||
|
fi
|
||||||
+5
-5
@@ -5,7 +5,7 @@
|
|||||||
NO_SUDO=false
|
NO_SUDO=false
|
||||||
PRINT_ONLY=false
|
PRINT_ONLY=false
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
while (( $# > 0 )); do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--no-sudo)
|
--no-sudo)
|
||||||
NO_SUDO=true
|
NO_SUDO=true
|
||||||
@@ -25,7 +25,7 @@ done
|
|||||||
|
|
||||||
LOG_FILE="/tmp/omarchy-debug.log"
|
LOG_FILE="/tmp/omarchy-debug.log"
|
||||||
|
|
||||||
if [ "$NO_SUDO" = true ]; then
|
if [[ $NO_SUDO = "true" ]]; then
|
||||||
DMESG_OUTPUT="(skipped - --no-sudo flag used)"
|
DMESG_OUTPUT="(skipped - --no-sudo flag used)"
|
||||||
else
|
else
|
||||||
DMESG_OUTPUT="$(sudo dmesg)"
|
DMESG_OUTPUT="$(sudo dmesg)"
|
||||||
@@ -47,7 +47,7 @@ DMESG
|
|||||||
$DMESG_OUTPUT
|
$DMESG_OUTPUT
|
||||||
|
|
||||||
=========================================
|
=========================================
|
||||||
JOURNALCTL (CURRENT BOOT, ERRORS ONLY)
|
JOURNALCTL (CURRENT BOOT, WARNINGS+ERRORS)
|
||||||
=========================================
|
=========================================
|
||||||
$(journalctl -b -p 4..1)
|
$(journalctl -b -p 4..1)
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ INSTALLED PACKAGES
|
|||||||
$({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort)
|
$({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if [ "$PRINT_ONLY" = true ]; then
|
if [[ $PRINT_ONLY = "true" ]]; then
|
||||||
cat "$LOG_FILE"
|
cat "$LOG_FILE"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
@@ -73,7 +73,7 @@ case "$ACTION" in
|
|||||||
"Upload log")
|
"Upload log")
|
||||||
echo "Uploading debug log to 0x0.st..."
|
echo "Uploading debug log to 0x0.st..."
|
||||||
URL=$(curl -sF "file=@$LOG_FILE" -Fexpires=24 https://0x0.st)
|
URL=$(curl -sF "file=@$LOG_FILE" -Fexpires=24 https://0x0.st)
|
||||||
if [ $? -eq 0 ] && [ -n "$URL" ]; then
|
if (( $? == 0 )) && [[ -n $URL ]]; then
|
||||||
echo "✓ Log uploaded successfully!"
|
echo "✓ Log uploaded successfully!"
|
||||||
echo "Share this URL:"
|
echo "Share this URL:"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ cd ~/.local/share/omarchy
|
|||||||
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
||||||
touch $migration_file
|
touch $migration_file
|
||||||
|
|
||||||
if [[ "$1" != "--no-edit" ]]; then
|
if [[ $1 != "--no-edit" ]]; then
|
||||||
nvim $migration_file
|
nvim $migration_file
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+24
-4
@@ -11,7 +11,7 @@ fi
|
|||||||
|
|
||||||
# Find the root drive in case we are looking at partitions
|
# Find the root drive in case we are looking at partitions
|
||||||
root_drive=$(lsblk -no PKNAME "$drive" 2>/dev/null | tail -n1)
|
root_drive=$(lsblk -no PKNAME "$drive" 2>/dev/null | tail -n1)
|
||||||
if [[ -n "$root_drive" ]]; then
|
if [[ -n $root_drive ]]; then
|
||||||
root_drive="/dev/$root_drive"
|
root_drive="/dev/$root_drive"
|
||||||
else
|
else
|
||||||
root_drive="$drive"
|
root_drive="$drive"
|
||||||
@@ -19,11 +19,31 @@ fi
|
|||||||
|
|
||||||
# Get basic disk information
|
# Get basic disk information
|
||||||
size=$(lsblk -dno SIZE "$drive" 2>/dev/null)
|
size=$(lsblk -dno SIZE "$drive" 2>/dev/null)
|
||||||
model=$(lsblk -dno MODEL "$root_drive" 2>/dev/null)
|
vendor=$(lsblk -dno VENDOR "$root_drive" 2>/dev/null | sed 's/ *$//')
|
||||||
|
model=$(lsblk -dno MODEL "$root_drive" 2>/dev/null | sed 's/ *$//')
|
||||||
|
|
||||||
|
# Combine vendor and model, avoiding duplication
|
||||||
|
label=""
|
||||||
|
if [[ -n $vendor && -n $model ]]; then
|
||||||
|
if [[ $model == *$vendor* ]]; then
|
||||||
|
label="$model"
|
||||||
|
else
|
||||||
|
label="$vendor $model"
|
||||||
|
fi
|
||||||
|
elif [[ -n $model ]]; then
|
||||||
|
label="$model"
|
||||||
|
elif [[ -n $vendor ]]; then
|
||||||
|
label="$vendor"
|
||||||
|
fi
|
||||||
|
|
||||||
# Format display string
|
# Format display string
|
||||||
display="$drive"
|
display="$drive"
|
||||||
[[ -n "$size" ]] && display="$display ($size)"
|
[[ -n $size ]] && display="$display ($size)"
|
||||||
[[ -n "$model" ]] && display="$display - $model"
|
[[ -n $label ]] && display="$display - $label"
|
||||||
|
|
||||||
|
# Append compact partition summary
|
||||||
|
part_summary=$(lsblk -nro TYPE,NAME,FSTYPE,MOUNTPOINT "$root_drive" 2>/dev/null | \
|
||||||
|
awk '$1=="part" { printf "%s%s%s", s, ($3==""?"unknown":$3), ($4==""?"":"("$4")"); s=", " }')
|
||||||
|
[[ -n $part_summary ]] && display+=" [$part_summary]"
|
||||||
|
|
||||||
echo "$display"
|
echo "$display"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ fi
|
|||||||
|
|
||||||
drives_with_info=""
|
drives_with_info=""
|
||||||
while IFS= read -r drive; do
|
while IFS= read -r drive; do
|
||||||
[[ -n "$drive" ]] || continue
|
[[ -n $drive ]] || continue
|
||||||
drives_with_info+="$(omarchy-drive-info "$drive")"$'\n'
|
drives_with_info+="$(omarchy-drive-info "$drive")"$'\n'
|
||||||
done <<<"$drives"
|
done <<<"$drives"
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
encrypted_drives=$(blkid -t TYPE=crypto_LUKS -o device)
|
encrypted_drives=$(blkid -t TYPE=crypto_LUKS -o device)
|
||||||
|
|
||||||
if [[ -n $encrypted_drives ]]; then
|
if [[ -n $encrypted_drives ]]; then
|
||||||
if [[ $(wc -l <<<"$encrypted_drives") -eq 1 ]]; then
|
if (( $(wc -l <<<encrypted_drives) == 1 )); then
|
||||||
drive_to_change="$encrypted_drives"
|
drive_to_change="$encrypted_drives"
|
||||||
else
|
else
|
||||||
drive_to_change="$(omarchy-drive-select "$encrypted_drives")"
|
drive_to_change="$(omarchy-drive-select "$encrypted_drives")"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
font_name="$1"
|
font_name="$1"
|
||||||
|
|
||||||
if [[ -n "$font_name" ]]; then
|
if [[ -n $font_name ]]; then
|
||||||
if fc-list | grep -iq "$font_name"; then
|
if fc-list | grep -iq "$font_name"; then
|
||||||
if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
|
if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
|
||||||
sed -i "s/family = \".*\"/family = \"$font_name\"/g" ~/.config/alacritty/alacritty.toml
|
sed -i "s/family = \".*\"/family = \"$font_name\"/g" ~/.config/alacritty/alacritty.toml
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ SWAPSIZE=$(( 1024 * ${SWAPSIZE_KB:-0} ))
|
|||||||
|
|
||||||
HIBERNATION_IMAGE_SIZE=$(cat /sys/power/image_size)
|
HIBERNATION_IMAGE_SIZE=$(cat /sys/power/image_size)
|
||||||
|
|
||||||
if [[ "$SWAPSIZE" -gt "$HIBERNATION_IMAGE_SIZE" ]] && [[ -f /etc/mkinitcpio.conf.d/omarchy_resume.conf ]]; then
|
if (( SWAPSIZE > HIBERNATION_IMAGE_SIZE )) && [[ -f /etc/mkinitcpio.conf.d/omarchy_resume.conf ]]; then
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
|
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
|
||||||
|
|
||||||
# Check if hibernation is configured
|
# Check if hibernation is configured
|
||||||
if [ ! -f "$MKINITCPIO_CONF" ] || ! grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
|
if [[ ! -f $MKINITCPIO_CONF ]] || ! grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
|
||||||
echo "Hibernation is not set up"
|
echo "Hibernation is not set up"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
@@ -25,7 +25,7 @@ if swapon --show | grep -q "$SWAP_FILE"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove swapfile
|
# Remove swapfile
|
||||||
if [ -f "$SWAP_FILE" ]; then
|
if [[ -f $SWAP_FILE ]]; then
|
||||||
echo "Removing swapfile"
|
echo "Removing swapfile"
|
||||||
sudo rm "$SWAP_FILE"
|
sudo rm "$SWAP_FILE"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -4,22 +4,28 @@
|
|||||||
# adds a resume hook to mkinitcpio, and configures suspend-then-hibernate.
|
# adds a resume hook to mkinitcpio, and configures suspend-then-hibernate.
|
||||||
|
|
||||||
if [[ ! -f /sys/power/image_size ]]; then
|
if [[ ! -f /sys/power/image_size ]]; then
|
||||||
echo -e "\033[31mError: Hibernation is not supported on your system\033[0m" >&2
|
echo -e "Hibernation is not supported on your system" >&2
|
||||||
exit 1
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! command -v limine-mkinitcpio &>/dev/null; then
|
||||||
|
echo "Skipping hibernation setup (requires Limine bootloader)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
|
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
|
||||||
|
|
||||||
# Check if hibernation is already configured
|
# Check if hibernation is already configured
|
||||||
if [ -f "$MKINITCPIO_CONF" ] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
|
if [[ -f $MKINITCPIO_CONF ]] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
|
||||||
echo "Hibernation is already set up"
|
echo "Hibernation is already set up"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MEM_TOTAL_HUMAN=$(free --human | awk '/Mem/ {print $2}')
|
if [[ $1 != "--force" ]]; then
|
||||||
if ! gum confirm "Use $MEM_TOTAL_HUMAN on boot drive to make hibernation available?"; then
|
MEM_TOTAL_HUMAN=$(free --human | awk '/Mem/ {print $2}')
|
||||||
exit 0
|
if ! gum confirm "Use $MEM_TOTAL_HUMAN on boot drive to make hibernation available?"; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SWAP_SUBVOLUME="/swap"
|
SWAP_SUBVOLUME="/swap"
|
||||||
@@ -57,14 +63,38 @@ sudo mkdir -p /etc/mkinitcpio.conf.d
|
|||||||
echo "Adding resume hook to $MKINITCPIO_CONF"
|
echo "Adding resume hook to $MKINITCPIO_CONF"
|
||||||
echo "HOOKS+=(resume)" | sudo tee "$MKINITCPIO_CONF" >/dev/null
|
echo "HOOKS+=(resume)" | sudo tee "$MKINITCPIO_CONF" >/dev/null
|
||||||
|
|
||||||
# Configure suspend-then-hibernate
|
# Ensure keyboard backlight doesn't prevent sleep
|
||||||
echo "Configuring suspend-then-hibernate"
|
sudo cp -p "$OMARCHY_PATH/default/systemd/system-sleep/keyboard-backlight" /usr/lib/systemd/system-sleep/
|
||||||
sudo mkdir -p /etc/systemd/logind.conf.d /etc/systemd/sleep.conf.d
|
|
||||||
sudo cp "$OMARCHY_PATH/default/systemd/lid.conf" /etc/systemd/logind.conf.d/
|
|
||||||
sudo cp "$OMARCHY_PATH/default/systemd/hibernate.conf" /etc/systemd/sleep.conf.d/
|
|
||||||
|
|
||||||
# Regenerate initramfs
|
# Add resume= kernel parameters so the initramfs resume hook knows where to find the
|
||||||
|
# hibernation image. Without these, resume happens late (after GPU drivers load) and fails.
|
||||||
|
RESUME_DROP_IN="/etc/limine-entry-tool.d/resume.conf"
|
||||||
|
if [[ ! -f $RESUME_DROP_IN ]]; then
|
||||||
|
echo "Adding resume kernel parameters"
|
||||||
|
sudo swapon -p 0 "$SWAP_FILE" 2>/dev/null
|
||||||
|
RESUME_DEVICE=$(findmnt -no SOURCE -T "$SWAP_FILE" | sed 's/\[.*\]//')
|
||||||
|
RESUME_OFFSET=$(btrfs inspect-internal map-swapfile -r "$SWAP_FILE")
|
||||||
|
sudo mkdir -p /etc/limine-entry-tool.d
|
||||||
|
echo "KERNEL_CMDLINE[default]+=\"resume=$RESUME_DEVICE resume_offset=$RESUME_OFFSET\"" | sudo tee "$RESUME_DROP_IN" >/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use ACPI alarm for RTC wakeup on s2idle systems (needed for suspend-then-hibernate)
|
||||||
|
if grep -q "\[s2idle\]" /sys/power/mem_sleep 2>/dev/null; then
|
||||||
|
LIMINE_DROP_IN="/etc/limine-entry-tool.d/rtc-alarm.conf"
|
||||||
|
if [[ ! -f $LIMINE_DROP_IN ]]; then
|
||||||
|
echo "Enabling ACPI RTC alarm for s2idle suspend"
|
||||||
|
sudo mkdir -p /etc/limine-entry-tool.d
|
||||||
|
echo 'KERNEL_CMDLINE[default]+="rtc_cmos.use_acpi_alarm=1"' | sudo tee "$LIMINE_DROP_IN" >/dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Regenerate initramfs and boot entry
|
||||||
echo "Regenerating initramfs..."
|
echo "Regenerating initramfs..."
|
||||||
sudo limine-mkinitcpio
|
sudo limine-mkinitcpio
|
||||||
|
sudo limine-update
|
||||||
|
|
||||||
echo "Hibernation enabled"
|
echo
|
||||||
|
|
||||||
|
if [[ $1 != "--force" ]] && gum confirm "Reboot to enable hibernation?"; then
|
||||||
|
omarchy-system-reboot
|
||||||
|
fi
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [[ $# -lt 1 ]]; then
|
if (( $# < 1 )); then
|
||||||
echo "Usage: omarchy-hook [name] [args...]"
|
echo "Usage: omarchy-hook [name] [args...]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Detect whether the computer is an Asus ROG machine.
|
||||||
|
|
||||||
|
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "ASUSTeK COMPUTER INC." ]] &&
|
||||||
|
grep -q "ROG" /sys/class/dmi/id/product_family 2>/dev/null
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Detect whether the computer is a Framework Laptop 16.
|
||||||
|
|
||||||
|
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Framework" ]] &&
|
||||||
|
grep -q "Laptop 16" /sys/class/dmi/id/product_name 2>/dev/null
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Detect whether the computer is a Microsoft Surface device.
|
||||||
|
|
||||||
|
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Microsoft Corporation" ]] &&
|
||||||
|
grep -q "Surface" /sys/class/dmi/id/product_name 2>/dev/null
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Get the active monitor (the one with the cursor)
|
||||||
|
MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)')
|
||||||
|
ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name')
|
||||||
|
CURRENT_SCALE=$(echo "$MONITOR_INFO" | jq -r '.scale')
|
||||||
|
|
||||||
|
# Cycle through scales: 1 → 1.6 → 2 → 3 → 1
|
||||||
|
CURRENT_INT=$(awk -v s="$CURRENT_SCALE" 'BEGIN { printf "%.0f", s * 10 }')
|
||||||
|
|
||||||
|
case "$CURRENT_INT" in
|
||||||
|
10) NEW_SCALE=1.6 ;;
|
||||||
|
16) NEW_SCALE=2 ;;
|
||||||
|
20) NEW_SCALE=3 ;;
|
||||||
|
*) NEW_SCALE=1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
hyprctl keyword misc:disable_scale_notification true
|
||||||
|
hyprctl keyword monitor "$ACTIVE_MONITOR,preferred,auto,$NEW_SCALE"
|
||||||
|
hyprctl keyword misc:disable_scale_notification false
|
||||||
|
notify-send " Display scaling set to ${NEW_SCALE}x"
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check current single_window_aspect_ratio setting
|
||||||
|
CURRENT_VALUE=$(hyprctl getoption "dwindle:single_window_aspect_ratio" 2>/dev/null | head -1)
|
||||||
|
|
||||||
|
# Parse vec2 output: "vec2: [1, 1]" or "vec2: [0, 0]"
|
||||||
|
if [[ $CURRENT_VALUE == *"[1, 1]"* ]]; then
|
||||||
|
hyprctl keyword dwindle:single_window_aspect_ratio "0 0"
|
||||||
|
notify-send " Disable single-window square aspect ratio"
|
||||||
|
else
|
||||||
|
hyprctl keyword dwindle:single_window_aspect_ratio "1 1"
|
||||||
|
notify-send " Enable single-window square aspect"
|
||||||
|
fi
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Toggles the window gaps on the active workspace between no gaps and the default 10/5/2.
|
# Toggles the window gaps globally between no gaps and the default 10/5/2.
|
||||||
|
|
||||||
workspace_id=$(hyprctl activeworkspace -j | jq -r .id)
|
gaps=$(hyprctl getoption general:gaps_out -j | jq -r '.custom' | awk '{print $1}')
|
||||||
gaps=$(hyprctl workspacerules -j | jq -r ".[] | select(.workspaceString==\"$workspace_id\") | .gapsOut[0] // 0")
|
|
||||||
|
|
||||||
if [[ $gaps == "0" ]]; then
|
if [[ $gaps == "0" ]]; then
|
||||||
hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, bordersize:2"
|
hyprctl keyword general:gaps_out 10
|
||||||
else \
|
hyprctl keyword general:gaps_in 5
|
||||||
hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, bordersize:0"
|
hyprctl keyword general:border_size 2
|
||||||
|
else
|
||||||
|
hyprctl keyword general:gaps_out 0
|
||||||
|
hyprctl keyword general:gaps_in 0
|
||||||
|
hyprctl keyword general:border_size 0
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
# Install one of the supported development environments. Usually called via Install > Development > * in the Omarchy Menu.
|
# Install one of the supported development environments. Usually called via Install > Development > * in the Omarchy Menu.
|
||||||
|
|
||||||
if [[ -z "$1" ]]; then
|
if [[ -z $1 ]]; then
|
||||||
echo "Usage: omarchy-install-dev-env <ruby|node|bun|go|laravel|symfony|php|python|elixir|phoenix|rust|java|ocaml|dotnet|clojure|scala>" >&2
|
echo "Usage: omarchy-install-dev-env <ruby|node|bun|deno|go|laravel|symfony|php|python|elixir|phoenix|rust|java|zig|ocaml|dotnet|clojure|scala>" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
install_php() {
|
install_php() {
|
||||||
sudo pacman -S php composer php-sqlite xdebug --noconfirm
|
omarchy-pkg-add php composer php-sqlite xdebug
|
||||||
|
|
||||||
# Install Path for Composer
|
# Install Path for Composer
|
||||||
if [[ ":$PATH:" != *":$HOME/.config/composer/vendor/bin:"* ]]; then
|
if [[ :$PATH: != *:$HOME/.config/composer/vendor/bin:* ]]; then
|
||||||
echo 'export PATH="$HOME/.config/composer/vendor/bin:$PATH"' >>"$HOME/.bashrc"
|
echo 'export PATH="$HOME/.config/composer/vendor/bin:$PATH"' >>"$HOME/.bashrc"
|
||||||
source "$HOME/.bashrc"
|
source "$HOME/.bashrc"
|
||||||
echo "Added Composer global bin directory to PATH."
|
echo "Added Composer global bin directory to PATH."
|
||||||
@@ -52,7 +52,8 @@ ruby)
|
|||||||
omarchy-pkg-add libyaml
|
omarchy-pkg-add libyaml
|
||||||
mise use --global ruby@latest
|
mise use --global ruby@latest
|
||||||
mise settings add idiomatic_version_file_enable_tools ruby
|
mise settings add idiomatic_version_file_enable_tools ruby
|
||||||
echo "gem: --no-document" > ~/.gemrc
|
mise settings add ruby.compile false
|
||||||
|
echo "gem: --no-document" >~/.gemrc
|
||||||
mise x ruby -- gem install rails --no-document
|
mise x ruby -- gem install rails --no-document
|
||||||
echo -e "\nYou can now run: rails new myproject"
|
echo -e "\nYou can now run: rails new myproject"
|
||||||
;;
|
;;
|
||||||
@@ -143,6 +144,7 @@ clojure)
|
|||||||
;;
|
;;
|
||||||
scala)
|
scala)
|
||||||
echo -e "Installing Scala...\n"
|
echo -e "Installing Scala...\n"
|
||||||
|
mise use --global java@latest
|
||||||
mise use --global scala@latest
|
mise use --global scala@latest
|
||||||
mise use --global scala-cli@latest
|
mise use --global scala-cli@latest
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
|
|
||||||
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL")
|
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL")
|
||||||
|
|
||||||
if [[ "$#" -eq 0 ]]; then
|
if (( $# == 0 )); then
|
||||||
choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu
|
choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu
|
||||||
else
|
else
|
||||||
choices="$@"
|
choices="$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$choices" ]]; then
|
if [[ -n $choices ]]; then
|
||||||
for db in $choices; do
|
for db in $choices; do
|
||||||
case $db in
|
case $db in
|
||||||
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
|
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
|
||||||
|
|||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Install and launch Geforce Now.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
omarchy-pkg-add flatpak
|
||||||
|
cd /tmp
|
||||||
|
|
||||||
|
# Download and run GeForce NOW
|
||||||
|
curl -LO https://international.download.nvidia.com/GFNLinux/GeForceNOWSetup.bin
|
||||||
|
chmod +x GeForceNOWSetup.bin
|
||||||
|
./GeForceNOWSetup.bin
|
||||||
|
|
||||||
|
# Ensure a separate browser process not started by GFN is available.
|
||||||
|
# If not, it seems like GFN has a tendency to hang on login.
|
||||||
|
setsid omarchy-launch-browser
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Install the NordVPN service with optional GUI.
|
||||||
|
|
||||||
|
echo "Installing NordVPN..."
|
||||||
|
omarchy-pkg-aur-add nordvpn-bin
|
||||||
|
|
||||||
|
echo "Enabling NordVPN daemon..."
|
||||||
|
sudo systemctl enable --now nordvpnd
|
||||||
|
|
||||||
|
echo "Adding user to nordvpn group..."
|
||||||
|
sudo usermod -aG nordvpn "$USER"
|
||||||
|
|
||||||
|
echo -e "\nNordVPN installed! After reboot, run 'nordvpn login' to authenticate."
|
||||||
|
|
||||||
|
echo
|
||||||
|
gum confirm "Reboot now to make NordVPN usable?" && sudo reboot now
|
||||||
@@ -1,15 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Install the Tailscale mesh VPN service, the tsui TUI management app, and a web app for the Tailscale Admin Console.
|
# Install the Tailscale mesh VPN service and a web app for the Tailscale Admin Console.
|
||||||
|
|
||||||
curl -fsSL https://tailscale.com/install.sh | sh
|
curl -fsSL https://tailscale.com/install.sh | sh
|
||||||
curl -fsSL https://neuralink.com/tsui/install.sh | bash
|
|
||||||
|
|
||||||
echo -e "\nStarting Tailscale..."
|
echo -e "\nStarting Tailscale..."
|
||||||
sudo tailscale up --accept-routes
|
sudo tailscale up --accept-routes
|
||||||
|
|
||||||
echo -e "\nAdd tsui to sudoers..."
|
omarchy-webapp-install "Tailscale" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
|
||||||
echo "$USER ALL=(ALL) NOPASSWD: $(which tsui)" | sudo tee /etc/sudoers.d/tsui
|
|
||||||
|
|
||||||
omarchy-tui-install "Tailscale" "sudo tsui" float https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
|
|
||||||
omarchy-webapp-install "Tailscale Admin Console" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
|
|
||||||
|
|||||||
@@ -25,33 +25,11 @@ if omarchy-pkg-add $package; then
|
|||||||
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
||||||
if [[ $package == "alacritty" ]]; then
|
if [[ $package == "alacritty" ]]; then
|
||||||
mkdir -p ~/.local/share/applications
|
mkdir -p ~/.local/share/applications
|
||||||
cat > ~/.local/share/applications/Alacritty.desktop << EOF
|
cp $OMARCHY_PATH/applications/Alacritty.desktop ~/.local/share/applications/
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
TryExec=alacritty
|
|
||||||
Exec=alacritty
|
|
||||||
Icon=Alacritty
|
|
||||||
Terminal=false
|
|
||||||
Categories=System;TerminalEmulator;
|
|
||||||
Name=Alacritty
|
|
||||||
GenericName=Terminal
|
|
||||||
Comment=A fast, cross-platform, OpenGL terminal emulator
|
|
||||||
StartupNotify=true
|
|
||||||
StartupWMClass=Alacritty
|
|
||||||
Actions=New;
|
|
||||||
X-TerminalArgExec=-e
|
|
||||||
X-TerminalArgAppId=--class=
|
|
||||||
X-TerminalArgTitle=--title=
|
|
||||||
X-TerminalArgDir=--working-directory=
|
|
||||||
|
|
||||||
[Desktop Action New]
|
|
||||||
Name=New Terminal
|
|
||||||
Exec=alacritty
|
|
||||||
EOF
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update xdg-terminals.list to prioritize the proper terminal
|
# Update xdg-terminals.list to prioritize the proper terminal
|
||||||
cat > ~/.config/xdg-terminals.list << EOF
|
cat >~/.config/xdg-terminals.list <<EOF
|
||||||
# Terminal emulator preference order for xdg-terminal-exec
|
# Terminal emulator preference order for xdg-terminal-exec
|
||||||
# The first found and valid terminal will be used
|
# The first found and valid terminal will be used
|
||||||
$desktop_id
|
$desktop_id
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Install xpadneo to ensure controllers work out of the box
|
# Install xpadneo to ensure controllers work out of the box
|
||||||
sudo pacman -S --noconfirm --needed linux-headers
|
omarchy-pkg-add linux-headers
|
||||||
yay -S --noconfirm xpadneo-dkms
|
omarchy-pkg-aur-add xpadneo-dkms
|
||||||
|
|
||||||
# Prevent xpad/xpadneo driver conflict
|
# Prevent xpad/xpadneo driver conflict
|
||||||
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
|
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
default_browser=$(xdg-settings get default-web-browser)
|
default_browser=$(xdg-settings get default-web-browser)
|
||||||
browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1)
|
browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1)
|
||||||
|
|
||||||
if [[ $browser_exec =~ (firefox|zen|librewolf|mullvad) ]]; then
|
if $browser_exec --help | grep -q MOZ_LOG; then
|
||||||
private_flag="--private-window"
|
private_flag="--private-window"
|
||||||
elif [[ $browser_exec =~ edge ]]; then
|
elif [[ $browser_exec =~ edge ]]; then
|
||||||
private_flag="--inprivate"
|
private_flag="--inprivate"
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
# Used by actions such as Update System.
|
# Used by actions such as Update System.
|
||||||
|
|
||||||
cmd="$*"
|
cmd="$*"
|
||||||
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; if [ \$? -ne 130 ]; then omarchy-show-done; fi"
|
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; if (( \$? != 130 )); then omarchy-show-done; fi"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ fi
|
|||||||
|
|
||||||
WINDOW_PATTERN="$1"
|
WINDOW_PATTERN="$1"
|
||||||
LAUNCH_COMMAND="${2:-"uwsm-app -- $WINDOW_PATTERN"}"
|
LAUNCH_COMMAND="${2:-"uwsm-app -- $WINDOW_PATTERN"}"
|
||||||
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + $p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
|
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
|
||||||
|
|
||||||
if [[ -n $WINDOW_ADDRESS ]]; then
|
if [[ -n $WINDOW_ADDRESS ]]; then
|
||||||
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Launch the Walker application launcher while ensuring that it's data provider (called elephant) is runnig first.
|
# Launch the Walker application launcher while ensuring that it's data provider (called elephant) is running first.
|
||||||
|
|
||||||
# Ensure elephant is running before launching walker
|
# Ensure elephant is running before launching walker
|
||||||
if ! pgrep -x elephant > /dev/null; then
|
if ! pgrep -x elephant > /dev/null; then
|
||||||
|
|||||||
+78
-57
@@ -10,9 +10,9 @@ BACK_TO_EXIT=false
|
|||||||
back_to() {
|
back_to() {
|
||||||
local parent_menu="$1"
|
local parent_menu="$1"
|
||||||
|
|
||||||
if [[ "$BACK_TO_EXIT" == "true" ]]; then
|
if [[ $BACK_TO_EXIT == "true" ]]; then
|
||||||
exit 0
|
exit 0
|
||||||
elif [[ -n "$parent_menu" ]]; then
|
elif [[ -n $parent_menu ]]; then
|
||||||
"$parent_menu"
|
"$parent_menu"
|
||||||
else
|
else
|
||||||
show_main_menu
|
show_main_menu
|
||||||
@@ -27,10 +27,10 @@ menu() {
|
|||||||
|
|
||||||
read -r -a args <<<"$extra"
|
read -r -a args <<<"$extra"
|
||||||
|
|
||||||
if [[ -n "$preselect" ]]; then
|
if [[ -n $preselect ]]; then
|
||||||
local index
|
local index
|
||||||
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
|
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
|
||||||
if [[ -n "$index" ]]; then
|
if [[ -n $index ]]; then
|
||||||
args+=("-c" "$index")
|
args+=("-c" "$index")
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -52,15 +52,15 @@ open_in_editor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
install() {
|
install() {
|
||||||
present_terminal "echo 'Installing $1...'; sudo pacman -S --noconfirm $2"
|
present_terminal "echo 'Installing $1...'; omarchy-pkg-add $2"
|
||||||
}
|
}
|
||||||
|
|
||||||
install_and_launch() {
|
install_and_launch() {
|
||||||
present_terminal "echo 'Installing $1...'; sudo pacman -S --noconfirm $2 && setsid gtk-launch $3"
|
present_terminal "echo 'Installing $1...'; omarchy-pkg-add $2 && setsid gtk-launch $3"
|
||||||
}
|
}
|
||||||
|
|
||||||
install_font() {
|
install_font() {
|
||||||
present_terminal "echo 'Installing $1...'; sudo pacman -S --noconfirm --needed $2 && sleep 2 && omarchy-font-set '$3'"
|
present_terminal "echo 'Installing $1...'; omarchy-pkg-add $2 && sleep 2 && omarchy-font-set '$3'"
|
||||||
}
|
}
|
||||||
|
|
||||||
install_terminal() {
|
install_terminal() {
|
||||||
@@ -68,11 +68,11 @@ install_terminal() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
aur_install() {
|
aur_install() {
|
||||||
present_terminal "echo 'Installing $1 from AUR...'; yay -S --noconfirm $2"
|
present_terminal "echo 'Installing $1 from AUR...'; omarchy-pkg-aur-add $2"
|
||||||
}
|
}
|
||||||
|
|
||||||
aur_install_and_launch() {
|
aur_install_and_launch() {
|
||||||
present_terminal "echo 'Installing $1 from AUR...'; yay -S --noconfirm $2 && setsid gtk-launch $3"
|
present_terminal "echo 'Installing $1 from AUR...'; omarchy-pkg-aur-add $2 && setsid gtk-launch $3"
|
||||||
}
|
}
|
||||||
|
|
||||||
show_learn_menu() {
|
show_learn_menu() {
|
||||||
@@ -88,38 +88,31 @@ show_learn_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_trigger_menu() {
|
show_trigger_menu() {
|
||||||
case $(menu "Trigger" " Capture\n Share\n Toggle") in
|
case $(menu "Trigger" " Capture\n Share\n Toggle\n Hardware") in
|
||||||
*Capture*) show_capture_menu ;;
|
*Capture*) show_capture_menu ;;
|
||||||
*Share*) show_share_menu ;;
|
*Share*) show_share_menu ;;
|
||||||
*Toggle*) show_toggle_menu ;;
|
*Toggle*) show_toggle_menu ;;
|
||||||
|
*Hardware*) show_hardware_menu ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_capture_menu() {
|
show_capture_menu() {
|
||||||
case $(menu "Capture" " Screenshot\n Screenrecord\n Color") in
|
case $(menu "Capture" " Screenshot\n Screenrecord\n Color") in
|
||||||
*Screenshot*) show_screenshot_menu ;;
|
*Screenshot*) omarchy-cmd-screenshot ;;
|
||||||
*Screenrecord*) show_screenrecord_menu ;;
|
*Screenrecord*) show_screenrecord_menu ;;
|
||||||
*Color*) pkill hyprpicker || hyprpicker -a ;;
|
*Color*) pkill hyprpicker || hyprpicker -a ;;
|
||||||
*) show_trigger_menu ;;
|
*) show_trigger_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_screenshot_menu() {
|
|
||||||
case $(menu "Screenshot" " Snap with Editing\n Straight to Clipboard") in
|
|
||||||
*Editing*) omarchy-cmd-screenshot smart ;;
|
|
||||||
*Clipboard*) omarchy-cmd-screenshot smart clipboard ;;
|
|
||||||
*) show_capture_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
get_webcam_list() {
|
get_webcam_list() {
|
||||||
v4l2-ctl --list-devices 2>/dev/null | while IFS= read -r line; do
|
v4l2-ctl --list-devices 2>/dev/null | while IFS= read -r line; do
|
||||||
if [[ "$line" != $'\t'* && -n "$line" ]]; then
|
if [[ $line != $'\t'* && -n $line ]]; then
|
||||||
local name="$line"
|
local name="$line"
|
||||||
IFS= read -r device || break
|
IFS= read -r device || break
|
||||||
device=$(echo "$device" | tr -d '\t' | head -1)
|
device=$(echo "$device" | tr -d '\t' | head -1)
|
||||||
[[ -n "$device" ]] && echo "$device $name"
|
[[ -n $device ]] && echo "$device $name"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -128,12 +121,12 @@ show_webcam_select_menu() {
|
|||||||
local devices=$(get_webcam_list)
|
local devices=$(get_webcam_list)
|
||||||
local count=$(echo "$devices" | grep -c . 2>/dev/null || echo 0)
|
local count=$(echo "$devices" | grep -c . 2>/dev/null || echo 0)
|
||||||
|
|
||||||
if [[ -z "$devices" || "$count" -eq 0 ]]; then
|
if [[ -z $devices ]] || ((count == 0)); then
|
||||||
notify-send "No webcam devices found" -u critical -t 3000
|
notify-send "No webcam devices found" -u critical -t 3000
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$count" -eq 1 ]]; then
|
if ((count == 1)); then
|
||||||
echo "$devices" | awk '{print $1}'
|
echo "$devices" | awk '{print $1}'
|
||||||
else
|
else
|
||||||
menu "Select Webcam" "$devices" | awk '{print $1}'
|
menu "Select Webcam" "$devices" | awk '{print $1}'
|
||||||
@@ -143,11 +136,15 @@ show_webcam_select_menu() {
|
|||||||
show_screenrecord_menu() {
|
show_screenrecord_menu() {
|
||||||
omarchy-cmd-screenrecord --stop-recording && exit 0
|
omarchy-cmd-screenrecord --stop-recording && exit 0
|
||||||
|
|
||||||
case $(menu "Screenrecord" " With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
|
case $(menu "Screenrecord" " With no audio\n With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
|
||||||
|
*"With no audio") omarchy-cmd-screenrecord ;;
|
||||||
*"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;;
|
*"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;;
|
||||||
*"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
|
*"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
|
||||||
*"With desktop + microphone audio + webcam")
|
*"With desktop + microphone audio + webcam")
|
||||||
local device=$(show_webcam_select_menu) || { back_to show_capture_menu; return; }
|
local device=$(show_webcam_select_menu) || {
|
||||||
|
back_to show_capture_menu
|
||||||
|
return
|
||||||
|
}
|
||||||
omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
|
omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
|
||||||
;;
|
;;
|
||||||
*) back_to show_capture_menu ;;
|
*) back_to show_capture_menu ;;
|
||||||
@@ -173,11 +170,18 @@ show_toggle_menu() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_hardware_menu() {
|
||||||
|
case $(menu "Toggle" " Hybrid GPU") in
|
||||||
|
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
|
||||||
|
*) show_trigger_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
show_style_menu() {
|
show_style_menu() {
|
||||||
case $(menu "Style" " Theme\n Font\n Background\n Hyprland\n Screensaver\n About") in
|
case $(menu "Style" " Theme\n Font\n Background\n Hyprland\n Screensaver\n About") in
|
||||||
*Theme*) show_theme_menu ;;
|
*Theme*) show_theme_menu ;;
|
||||||
*Font*) show_font_menu ;;
|
*Font*) show_font_menu ;;
|
||||||
*Background*) omarchy-theme-bg-next ;;
|
*Background*) show_background_menu ;;
|
||||||
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
|
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
|
||||||
*Screensaver*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
|
*Screensaver*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
|
||||||
*About*) open_in_editor ~/.config/omarchy/branding/about.txt ;;
|
*About*) open_in_editor ~/.config/omarchy/branding/about.txt ;;
|
||||||
@@ -189,9 +193,13 @@ show_theme_menu() {
|
|||||||
omarchy-launch-walker -m menus:omarchythemes --width 800 --minheight 400
|
omarchy-launch-walker -m menus:omarchythemes --width 800 --minheight 400
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_background_menu() {
|
||||||
|
omarchy-launch-walker -m menus:omarchyBackgroundSelector --width 800 --minheight 400
|
||||||
|
}
|
||||||
|
|
||||||
show_font_menu() {
|
show_font_menu() {
|
||||||
theme=$(menu "Font" "$(omarchy-font-list)" "--width 350" "$(omarchy-font-current)")
|
theme=$(menu "Font" "$(omarchy-font-list)" "--width 350" "$(omarchy-font-current)")
|
||||||
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
|
if [[ $theme == "CNCLD" || -z $theme ]]; then
|
||||||
back_to show_style_menu
|
back_to show_style_menu
|
||||||
else
|
else
|
||||||
omarchy-font-set "$theme"
|
omarchy-font-set "$theme"
|
||||||
@@ -200,8 +208,8 @@ show_font_menu() {
|
|||||||
|
|
||||||
show_setup_menu() {
|
show_setup_menu() {
|
||||||
local options=" Audio\n Wifi\n Bluetooth\n Power Profile\n System Sleep\n Monitors"
|
local options=" Audio\n Wifi\n Bluetooth\n Power Profile\n System Sleep\n Monitors"
|
||||||
[ -f ~/.config/hypr/bindings.conf ] && options="$options\n Keybindings"
|
[[ -f ~/.config/hypr/bindings.conf ]] && options="$options\n Keybindings"
|
||||||
[ -f ~/.config/hypr/input.conf ] && options="$options\n Input"
|
[[ -f ~/.config/hypr/input.conf ]] && options="$options\n Input"
|
||||||
options="$options\n DNS\n Security\n Config"
|
options="$options\n DNS\n Security\n Config"
|
||||||
|
|
||||||
case $(menu "Setup" "$options") in
|
case $(menu "Setup" "$options") in
|
||||||
@@ -223,7 +231,7 @@ show_setup_menu() {
|
|||||||
show_setup_power_menu() {
|
show_setup_power_menu() {
|
||||||
profile=$(menu "Power Profile" "$(omarchy-powerprofiles-list)" "" "$(powerprofilesctl get)")
|
profile=$(menu "Power Profile" "$(omarchy-powerprofiles-list)" "" "$(powerprofilesctl get)")
|
||||||
|
|
||||||
if [[ "$profile" == "CNCLD" || -z "$profile" ]]; then
|
if [[ $profile == "CNCLD" || -z $profile ]]; then
|
||||||
back_to show_setup_menu
|
back_to show_setup_menu
|
||||||
else
|
else
|
||||||
powerprofilesctl set "$profile"
|
powerprofilesctl set "$profile"
|
||||||
@@ -256,10 +264,10 @@ show_setup_config_menu() {
|
|||||||
show_setup_system_menu() {
|
show_setup_system_menu() {
|
||||||
local options=""
|
local options=""
|
||||||
|
|
||||||
if [ -f ~/.local/state/omarchy/toggles/suspend-on ]; then
|
if [[ -f ~/.local/state/omarchy/toggles/suspend-off ]]; then
|
||||||
options="$options Disable Suspend"
|
|
||||||
else
|
|
||||||
options="$options Enable Suspend"
|
options="$options Enable Suspend"
|
||||||
|
else
|
||||||
|
options="$options Disable Suspend"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if omarchy-hibernation-available; then
|
if omarchy-hibernation-available; then
|
||||||
@@ -295,9 +303,10 @@ show_install_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_service_menu() {
|
show_install_service_menu() {
|
||||||
case $(menu "Install" " Dropbox\n Tailscale\n Bitwarden\n Chromium Account") in
|
case $(menu "Install" " Dropbox\n Tailscale\n NordVPN\n Bitwarden\n Chromium Account") in
|
||||||
*Dropbox*) present_terminal omarchy-install-dropbox ;;
|
*Dropbox*) present_terminal omarchy-install-dropbox ;;
|
||||||
*Tailscale*) present_terminal omarchy-install-tailscale ;;
|
*Tailscale*) present_terminal omarchy-install-tailscale ;;
|
||||||
|
*NordVPN*) present_terminal omarchy-install-nordvpn ;;
|
||||||
*Bitwarden*) install_and_launch "Bitwarden" "bitwarden bitwarden-cli" "bitwarden" ;;
|
*Bitwarden*) install_and_launch "Bitwarden" "bitwarden bitwarden-cli" "bitwarden" ;;
|
||||||
*Chromium*) present_terminal omarchy-install-chromium-google-account ;;
|
*Chromium*) present_terminal omarchy-install-chromium-google-account ;;
|
||||||
*) show_install_menu ;;
|
*) show_install_menu ;;
|
||||||
@@ -308,7 +317,7 @@ show_install_editor_menu() {
|
|||||||
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
|
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
|
||||||
*VSCode*) present_terminal omarchy-install-vscode ;;
|
*VSCode*) present_terminal omarchy-install-vscode ;;
|
||||||
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
||||||
*Zed*) present_terminal "echo 'Installing Zed...'; sudo pacman -S zed && setsid gtk-launch dev.zed.Zed" ;;
|
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
|
||||||
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
||||||
*Helix*) install "Helix" "helix" ;;
|
*Helix*) install "Helix" "helix" ;;
|
||||||
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
||||||
@@ -332,13 +341,13 @@ show_install_ai_menu() {
|
|||||||
echo ollama
|
echo ollama
|
||||||
)
|
)
|
||||||
|
|
||||||
case $(menu "Install" " Dictation\n Claude Code\n Copilot CLI\n Cursor CLI\n Gemini\n OpenAI Codex\n LM Studio\n Ollama\n Crush") in
|
case $(menu "Install" " Dictation\n Claude Code\n Codex\n Gemini CLI\n Copilot CLI\n Cursor CLI\n LM Studio\n Ollama\n Crush") in
|
||||||
*Dictation*) present_terminal omarchy-voxtype-install ;;
|
*Dictation*) present_terminal omarchy-voxtype-install ;;
|
||||||
*Claude*) install "Claude Code" "claude-code" ;;
|
*Claude*) install "Claude Code" "claude-code" ;;
|
||||||
|
*Codex*) install "Codex" "openai-codex" ;;
|
||||||
|
*Gemini*) install "Gemini CLI" "gemini-cli" ;;
|
||||||
*Copilot*) install "Copilot CLI" "github-copilot-cli" ;;
|
*Copilot*) install "Copilot CLI" "github-copilot-cli" ;;
|
||||||
*Cursor*) install "Cursor CLI" "cursor-cli" ;;
|
*Cursor*) install "Cursor CLI" "cursor-cli" ;;
|
||||||
*Gemini*) install "Gemini" "gemini-cli" ;;
|
|
||||||
*OpenAI*) install "OpenAI Codex" "openai-codex" ;;
|
|
||||||
*Studio*) install "LM Studio" "lmstudio" ;;
|
*Studio*) install "LM Studio" "lmstudio" ;;
|
||||||
*Ollama*) install "Ollama" $ollama_pkg ;;
|
*Ollama*) install "Ollama" $ollama_pkg ;;
|
||||||
*Crush*) install "Crush" "crush-bin" ;;
|
*Crush*) install "Crush" "crush-bin" ;;
|
||||||
@@ -347,8 +356,9 @@ show_install_ai_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_gaming_menu() {
|
show_install_gaming_menu() {
|
||||||
case $(menu "Install" " Steam\n RetroArch [AUR]\n Minecraft\n Xbox Controller [AUR]") in
|
case $(menu "Install" " Steam\n NVIDIA GeForce NOW\n RetroArch [AUR]\n Minecraft\n Xbox Controller [AUR]") in
|
||||||
*Steam*) present_terminal omarchy-install-steam ;;
|
*Steam*) present_terminal omarchy-install-steam ;;
|
||||||
|
*GeForce*) present_terminal omarchy-install-geforce-now ;;
|
||||||
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
|
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
|
||||||
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
||||||
*Xbox*) present_terminal omarchy-install-xbox-controllers ;;
|
*Xbox*) present_terminal omarchy-install-xbox-controllers ;;
|
||||||
@@ -366,7 +376,8 @@ show_install_style_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_font_menu() {
|
show_install_font_menu() {
|
||||||
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono\n Iosevka" "--width 350") in
|
case $(menu "Install" " Cascadia Mono\n Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono\n Iosevka" "--width 350") in
|
||||||
|
*Cascadia*) install_font "Cascadia Mono" "ttf-cascadia-mono-nerd" "CaskaydiaMono Nerd Font" ;;
|
||||||
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;;
|
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;;
|
||||||
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;;
|
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;;
|
||||||
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
|
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
|
||||||
@@ -423,11 +434,12 @@ show_install_elixir_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_remove_menu() {
|
show_remove_menu() {
|
||||||
case $(menu "Remove" " Package\n Web App\n TUI\n Development\n Dictation\n Theme\n Windows\n Fingerprint\n Fido2") in
|
case $(menu "Remove" " Package\n Web App\n TUI\n Development\n Preinstalls\n Dictation\n Theme\n Windows\n Fingerprint\n Fido2") in
|
||||||
*Package*) terminal omarchy-pkg-remove ;;
|
*Package*) terminal omarchy-pkg-remove ;;
|
||||||
*Web*) present_terminal omarchy-webapp-remove ;;
|
*Web*) present_terminal omarchy-webapp-remove ;;
|
||||||
*TUI*) present_terminal omarchy-tui-remove ;;
|
*TUI*) present_terminal omarchy-tui-remove ;;
|
||||||
*Development*) show_remove_development_menu ;;
|
*Development*) show_remove_development_menu ;;
|
||||||
|
*Preinstalls*) present_terminal omarchy-remove-preinstalls ;;
|
||||||
*Dictation*) present_terminal omarchy-voxtype-remove ;;
|
*Dictation*) present_terminal omarchy-voxtype-remove ;;
|
||||||
*Theme*) present_terminal omarchy-theme-remove ;;
|
*Theme*) present_terminal omarchy-theme-remove ;;
|
||||||
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
||||||
@@ -438,7 +450,7 @@ show_remove_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_remove_development_menu() {
|
show_remove_development_menu() {
|
||||||
case $(menu "Remove" " Ruby on Rails\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in
|
case $(menu "Remove" " Ruby on Rails\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure\n Scala") in
|
||||||
*Rails*) present_terminal "omarchy-remove-dev-env ruby" ;;
|
*Rails*) present_terminal "omarchy-remove-dev-env ruby" ;;
|
||||||
*JavaScript*) show_remove_javascript_menu ;;
|
*JavaScript*) show_remove_javascript_menu ;;
|
||||||
*Go*) present_terminal "omarchy-remove-dev-env go" ;;
|
*Go*) present_terminal "omarchy-remove-dev-env go" ;;
|
||||||
@@ -451,12 +463,13 @@ show_remove_development_menu() {
|
|||||||
*NET*) present_terminal "omarchy-remove-dev-env dotnet" ;;
|
*NET*) present_terminal "omarchy-remove-dev-env dotnet" ;;
|
||||||
*OCaml*) present_terminal "omarchy-remove-dev-env ocaml" ;;
|
*OCaml*) present_terminal "omarchy-remove-dev-env ocaml" ;;
|
||||||
*Clojure*) present_terminal "omarchy-remove-dev-env clojure" ;;
|
*Clojure*) present_terminal "omarchy-remove-dev-env clojure" ;;
|
||||||
|
*Scala*) present_terminal "omarchy-remove-dev-env scala" ;;
|
||||||
*) show_remove_menu ;;
|
*) show_remove_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_remove_javascript_menu() {
|
show_remove_javascript_menu() {
|
||||||
case $(menu "Remove" " Node.js\n Bun\n Deno") in
|
case $(menu "Remove" " Node.js\n Bun\n Deno") in
|
||||||
*Node*) present_terminal "omarchy-remove-dev-env node" ;;
|
*Node*) present_terminal "omarchy-remove-dev-env node" ;;
|
||||||
*Bun*) present_terminal "omarchy-remove-dev-env bun" ;;
|
*Bun*) present_terminal "omarchy-remove-dev-env bun" ;;
|
||||||
*Deno*) present_terminal "omarchy-remove-dev-env deno" ;;
|
*Deno*) present_terminal "omarchy-remove-dev-env deno" ;;
|
||||||
@@ -465,7 +478,7 @@ show_remove_javascript_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_remove_php_menu() {
|
show_remove_php_menu() {
|
||||||
case $(menu "Remove" " PHP\n Laravel\n Symfony") in
|
case $(menu "Remove" " PHP\n Laravel\n Symfony") in
|
||||||
*PHP*) present_terminal "omarchy-remove-dev-env php" ;;
|
*PHP*) present_terminal "omarchy-remove-dev-env php" ;;
|
||||||
*Laravel*) present_terminal "omarchy-remove-dev-env laravel" ;;
|
*Laravel*) present_terminal "omarchy-remove-dev-env laravel" ;;
|
||||||
*Symfony*) present_terminal "omarchy-remove-dev-env symfony" ;;
|
*Symfony*) present_terminal "omarchy-remove-dev-env symfony" ;;
|
||||||
@@ -474,7 +487,7 @@ show_remove_php_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_remove_elixir_menu() {
|
show_remove_elixir_menu() {
|
||||||
case $(menu "Remove" " Elixir\n Phoenix") in
|
case $(menu "Remove" " Elixir\n Phoenix") in
|
||||||
*Elixir*) present_terminal "omarchy-remove-dev-env elixir" ;;
|
*Elixir*) present_terminal "omarchy-remove-dev-env elixir" ;;
|
||||||
*Phoenix*) present_terminal "omarchy-remove-dev-env phoenix" ;;
|
*Phoenix*) present_terminal "omarchy-remove-dev-env phoenix" ;;
|
||||||
*) show_remove_development_menu ;;
|
*) show_remove_development_menu ;;
|
||||||
@@ -482,7 +495,7 @@ show_remove_elixir_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_update_menu() {
|
show_update_menu() {
|
||||||
case $(menu "Update" " Omarchy\n Channel\n Config\n Extra Themes\n Process\n Hardware\n Firmware\n Password\n Timezone\n Time") in
|
case $(menu "Update" " Omarchy\n Channel\n Config\n Extra Themes\n Process\n Hardware\n Firmware\n Password\n Timezone\n Time") in
|
||||||
*Omarchy*) present_terminal omarchy-update ;;
|
*Omarchy*) present_terminal omarchy-update ;;
|
||||||
*Channel*) show_update_channel_menu ;;
|
*Channel*) show_update_channel_menu ;;
|
||||||
*Config*) show_update_config_menu ;;
|
*Config*) show_update_config_menu ;;
|
||||||
@@ -498,8 +511,9 @@ show_update_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_update_channel_menu() {
|
show_update_channel_menu() {
|
||||||
case $(menu "Update channel" "🟢 Stable\n🟡 Edge\n🔴 Dev") in
|
case $(menu "Update channel" "🟢 Stable\n🟡 RC\n🟠 Edge\n🔴 Dev") in
|
||||||
*Stable*) present_terminal "omarchy-channel-set stable" ;;
|
*Stable*) present_terminal "omarchy-channel-set stable" ;;
|
||||||
|
*RC*) present_terminal "omarchy-channel-set rc" ;;
|
||||||
*Edge*) present_terminal "omarchy-channel-set edge" ;;
|
*Edge*) present_terminal "omarchy-channel-set edge" ;;
|
||||||
*Dev*) present_terminal "omarchy-channel-set dev" ;;
|
*Dev*) present_terminal "omarchy-channel-set dev" ;;
|
||||||
*) show_update_menu ;;
|
*) show_update_menu ;;
|
||||||
@@ -517,13 +531,14 @@ show_update_process_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_update_config_menu() {
|
show_update_config_menu() {
|
||||||
case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Plymouth\n Swayosd\n Walker\n Waybar") in
|
case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Plymouth\n Swayosd\n Tmux\n Walker\n Waybar") in
|
||||||
*Hyprland*) present_terminal omarchy-refresh-hyprland ;;
|
*Hyprland*) present_terminal omarchy-refresh-hyprland ;;
|
||||||
*Hypridle*) present_terminal omarchy-refresh-hypridle ;;
|
*Hypridle*) present_terminal omarchy-refresh-hypridle ;;
|
||||||
*Hyprlock*) present_terminal omarchy-refresh-hyprlock ;;
|
*Hyprlock*) present_terminal omarchy-refresh-hyprlock ;;
|
||||||
*Hyprsunset*) present_terminal omarchy-refresh-hyprsunset ;;
|
*Hyprsunset*) present_terminal omarchy-refresh-hyprsunset ;;
|
||||||
*Plymouth*) present_terminal omarchy-refresh-plymouth ;;
|
*Plymouth*) present_terminal omarchy-refresh-plymouth ;;
|
||||||
*Swayosd*) present_terminal omarchy-refresh-swayosd ;;
|
*Swayosd*) present_terminal omarchy-refresh-swayosd ;;
|
||||||
|
*Tmux*) present_terminal omarchy-refresh-tmux ;;
|
||||||
*Walker*) present_terminal omarchy-refresh-walker ;;
|
*Walker*) present_terminal omarchy-refresh-walker ;;
|
||||||
*Waybar*) present_terminal omarchy-refresh-waybar ;;
|
*Waybar*) present_terminal omarchy-refresh-waybar ;;
|
||||||
*) show_update_menu ;;
|
*) show_update_menu ;;
|
||||||
@@ -547,19 +562,24 @@ show_update_password_menu() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_about() {
|
||||||
|
omarchy-launch-about
|
||||||
|
}
|
||||||
|
|
||||||
show_system_menu() {
|
show_system_menu() {
|
||||||
local options=" Lock\n Screensaver"
|
local options=" Screensaver\n Lock"
|
||||||
[ -f ~/.local/state/omarchy/toggles/suspend-on ] && options="$options\n Suspend"
|
[[ ! -f ~/.local/state/omarchy/toggles/suspend-off ]] && options="$options\n Suspend"
|
||||||
omarchy-hibernation-available && options="$options\n Hibernate"
|
omarchy-hibernation-available && options="$options\n Hibernate"
|
||||||
options="$options\n Restart\n Shutdown"
|
options="$options\n Logout\n Restart\n Shutdown"
|
||||||
|
|
||||||
case $(menu "System" "$options") in
|
case $(menu "System" "$options") in
|
||||||
*Lock*) omarchy-lock-screen ;;
|
|
||||||
*Screensaver*) omarchy-launch-screensaver force ;;
|
*Screensaver*) omarchy-launch-screensaver force ;;
|
||||||
|
*Lock*) omarchy-lock-screen ;;
|
||||||
*Suspend*) systemctl suspend ;;
|
*Suspend*) systemctl suspend ;;
|
||||||
*Hibernate*) systemctl hibernate ;;
|
*Hibernate*) systemctl hibernate ;;
|
||||||
*Restart*) omarchy-cmd-reboot ;;
|
*Logout*) omarchy-system-logout ;;
|
||||||
*Shutdown*) omarchy-cmd-shutdown ;;
|
*Restart*) omarchy-system-reboot ;;
|
||||||
|
*Shutdown*) omarchy-system-shutdown ;;
|
||||||
*) back_to show_main_menu ;;
|
*) back_to show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
@@ -574,16 +594,17 @@ go_to_menu() {
|
|||||||
*learn*) show_learn_menu ;;
|
*learn*) show_learn_menu ;;
|
||||||
*trigger*) show_trigger_menu ;;
|
*trigger*) show_trigger_menu ;;
|
||||||
*share*) show_share_menu ;;
|
*share*) show_share_menu ;;
|
||||||
|
*background*) show_background_menu ;;
|
||||||
|
*capture*) show_capture_menu ;;
|
||||||
*style*) show_style_menu ;;
|
*style*) show_style_menu ;;
|
||||||
*theme*) show_theme_menu ;;
|
*theme*) show_theme_menu ;;
|
||||||
*screenshot*) show_screenshot_menu ;;
|
|
||||||
*screenrecord*) show_screenrecord_menu ;;
|
*screenrecord*) show_screenrecord_menu ;;
|
||||||
*setup*) show_setup_menu ;;
|
*setup*) show_setup_menu ;;
|
||||||
*power*) show_setup_power_menu ;;
|
*power*) show_setup_power_menu ;;
|
||||||
*install*) show_install_menu ;;
|
*install*) show_install_menu ;;
|
||||||
*remove*) show_remove_menu ;;
|
*remove*) show_remove_menu ;;
|
||||||
*update*) show_update_menu ;;
|
*update*) show_update_menu ;;
|
||||||
*about*) omarchy-launch-about ;;
|
*about*) show_about ;;
|
||||||
*system*) show_system_menu ;;
|
*system*) show_system_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
@@ -592,7 +613,7 @@ go_to_menu() {
|
|||||||
USER_EXTENSIONS="$HOME/.config/omarchy/extensions/menu.sh"
|
USER_EXTENSIONS="$HOME/.config/omarchy/extensions/menu.sh"
|
||||||
[[ -f $USER_EXTENSIONS ]] && source "$USER_EXTENSIONS"
|
[[ -f $USER_EXTENSIONS ]] && source "$USER_EXTENSIONS"
|
||||||
|
|
||||||
if [[ -n "$1" ]]; then
|
if [[ -n $1 ]]; then
|
||||||
BACK_TO_EXIT=true
|
BACK_TO_EXIT=true
|
||||||
go_to_menu "$1"
|
go_to_menu "$1"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ build_keymap_cache() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while IFS=, read -r code sym; do
|
while IFS=, read -r code sym; do
|
||||||
[[ -z "$code" || -z "$sym" ]] && continue
|
[[ -z $code || -z $sym ]] && continue
|
||||||
KEYCODE_SYM_MAP["$code"]="$sym"
|
KEYCODE_SYM_MAP["$code"]="$sym"
|
||||||
done < <(
|
done < <(
|
||||||
awk '
|
awk '
|
||||||
@@ -42,13 +42,13 @@ lookup_keycode_cached() {
|
|||||||
|
|
||||||
parse_keycodes() {
|
parse_keycodes() {
|
||||||
local start end elapsed
|
local start end elapsed
|
||||||
[[ "${DEBUG:-0}" == "1" ]] && start=$(date +%s.%N)
|
[[ ${DEBUG:-0} == "1" ]] && start=$(date +%s.%N)
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
if [[ "$line" =~ code:([0-9]+) ]]; then
|
if [[ $line =~ code:([0-9]+) ]]; then
|
||||||
code="${BASH_REMATCH[1]}"
|
code="${BASH_REMATCH[1]}"
|
||||||
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
|
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
|
||||||
echo "${line/code:${code}/$symbol}"
|
echo "${line/code:${code}/$symbol}"
|
||||||
elif [[ "$line" =~ mouse:([0-9]+) ]]; then
|
elif [[ $line =~ mouse:([0-9]+) ]]; then
|
||||||
code="${BASH_REMATCH[1]}"
|
code="${BASH_REMATCH[1]}"
|
||||||
|
|
||||||
case "$code" in
|
case "$code" in
|
||||||
@@ -64,7 +64,7 @@ parse_keycodes() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ "$DEBUG" == "1" ]]; then
|
if [[ $DEBUG == "1" ]]; then
|
||||||
end=$(date +%s.%N)
|
end=$(date +%s.%N)
|
||||||
# fall back to awk if bc is missing
|
# fall back to awk if bc is missing
|
||||||
if command -v bc >/dev/null 2>&1; then
|
if command -v bc >/dev/null 2>&1; then
|
||||||
@@ -168,44 +168,47 @@ prioritize_entries() {
|
|||||||
line = $0
|
line = $0
|
||||||
prio = 50
|
prio = 50
|
||||||
if (match(line, /Terminal/)) prio = 0
|
if (match(line, /Terminal/)) prio = 0
|
||||||
if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/)) prio = 1
|
if (match(line, /Tmux/)) prio = 1
|
||||||
if (match(line, /File manager/)) prio = 2
|
if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/) && !match(line, /SUPER SHIFT.*\+.*B.*→.*Browser/)) prio = 2
|
||||||
if (match(line, /Launch apps/)) prio = 3
|
if (match(line, /File manager/) && !match(line, /File manager \(cwd\)/)) prio = 3
|
||||||
if (match(line, /Omarchy menu/)) prio = 4
|
if (match(line, /Launch apps/)) prio = 4
|
||||||
if (match(line, /System menu/)) prio = 5
|
if (match(line, /Omarchy menu/)) prio = 5
|
||||||
if (match(line, /Theme menu/)) prio = 6
|
if (match(line, /System menu/)) prio = 6
|
||||||
if (match(line, /Full screen/)) prio = 7
|
if (match(line, /Theme menu/)) prio = 7
|
||||||
if (match(line, /Full width/)) prio = 8
|
if (match(line, /Full screen/)) prio = 8
|
||||||
if (match(line, /Close window/)) prio = 9
|
if (match(line, /Full width/)) prio = 9
|
||||||
if (match(line, /Close all windows/)) prio = 10
|
if (match(line, /Close window/)) prio = 10
|
||||||
if (match(line, /Lock system/)) prio = 11
|
if (match(line, /Close all windows/)) prio = 11
|
||||||
if (match(line, /Toggle window floating/)) prio = 12
|
if (match(line, /Lock system/)) prio = 12
|
||||||
if (match(line, /Toggle window split/)) prio = 13
|
if (match(line, /Toggle window floating/)) prio = 13
|
||||||
if (match(line, /Pop window/)) prio = 14
|
if (match(line, /Toggle window split/)) prio = 14
|
||||||
if (match(line, /Universal/)) prio = 15
|
if (match(line, /Pop window/)) prio = 15
|
||||||
if (match(line, /Clipboard/)) prio = 16
|
if (match(line, /Universal/)) prio = 16
|
||||||
if (match(line, /Audio controls/)) prio = 17
|
if (match(line, /Clipboard/)) prio = 17
|
||||||
if (match(line, /Bluetooth controls/)) prio = 18
|
if (match(line, /Audio controls/)) prio = 18
|
||||||
if (match(line, /Wifi controls/)) prio = 19
|
if (match(line, /Bluetooth controls/)) prio = 19
|
||||||
if (match(line, /Emoji picker/)) prio = 20
|
if (match(line, /Wifi controls/)) prio = 20
|
||||||
if (match(line, /Color picker/)) prio = 21
|
if (match(line, /Emoji picker/)) prio = 21
|
||||||
if (match(line, /Screenshot/)) prio = 22
|
if (match(line, /Color picker/)) prio = 22
|
||||||
if (match(line, /Screenrecording/)) prio = 23
|
if (match(line, /Screenshot/)) prio = 23
|
||||||
if (match(line, /(Switch|Next|Former|Previous).*workspace/)) prio = 24
|
if (match(line, /Screenrecording/)) prio = 24
|
||||||
if (match(line, /Move window to workspace/)) prio = 25
|
if (match(line, /SUPER SHIFT.*\+.*B.*→.*Browser/)) prio = 25
|
||||||
if (match(line, /Move window silently to workspace/)) prio = 26
|
if (match(line, /File manager \(cwd\)/)) prio = 26
|
||||||
if (match(line, /Swap window/)) prio = 27
|
if (match(line, /(Switch|Next|Former|Previous).*workspace/)) prio = 27
|
||||||
if (match(line, /Move window focus/)) prio = 28
|
if (match(line, /Move window to workspace/)) prio = 28
|
||||||
if (match(line, /Move window$/)) prio = 29
|
if (match(line, /Move window silently to workspace/)) prio = 29
|
||||||
if (match(line, /Resize window/)) prio = 30
|
if (match(line, /Swap window/)) prio = 30
|
||||||
if (match(line, /Expand window/)) prio = 31
|
if (match(line, /Move window focus/)) prio = 31
|
||||||
if (match(line, /Shrink window/)) prio = 32
|
if (match(line, /Move window$/)) prio = 32
|
||||||
if (match(line, /scratchpad/)) prio = 33
|
if (match(line, /Resize window/)) prio = 33
|
||||||
if (match(line, /notification/)) prio = 34
|
if (match(line, /Expand window/)) prio = 34
|
||||||
if (match(line, /Toggle window transparency/)) prio = 35
|
if (match(line, /Shrink window/)) prio = 35
|
||||||
if (match(line, /Toggle workspace gaps/)) prio = 36
|
if (match(line, /scratchpad/)) prio = 36
|
||||||
if (match(line, /Toggle nightlight/)) prio = 37
|
if (match(line, /notification/)) prio = 37
|
||||||
if (match(line, /Toggle locking/)) prio = 38
|
if (match(line, /Toggle window transparency/)) prio = 38
|
||||||
|
if (match(line, /Toggle workspace gaps/)) prio = 39
|
||||||
|
if (match(line, /Toggle nightlight/)) prio = 40
|
||||||
|
if (match(line, /Toggle locking/)) prio = 41
|
||||||
if (match(line, /group/)) prio = 94
|
if (match(line, /group/)) prio = 94
|
||||||
if (match(line, /Scroll active workspace/)) prio = 95
|
if (match(line, /Scroll active workspace/)) prio = 95
|
||||||
if (match(line, /Cycle to/)) prio = 96
|
if (match(line, /Cycle to/)) prio = 96
|
||||||
@@ -233,7 +236,7 @@ output_keybindings() {
|
|||||||
prioritize_entries
|
prioritize_entries
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "$1" == "--print" || "$1" == "-p" ]]; then
|
if [[ $1 == "--print" || $1 == "-p" ]]; then
|
||||||
output_keybindings
|
output_keybindings
|
||||||
else
|
else
|
||||||
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
||||||
@@ -242,4 +245,3 @@ else
|
|||||||
output_keybindings |
|
output_keybindings |
|
||||||
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ mkdir -p "$STATE_DIR/skipped"
|
|||||||
for file in ~/.local/share/omarchy/migrations/*.sh; do
|
for file in ~/.local/share/omarchy/migrations/*.sh; do
|
||||||
filename=$(basename "$file")
|
filename=$(basename "$file")
|
||||||
|
|
||||||
if [[ ! -f "$STATE_DIR/$filename" && ! -f "$STATE_DIR/skipped/$filename" ]]; then
|
if [[ ! -f $STATE_DIR/$filename && ! -f $STATE_DIR/skipped/$filename ]]; then
|
||||||
echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m"
|
echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m"
|
||||||
|
|
||||||
if bash $file; then
|
if bash $file; then
|
||||||
|
|||||||
@@ -18,9 +18,10 @@ fzf_args=(
|
|||||||
|
|
||||||
pkg_names=$(yay -Slqa | fzf "${fzf_args[@]}")
|
pkg_names=$(yay -Slqa | fzf "${fzf_args[@]}")
|
||||||
|
|
||||||
if [[ -n "$pkg_names" ]]; then
|
if [[ -n $pkg_names ]]; then
|
||||||
# Convert newline-separated selections to space-separated for yay
|
# Add aur/ prefix to each package name and convert to space-separated for yay
|
||||||
echo "$pkg_names" | tr '\n' ' ' | xargs yay -S --noconfirm
|
sudo -v
|
||||||
|
echo "$pkg_names" | sed 's/^/aur\//' | tr '\n' ' ' | xargs yay -S --noconfirm
|
||||||
sudo updatedb
|
sudo updatedb
|
||||||
omarchy-show-done
|
omarchy-show-done
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ fzf_args=(
|
|||||||
|
|
||||||
pkg_names=$(pacman -Slq | fzf "${fzf_args[@]}")
|
pkg_names=$(pacman -Slq | fzf "${fzf_args[@]}")
|
||||||
|
|
||||||
if [[ -n "$pkg_names" ]]; then
|
if [[ -n $pkg_names ]]; then
|
||||||
# Convert newline-separated selections to space-separated for yay
|
# Convert newline-separated selections to space-separated for yay
|
||||||
echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -S --noconfirm
|
echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -S --noconfirm
|
||||||
omarchy-show-done
|
omarchy-show-done
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ fzf_args=(
|
|||||||
|
|
||||||
pkg_names=$(yay -Qqe | fzf "${fzf_args[@]}")
|
pkg_names=$(yay -Qqe | fzf "${fzf_args[@]}")
|
||||||
|
|
||||||
if [[ -n "$pkg_names" ]]; then
|
if [[ -n $pkg_names ]]; then
|
||||||
# Convert newline-separated selections to space-separated for yay
|
# Convert newline-separated selections to space-separated for yay
|
||||||
echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -Rns --noconfirm
|
echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -Rns --noconfirm
|
||||||
omarchy-show-done
|
omarchy-show-done
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ CONFIG_FILE="$HOME/.config/chromium-flags.conf"
|
|||||||
INSTALL_GOOGLE_ACCOUNTS=false
|
INSTALL_GOOGLE_ACCOUNTS=false
|
||||||
|
|
||||||
# Check if google accounts were installed
|
# Check if google accounts were installed
|
||||||
if [[ -f "$CONFIG_FILE" ]] && \
|
if [[ -f $CONFIG_FILE ]] && \
|
||||||
grep -q -- "--oauth2-client-id" "$CONFIG_FILE" && \
|
grep -q -- "--oauth2-client-id" "$CONFIG_FILE" && \
|
||||||
grep -q -- "--oauth2-client-secret" "$CONFIG_FILE"; then
|
grep -q -- "--oauth2-client-secret" "$CONFIG_FILE"; then
|
||||||
INSTALL_GOOGLE_ACCOUNTS=true
|
INSTALL_GOOGLE_ACCOUNTS=true
|
||||||
@@ -16,6 +16,6 @@ fi
|
|||||||
omarchy-refresh-config chromium-flags.conf
|
omarchy-refresh-config chromium-flags.conf
|
||||||
|
|
||||||
# Re-install Google accounts if previously configured
|
# Re-install Google accounts if previously configured
|
||||||
if [[ "$INSTALL_GOOGLE_ACCOUNTS" == true ]]; then
|
if [[ $INSTALL_GOOGLE_ACCOUNTS == "true" ]]; then
|
||||||
omarchy-install-chromium-google-account
|
omarchy-install-chromium-google-account
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
config_file=$1
|
config_file=$1
|
||||||
|
|
||||||
if [[ -z "$config_file" ]]; then
|
if [[ -z $config_file ]]; then
|
||||||
cat <<USAGE
|
cat <<USAGE
|
||||||
Usage: $0 [config_file]
|
Usage: $0 [config_file]
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ user_config_file="${HOME}/.config/$config_file"
|
|||||||
default_config_file="${HOME}/.local/share/omarchy/config/$config_file"
|
default_config_file="${HOME}/.local/share/omarchy/config/$config_file"
|
||||||
backup_config_file="$user_config_file.bak.$(date +%s)"
|
backup_config_file="$user_config_file.bak.$(date +%s)"
|
||||||
|
|
||||||
if [[ -f "$user_config_file" ]]; then
|
if [[ -f $user_config_file ]]; then
|
||||||
# Create preliminary backup
|
# Create preliminary backup
|
||||||
cp -f "$user_config_file" "$backup_config_file" 2>/dev/null
|
cp -f "$user_config_file" "$backup_config_file" 2>/dev/null
|
||||||
|
|
||||||
|
|||||||
@@ -7,17 +7,18 @@
|
|||||||
sudo cp -f /etc/pacman.conf /etc/pacman.conf.bak
|
sudo cp -f /etc/pacman.conf /etc/pacman.conf.bak
|
||||||
sudo cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
|
sudo cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
|
||||||
|
|
||||||
if [[ $1 == "edge" ]]; then
|
channel="${1:-stable}"
|
||||||
sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-edge.conf /etc/pacman.conf
|
|
||||||
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-edge /etc/pacman.d/mirrorlist
|
if [[ $channel != "stable" && $channel != "rc" && $channel != "edge" ]]; then
|
||||||
echo "Setting channel to edge"
|
echo "Error: Invalid channel '$channel'. Must be one of: stable, rc, edge"
|
||||||
else
|
exit 1
|
||||||
sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-stable.conf /etc/pacman.conf
|
|
||||||
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-stable /etc/pacman.d/mirrorlist
|
|
||||||
echo "Setting channel to stable"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Setting channel to $channel"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
sudo cp -f "$OMARCHY_PATH/default/pacman/pacman-$channel.conf" /etc/pacman.conf
|
||||||
|
sudo cp -f "$OMARCHY_PATH/default/pacman/mirrorlist-$channel" /etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
# Reset all package DBs and then update
|
# Reset all package DBs and then update
|
||||||
sudo pacman -Syyu --noconfirm
|
sudo pacman -Syyuu --noconfirm
|
||||||
|
|||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Refresh the SDDM theme from default
|
||||||
|
|
||||||
|
sudo rm -rf /usr/share/sddm/themes/omarchy
|
||||||
|
sudo cp -r $OMARCHY_PATH/default/sddm/omarchy /usr/share/sddm/themes/omarchy
|
||||||
Executable
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Overwrite the user tmux config with the Omarchy default and reload tmux.
|
||||||
|
|
||||||
|
omarchy-refresh-config tmux/tmux.conf
|
||||||
|
|
||||||
|
if pgrep -x tmux; then
|
||||||
|
tmux source-file ~/.config/tmux/tmux.conf
|
||||||
|
fi
|
||||||
@@ -5,9 +5,17 @@
|
|||||||
# Ensure walker is set to autostart
|
# Ensure walker is set to autostart
|
||||||
mkdir -p ~/.config/autostart/
|
mkdir -p ~/.config/autostart/
|
||||||
cp $OMARCHY_PATH/default/walker/walker.desktop ~/.config/autostart/
|
cp $OMARCHY_PATH/default/walker/walker.desktop ~/.config/autostart/
|
||||||
|
|
||||||
|
# And restarts if it crashes or is killed
|
||||||
|
mkdir -p ~/.config/systemd/user/app-walker@autostart.service.d/
|
||||||
|
cp $OMARCHY_PATH/default/walker/restart.conf ~/.config/systemd/user/app-walker@autostart.service.d/restart.conf
|
||||||
|
|
||||||
systemctl --user daemon-reload
|
systemctl --user daemon-reload
|
||||||
|
|
||||||
|
# Refresh configs
|
||||||
omarchy-refresh-config walker/config.toml
|
omarchy-refresh-config walker/config.toml
|
||||||
omarchy-refresh-config elephant/calc.toml
|
omarchy-refresh-config elephant/calc.toml
|
||||||
omarchy-refresh-config elephant/desktopapplications.toml
|
omarchy-refresh-config elephant/desktopapplications.toml
|
||||||
|
|
||||||
|
# Restart service
|
||||||
omarchy-restart-walker
|
omarchy-restart-walker
|
||||||
|
|||||||
@@ -10,5 +10,5 @@ if gum confirm "Are you sure you want to reinstall and lose all config changes?"
|
|||||||
omarchy-reinstall-pkgs
|
omarchy-reinstall-pkgs
|
||||||
omarchy-reinstall-configs
|
omarchy-reinstall-configs
|
||||||
|
|
||||||
gum confirm "System has been reinstalled. Reboot?" && omarchy-cmd-reboot
|
gum confirm "System has been reinstalled. Reboot?" && omarchy-system-reboot
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ set -e
|
|||||||
|
|
||||||
# Overwrite all user configs with the Omarchy defaults.
|
# Overwrite all user configs with the Omarchy defaults.
|
||||||
|
|
||||||
if [ "$EUID" -eq 0 ]; then
|
if (( EUID == 0 )); then
|
||||||
echo "Error: This script should not be run as root"
|
echo "Error: This script should not be run as root"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [[ -z "$1" ]]; then
|
# Remove a development environment that was previously installed via omarchy-install-dev-env.
|
||||||
echo "Usage: omarchy-remove-dev-env <ruby|node|bun|deno|go|php|laravel|symfony|python|elixir|phoenix|zig|rust|java|dotnet|ocaml|clojure>" >&2
|
# Usage: omarchy-remove-dev-env <ruby|node|bun|deno|go|php|laravel|symfony|python|elixir|phoenix|zig|rust|java|dotnet|ocaml|clojure|scala>
|
||||||
|
|
||||||
|
if [[ -z $1 ]]; then
|
||||||
|
echo "Usage: omarchy-remove-dev-env <ruby|node|bun|deno|go|php|laravel|symfony|python|elixir|phoenix|zig|rust|java|dotnet|ocaml|clojure|scala>" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -93,6 +96,13 @@ clojure)
|
|||||||
mise uninstall clojure --all
|
mise uninstall clojure --all
|
||||||
mise rm -g clojure
|
mise rm -g clojure
|
||||||
;;
|
;;
|
||||||
|
scala)
|
||||||
|
echo -e "Removing Scala...\n"
|
||||||
|
mise uninstall scala --all
|
||||||
|
mise uninstall scala-cli --all
|
||||||
|
mise rm -g scala
|
||||||
|
mise rm -g scala-cli
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown environment: $1"
|
echo "Unknown environment: $1"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Executable
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Remove preinstalled Omarchy applications (web apps, TUIs, and selected packages).
|
||||||
|
# This removes all web apps, TUIs, plus specific desktop applications.
|
||||||
|
|
||||||
|
if gum confirm "Are you sure you want to remove all preinstalled web apps, TUI wrappers, and desktop applications?"; then
|
||||||
|
echo -e "Removing preinstalled Omarchy applications...\n"
|
||||||
|
|
||||||
|
omarchy-webapp-remove-all
|
||||||
|
omarchy-tui-remove-all
|
||||||
|
|
||||||
|
cp ~/.config/hypr/bindings.conf ~/.config/hypr/bindings.conf.bak
|
||||||
|
cp "$OMARCHY_PATH/default/hypr/plain-bindings.conf" ~/.config/hypr/bindings.conf
|
||||||
|
hyprctl reload
|
||||||
|
|
||||||
|
omarchy-pkg-drop \
|
||||||
|
aether \
|
||||||
|
typora \
|
||||||
|
spotify \
|
||||||
|
libreoffice-fresh \
|
||||||
|
1password-beta \
|
||||||
|
1password-cli \
|
||||||
|
xournalpp \
|
||||||
|
signal-desktop \
|
||||||
|
pinta \
|
||||||
|
obsidian \
|
||||||
|
obs-studio \
|
||||||
|
kdenlive \
|
||||||
|
lazydocker \
|
||||||
|
opencode \
|
||||||
|
claude-code
|
||||||
|
fi
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Reset the sudo lockout/faillock for the current user.
|
||||||
|
# This clears any failed authentication attempts that may have locked the user out.
|
||||||
|
|
||||||
# Resetting sudo lockout for user
|
# Resetting sudo lockout for user
|
||||||
su -c "faillock --reset --user $USER"
|
su -c "faillock --reset --user $USER"
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Restart an application by killing it and relaunching via uwsm.
|
||||||
|
# Usage: omarchy-restart-app <application-name> [application-args...]
|
||||||
|
|
||||||
pkill -x $1
|
pkill -x $1
|
||||||
setsid uwsm-app -- $1 >/dev/null 2>&1 &
|
setsid uwsm-app -- "$@" >/dev/null 2>&1 &
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Unblock and restart the bluetooth service.
|
||||||
|
|
||||||
echo -e "Unblocking bluetooth...\n"
|
echo -e "Unblocking bluetooth...\n"
|
||||||
rfkill unblock bluetooth
|
rfkill unblock bluetooth
|
||||||
rfkill list bluetooth
|
rfkill list bluetooth
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Restart the hypridle service (used for idle detection and auto-lock).
|
||||||
|
|
||||||
omarchy-restart-app hypridle
|
omarchy-restart-app hypridle
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Restart the hyprsunset service (used for blue light filtering/night light).
|
||||||
|
|
||||||
omarchy-restart-app hyprsunset
|
omarchy-restart-app hyprsunset
|
||||||
|
|||||||
@@ -2,4 +2,6 @@
|
|||||||
|
|
||||||
# Reload opencode configuration (used by the Omarchy theme switching).
|
# Reload opencode configuration (used by the Omarchy theme switching).
|
||||||
|
|
||||||
killall -SIGUSR2 opencode
|
if pgrep -x opencode >/dev/null; then
|
||||||
|
killall -SIGUSR2 opencode
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Restart the PipeWire audio service to fix audio issues or apply new configuration.
|
||||||
|
|
||||||
echo -e "Restarting pipewire audio service...\n"
|
echo -e "Restarting pipewire audio service...\n"
|
||||||
systemctl --user restart pipewire.service
|
systemctl --user restart pipewire.service
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ restart_services() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ $EUID -eq 0 ]]; then
|
if (( EUID == 0 )); then
|
||||||
SCRIPT_OWNER=$(stat -c '%U' "$0")
|
SCRIPT_OWNER=$(stat -c '%U' "$0")
|
||||||
USER_UID=$(id -u "$SCRIPT_OWNER")
|
USER_UID=$(id -u "$SCRIPT_OWNER")
|
||||||
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
|
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Unblock and restart the Wi-Fi service.
|
||||||
|
|
||||||
echo -e "Unblocking wifi...\n"
|
echo -e "Unblocking wifi...\n"
|
||||||
rfkill unblock wifi
|
rfkill unblock wifi
|
||||||
rfkill list wifi
|
rfkill list wifi
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
omarchy-restart-app fcitx5
|
# Restart the XCompose input method service (fcitx5) to apply new compose key settings.
|
||||||
|
|
||||||
|
omarchy-restart-app fcitx5 --disable notificationitem
|
||||||
|
|||||||
+38
-46
@@ -1,7 +1,30 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
lock_dns_to_resolved() {
|
||||||
|
for file in /etc/systemd/network/*.network; do
|
||||||
|
[[ -f $file ]] || continue
|
||||||
|
if ! grep -q "^\[DHCPv4\]" "$file"; then continue; fi
|
||||||
|
|
||||||
|
if ! sed -n '/^\[DHCPv4\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
|
||||||
|
sudo sed -i '/^\[DHCPv4\]/a UseDNS=no' "$file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -q "^\[IPv6AcceptRA\]" "$file" && ! sed -n '/^\[IPv6AcceptRA\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
|
||||||
|
sudo sed -i '/^\[IPv6AcceptRA\]/a UseDNS=no' "$file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
unlock_dns_to_dhcp() {
|
||||||
|
for file in /etc/systemd/network/*.network; do
|
||||||
|
[[ -f $file ]] || continue
|
||||||
|
sudo sed -i '/^\[DHCPv4\]/{n;/^UseDNS=no$/d}' "$file"
|
||||||
|
sudo sed -i '/^\[IPv6AcceptRA\]/{n;/^UseDNS=no$/d}' "$file"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
if [[ -z $1 ]]; then
|
if [[ -z $1 ]]; then
|
||||||
dns=$(gum choose --height 5 --header "Select DNS provider" Cloudflare DHCP Custom)
|
dns=$(gum choose --height 6 --header "Select DNS provider" Cloudflare Google DHCP Custom)
|
||||||
else
|
else
|
||||||
dns=$1
|
dns=$1
|
||||||
fi
|
fi
|
||||||
@@ -14,24 +37,17 @@ DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com
|
|||||||
FallbackDNS=9.9.9.9 149.112.112.112
|
FallbackDNS=9.9.9.9 149.112.112.112
|
||||||
DNSOverTLS=opportunistic
|
DNSOverTLS=opportunistic
|
||||||
EOF
|
EOF
|
||||||
|
lock_dns_to_resolved
|
||||||
|
;;
|
||||||
|
|
||||||
# Ensure network interfaces don't override our DNS settings
|
Google)
|
||||||
for file in /etc/systemd/network/*.network; do
|
sudo tee /etc/systemd/resolved.conf >/dev/null <<'EOF'
|
||||||
[[ -f "$file" ]] || continue
|
[Resolve]
|
||||||
if ! grep -q "^\[DHCPv4\]" "$file"; then continue; fi
|
DNS=8.8.8.8#dns.google 8.8.4.4#dns.google
|
||||||
|
FallbackDNS=9.9.9.9 149.112.112.112
|
||||||
# Add UseDNS=no to DHCPv4 section if not present
|
DNSOverTLS=opportunistic
|
||||||
if ! sed -n '/^\[DHCPv4\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
|
EOF
|
||||||
sudo sed -i '/^\[DHCPv4\]/a UseDNS=no' "$file"
|
lock_dns_to_resolved
|
||||||
fi
|
|
||||||
|
|
||||||
# Add UseDNS=no to IPv6AcceptRA section if present
|
|
||||||
if grep -q "^\[IPv6AcceptRA\]" "$file" && ! sed -n '/^\[IPv6AcceptRA\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
|
|
||||||
sudo sed -i '/^\[IPv6AcceptRA\]/a UseDNS=no' "$file"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
sudo systemctl restart systemd-networkd systemd-resolved
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
DHCP)
|
DHCP)
|
||||||
@@ -39,21 +55,14 @@ DHCP)
|
|||||||
[Resolve]
|
[Resolve]
|
||||||
DNSOverTLS=no
|
DNSOverTLS=no
|
||||||
EOF
|
EOF
|
||||||
|
unlock_dns_to_dhcp
|
||||||
# Allow network interfaces to use DHCP DNS
|
|
||||||
for file in /etc/systemd/network/*.network; do
|
|
||||||
[[ -f "$file" ]] || continue
|
|
||||||
sudo sed -i '/^UseDNS=no/d' "$file"
|
|
||||||
done
|
|
||||||
|
|
||||||
sudo systemctl restart systemd-networkd systemd-resolved
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
Custom)
|
Custom)
|
||||||
echo "Enter your DNS servers (space-separated, e.g. '192.168.1.1 1.1.1.1'):"
|
echo "Enter your DNS servers (space-separated, e.g. '192.168.1.1 1.1.1.1'):"
|
||||||
read -r dns_servers
|
read -r dns_servers
|
||||||
|
|
||||||
if [[ -z "$dns_servers" ]]; then
|
if [[ -z $dns_servers ]]; then
|
||||||
echo "Error: No DNS servers provided."
|
echo "Error: No DNS servers provided."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -63,25 +72,8 @@ Custom)
|
|||||||
DNS=$dns_servers
|
DNS=$dns_servers
|
||||||
FallbackDNS=9.9.9.9 149.112.112.112
|
FallbackDNS=9.9.9.9 149.112.112.112
|
||||||
EOF
|
EOF
|
||||||
|
lock_dns_to_resolved
|
||||||
# Ensure network interfaces don't override our DNS settings
|
|
||||||
for file in /etc/systemd/network/*.network; do
|
|
||||||
[[ -f "$file" ]] || continue
|
|
||||||
if ! grep -q "^\[DHCPv4\]" "$file"; then continue; fi
|
|
||||||
|
|
||||||
# Add UseDNS=no to DHCPv4 section if not present
|
|
||||||
if ! sed -n '/^\[DHCPv4\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
|
|
||||||
sudo sed -i '/^\[DHCPv4\]/a UseDNS=no' "$file"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add UseDNS=no to IPv6AcceptRA section if present
|
|
||||||
if grep -q "^\[IPv6AcceptRA\]" "$file" && ! sed -n '/^\[IPv6AcceptRA\]/,/^\[/p' "$file" | grep -q "^UseDNS="; then
|
|
||||||
sudo sed -i '/^\[IPv6AcceptRA\]/a UseDNS=no' "$file"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
sudo systemctl restart systemd-networkd systemd-resolved
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
sudo systemctl restart systemd-networkd systemd-resolved
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ print_info() {
|
|||||||
|
|
||||||
check_fido2_hardware() {
|
check_fido2_hardware() {
|
||||||
tokens=$(fido2-token -L 2>/dev/null)
|
tokens=$(fido2-token -L 2>/dev/null)
|
||||||
if [ -z "$tokens" ]; then
|
if [[ -z $tokens ]]; then
|
||||||
print_error "\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well)."
|
print_error "\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well)."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -36,10 +36,10 @@ setup_pam_config() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Configure polkit
|
# Configure polkit
|
||||||
if [ -f /etc/pam.d/polkit-1 ] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
||||||
print_info "Configuring polkit for FIDO2 authentication..."
|
print_info "Configuring polkit for FIDO2 authentication..."
|
||||||
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
|
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
|
||||||
elif [ ! -f /etc/pam.d/polkit-1 ]; then
|
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
||||||
print_info "Creating polkit configuration with FIDO2 authentication..."
|
print_info "Creating polkit configuration with FIDO2 authentication..."
|
||||||
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
||||||
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
|
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
|
||||||
@@ -60,20 +60,20 @@ remove_pam_config() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove from polkit
|
# Remove from polkit
|
||||||
if [ -f /etc/pam.d/polkit-1 ] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
||||||
print_info "Removing FIDO2 authentication from polkit..."
|
print_info "Removing FIDO2 authentication from polkit..."
|
||||||
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
|
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "--remove" == "$1" ]]; then
|
if [[ "--remove" == $1 ]]; then
|
||||||
print_success "Removing FIDO2 device from authentication.\n"
|
print_success "Removing FIDO2 device from authentication.\n"
|
||||||
|
|
||||||
# Remove PAM configuration
|
# Remove PAM configuration
|
||||||
remove_pam_config
|
remove_pam_config
|
||||||
|
|
||||||
# Remove FIDO2 configuration
|
# Remove FIDO2 configuration
|
||||||
if [ -d /etc/fido2 ]; then
|
if [[ -d /etc/fido2 ]]; then
|
||||||
print_info "Removing FIDO2 configuration..."
|
print_info "Removing FIDO2 configuration..."
|
||||||
sudo rm -rf /etc/fido2
|
sudo rm -rf /etc/fido2
|
||||||
fi
|
fi
|
||||||
@@ -88,14 +88,14 @@ else
|
|||||||
|
|
||||||
# Install required packages
|
# Install required packages
|
||||||
print_info "Installing required packages..."
|
print_info "Installing required packages..."
|
||||||
sudo pacman -S --noconfirm --needed libfido2 pam-u2f
|
omarchy-pkg-add libfido2 pam-u2f
|
||||||
|
|
||||||
if ! check_fido2_hardware; then
|
if ! check_fido2_hardware; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create the pamu2fcfg file
|
# Create the pamu2fcfg file
|
||||||
if [ ! -f /etc/fido2/fido2 ]; then
|
if [[ ! -f /etc/fido2/fido2 ]]; then
|
||||||
sudo mkdir -p /etc/fido2
|
sudo mkdir -p /etc/fido2
|
||||||
print_success "\nLet's setup your device by confirming on the device now."
|
print_success "\nLet's setup your device by confirming on the device now."
|
||||||
print_info "Touch your FIDO2 key when it lights up...\n"
|
print_info "Touch your FIDO2 key when it lights up...\n"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ check_fingerprint_hardware() {
|
|||||||
devices=$(fprintd-list "$USER" 2>/dev/null)
|
devices=$(fprintd-list "$USER" 2>/dev/null)
|
||||||
|
|
||||||
# Exit if no devices found
|
# Exit if no devices found
|
||||||
if [[ -z "$devices" ]]; then
|
if [[ -z $devices ]]; then
|
||||||
print_error "\nNo fingerprint sensor detected."
|
print_error "\nNo fingerprint sensor detected."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -39,10 +39,10 @@ setup_pam_config() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Configure polkit
|
# Configure polkit
|
||||||
if [ -f /etc/pam.d/polkit-1 ] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
||||||
print_info "Configuring polkit for fingerprint authentication..."
|
print_info "Configuring polkit for fingerprint authentication..."
|
||||||
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
|
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
|
||||||
elif [ ! -f /etc/pam.d/polkit-1 ]; then
|
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
||||||
print_info "Creating polkit configuration with fingerprint authentication..."
|
print_info "Creating polkit configuration with fingerprint authentication..."
|
||||||
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
||||||
auth sufficient pam_fprintd.so
|
auth sufficient pam_fprintd.so
|
||||||
@@ -58,11 +58,13 @@ EOF
|
|||||||
add_hyprlock_fingerprint_icon() {
|
add_hyprlock_fingerprint_icon() {
|
||||||
print_info "Adding fingerprint icon to hyprlock placeholder text..."
|
print_info "Adding fingerprint icon to hyprlock placeholder text..."
|
||||||
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password <\/span>/' ~/.config/hypr/hyprlock.conf
|
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password <\/span>/' ~/.config/hypr/hyprlock.conf
|
||||||
|
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = true/' ~/.config/hypr/hyprlock.conf
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_hyprlock_fingerprint_icon() {
|
remove_hyprlock_fingerprint_icon() {
|
||||||
print_info "Removing fingerprint icon from hyprlock placeholder text..."
|
print_info "Removing fingerprint icon from hyprlock placeholder text..."
|
||||||
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
|
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
|
||||||
|
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_pam_config() {
|
remove_pam_config() {
|
||||||
@@ -73,13 +75,13 @@ remove_pam_config() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove from polkit
|
# Remove from polkit
|
||||||
if [ -f /etc/pam.d/polkit-1 ] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
||||||
print_info "Removing fingerprint authentication from polkit..."
|
print_info "Removing fingerprint authentication from polkit..."
|
||||||
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
|
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "--remove" == "$1" ]]; then
|
if [[ "--remove" == $1 ]]; then
|
||||||
print_success "Removing fingerprint scanner from authentication.\n"
|
print_success "Removing fingerprint scanner from authentication.\n"
|
||||||
|
|
||||||
# Remove PAM configuration
|
# Remove PAM configuration
|
||||||
@@ -98,7 +100,7 @@ else
|
|||||||
|
|
||||||
# Install required packages
|
# Install required packages
|
||||||
print_info "Installing required packages..."
|
print_info "Installing required packages..."
|
||||||
sudo pacman -S --noconfirm --needed fprintd usbutils
|
omarchy-pkg-add fprintd usbutils
|
||||||
|
|
||||||
if ! check_fingerprint_hardware; then
|
if ! check_fingerprint_hardware; then
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Display a "Done!" message with a spinner and wait for user to press any key.
|
||||||
|
# Used by various install scripts to indicate completion.
|
||||||
|
|
||||||
echo
|
echo
|
||||||
gum spin --spinner "globe" --title "Done! Press any key to close..." -- bash -c 'read -n 1 -s'
|
gum spin --spinner "globe" --title "Done! Press any key to close..." -- bash -c 'read -n 1 -s'
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Display the Omarchy logo in the terminal using green color.
|
||||||
|
# Used by various presentation scripts to show branding.
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo -e "\033[32m"
|
echo -e "\033[32m"
|
||||||
cat <~/.local/share/omarchy/logo.txt
|
cat <~/.local/share/omarchy/logo.txt
|
||||||
|
|||||||
+6
-2
@@ -1,17 +1,21 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Manage persistent state files for Omarchy toggles and settings.
|
||||||
|
# Usage: omarchy-state <set|clear> <state-name-or-pattern>
|
||||||
|
# Used to track whether features like suspend, idle lock, etc are enabled or disabled.
|
||||||
|
|
||||||
STATE_DIR="$HOME/.local/state/omarchy"
|
STATE_DIR="$HOME/.local/state/omarchy"
|
||||||
mkdir -p "$STATE_DIR"
|
mkdir -p "$STATE_DIR"
|
||||||
|
|
||||||
COMMAND="$1"
|
COMMAND="$1"
|
||||||
STATE_NAME="$2"
|
STATE_NAME="$2"
|
||||||
|
|
||||||
if [[ -z "$COMMAND" ]]; then
|
if [[ -z $COMMAND ]]; then
|
||||||
echo "Usage: omarchy-state <set|clear> <state-name-or-pattern>"
|
echo "Usage: omarchy-state <set|clear> <state-name-or-pattern>"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z "$STATE_NAME" ]]; then
|
if [[ -z $STATE_NAME ]]; then
|
||||||
echo "Usage: omarchy-state $COMMAND <state-name>"
|
echo "Usage: omarchy-state $COMMAND <state-name>"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Display brightness level using SwayOSD on the current monitor.
|
||||||
|
# Usage: omarchy-swayosd-brightness <percent>
|
||||||
|
|
||||||
|
percent="$1"
|
||||||
|
|
||||||
|
progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
|
||||||
|
[[ $progress == "0.00" ]] && progress="0.01"
|
||||||
|
|
||||||
|
swayosd-client \
|
||||||
|
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
|
||||||
|
--custom-icon display-brightness \
|
||||||
|
--custom-progress "$progress" \
|
||||||
|
--custom-progress-text "${percent}%"
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Display keyboard brightness level using SwayOSD on the current monitor.
|
||||||
|
# Usage: omarchy-swayosd-kbd-brightness <percent>
|
||||||
|
|
||||||
|
percent="$1"
|
||||||
|
|
||||||
|
progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
|
||||||
|
[[ $progress == "0.00" ]] && progress="0.01"
|
||||||
|
|
||||||
|
swayosd-client \
|
||||||
|
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
|
||||||
|
--custom-icon keyboard-brightness \
|
||||||
|
--custom-progress "$progress" \
|
||||||
|
--custom-progress-text "${percent}%"
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Logout command that first closes all application windows (thus giving them a chance to save state),
|
||||||
|
# then stops the session, returning to the SDDM login screen.
|
||||||
|
|
||||||
|
# Schedule the session stop after closing windows (detached from terminal)
|
||||||
|
nohup bash -c "sleep 2 && uwsm stop" >/dev/null 2>&1 &
|
||||||
|
|
||||||
|
# Now close all windows
|
||||||
|
omarchy-hyprland-window-close-all
|
||||||
|
sleep 1 # Allow apps like Chrome to shutdown correctly
|
||||||
@@ -10,13 +10,13 @@ CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
|
|||||||
mapfile -d '' -t BACKGROUNDS < <(find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f -print0 2>/dev/null | sort -z)
|
mapfile -d '' -t BACKGROUNDS < <(find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f -print0 2>/dev/null | sort -z)
|
||||||
TOTAL=${#BACKGROUNDS[@]}
|
TOTAL=${#BACKGROUNDS[@]}
|
||||||
|
|
||||||
if [[ $TOTAL -eq 0 ]]; then
|
if (( TOTAL == 0 )); then
|
||||||
notify-send "No background was found for theme" -t 2000
|
notify-send "No background was found for theme" -t 2000
|
||||||
pkill -x swaybg
|
pkill -x swaybg
|
||||||
setsid uwsm-app -- swaybg --color '#000000' >/dev/null 2>&1 &
|
setsid uwsm-app -- swaybg --color '#000000' >/dev/null 2>&1 &
|
||||||
else
|
else
|
||||||
# Get current background from symlink
|
# Get current background from symlink
|
||||||
if [[ -L "$CURRENT_BACKGROUND_LINK" ]]; then
|
if [[ -L $CURRENT_BACKGROUND_LINK ]]; then
|
||||||
CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK")
|
CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK")
|
||||||
else
|
else
|
||||||
# Default to first background if no symlink exists
|
# Default to first background if no symlink exists
|
||||||
@@ -26,14 +26,14 @@ else
|
|||||||
# Find current background index
|
# Find current background index
|
||||||
INDEX=-1
|
INDEX=-1
|
||||||
for i in "${!BACKGROUNDS[@]}"; do
|
for i in "${!BACKGROUNDS[@]}"; do
|
||||||
if [[ "${BACKGROUNDS[$i]}" == "$CURRENT_BACKGROUND" ]]; then
|
if [[ ${BACKGROUNDS[$i]} == $CURRENT_BACKGROUND ]]; then
|
||||||
INDEX=$i
|
INDEX=$i
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Get next background (wrap around)
|
# Get next background (wrap around)
|
||||||
if [[ $INDEX -eq -1 ]]; then
|
if (( INDEX == -1 )); then
|
||||||
# Use the first background when no match was found
|
# Use the first background when no match was found
|
||||||
NEW_BACKGROUND="${BACKGROUNDS[0]}"
|
NEW_BACKGROUND="${BACKGROUNDS[0]}"
|
||||||
else
|
else
|
||||||
|
|||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Sets the specified image as the current background
|
||||||
|
|
||||||
|
if [[ -z $1 ]]; then
|
||||||
|
echo "Usage: omarchy-theme-bg-set <path-to-image>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
BACKGROUND="$1"
|
||||||
|
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
|
||||||
|
|
||||||
|
# Create symlink to the new background
|
||||||
|
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"
|
||||||
|
|
||||||
|
# Kill existing swaybg and start new one
|
||||||
|
pkill -x swaybg
|
||||||
|
setsid uwsm-app -- swaybg -i "$CURRENT_BACKGROUND_LINK" -m fill >/dev/null 2>&1 &
|
||||||
@@ -3,14 +3,14 @@
|
|||||||
# omarchy-theme-install: Install a new theme from a git repo for Omarchy
|
# omarchy-theme-install: Install a new theme from a git repo for Omarchy
|
||||||
# Usage: omarchy-theme-install <git-repo-url>
|
# Usage: omarchy-theme-install <git-repo-url>
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
if [[ -z $1 ]]; then
|
||||||
echo -e "\e[32mSee https://manuals.omamix.org/2/the-omarchy-manual/90/extra-themes\n\e[0m"
|
echo -e "\e[32mSee https://manuals.omamix.org/2/the-omarchy-manual/90/extra-themes\n\e[0m"
|
||||||
REPO_URL=$(gum input --placeholder="Git repo URL for theme" --header="")
|
REPO_URL=$(gum input --placeholder="Git repo URL for theme" --header="")
|
||||||
else
|
else
|
||||||
REPO_URL="$1"
|
REPO_URL="$1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$REPO_URL" ]; then
|
if [[ -z $REPO_URL ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omarchy-//; s/-theme$//')
|
|||||||
THEME_PATH="$THEMES_DIR/$THEME_NAME"
|
THEME_PATH="$THEMES_DIR/$THEME_NAME"
|
||||||
|
|
||||||
# Remove existing theme if present
|
# Remove existing theme if present
|
||||||
if [ -d "$THEME_PATH" ]; then
|
if [[ -d $THEME_PATH ]]; then
|
||||||
rm -rf "$THEME_PATH"
|
rm -rf "$THEME_PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Executable
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Refresh the current theme from its templates.
|
||||||
|
|
||||||
|
THEME_NAME_PATH="$HOME/.config/omarchy/current/theme.name"
|
||||||
|
|
||||||
|
if [[ -f $THEME_NAME_PATH ]]; then
|
||||||
|
omarchy-theme-set "$(cat $THEME_NAME_PATH)"
|
||||||
|
fi
|
||||||
@@ -3,10 +3,10 @@
|
|||||||
# omarchy-theme-remove: Remove a theme from Omarchy by name
|
# omarchy-theme-remove: Remove a theme from Omarchy by name
|
||||||
# Usage: omarchy-theme-remove <theme-name>
|
# Usage: omarchy-theme-remove <theme-name>
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
if [[ -z $1 ]]; then
|
||||||
mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
|
mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
|
||||||
|
|
||||||
if [[ ${#extra_themes[@]} -gt 0 ]]; then
|
if (( ${#extra_themes[@]} > 0 )); then
|
||||||
THEME_NAME=$(printf '%s\n' "${extra_themes[@]}" | sort | gum choose --header="Remove extra theme")
|
THEME_NAME=$(printf '%s\n' "${extra_themes[@]}" | sort | gum choose --header="Remove extra theme")
|
||||||
else
|
else
|
||||||
echo "No extra themes installed."
|
echo "No extra themes installed."
|
||||||
@@ -21,12 +21,12 @@ CURRENT_DIR="$HOME/.config/omarchy/current"
|
|||||||
THEME_PATH="$THEMES_DIR/$THEME_NAME"
|
THEME_PATH="$THEMES_DIR/$THEME_NAME"
|
||||||
|
|
||||||
# Ensure a theme was set
|
# Ensure a theme was set
|
||||||
if [ -z "$THEME_NAME" ]; then
|
if [[ -z $THEME_NAME ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if theme exists before attempting removal
|
# Check if theme exists before attempting removal
|
||||||
if [ ! -d "$THEME_PATH" ]; then
|
if [[ ! -d $THEME_PATH ]]; then
|
||||||
echo "Error: Theme '$THEME_NAME' not found."
|
echo "Error: Theme '$THEME_NAME' not found."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -12,11 +12,7 @@ OMARCHY_THEMES_PATH="$OMARCHY_PATH/themes"
|
|||||||
|
|
||||||
THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
|
THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
|
||||||
|
|
||||||
if [[ -d "$USER_THEMES_PATH/$THEME_NAME" ]]; then
|
if [[ ! -d $OMARCHY_THEMES_PATH/$THEME_NAME ]] && [[ ! -d $USER_THEMES_PATH/$THEME_NAME ]]; then
|
||||||
THEME_PATH="$USER_THEMES_PATH/$THEME_NAME"
|
|
||||||
elif [[ -d "$OMARCHY_THEMES_PATH/$THEME_NAME" ]]; then
|
|
||||||
THEME_PATH="$OMARCHY_THEMES_PATH/$THEME_NAME"
|
|
||||||
else
|
|
||||||
echo "Theme '$THEME_NAME' does not exist"
|
echo "Theme '$THEME_NAME' does not exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -25,8 +21,9 @@ fi
|
|||||||
rm -rf "$NEXT_THEME_PATH"
|
rm -rf "$NEXT_THEME_PATH"
|
||||||
mkdir -p "$NEXT_THEME_PATH"
|
mkdir -p "$NEXT_THEME_PATH"
|
||||||
|
|
||||||
# Copy static configs
|
# Copy official theme first, then overlay user customizations on top
|
||||||
cp -r "$THEME_PATH/"* "$NEXT_THEME_PATH/" 2>/dev/null
|
cp -r "$OMARCHY_THEMES_PATH/$THEME_NAME/"* "$NEXT_THEME_PATH/" 2>/dev/null
|
||||||
|
cp -r "$USER_THEMES_PATH/$THEME_NAME/"* "$NEXT_THEME_PATH/" 2>/dev/null
|
||||||
|
|
||||||
# Generate dynamic configs
|
# Generate dynamic configs
|
||||||
omarchy-theme-set-templates
|
omarchy-theme-set-templates
|
||||||
@@ -36,7 +33,7 @@ rm -rf "$CURRENT_THEME_PATH"
|
|||||||
mv "$NEXT_THEME_PATH" "$CURRENT_THEME_PATH"
|
mv "$NEXT_THEME_PATH" "$CURRENT_THEME_PATH"
|
||||||
|
|
||||||
# Store theme name for reference
|
# Store theme name for reference
|
||||||
echo "$THEME_NAME" > "$HOME/.config/omarchy/current/theme.name"
|
echo "$THEME_NAME" >"$HOME/.config/omarchy/current/theme.name"
|
||||||
|
|
||||||
# Change background with theme
|
# Change background with theme
|
||||||
omarchy-theme-bg-next
|
omarchy-theme-bg-next
|
||||||
@@ -57,6 +54,7 @@ omarchy-theme-set-gnome
|
|||||||
omarchy-theme-set-browser
|
omarchy-theme-set-browser
|
||||||
omarchy-theme-set-vscode
|
omarchy-theme-set-vscode
|
||||||
omarchy-theme-set-obsidian
|
omarchy-theme-set-obsidian
|
||||||
|
omarchy-theme-set-keyboard
|
||||||
|
|
||||||
# Call hook on theme set
|
# Call hook on theme set
|
||||||
omarchy-hook theme-set "$THEME_NAME"
|
omarchy-hook theme-set "$THEME_NAME"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
|
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
|
||||||
|
|
||||||
if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy-cmd-present brave; then
|
if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
|
||||||
if [[ -f $CHROMIUM_THEME ]]; then
|
if [[ -f $CHROMIUM_THEME ]]; then
|
||||||
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
||||||
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
|
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
|
||||||
|
|||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
omarchy-theme-set-keyboard-asus-rog
|
||||||
|
omarchy-theme-set-keyboard-f16
|
||||||
Executable
+7
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
ASUSCTL_THEME=~/.config/omarchy/current/theme/keyboard.rgb
|
||||||
|
|
||||||
|
if omarchy-cmd-present asusctl; then
|
||||||
|
asusctl aura effect static -c $(sed 's/^#//' $ASUSCTL_THEME)
|
||||||
|
fi
|
||||||
Executable
+22
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
FRAMEWORK16_THEME=~/.config/omarchy/current/theme/keyboard.rgb
|
||||||
|
|
||||||
|
if omarchy-cmd-present qmk_hid && [[ -f $FRAMEWORK16_THEME ]]; then
|
||||||
|
hex=$(cat "$FRAMEWORK16_THEME")
|
||||||
|
hex="${hex#\#}"
|
||||||
|
|
||||||
|
# Convert hex to QMK HSV (0-255 scale) using Python's colorsys
|
||||||
|
read -r h s <<< $(python3 -c "
|
||||||
|
import colorsys
|
||||||
|
r, g, b = int('$hex'[:2],16)/255, int('$hex'[2:4],16)/255, int('$hex'[4:6],16)/255
|
||||||
|
h, s, v = colorsys.rgb_to_hsv(r, g, b)
|
||||||
|
print(int(h * 255), int(s * 255))
|
||||||
|
")
|
||||||
|
|
||||||
|
qmk_hid via --rgb-effect 1 2>/dev/null
|
||||||
|
qmk_hid via --rgb-hue "$h" 2>/dev/null
|
||||||
|
qmk_hid via --rgb-saturation "$s" 2>/dev/null
|
||||||
|
qmk_hid via --rgb-brightness 100 2>/dev/null
|
||||||
|
qmk_hid via --save 2>/dev/null
|
||||||
|
fi
|
||||||
@@ -4,15 +4,15 @@
|
|||||||
|
|
||||||
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
||||||
|
|
||||||
[ -f "$CURRENT_THEME_DIR/obsidian.css" ] || exit 0
|
[[ -f $CURRENT_THEME_DIR/obsidian.css ]] || exit 0
|
||||||
|
|
||||||
jq -r '.vaults | values[].path' ~/.config/obsidian/obsidian.json 2>/dev/null | while read -r vault_path; do
|
jq -r '.vaults | values[].path' ~/.config/obsidian/obsidian.json 2>/dev/null | while read -r vault_path; do
|
||||||
[ -d "$vault_path/.obsidian" ] || continue
|
[[ -d $vault_path/.obsidian ]] || continue
|
||||||
|
|
||||||
theme_dir="$vault_path/.obsidian/themes/Omarchy"
|
theme_dir="$vault_path/.obsidian/themes/Omarchy"
|
||||||
mkdir -p "$theme_dir"
|
mkdir -p "$theme_dir"
|
||||||
|
|
||||||
[ -f "$theme_dir/manifest.json" ] || cat >"$theme_dir/manifest.json" <<'EOF'
|
[[ -f $theme_dir/manifest.json ]] || cat >"$theme_dir/manifest.json" <<'EOF'
|
||||||
{
|
{
|
||||||
"name": "Omarchy",
|
"name": "Omarchy",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
|||||||
@@ -9,18 +9,18 @@ set_theme() {
|
|||||||
local settings_path="$2"
|
local settings_path="$2"
|
||||||
local skip_flag="$3"
|
local skip_flag="$3"
|
||||||
|
|
||||||
omarchy-cmd-present "$editor_cmd" && [[ ! -f "$skip_flag" ]] || return 0
|
omarchy-cmd-present "$editor_cmd" && [[ ! -f $skip_flag ]] || return 0
|
||||||
|
|
||||||
if [[ -f "$VS_CODE_THEME" ]]; then
|
if [[ -f $VS_CODE_THEME ]]; then
|
||||||
theme_name=$(jq -r '.name' "$VS_CODE_THEME")
|
theme_name=$(jq -r '.name' "$VS_CODE_THEME")
|
||||||
extension=$(jq -r '.extension' "$VS_CODE_THEME")
|
extension=$(jq -r '.extension' "$VS_CODE_THEME")
|
||||||
|
|
||||||
if [[ -n "$extension" ]] && ! "$editor_cmd" --list-extensions | grep -Fxq "$extension"; then
|
if [[ -n $extension ]] && ! "$editor_cmd" --list-extensions | grep -Fxq "$extension"; then
|
||||||
"$editor_cmd" --install-extension "$extension" >/dev/null
|
"$editor_cmd" --install-extension "$extension" >/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p "$(dirname "$settings_path")"
|
mkdir -p "$(dirname "$settings_path")"
|
||||||
[[ -f "$settings_path" ]] || printf '{\n}\n' >"$settings_path"
|
[[ -f $settings_path ]] || printf '{\n}\n' >"$settings_path"
|
||||||
|
|
||||||
if ! grep -q '"workbench.colorTheme"' "$settings_path"; then
|
if ! grep -q '"workbench.colorTheme"' "$settings_path"; then
|
||||||
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ "workbench.colorTheme": "",/}' "$settings_path"
|
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ "workbench.colorTheme": "",/}' "$settings_path"
|
||||||
@@ -29,7 +29,7 @@ set_theme() {
|
|||||||
sed -i --follow-symlinks -E \
|
sed -i --follow-symlinks -E \
|
||||||
"s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \
|
"s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \
|
||||||
"$settings_path"
|
"$settings_path"
|
||||||
elif [[ -f "$settings_path" ]]; then
|
elif [[ -f $settings_path ]]; then
|
||||||
sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$settings_path"
|
sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$settings_path"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
for dir in ~/.config/omarchy/themes/*/; do
|
for dir in ~/.config/omarchy/themes/*/; do
|
||||||
if [[ -d $dir ]] && [[ ! -L "${dir%/}" ]] && [[ -d "$dir/.git" ]]; then
|
if [[ -d $dir ]] && [[ ! -L ${dir%/} ]] && [[ -d $dir/.git ]]; then
|
||||||
echo "Updating: $(basename "$dir")"
|
echo "Updating: $(basename "$dir")"
|
||||||
git -C "$dir" pull
|
git -C "$dir" pull
|
||||||
fi
|
fi
|
||||||
|
|||||||
Executable
+65
@@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Toggle dedicated vs integrated GPU mode via supergfxd (for hybrid gpu laptops, like Asus G14).
|
||||||
|
# Requires reboot to take effect.
|
||||||
|
|
||||||
|
# Ensure supergfxctl has been installed
|
||||||
|
if omarchy-cmd-missing supergfxctl; then
|
||||||
|
omarchy-pkg-add supergfxctl
|
||||||
|
|
||||||
|
# Create config before starting service to prevent hang on first boot
|
||||||
|
sudo tee /etc/supergfxd.conf >/dev/null <<'CONF'
|
||||||
|
{
|
||||||
|
"mode": "Hybrid",
|
||||||
|
"vfio_enable": true,
|
||||||
|
"vfio_save": false,
|
||||||
|
"always_reboot": false,
|
||||||
|
"no_logind": false,
|
||||||
|
"logout_timeout_s": 180,
|
||||||
|
"hotplug_type": "None"
|
||||||
|
}
|
||||||
|
CONF
|
||||||
|
|
||||||
|
sudo systemctl enable --now supergfxd
|
||||||
|
fi
|
||||||
|
|
||||||
|
gpu_mode=$(supergfxctl -g)
|
||||||
|
|
||||||
|
case "$gpu_mode" in
|
||||||
|
"Integrated")
|
||||||
|
if gum confirm "Enable dedicated GPU and reboot?"; then
|
||||||
|
# Switch to hybrid mode
|
||||||
|
sudo sed -i "s/\"mode\": \".*\"/\"mode\": \"Hybrid\"/" /etc/supergfxd.conf
|
||||||
|
|
||||||
|
# Let hybrid mode be the default after system sleep
|
||||||
|
sudo rm -rf /usr/lib/systemd/system-sleep/force-igpu
|
||||||
|
|
||||||
|
# Remove the startup delay override (not needed for Hybrid mode)
|
||||||
|
sudo rm -rf /etc/systemd/system/supergfxd.service.d/delay-start.conf
|
||||||
|
|
||||||
|
omarchy-system-reboot
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
"Hybrid")
|
||||||
|
if gum confirm "Use only integrated GPU and reboot?"; then
|
||||||
|
# Switch to integrated mode and ensure vfio is enabled (needed for sleep/wake trick)
|
||||||
|
sudo sed -i "s/\"mode\": \".*\"/\"mode\": \"Integrated\"/" /etc/supergfxd.conf
|
||||||
|
sudo sed -i 's/"vfio_enable": false/"vfio_enable": true/' /etc/supergfxd.conf
|
||||||
|
|
||||||
|
# Force igpu mode after system sleep (or dgpu could get activated)
|
||||||
|
sudo mkdir -p /usr/lib/systemd/system-sleep
|
||||||
|
sudo cp -p $OMARCHY_PATH/default/systemd/system-sleep/force-igpu /usr/lib/systemd/system-sleep/
|
||||||
|
|
||||||
|
# Delay supergfxd startup to avoid race condition with display manager
|
||||||
|
# that can cause system freeze when booting in Integrated mode
|
||||||
|
sudo mkdir -p /etc/systemd/system/supergfxd.service.d
|
||||||
|
sudo cp -p $OMARCHY_PATH/default/systemd/system/supergfxd.service.d/delay-start.conf /etc/systemd/system/supergfxd.service.d/
|
||||||
|
|
||||||
|
omarchy-system-reboot
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Hybrid GPU not found or in unknown mode."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
if pgrep -x hypridle >/dev/null; then
|
if pgrep -x hypridle >/dev/null; then
|
||||||
pkill -x hypridle
|
pkill -x hypridle
|
||||||
notify-send "Stop locking computer when idle"
|
notify-send " Stop locking computer when idle"
|
||||||
else
|
else
|
||||||
uwsm-app -- hypridle >/dev/null 2>&1 &
|
uwsm-app -- hypridle >/dev/null 2>&1 &
|
||||||
notify-send "Now locking computer when idle"
|
notify-send " Now locking computer when idle"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
pkill -RTMIN+9 waybar
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ restart_nightlighted_waybar() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "$CURRENT_TEMP" == "$OFF_TEMP" ]]; then
|
if [[ $CURRENT_TEMP == $OFF_TEMP ]]; then
|
||||||
hyprctl hyprsunset temperature $ON_TEMP
|
hyprctl hyprsunset temperature $ON_TEMP
|
||||||
notify-send " Nightlight screen temperature"
|
notify-send " Nightlight screen temperature"
|
||||||
restart_nightlighted_waybar
|
restart_nightlighted_waybar
|
||||||
|
|||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
makoctl mode -t do-not-disturb
|
||||||
|
|
||||||
|
if makoctl mode | grep -q 'do-not-disturb'; then
|
||||||
|
notify-send " Silenced notifications"
|
||||||
|
else
|
||||||
|
notify-send " Enabled notifications"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkill -RTMIN+10 waybar
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user