Compare commits

..
12 Commits
Author SHA1 Message Date
David Heinemeier Hansson b0ab9782d6 Completion should not include --help 2026-05-01 18:03:12 +02:00
David Heinemeier Hansson f02305ecd8 This was actually correct using an alias 2026-05-01 18:01:41 +02:00
David Heinemeier Hansson 4a12b41893 Hide individual omarchy-* binaries from initial-word command completion
The unified `omarchy` dispatcher is the user-facing entry point
2026-05-01 17:59:17 +02:00
David Heinemeier Hansson c9ff10b4fd Update to use the new single command cli 2026-05-01 17:47:10 +02:00
David Heinemeier Hansson 0f8eb3a6e6 Fix tests 2026-05-01 17:39:59 +02:00
David Heinemeier Hansson f2c1339641 Correct to what's now right 2026-05-01 17:38:20 +02:00
David Heinemeier Hansson a2e83a784e Add missing docs 2026-05-01 17:33:36 +02:00
David Heinemeier Hansson 0d4a076a10 Add omarchy command documentation 2026-05-01 17:31:25 +02:00
David Heinemeier Hansson ee6fbda428 Add bash completions for command 2026-05-01 17:25:23 +02:00
David Heinemeier Hansson d84d2fe11d Remove outdated or internal 2026-05-01 17:23:58 +02:00
David Heinemeier Hansson bc512b437f Merge remote-tracking branch 'origin/dev' into omarchy-cli
# Conflicts:
#	bin/omarchy-hyprland-monitor-watch
#	bin/omarchy-plymouth-reset
#	bin/omarchy-sudo-passwordless
2026-05-01 17:07:09 +02:00
Ryan Hughes 4375782b7a Add omarchy CLI 2026-04-28 12:03:46 -04:00
92 changed files with 419 additions and 1254 deletions
+4
View File
@@ -55,6 +55,7 @@ GROUP_DESCRIPTIONS[reinstall]="Reinstall and reset workflows"
GROUP_DESCRIPTIONS[remove]="Removal workflows"
GROUP_DESCRIPTIONS[restart]="Restart Omarchy components"
GROUP_DESCRIPTIONS[setup]="Interactive setup wizards"
GROUP_DESCRIPTIONS[share]="Share clipboard, files, and folders"
GROUP_DESCRIPTIONS[snapshot]="System snapshots"
GROUP_DESCRIPTIONS[state]="Persistent Omarchy state"
GROUP_DESCRIPTIONS[sudo]="Sudo configuration helpers"
@@ -326,6 +327,9 @@ load_group_extra_commands() {
install)
load_command_by_binary omarchy-pkg-add
;;
system)
load_command_by_binary omarchy-lock-screen
;;
esac
}
+6 -16
View File
@@ -1,21 +1,11 @@
#!/bin/bash
# omarchy:summary=Toggle microphone mute. Drives the hardware mic-mute LED on laptops that expose one.
# omarchy:summary=Toggle microphone mute. Dell XPS and ThinkPad systems get special handling for the hardware LED.
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
if pactl get-source-mute @DEFAULT_SOURCE@ | rg -q 'yes'; then
led=on
osd_message='Microphone muted'
osd_icon='microphone-sensitivity-muted-symbolic'
if omarchy-hw-match "XPS"; then
omarchy-audio-input-mute-xps
elif omarchy-hw-match "ThinkPad"; then
omarchy-audio-input-mute-thinkpad
else
led=off
osd_message='Microphone on'
osd_icon='audio-input-microphone-symbolic'
omarchy-swayosd-client --input-volume mute-toggle
fi
omarchy-brightness-keyboard-mute "$led"
omarchy-swayosd-client \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+21
View File
@@ -0,0 +1,21 @@
#!/bin/bash
# omarchy:summary=Toggle microphone mute on ThinkPad systems. Uses wpctl for reliable toggling
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
if pactl get-source-mute @DEFAULT_SOURCE@ | grep -q 'yes'; then
osd_message='Microphone muted'
osd_icon='microphone-sensitivity-muted-symbolic'
led_value=1
else
osd_message='Microphone on'
osd_icon='audio-input-microphone-symbolic'
led_value=0
fi
brightnessctl --device="platform::micmute" set "$led_value" >/dev/null 2>&1 || true
omarchy-swayosd-client \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+42
View File
@@ -0,0 +1,42 @@
#!/bin/bash
# omarchy:summary=Toggle microphone mute on Dell XPS systems. Uses wpctl for reliable toggling
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
if pactl get-source-mute @DEFAULT_SOURCE@ | rg -q 'yes'; then
alsa_value='off,off'
osd_message='Microphone muted'
osd_icon='microphone-sensitivity-muted-symbolic'
else
alsa_value='on,on'
osd_message='Microphone on'
osd_icon='audio-input-microphone-symbolic'
fi
if [[ -e /sys/class/leds/platform::micmute/brightness ]]; then
default_source=$(pactl get-default-source)
alsa_card=$(pactl -f json list sources | jq -r --arg source "$default_source" '
.[] | select(.name == $source) |
.properties["alsa.card"] // .properties["api.alsa.card"] // .properties["api.alsa.pcm.card"] // empty
' | head -1)
if [[ -n $alsa_card ]]; then
cards=("$alsa_card")
else
mapfile -t cards < <(compgen -G '/proc/asound/card*' | rg -o 'card[0-9]+' | sed 's/card//' | sort -u)
fi
for card in "${cards[@]}"; do
while IFS= read -r control; do
if [[ $control != *"Jack Microphone"* ]]; then
amixer -c "$card" cset "$control" "$alsa_value" >/dev/null 2>&1 || true
break 2
fi
done < <(amixer -c "$card" controls 2>/dev/null | rg -o "name='[^']*Microphone Capture Switch'")
done
fi
omarchy-swayosd-client \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
-5
View File
@@ -5,11 +5,6 @@
step="${1:-+5%}"
if omarchy-hyprland-monitor-focused-apple; then
omarchy-brightness-display-apple "$step"
exit
fi
# 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
+4 -23
View File
@@ -1,32 +1,13 @@
#!/bin/bash
# omarchy:summary=Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
# omarchy:requires-sudo=true
if (( $# == 0 )); then
echo "Adjust Apple Display brightness by passing +5%, 5%-, or 100%"
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
else
step="$1"
if [[ $step =~ ^([0-9]+)%-$ ]]; then
step="-${BASH_REMATCH[1]}%"
fi
devices=()
for path in /dev/usb/hiddev* /dev/hiddev*; do
[[ -e $path ]] && devices+=("$path")
done
if (( ${#devices[@]} == 0 )); then
echo "No Apple Display HID device found"
exit 1
fi
device="$(sudo asdcontrol --detect "${devices[@]}" | grep -E '^/dev/(usb/)?hiddev' | cut -d: -f1 | head -n1)"
if [[ -z $device ]]; then
echo "No Apple Display HID device found"
exit 1
fi
sudo asdcontrol "$device" -- "$step" >/dev/null
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
-14
View File
@@ -1,14 +0,0 @@
#!/bin/bash
# omarchy:summary=Set the mic-mute indicator LED on laptops that expose a platform::micmute LED node.
# omarchy:args=<on|off>
if [[ -e /sys/class/leds/platform::micmute/brightness ]]; then
case "$1" in
on) value=1 ;;
off) value=0 ;;
*) echo "Usage: $(basename "$0") <on|off>" >&2; exit 1 ;;
esac
brightnessctl --device="platform::micmute" set "$value" >/dev/null 2>&1 || true
fi
+7 -104
View File
@@ -5,18 +5,6 @@
# omarchy:args=[--with-desktop-audio] [--with-microphone-audio] [--with-webcam] [--webcam-device=<device>] [--resolution=<size>] [--stop-recording]
# omarchy:examples=omarchy screenrecord | omarchy capture screenrecord --with-desktop-audio
# omarchy:aliases=omarchy screenrecord
#
# Env: OMARCHY_SCREENRECORD_USE_PORTAL=true skips the built-in slurp picker and
# uses gpu-screen-recorder's xdg-desktop-portal capture backend instead. The
# portal backend was originally added (PR #3401) for HDR-aware capture, support
# for monitors driven by external GPUs, and window capture — enable it if any
# of those matter to you. Off by default because the portal path can fail EGL
# DMA-BUF modifier import on some configurations, leaving recording unable to
# start.
#
# Env: OMARCHY_SCREENRECORD_DEBUG=true appends gpu-screen-recorder's stderr (and
# the picker target it was launched with) to /tmp/omarchy-screenrecord.log so
# users can attach a log when reporting capture failures.
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
@@ -33,7 +21,6 @@ WEBCAM_DEVICE=""
RESOLUTION=""
STOP_RECORDING="false"
RECORDING_FILE="/tmp/omarchy-screenrecord-filename"
LOG_FILE=$([[ ${OMARCHY_SCREENRECORD_DEBUG:-false} == "true" ]] && echo "/tmp/omarchy-screenrecord.log" || echo "/dev/null")
for arg in "$@"; do
case "$arg" in
@@ -100,92 +87,7 @@ default_resolution() {
fi
}
# Monitor + window rectangles on the focused workspace, in slurp's "X,Y WxH" format.
# Mirrors omarchy-capture-screenshot so the picker UX is identical.
get_rectangles() {
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 clients -j | jq -r --arg ws "$active_workspace" '
.[] | select(.workspace.id == ($ws | tonumber)) |
"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
}
# Echoes "monitor:NAME" when the selection matches an entire monitor, otherwise
# "region:WxH+X+Y" with physical-pixel coordinates ready for gpu-screen-recorder.
# Returns non-zero if the user cancelled the picker.
select_capture_target() {
local rects=$(get_rectangles)
hyprpicker -r -z >/dev/null 2>&1 &
local picker_pid=$!
sleep .1
local selection=$(echo "$rects" | slurp 2>/dev/null)
kill $picker_pid 2>/dev/null
# X and Y can be negative (Hyprland monitor positions in multi-display layouts);
# widths and heights are always positive.
[[ $selection =~ ^(-?[0-9]+),(-?[0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]] || return 1
local sx=${BASH_REMATCH[1]} sy=${BASH_REMATCH[2]}
local sw=${BASH_REMATCH[3]} sh=${BASH_REMATCH[4]}
# A bare click (area < 20px²) snaps to whichever rectangle the click landed
# inside, so users don't end up with accidental 2px recordings.
if ((sw * sh < 20)); then
while IFS= read -r rect; do
[[ $rect =~ ^(-?[0-9]+),(-?[0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]] || continue
local rx=${BASH_REMATCH[1]} ry=${BASH_REMATCH[2]}
local rw=${BASH_REMATCH[3]} rh=${BASH_REMATCH[4]}
if ((sx >= rx && sx < rx + rw && sy >= ry && sy < ry + rh)); then
sx=$rx sy=$ry sw=$rw sh=$rh
break
fi
done <<<"$rects"
fi
# When the selection exactly matches a monitor, prefer -w <monitor> over a
# region capture — same kms backend, but no scaling math and full native res.
local monitor=$(hyprctl monitors -j | jq -r --argjson x "$sx" --argjson y "$sy" --argjson w "$sw" --argjson h "$sh" '
.[] | select(.x == $x and .y == $y and (.width / .scale | floor) == $w and (.height / .scale | floor) == $h) | .name' | head -1)
if [[ -n $monitor ]]; then
echo "monitor:$monitor"
return
fi
# gpu-screen-recorder wants region geometry in the compositor's logical
# coordinate space — same space slurp returns — so pass the values through
# untouched. (gsr scales to physical pixels itself based on the monitor.)
echo "region:${sw}x${sh}+${sx}+${sy}"
}
start_screenrecording() {
local capture_args=()
local target
# Opt-in path for HDR, external-GPU monitors, and window capture (all things
# the portal backend supports and the kms backend doesn't). Default flow uses
# slurp + the kms backend, which avoids the EGL DMA-BUF modifier import
# failures the portal path can hit on some configurations.
if [[ ${OMARCHY_SCREENRECORD_USE_PORTAL:-false} == "true" ]]; then
target="portal"
capture_args=(-w portal -s "${RESOLUTION:-$(default_resolution)}")
else
target=$(select_capture_target) || return 1
case $target in
monitor:*)
capture_args=(-w "${target#monitor:}" -s "${RESOLUTION:-$(default_resolution)}")
;;
region:*)
capture_args=(-w "${target#region:}")
[[ -n $RESOLUTION ]] && capture_args+=(-s "$RESOLUTION")
;;
esac
fi
[[ $WEBCAM == "true" ]] && start_webcam_overlay
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
local audio_devices=""
local audio_args=()
@@ -200,10 +102,12 @@ start_screenrecording() {
[[ -n $audio_devices ]] && audio_args+=(-a "$audio_devices" -ac aac)
echo "===== $(date '+%F %T') args: $* target: $target =====" >>"$LOG_FILE"
gpu-screen-recorder "${capture_args[@]}" -k auto -f 60 -fm cfr -fallback-cpu-encoding yes -o "$filename" "${audio_args[@]}" 2>>"$LOG_FILE" &
local resolution="${RESOLUTION:-$(default_resolution)}"
gpu-screen-recorder -w portal -k auto -s "$resolution" -f 60 -fm cfr -fallback-cpu-encoding yes -o "$filename" "${audio_args[@]}" &
local pid=$!
# Wait for recording to actually start (file appears after portal selection)
while kill -0 $pid 2>/dev/null && [[ ! -f $filename ]]; do
sleep 0.2
done
@@ -271,10 +175,7 @@ finalize_recording() {
# Trim the first frame, and normalize audio to -14 LUFS if present, in a single pass
local args=(-y -ss 0.1 -i "$latest" "${video_codec[@]}")
if ffprobe -v error -select_streams a -show_entries stream=codec_type -of csv=p=0 "$latest" 2>/dev/null | grep -q audio; then
# Hard-mute the first 400ms to drop the PipeWire capture-open pop (a near-clipping
# transient around 130-200ms that a gentle fade-in can't attenuate enough), then a
# 50ms fade avoids a click at the boundary before loudnorm normalizes the rest.
args+=(-af "volume=enable='lt(t,0.4)':volume=0,afade=t=in:st=0.4:d=0.05,loudnorm=I=-14:TP=-1.5:LRA=11")
args+=(-af loudnorm=I=-14:TP=-1.5:LRA=11)
fi
local processed="${latest%.mp4}-processed.mp4"
@@ -290,5 +191,7 @@ if screenrecording_active; then
elif [[ $STOP_RECORDING == "true" ]]; then
exit 1
else
[[ $WEBCAM == "true" ]] && start_webcam_overlay
start_screenrecording || cleanup_webcam
fi
-26
View File
@@ -1,26 +0,0 @@
#!/bin/bash
# omarchy:summary=Extract text from a screenshot region with OCR
# omarchy:group=capture
# omarchy:examples=omarchy capture ocr
# Keep hyprpicker alive until after grim captures so the screenshot sees the
# frozen overlay rather than live content shifting during teardown.
cleanup_freeze() {
[[ -n $PID ]] && kill $PID 2>/dev/null
}
trap cleanup_freeze EXIT
hyprpicker -r -z >/dev/null 2>&1 &
PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)
[[ -z $SELECTION ]] && exit 0
TEXT=$(grim -g "$SELECTION" - | tesseract stdin stdout --oem 1 --psm 6 -l eng --dpi 300 -c preserve_interword_spaces=1 2>/dev/null) || exit 1
[[ -z $TEXT ]] && exit 1
printf "%s" "$TEXT" | wl-copy
notify-send "󰴑 Copied text from selection to clipboard"
+11 -26
View File
@@ -2,26 +2,13 @@
# omarchy:summary=Set up hibernation with swap and boot resume configuration
# omarchy:requires-sudo=true
# omarchy:args=[--force] [--no-rebuild]
FORCE=false
NO_REBUILD=false
for arg in "$@"; do
case "$arg" in
--force) FORCE=true ;;
--no-rebuild) NO_REBUILD=true ;;
esac
done
if [[ ! -f /sys/power/image_size ]]; then
echo -e "Hibernation is not supported on your system" >&2
exit 0
fi
# When --no-rebuild is set, the caller is responsible for the UKI rebuild
# (e.g. running before limine-mkinitcpio-hook is installed during initial
# install), so we only require limine-mkinitcpio when we'd invoke it ourselves.
if ! $NO_REBUILD && ! command -v limine-mkinitcpio &>/dev/null; then
if ! command -v limine-mkinitcpio &>/dev/null; then
echo "Skipping hibernation setup (requires Limine bootloader)"
exit 0
fi
@@ -39,14 +26,15 @@ if [[ -f $MKINITCPIO_CONF ]] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF";
echo "Fixing empty resume_offset ($RESUME_OFFSET)"
sudo sed -i "s/resume_offset=\"$/resume_offset=$RESUME_OFFSET\"/" "$RESUME_DROP_IN"
sudo sed -i "s/resume_offset=\"$/resume_offset=$RESUME_OFFSET\"/" /etc/default/limine
$NO_REBUILD || sudo limine-mkinitcpio
sudo limine-mkinitcpio
sudo limine-update
fi
fi
echo "Hibernation is already set up"
exit 0
fi
if ! $FORCE; then
if [[ $1 != "--force" ]]; then
MEM_TOTAL_HUMAN=$(free --human | awk '/Mem/ {print $2}')
if ! gum confirm "Use $MEM_TOTAL_HUMAN on boot drive to make hibernation available?"; then
exit 0
@@ -117,16 +105,13 @@ if grep -q "\[s2idle\]" /sys/power/mem_sleep 2>/dev/null; then
fi
fi
if ! $NO_REBUILD; then
# limine-mkinitcpio rebuilds initramfs/UKI for all kernels and updates the
# /boot/limine.conf entries via limine-entry-tool. The limine bootloader
# binary on the ESP doesn't change here, so we don't need limine-update
# (which would also re-deploy the binary and rebuild a second time).
echo "Regenerating initramfs..."
sudo limine-mkinitcpio
echo
fi
# Regenerate initramfs and boot entry
echo "Regenerating initramfs..."
sudo limine-mkinitcpio
sudo limine-update
if ! $FORCE && ! $NO_REBUILD && gum confirm "Reboot to enable hibernation?"; then
echo
if [[ $1 != "--force" ]] && gum confirm "Reboot to enable hibernation?"; then
omarchy-system-reboot
fi
-6
View File
@@ -1,6 +0,0 @@
#!/bin/bash
# omarchy:summary=Detect whether the computer has an NVIDIA GPU with GSP firmware (Turing or newer).
# GTX 16xx, RTX 20xx-50xx, RTX Pro, Quadro RTX, datacenter A/H/T/L series.
lspci | grep -i 'nvidia' | grep -qE "GTX 16[0-9]{2}|RTX [2-5][0-9]{3}|RTX PRO [0-9]{4}|Quadro RTX|RTX A[0-9]{4}|A[1-9][0-9]{2}|H[1-9][0-9]{2}|T4|L[0-9]+"
-6
View File
@@ -1,6 +0,0 @@
#!/bin/bash
# omarchy:summary=Detect whether the computer has an NVIDIA GPU without GSP firmware (Maxwell/Pascal/Volta).
# GTX 9xx/10xx, GT 10xx, Quadro P/M/GV, MX series, Titan X/Xp/V, Tesla V100.
lspci | grep -i 'nvidia' | grep -qE "GTX (9[0-9]{2}|10[0-9]{2})|GT 10[0-9]{2}|Quadro [PM][0-9]{3,4}|Quadro GV100|MX *[0-9]+|Titan (X|Xp|V)|Tesla V100"
@@ -1,5 +0,0 @@
#!/bin/bash
# omarchy:summary=Return success if the focused Hyprland monitor is an Apple display.
hyprctl monitors -j | jq -e '.[] | select(.focused == true) | select(.make == "Apple Computer Inc" and (.model | test("StudioDisplay|ProDisplayXDR")))' >/dev/null
@@ -33,15 +33,4 @@ fi
NEW_SCALE=${SCALES[$NEW_IDX]}
hyprctl keyword monitor "$ACTIVE_MONITOR,${WIDTH}x${HEIGHT}@${REFRESH_RATE},auto,$NEW_SCALE"
# Persist to monitors.conf if the user has a single generic catch-all line
# (ignoring disabled monitors), so the scale survives reboots.
MONITOR_CONF="$HOME/.config/hypr/monitors.conf"
if [[ -f $MONITOR_CONF ]]; then
mapfile -t ACTIVE_LINES < <(grep -E '^[[:space:]]*monitor=' "$MONITOR_CONF" | grep -vE 'disable[[:space:]]*$')
if [[ ${#ACTIVE_LINES[@]} -eq 1 ]] && [[ "${ACTIVE_LINES[0]}" =~ ^monitor=,preferred,auto, ]]; then
sed -i -E "s|^(monitor=,preferred,auto,).*|\\1${NEW_SCALE}|" "$MONITOR_CONF"
fi
fi
notify-send -u low "󰍹 Display scaling set to ${NEW_SCALE}x"
@@ -3,7 +3,6 @@
# omarchy:summary=Allow Chromium to sign in to Google accounts by adding the required OAuth credentials
if [[ -f ~/.config/chromium-flags.conf ]]; then
echo "Installing Chromium Google account support..."
CONF=~/.config/chromium-flags.conf
grep -qxF -- "--oauth2-client-id=77185425430.apps.googleusercontent.com" "$CONF" ||
-1
View File
@@ -13,7 +13,6 @@ fi
if [[ -n $choices ]]; then
for db in $choices; do
echo "Installing $db..."
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 ;;
PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres18 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:18 ;;
-28
View File
@@ -1,28 +0,0 @@
#!/bin/bash
# omarchy:summary=Install lib32 graphics drivers (Vulkan + NVIDIA) for any detected GPUs.
# omarchy:requires-sudo=true
set -e
echo "Installing lib32 graphics drivers..."
PACKAGES=()
declare -A VULKAN_DRIVERS=(
[Intel]=lib32-vulkan-intel
[AMD]=lib32-vulkan-radeon
)
for vendor in "${!VULKAN_DRIVERS[@]}"; do
if lspci | grep -iE "(VGA|Display).*$vendor" >/dev/null; then
PACKAGES+=("${VULKAN_DRIVERS[$vendor]}")
fi
done
if omarchy-hw-nvidia-gsp; then
PACKAGES+=(lib32-nvidia-utils)
elif omarchy-hw-nvidia-without-gsp; then
PACKAGES+=(lib32-nvidia-580xx-utils)
fi
[[ ${#PACKAGES[@]} -gt 0 ]] && omarchy-pkg-add "${PACKAGES[@]}"
-12
View File
@@ -1,12 +0,0 @@
#!/bin/bash
# omarchy:summary=Install Heroic Games Launcher (Epic, GOG, Amazon Prime Gaming) with graphics drivers.
# omarchy:requires-sudo=true
set -e
echo "Installing Heroic Games Launcher..."
omarchy-pkg-add heroic-games-launcher-bin
omarchy-install-gaming-gpu-lib32
setsid gtk-launch heroic >/dev/null 2>&1 &
-23
View File
@@ -1,23 +0,0 @@
#!/bin/bash
# omarchy:summary=Install Lutris with Wine + DXVK for running Windows games (Battle.net, EA, Ubisoft Connect, etc.)
# omarchy:requires-sudo=true
set -e
echo "Installing Lutris..."
omarchy-pkg-add lutris umu-launcher wine-staging wine-mono wine-gecko winetricks python-protobuf
omarchy-install-gaming-gpu-lib32
# Lutris ships with `#!/usr/bin/env python3`, which resolves to mise's Python and
# fails to import the lutris module. Pin the shebang to the system Python.
sudo sed -i '/env python3/ c\#!/bin/python3' /usr/bin/lutris
cat <<'EOF'
Lutris will open and auto-fetch its DXVK and VKD3D runtimes in the background
(watch the bottom status bar). Once that finishes, click the + to add or install games.
EOF
setsid lutris >/dev/null 2>&1 &
-11
View File
@@ -1,11 +0,0 @@
#!/bin/bash
# omarchy:summary=Install Moonlight (NVIDIA GameStream / Sunshine client) for streaming games to this PC.
# omarchy:requires-sudo=true
set -e
echo "Installing Moonlight..."
omarchy-pkg-add moonlight-qt
setsid gtk-launch com.moonlight_stream.Moonlight.desktop >/dev/null 2>&1 &
-80
View File
@@ -1,80 +0,0 @@
#!/bin/bash
# omarchy:summary=Install RetroArch with the full libretro core set plus FBNeo and a ~/Games ROM directory.
set -e
echo "Installing RetroArch..."
omarchy-pkg-add \
retroarch \
retroarch-assets-glui retroarch-assets-ozone retroarch-assets-xmb \
libretro-beetle-pce libretro-beetle-pce-fast libretro-beetle-psx libretro-beetle-psx-hw libretro-beetle-supergrafx \
libretro-blastem \
libretro-bsnes libretro-bsnes-hd libretro-bsnes2014 \
libretro-core-info \
libretro-desmume libretro-dolphin libretro-flycast \
libretro-gambatte libretro-genesis-plus-gx \
libretro-kronos \
libretro-mame libretro-mame2016 libretro-melonds libretro-mesen libretro-mesen-s libretro-mgba libretro-mupen64plus-next \
libretro-nestopia \
libretro-overlays \
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
libretro-yabause \
libretro-fbneo-git \
libretro-database-git
# Set up ~/Games for BIOS files and ROMs
mkdir -p "$HOME/Games/bios" "$HOME/Games/roms"
CFG="$HOME/.config/retroarch/retroarch.cfg"
mkdir -p "$(dirname "$CFG")"
touch "$CFG"
set_cfg() {
local key=$1 value=$2
if grep -q "^$key = " "$CFG"; then
sed -i "s|^$key = .*|$key = \"$value\"|" "$CFG"
else
echo "$key = \"$value\"" >>"$CFG"
fi
}
set_cfg rgui_browser_directory "$HOME/Games/roms"
set_cfg system_directory "$HOME/Games/bios"
# Point at the cores and assets installed by pacman
set_cfg libretro_directory "/usr/lib/libretro"
set_cfg libretro_info_path "/usr/share/libretro/info"
set_cfg overlay_directory "/usr/share/libretro/overlays"
set_cfg osk_overlay_directory "/usr/share/libretro/overlays/keyboards"
set_cfg video_shader_dir "/usr/share/libretro/shaders/shaders_slang"
# Point at the database, cheats, and cursors from libretro-database-git
set_cfg content_database_path "/usr/share/libretro/database/rdb"
set_cfg cheat_database_path "/usr/share/libretro/database/cht"
set_cfg cursor_directory "/usr/share/libretro/database/cursors"
# Vulkan is required for slang shaders and unlocks hardware renderers in beetle-psx-hw, parallel-n64, dolphin
set_cfg video_driver "vulkan"
# XMB is the classic PS3-style menu (vs. ozone/rgui/glui)
set_cfg menu_driver "xmb"
# Default to crt-royale shader for that classic CRT look. The global preset is
# auto-loaded by RetroArch when auto_shaders_enable is true and no per-core/per-game
# preset takes precedence — setting video_shader alone in retroarch.cfg is not enough.
set_cfg video_shader_enable "true"
set_cfg auto_shaders_enable "true"
mkdir -p ~/.config/retroarch/config
echo '#reference "/usr/share/libretro/shaders/shaders_slang/crt/crt-royale.slangp"' \
> ~/.config/retroarch/config/global.slangp
# Hide Images and Video tabs in the main menu sidebar
set_cfg content_show_images "false"
set_cfg content_show_video "false"
echo ""
echo "Put your roms and bios files in ~/Games. Then start RetroArch from the app launcher (Super + Space)."
setsid nautilus "$HOME/Games" >/dev/null 2>&1 &
-10
View File
@@ -1,10 +0,0 @@
#!/bin/bash
# omarchy:summary=Install Xbox Cloud Gaming as a web app and launch it.
set -e
echo "Installing Xbox Cloud Gaming..."
omarchy-webapp-install "Xbox Cloud Gaming" "https://www.xbox.com/en-US/play" "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/xbox.png"
setsid omarchy-launch-webapp "https://www.xbox.com/en-US/play" >/dev/null 2>&1 &
@@ -1,37 +0,0 @@
#!/bin/bash
# omarchy:summary=Install support for using Xbox controllers with Steam/RetroArch/etc.
# omarchy:requires-sudo=true
set -e
echo "Installing Xbox controller Bluetooth support..."
# Install xpadneo to ensure controllers work out of the box
omarchy-pkg-add linux-headers xpadneo-dkms
# Prevent xpad/xpadneo driver conflict
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
echo hid_xpadneo | sudo tee /etc/modules-load.d/xpadneo.conf >/dev/null
# Ensure user is in the input group (controllers need it)
needs_reboot=false
if ! id -nG "$USER" | grep -qw input; then
sudo usermod -aG input "$USER"
needs_reboot=true
fi
# Swap drivers in the running kernel so a reboot isn't needed otherwise
if lsmod | grep -q '^xpad '; then
sudo modprobe -r xpad 2>/dev/null || needs_reboot=true
fi
if $needs_reboot; then
gum confirm "Reboot needed to finish setup. Reboot now?" && sudo reboot now
exit 0
fi
sudo modprobe hid_xpadneo
echo ""
echo "Now you can pair your Xbox controller with Bluetooth using Super + Ctrl + B."
@@ -4,7 +4,6 @@
set -e
echo "Installing GeForce NOW..."
omarchy-pkg-add flatpak
cd /tmp
-28
View File
@@ -1,28 +0,0 @@
#!/bin/bash
# Install Helix and configure it to use the current Omarchy theme.
echo "Installing Helix..."
omarchy-pkg-add helix
mkdir -p ~/.config/helix/themes
# Symlink the rendered Omarchy theme so Helix tracks the active theme
ln -sf ~/.config/omarchy/current/theme/helix.toml ~/.config/helix/themes/omarchy.toml
# Only seed a config.toml if the user does not already have one
if [[ ! -f ~/.config/helix/config.toml ]]; then
cat >~/.config/helix/config.toml <<'EOF'
theme = "omarchy"
EOF
fi
# Ensure the symlink target exists for users whose current theme predates this template
if [[ ! -e ~/.config/omarchy/current/theme/helix.toml ]]; then
omarchy-theme-refresh
fi
# Arch-based distros ship Helix as 'helix' rather than the upstream 'hx'.
if ! grep -q '^alias hx="helix"' ~/.bashrc 2>/dev/null; then
echo 'alias hx="helix"' >>~/.bashrc
fi
@@ -5,11 +5,6 @@
set -e
echo "Installing Steam..."
omarchy-pkg-add steam
omarchy-install-gaming-gpu-lib32
echo ""
echo "Steam will start automatically now. This might take a while..."
echo "Now pick dependencies matching your graphics card"
sudo pacman -S steam
setsid gtk-launch steam >/dev/null 2>&1 &
-2
View File
@@ -22,8 +22,6 @@ kitty) desktop_id="kitty.desktop" ;;
;;
esac
echo "Installing $package..."
# Install package
if omarchy-pkg-add $package; then
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
+20
View File
@@ -0,0 +1,20 @@
#!/bin/bash
# omarchy:summary=Install support for using Xbox controllers with Steam/RetroArch/etc.
# omarchy:requires-sudo=true
set -e
# Install xpadneo to ensure controllers work out of the box
omarchy-pkg-add linux-headers
omarchy-pkg-aur-add xpadneo-dkms
# Prevent xpad/xpadneo driver conflict
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
echo hid_xpadneo | sudo tee /etc/modules-load.d/xpadneo.conf >/dev/null
# Give user access to game controllers
sudo usermod -a -G input $USER
# Modules need to be loaded
gum confirm "Install requires reboot. Ready?" && sudo reboot now
+11 -33
View File
@@ -103,10 +103,9 @@ show_trigger_menu() {
}
show_capture_menu() {
case $(menu "Capture" " Screenshot\n Screenrecord\n󰴑 Text Extraction\n󰃉 Color") in
case $(menu "Capture" " Screenshot\n Screenrecord\n󰃉 Color") in
*Screenshot*) omarchy-capture-screenshot ;;
*Screenrecord*) show_screenrecord_menu ;;
*Text*) omarchy-capture-text-extraction ;;
*Color*) pkill hyprpicker || hyprpicker -a ;;
*) back_to show_trigger_menu ;;
esac
@@ -167,13 +166,12 @@ show_share_menu() {
}
show_toggle_menu() {
local options="󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰂛 Notifications\n󰍜 Top Bar\n󱂬 Workspace Layout\n Window Gaps\n 1-Window Ratio\n󰍹 Monitor Scaling\n Direct Boot\n󰟵 Passwordless Sudo"
local options="󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰍜 Top Bar\n󱂬 Workspace Layout\n Window Gaps\n 1-Window Ratio\n󰍹 Monitor Scaling\n Direct Boot\n󰟵 Passwordless Sudo"
case $(menu "Toggle" "$options") in
*Screensaver*) omarchy-toggle-screensaver ;;
*Nightlight*) omarchy-toggle-nightlight ;;
*Idle*) omarchy-toggle-idle ;;
*Notifications*) omarchy-toggle-notification-silencing ;;
*Bar*) omarchy-toggle-waybar ;;
*Layout*) omarchy-hyprland-workspace-layout-toggle ;;
*Ratio*) omarchy-hyprland-window-single-square-aspect-toggle ;;
@@ -354,7 +352,7 @@ show_install_editor_menu() {
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
*Helix*) present_terminal omarchy-install-helix ;;
*Helix*) install "Helix" "helix" ;;
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
*) show_install_menu ;;
esac
@@ -386,16 +384,12 @@ show_install_ai_menu() {
}
show_install_gaming_menu() {
case $(menu "Install" " Steam\n RetroArch\n󰍳 Minecraft\n󰢹 NVIDIA GeForce NOW\n Xbox Cloud Gaming\n󰖺 Xbox Controller (󰂯)\n󰍹 Moonlight (GameStream)\n Lutris (Battle.net)\n󱓟 Heroic (Epic Games)") in
*Steam*) present_terminal omarchy-install-gaming-steam ;;
*RetroArch*) present_terminal omarchy-install-gaming-retroarch ;;
case $(menu "Install" " Steam\n󰢹 NVIDIA GeForce NOW\n RetroArch [AUR]\n󰍳 Minecraft\n󰖺 Xbox Controller [AUR]") in
*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" ;;
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
*GeForce*) present_terminal omarchy-install-gaming-geforce-now ;;
*"Xbox Cloud"*) present_terminal omarchy-install-gaming-xbox-cloud ;;
*Xbox*) present_terminal omarchy-install-gaming-xbox-controllers ;;
*Lutris*) present_terminal omarchy-install-gaming-lutris ;;
*Heroic*) present_terminal omarchy-install-gaming-heroic ;;
*Moonlight*) present_terminal omarchy-install-gaming-moonlight ;;
*Xbox*) present_terminal omarchy-install-xbox-controllers ;;
*) show_install_menu ;;
esac
}
@@ -410,12 +404,12 @@ show_install_style_menu() {
}
show_install_font_menu() {
case $(menu "Install" " Cascadia Mono\n Meslo LG Mono\n Fira Code\n Victor Code\n Bitstream 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" ;;
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;;
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
*Bitstream*) install_font "Bitstream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;;
*Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;;
*Iosevka*) install_font "Iosevka" "ttf-iosevka-nerd" "Iosevka Nerd Font Mono" ;;
*) show_install_menu ;;
esac
@@ -468,12 +462,11 @@ show_install_elixir_menu() {
}
show_remove_menu() {
case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰵮 Development\n Gaming\n󰏓 Preinstalls\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 ;;
*Web*) present_terminal omarchy-webapp-remove ;;
*TUI*) present_terminal omarchy-tui-remove ;;
*Development*) show_remove_development_menu ;;
*Gaming*) show_remove_gaming_menu ;;
*Preinstalls*) present_terminal omarchy-remove-preinstalls ;;
*Dictation*) present_terminal omarchy-voxtype-remove ;;
*Theme*) present_terminal omarchy-theme-remove ;;
@@ -484,21 +477,6 @@ show_remove_menu() {
esac
}
show_remove_gaming_menu() {
case $(menu "Remove" " Steam\n RetroArch\n󰍳 Minecraft\n󰢹 NVIDIA GeForce NOW\n Xbox Cloud Gaming\n󰖺 Xbox Controller (󰂯)\n󰍹 Moonlight (GameStream)\n Lutris (Battle.net)\n󱓟 Heroic (Epic Games)") in
*Steam*) present_terminal omarchy-remove-gaming-steam ;;
*RetroArch*) present_terminal omarchy-remove-gaming-retroarch ;;
*Minecraft*) present_terminal omarchy-remove-gaming-minecraft ;;
*GeForce*) present_terminal omarchy-remove-gaming-geforce-now ;;
*"Xbox Cloud"*) present_terminal omarchy-remove-gaming-xbox-cloud ;;
*Xbox*) present_terminal omarchy-remove-gaming-xbox-controllers ;;
*Moonlight*) present_terminal omarchy-remove-gaming-moonlight ;;
*Lutris*) present_terminal omarchy-remove-gaming-lutris ;;
*Heroic*) present_terminal omarchy-remove-gaming-heroic ;;
*) show_remove_menu ;;
esac
}
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\n Scala") in
*Rails*) present_terminal "omarchy-remove-dev-env ruby" ;;
-1
View File
@@ -43,7 +43,6 @@ ensure_bin_runtime() {
exec_package_bin() {
local package_bin_path=\$1
shift
if [[ -n \$package_bin_path ]]; then
ensure_bin_runtime "\$package_bin_path"
+1 -6
View File
@@ -4,13 +4,8 @@
# omarchy:args=<packages...>
# omarchy:requires-sudo=true
installed=()
for pkg in "$@"; do
if pacman -Q "$pkg" &>/dev/null; then
installed+=("$pkg")
sudo pacman -Rns --noconfirm "$pkg"
fi
done
if (( ${#installed[@]} > 0 )); then
sudo pacman -Rns --noconfirm "${installed[@]}"
fi
+3 -23
View File
@@ -1,31 +1,11 @@
#!/bin/bash
# omarchy:summary=Set the power profile to the requested level, falling back to balanced
# omarchy:args=[autodetect|ac|battery]
action="${1-}"
# Auto-detect when called with no argument: treat any Mains or USB
# power-supply device reporting online=1 as "on AC". This handles
# USB-C only laptops where the legacy AC device may not fire udev
# events, and also avoids false negatives from per-port USB-C devices
# that are present-but-empty (online=0) while another port supplies power.
if [[ -z $action || $action == "autodetect" ]]; then
action=battery
for ps in /sys/class/power_supply/*; do
[[ -r $ps/online && -r $ps/type ]] || continue
type=$(cat "$ps/type")
[[ $type == "Mains" || $type == "USB" ]] || continue
if [[ $(cat "$ps/online") == "1" ]]; then
action=ac
break
fi
done
fi
# omarchy:args=<ac|battery>
mapfile -t profiles < <(powerprofilesctl list | awk '/^\s*[* ]\s*[a-zA-Z0-9\-]+:$/ { gsub(/^[*[:space:]]+|:$/,""); print }')
case "$action" in
case "$1" in
ac)
# Prefer performance, fall back to balanced
if [[ " ${profiles[*]} " == *" performance "* ]]; then
@@ -37,4 +17,4 @@ case "$action" in
battery)
powerprofilesctl set balanced
;;
esac
esac
+1 -1
View File
@@ -3,7 +3,7 @@
# omarchy:summary=Overwrite the user config for the Plymouth drive decryption and boot sequence with the Omarchy default and rebuild it.
# omarchy:requires-sudo=true
sudo cp -r ~/.local/share/omarchy/default/plymouth/* /usr/share/plymouth/themes/omarchy/
sudo cp ~/.local/share/omarchy/default/plymouth/* /usr/share/plymouth/themes/omarchy/
sudo plymouth-set-default-theme omarchy
if command -v limine-mkinitcpio &>/dev/null; then
-6
View File
@@ -16,11 +16,5 @@ omarchy-refresh-config walker/config.toml
omarchy-refresh-config elephant/calc.toml
omarchy-refresh-config elephant/desktopapplications.toml
# Link all elephant menus
mkdir -p ~/.config/elephant/menus
for menu in $OMARCHY_PATH/default/elephant/*.lua; do
ln -snf "$menu" ~/.config/elephant/menus/"$(basename "$menu")"
done
# Restart service
omarchy-restart-walker
-12
View File
@@ -1,12 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove the GeForce NOW Flatpak app and its data.
set -e
if command -v flatpak >/dev/null && flatpak info com.nvidia.geforcenow &>/dev/null; then
flatpak uninstall -y --delete-data com.nvidia.geforcenow
fi
echo ""
echo "GeForce NOW removed."
-17
View File
@@ -1,17 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove Heroic Games Launcher and its game libraries, configs, and caches.
# omarchy:requires-sudo=true
set -e
omarchy-pkg-drop heroic-games-launcher-bin
rm -rf \
"$HOME/.config/heroic" \
"$HOME/.local/share/heroic" \
"$HOME/.cache/heroic" \
"$HOME/Games/Heroic"
echo ""
echo "Heroic and its data have been removed."
-21
View File
@@ -1,21 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove Lutris, Wine, umu-launcher, and all their configs and caches.
# omarchy:requires-sudo=true
set -e
omarchy-pkg-drop lutris wine-staging wine-mono wine-gecko winetricks python-protobuf umu-launcher
rm -rf \
"$HOME/.config/lutris" \
"$HOME/.local/share/lutris" \
"$HOME/.cache/lutris" \
"$HOME/.local/share/umu" \
"$HOME/.cache/umu" \
"$HOME/.wine" \
"$HOME/.cache/wine" \
"$HOME/.cache/winetricks"
echo ""
echo "Lutris, Wine, umu-launcher, and their configs have been removed."
-17
View File
@@ -1,17 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove the Minecraft launcher along with its worlds, mods, and caches.
# omarchy:requires-sudo=true
set -e
omarchy-pkg-drop minecraft-launcher
rm -rf \
"$HOME/.minecraft" \
"$HOME/.config/Minecraft Launcher" \
"$HOME/.local/share/minecraft-launcher" \
"$HOME/.cache/minecraft"
echo ""
echo "Minecraft and its data have been removed."
-15
View File
@@ -1,15 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove Moonlight and its configs and caches.
# omarchy:requires-sudo=true
set -e
omarchy-pkg-drop moonlight-qt
rm -rf \
"$HOME/.config/Moonlight Game Streaming Project" \
"$HOME/.cache/Moonlight Game Streaming Project"
echo ""
echo "Moonlight and its data have been removed."
-33
View File
@@ -1,33 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove RetroArch, all libretro cores, and its config/saves. Leaves ~/Games/roms and ~/Games/bios alone.
# omarchy:requires-sudo=true
set -e
omarchy-pkg-drop \
retroarch \
retroarch-assets-glui retroarch-assets-ozone retroarch-assets-xmb \
libretro-beetle-pce libretro-beetle-pce-fast libretro-beetle-psx libretro-beetle-psx-hw libretro-beetle-supergrafx \
libretro-blastem \
libretro-bsnes libretro-bsnes-hd libretro-bsnes2014 \
libretro-core-info \
libretro-desmume libretro-dolphin libretro-flycast \
libretro-gambatte libretro-genesis-plus-gx \
libretro-kronos \
libretro-mame libretro-mame2016 libretro-melonds libretro-mesen libretro-mesen-s libretro-mgba libretro-mupen64plus-next \
libretro-nestopia \
libretro-overlays \
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
libretro-yabause \
libretro-fbneo-git
rm -rf \
"$HOME/.config/retroarch" \
"$HOME/.local/share/retroarch" \
"$HOME/.cache/retroarch"
echo ""
echo "RetroArch and its cores have been removed."
echo "ROMs and BIOS files at ~/Games/roms and ~/Games/bios were left in place."
-17
View File
@@ -1,17 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove Steam and all of its game libraries, configs, and caches.
# omarchy:requires-sudo=true
set -e
omarchy-pkg-drop steam
rm -rf \
"$HOME/.steam" \
"$HOME/.local/share/Steam" \
"$HOME/.config/steam" \
"$HOME/.cache/steam"
echo ""
echo "Steam and its data have been removed."
-7
View File
@@ -1,7 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove the Xbox Cloud Gaming web app.
set -e
omarchy-webapp-remove "Xbox Cloud Gaming"
@@ -1,13 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove the xpadneo Xbox controller driver and undo its module/blacklist config.
# omarchy:requires-sudo=true
set -e
omarchy-pkg-drop xpadneo-dkms
sudo rm -f /etc/modprobe.d/blacklist-xpad.conf /etc/modules-load.d/xpadneo.conf
echo ""
echo "Xbox controller support removed. Reboot to fully unload xpadneo and restore xpad."
-7
View File
@@ -1,7 +0,0 @@
#!/bin/bash
# Reload Helix configuration (used by the Omarchy theme switching).
if pgrep -x helix >/dev/null; then
pkill -USR1 helix
fi
+2 -1
View File
@@ -25,7 +25,8 @@ tty=$(tty 2>/dev/null)
while true; do
tte -i ~/.config/omarchy/branding/screensaver.txt \
--frame-rate 120 --canvas-width 0 --canvas-height 0 --reuse-canvas --anchor-canvas c --anchor-text c\
--random-effect --no-eol --no-restore-cursor &
--random-effect --exclude-effects dev_worm \
--no-eol --no-restore-cursor &
while pgrep -t "${tty#/dev/}" -x tte >/dev/null; do
if read -n1 -t 1 || ! screensaver_in_focus; then
+5 -5
View File
@@ -37,8 +37,8 @@ case "$dns" in
Cloudflare)
sudo tee /etc/systemd/resolved.conf >/dev/null <<'EOF'
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
FallbackDNS=9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com
FallbackDNS=9.9.9.9 149.112.112.112
DNSOverTLS=opportunistic
EOF
lock_dns_to_resolved
@@ -47,8 +47,8 @@ EOF
Google)
sudo tee /etc/systemd/resolved.conf >/dev/null <<'EOF'
[Resolve]
DNS=8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
FallbackDNS=9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
DNS=8.8.8.8#dns.google 8.8.4.4#dns.google
FallbackDNS=9.9.9.9 149.112.112.112
DNSOverTLS=opportunistic
EOF
lock_dns_to_resolved
@@ -74,7 +74,7 @@ Custom)
sudo tee /etc/systemd/resolved.conf >/dev/null <<EOF
[Resolve]
DNS=$dns_servers
FallbackDNS=9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
FallbackDNS=9.9.9.9 149.112.112.112
EOF
lock_dns_to_resolved
;;
+2 -7
View File
@@ -3,11 +3,10 @@
# omarchy:summary=Install a theme from a git repository
# omarchy:args=[git-repo-url]
# omarchy:examples=omarchy theme install https://github.com/example/omarchy-example-theme.git
# omarchy:examples=omarchy theme install git@github.com:example/omarchy-example-theme.git
if [[ -z $1 ]]; then
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 (https or git@host:org/repo.git)" --header="")
REPO_URL=$(gum input --placeholder="Git repo URL for theme" --header="")
else
REPO_URL="$1"
fi
@@ -17,11 +16,7 @@ if [[ -z $REPO_URL ]]; then
fi
THEMES_DIR="$HOME/.config/omarchy/themes"
# Strip user@host: prefix from scp-style SSH URLs so basename sees just the path
REPO_PATH="$REPO_URL"
[[ $REPO_PATH != *"://"* && $REPO_PATH == *:*/* ]] && REPO_PATH="${REPO_PATH#*:}"
THEME_NAME=$(basename "$REPO_PATH" .git | sed -E 's/^omarchy-//; s/-theme$//' | tr '[:upper:]' '[:lower:]')
THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omarchy-//; s/-theme$//' | tr '[:upper:]' '[:lower:]')
THEME_PATH="$THEMES_DIR/$THEME_NAME"
# Remove existing theme if present
-1
View File
@@ -57,7 +57,6 @@ omarchy-restart-hyprctl
omarchy-restart-btop
omarchy-restart-opencode
omarchy-restart-mako
omarchy-restart-helix
# Change app-specific themes
omarchy-theme-set-gnome
+2 -2
View File
@@ -14,8 +14,8 @@ set_theme() {
theme_name=$(jq -r '.name' "$VS_CODE_THEME")
extension=$(jq -r '.extension' "$VS_CODE_THEME")
if [[ -n $extension ]] && ! "$editor_cmd" --list-extensions 2>/dev/null | grep -Fxq "$extension"; then
"$editor_cmd" --install-extension "$extension" >/dev/null 2>&1
if [[ -n $extension ]] && ! "$editor_cmd" --list-extensions | grep -Fxq "$extension"; then
"$editor_cmd" --install-extension "$extension" >/dev/null
fi
mkdir -p "$(dirname "$settings_path")"
+1 -1
View File
@@ -2,7 +2,7 @@
# omarchy:summary=Prompt for confirmation before starting an update
gum style --border normal --padding "1 2" \
gum style --border normal --border-foreground 6 --padding "1 2" \
"Ready to update?" \
"" \
"• You cannot stop the update once you start!" \
+3 -3
View File
@@ -5,14 +5,14 @@
echo
running_kernel=$(uname -r)
kernel_updated=true
kernel_updated=false
for kernel in /usr/lib/modules/*/vmlinuz; do
if [[ -f $kernel ]] && pacman -Qo "$kernel" &>/dev/null; then
installed_kernel=$(basename "$(dirname "$kernel")")
if [[ $installed_kernel == $running_kernel ]]; then
kernel_updated=false
if [[ $installed_kernel != $running_kernel ]]; then
kernel_updated=true
break
fi
fi
+3
View File
@@ -1 +1,4 @@
--ozone-platform=wayland
--ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
+1 -1
View File
@@ -1,4 +1,4 @@
--ozone-platform=wayland
--ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation,VaapiVideoDecodeLinuxGL,VaapiVideoEncoder
--enable-features=TouchpadOverscrollHistoryNavigation
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
+1 -1
View File
@@ -27,7 +27,7 @@ input {
# natural_scroll = true
# Use two-finger clicks for right-click instead of lower-right corner
clickfinger_behavior = true
# clickfinger_behavior = true
# Control the speed of your scrolling
scroll_factor = 0.4
-5
View File
@@ -8,11 +8,6 @@ transcode-video-4K() {
ffmpeg -i "$1" -c:v libx265 -preset slow -crf 24 -c:a aac -b:a 192k "${1%.*}-optimized.mp4"
}
# Transcode a video to an animated GIF using a palette for accurate colors
transcode-video-gif() {
ffmpeg -i "$1" -vf "fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" "${1%.*}.gif"
}
# Transcode any image to JPG image that's great for shrinking wallpapers
img2jpg() {
img="$1"
-2
View File
@@ -5,8 +5,6 @@ bindeld = ,XF86AudioMute, Mute, exec, omarchy-swayosd-client --output-volume mut
bindeld = ,XF86AudioMicMute, Mute microphone, exec, omarchy-audio-input-mute
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, omarchy-brightness-display +5%
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, omarchy-brightness-display 5%-
bindeld = SHIFT, XF86MonBrightnessUp, Brightness maximum, exec, omarchy-brightness-display 100%
bindeld = SHIFT, XF86MonBrightnessDown, Brightness minimum, exec, omarchy-brightness-display 1%
bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, omarchy-brightness-keyboard up
bindeld = ,XF86KbdBrightnessDown, Keyboard brightness down, exec, omarchy-brightness-keyboard down
bindld = ,XF86KbdLightOnOff, Keyboard backlight cycle, exec, omarchy-brightness-keyboard cycle
+6 -5
View File
@@ -31,14 +31,18 @@ bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight
bindd = SUPER CTRL, Delete, Toggle laptop display, exec, omarchy-hyprland-monitor-internal toggle
bindd = SUPER CTRL ALT, Delete, Toggle laptop display mirroring, exec, omarchy-hyprland-monitor-internal-mirror toggle
bindl = , switch:on:Lid Switch, exec, omarchy-hw-external-monitors && omarchy-hyprland-monitor-internal off
bindl = , switch:on:Lid Switch, exec, omarchy-hyprland-monitor-internal off
bindl = , switch:off:Lid Switch, exec, omarchy-hyprland-monitor-internal on
# Control Apple Display brightness
bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-brightness-display-apple -5000
bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-brightness-display-apple +5000
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-brightness-display-apple +60000
# Captures
bindd = , PRINT, Screenshot, exec, omarchy-capture-screenshot
bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
bindd = SUPER CTRL, PRINT, Extract text (OCR) from screenshot, exec, omarchy-capture-text-extraction
# File sharing
bindd = SUPER CTRL, S, Share, exec, omarchy-menu share
@@ -56,9 +60,6 @@ bindd = SUPER CTRL, T, Activity, exec, omarchy-launch-tui btop
# Dictation
bindd = SUPER CTRL, X, Toggle dictation, exec, voxtype record toggle
bindd = , F9, Start dictation (push-to-talk), exec, voxtype record start
binddr = , F9, Stop dictation (push-to-talk), exec, voxtype record stop
# Zoom
bindd = SUPER CTRL, Z, Zoom in, exec, hyprctl keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float + 1')
bindd = SUPER CTRL ALT, Z, Reset zoom, exec, hyprctl keyword cursor:zoom_factor 1
+1 -5
View File
@@ -1,8 +1,3 @@
# GUM environment variables for styling purposes
# hyprlang noerror true
source = ~/.config/omarchy/current/theme/gum.env.conf
# hyprlang noerror false
# Cursor size
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
@@ -11,6 +6,7 @@ env = HYPRCURSOR_SIZE,24
env = GDK_BACKEND,wayland,x11,*
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_STYLE_OVERRIDE,kvantum
env = SDL_VIDEODRIVER,wayland,x11
env = MOZ_ENABLE_WAYLAND,1
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = OZONE_PLATFORM,wayland
+7
View File
@@ -138,3 +138,10 @@ cursor {
binds {
hide_special_on_workspace_change = true
}
# Style Gum confirm to match terminal theme
env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan
env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black
env = GUM_CONFIRM_SELECTED_BACKGROUND,2 # Green
env = GUM_CONFIRM_UNSELECTED_FOREGROUND,7 # White
env = GUM_CONFIRM_UNSELECTED_BACKGROUND,8 # Dark grey
+3 -3
View File
@@ -2,9 +2,9 @@
#timeout: 3
default_entry: 2
interface_branding: Omarchy Bootloader
interface_branding_color: 9ece6a
interface_help_color: 9ece6a
interface_help_color_bright: 9ece6a
interface_branding_colour: 9ece6a
interface_help_colour: 9ece6a
interface_help_colour_bright: 9ece6a
hash_mismatch_panic: no
term_background: 1a1b26
+1 -3
View File
@@ -143,8 +143,6 @@ Run `omarchy --help` for the full list. The most common groups:
**Key behaviors:**
- Hyprland auto-reloads on config save (no restart needed for most changes)
- Use `hyprctl reload` to force reload
- After ANY Hyprland config change, validate with `hyprctl reload` followed by `hyprctl configerrors`
- If `hyprctl configerrors` reports errors, address them and rerun validation until clean or until a real blocker is identified
- Use `omarchy refresh hyprland` to reset to defaults
### Waybar (Status Bar)
@@ -196,7 +194,7 @@ cp ~/.config/hypr/bindings.conf ~/.config/hypr/bindings.conf.bak.$(date +%s)
# 3. Make changes with Edit tool
# 4. Apply changes
# - Hyprland: auto-reloads on save, but MUST validate with `hyprctl reload` and `hyprctl configerrors`
# - Hyprland: auto-reloads on save (no restart needed)
# - Waybar: MUST restart with `omarchy restart waybar`
# - Walker: MUST restart with `omarchy restart walker`
# - Terminals: MUST restart with `omarchy restart terminal`
+162 -140
View File
@@ -1,105 +1,116 @@
# Omarchy Plymouth Theme Script
Window.SetBackgroundTopColor(0.101, 0.105, 0.149);
Window.SetBackgroundBottomColor(0.101, 0.105, 0.149);
Window.SetBackgroundBottomColor(0.101, 0.105, 0.149);
logo.image = Image("logo.png");
logo.sprite = Sprite(logo.image);
logo.sprite.SetX(Window.GetWidth() / 2 - logo.image.GetWidth() / 2);
logo.sprite.SetY(Window.GetHeight() / 2 - logo.image.GetHeight() / 2);
logo.sprite.SetOpacity(1);
logo.sprite.SetX (Window.GetWidth() / 2 - logo.image.GetWidth() / 2);
logo.sprite.SetY (Window.GetHeight() / 2 - logo.image.GetHeight() / 2);
logo.sprite.SetOpacity (1);
# Use these to adjust the progress bar timing
global.fake_progress_limit = 0.7; # Target percentage for fake progress (0.0 to 1.0)
global.fake_progress_duration = 15.0; # Duration in seconds to reach limit
# Progress bar animation variables
global.animation_frame = 0;
global.fake_progress = 0.0;
global.real_progress = 0.0;
global.fake_progress_active = 0;
global.fake_progress_start_time = 0.0; # Track when fake progress started
global.fake_progress_active = 0; # 0 / 1 boolean
global.animation_frame = 0;
global.fake_progress_start_time = 0; # Track when fake progress started
global.password_shown = 0; # Track if password dialog has been shown
global.max_progress = 0.0; # Track the maximum progress reached to prevent backwards movement
fun refresh_callback() {
global.animation_frame++;
# Animate fake progress to limit over time with easing
if (global.fake_progress_active == 1) {
# Calculate elapsed time since start
elapsed_time = global.animation_frame / 50.0; # Convert frames to seconds (50 FPS)
# Calculate linear progress ratio (0 to 1) based on time
time_ratio = elapsed_time / global.fake_progress_duration;
if (time_ratio > 1.0) time_ratio = 1.0;
# Apply easing curve: ease-out quadratic
# Formula: 1 - (1 - x)^2
eased_ratio = 1 - ((1 - time_ratio) * (1 - time_ratio));
# Calculate fake progress based on eased ratio
global.fake_progress = eased_ratio * global.fake_progress_limit;
# Update progress bar with fake progress
update_progress_bar(global.fake_progress);
fun refresh_callback ()
{
global.animation_frame++;
# Animate fake progress to limit over time with easing
if (global.fake_progress_active == 1)
{
# Calculate elapsed time since start
elapsed_time = global.animation_frame / 50.0; # Convert frames to seconds (50 FPS)
# Calculate linear progress ratio (0 to 1) based on time
time_ratio = elapsed_time / global.fake_progress_duration;
if (time_ratio > 1.0)
time_ratio = 1.0;
# Apply easing curve: ease-out quadratic
# Formula: 1 - (1 - x)^2
eased_ratio = 1 - ((1 - time_ratio) * (1 - time_ratio));
# Calculate fake progress based on eased ratio
global.fake_progress = eased_ratio * global.fake_progress_limit;
# Update progress bar with fake progress
update_progress_bar(global.fake_progress);
}
}
}
Plymouth.SetRefreshFunction(refresh_callback);
Plymouth.SetRefreshFunction (refresh_callback);
#----------------------------------------- Helper Functions --------------------------------
fun update_progress_bar(progress) {
# Only update if progress is moving forward
if (progress > global.max_progress) {
global.max_progress = progress;
width = Math.Int(progress_bar.original_image.GetWidth() * progress);
if (width < 1) width = 1; # Ensure minimum width of 1 pixel
progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight());
progress_bar.sprite.SetImage(progress_bar.image);
fun update_progress_bar(progress)
{
# Only update if progress is moving forward
if (progress > global.max_progress)
{
global.max_progress = progress;
width = Math.Int(progress_bar.original_image.GetWidth() * progress);
if (width < 1) width = 1; # Ensure minimum width of 1 pixel
progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight());
progress_bar.sprite.SetImage(progress_bar.image);
}
}
}
fun show_progress_bar() {
progress_box.sprite.SetOpacity(1);
progress_bar.sprite.SetOpacity(1);
}
fun hide_progress_bar() {
progress_box.sprite.SetOpacity(0);
progress_bar.sprite.SetOpacity(0);
}
fun show_password_dialog() {
lock.sprite.SetOpacity(1);
entry.sprite.SetOpacity(1);
}
fun hide_password_dialog() {
lock.sprite.SetOpacity(0);
entry.sprite.SetOpacity(0);
for (index = 0; bullet.sprites[index]; index++) {
bullet.sprites[index].SetOpacity(0);
fun show_progress_bar()
{
progress_box.sprite.SetOpacity(1);
progress_bar.sprite.SetOpacity(1);
}
}
fun start_fake_progress() {
global.fake_progress_active = 1;
fun hide_progress_bar()
{
progress_box.sprite.SetOpacity(0);
progress_bar.sprite.SetOpacity(0);
}
# Reset fake progress
global.animation_frame = 0;
global.max_progress = 0.0;
global.fake_progress = 0.0;
global.fake_progress_start_time = 0.0;
}
fun show_password_dialog()
{
lock.sprite.SetOpacity(1);
entry.sprite.SetOpacity(1);
}
fun stop_fake_progress() {
global.fake_progress_active = 0;
}
fun hide_password_dialog()
{
lock.sprite.SetOpacity(0);
entry.sprite.SetOpacity(0);
for (index = 0; bullet.sprites[index]; index++)
bullet.sprites[index].SetOpacity(0);
}
fun start_fake_progress()
{
# Don't reset if we already have progress
if (global.max_progress == 0.0)
{
global.fake_progress = 0.0;
global.real_progress = 0.0;
update_progress_bar(0.0);
}
global.fake_progress_active = 1;
global.animation_frame = 0;
}
fun stop_fake_progress()
{
global.fake_progress_active = 0;
}
#----------------------------------------- Dialogue --------------------------------
@@ -108,7 +119,7 @@ entry.image = Image("entry.png");
bullet.image = Image("bullet.png");
entry.sprite = Sprite(entry.image);
entry.x = Window.GetWidth() / 2 - entry.image.GetWidth() / 2;
entry.x = Window.GetWidth()/2 - entry.image.GetWidth() / 2;
entry.y = logo.sprite.GetY() + logo.image.GetHeight() + 40;
entry.sprite.SetPosition(entry.x, entry.y, 10001);
entry.sprite.SetOpacity(0);
@@ -122,60 +133,65 @@ lock_width = 84 * lock_scale;
scaled_lock = lock.image.Scale(lock_width, lock_height);
lock.sprite = Sprite(scaled_lock);
lock.x = entry.x - lock_width - 15;
lock.y = entry.y + entry.image.GetHeight() / 2 - lock_height / 2;
lock.y = entry.y + entry.image.GetHeight()/2 - lock_height/2;
lock.sprite.SetPosition(lock.x, lock.y, 10001);
lock.sprite.SetOpacity(0);
# Bullet array
bullet.sprites = [];
fun display_normal_callback() {
hide_password_dialog();
# Get current mode
mode = Plymouth.GetMode();
# Only show progress bar for boot and resume modes
if ((mode == "boot" || mode == "resume") && global.password_shown == 1) {
show_progress_bar();
start_fake_progress();
}
}
fun display_password_callback(prompt, bullets) {
global.password_shown = 1; # Mark that password dialog has been shown
# Stop fake progress when password dialog appears
stop_fake_progress();
hide_progress_bar();
show_password_dialog();
# Clear all bullets first
for (index = 0; bullet.sprites[index]; index++) {
bullet.sprites[index].SetOpacity(0);
fun display_normal_callback ()
{
hide_password_dialog();
# Get current mode
mode = Plymouth.GetMode();
# Only show progress bar for boot and resume modes
if ((mode == "boot" || mode == "resume") && global.password_shown == 1)
{
show_progress_bar();
start_fake_progress();
}
}
# Create and show bullets for current password (max 21)
max_bullets = 21;
bullets_to_show = bullets;
if (bullets_to_show > max_bullets) {
bullets_to_show = max_bullets;
fun display_password_callback (prompt, bullets)
{
global.password_shown = 1; # Mark that password dialog has been shown
# Reset progress when password dialog appears
stop_fake_progress();
hide_progress_bar();
global.max_progress = 0.0;
global.fake_progress = 0.0;
global.real_progress = 0.0;
show_password_dialog();
# Clear all bullets first
for (index = 0; bullet.sprites[index]; index++)
bullet.sprites[index].SetOpacity(0);
# Create and show bullets for current password (max 21)
max_bullets = 21;
bullets_to_show = bullets;
if (bullets_to_show > max_bullets)
bullets_to_show = max_bullets;
for (index = 0; index < bullets_to_show; index++)
{
if (!bullet.sprites[index])
{
# Scale bullet image to 7x7 pixels
scaled_bullet = bullet.image.Scale(7, 7);
bullet.sprites[index] = Sprite(scaled_bullet);
bullet.x = entry.x + 20 + index * (7 + 5);
bullet.y = entry.y + entry.image.GetHeight() / 2 - 3.5;
bullet.sprites[index].SetPosition(bullet.x, bullet.y, 10002);
}
bullet.sprites[index].SetOpacity(1);
}
}
for (index = 0; index < bullets_to_show; index++) {
if (!bullet.sprites[index]) {
# Scale bullet image to 7x7 pixels
scaled_bullet = bullet.image.Scale(7, 7);
bullet.sprites[index] = Sprite(scaled_bullet);
bullet.x = entry.x + 20 + index * (7 + 5);
bullet.y = entry.y + entry.image.GetHeight() / 2 - 3.5;
bullet.sprites[index].SetPosition(bullet.x, bullet.y, 10002);
}
bullet.sprites[index].SetOpacity(1);
}
}
Plymouth.SetDisplayNormalFunction(display_normal_callback);
Plymouth.SetDisplayPasswordFunction(display_password_callback);
@@ -198,38 +214,44 @@ progress_bar.y = progress_box.y + (progress_box.image.GetHeight() - progress_bar
progress_bar.sprite.SetPosition(progress_bar.x, progress_bar.y, 1);
progress_bar.sprite.SetOpacity(0);
fun progress_callback(duration, progress) {
# Track when fake progress starts
# Needed because duration and progress freeze during drive decryption
if (global.fake_progress_start_time == 0.0) {
global.fake_progress_start_time = duration;
fun progress_callback (duration, progress)
{
global.real_progress = progress;
# If real progress is above limit, stop fake progress and use real progress
if (progress > global.fake_progress_limit)
{
stop_fake_progress();
update_progress_bar(progress);
}
}
global.real_progress = progress;
# Use real progress once its unfrozen and exceeds fake progress
if (duration > global.fake_progress_start_time && progress > global.fake_progress) {
stop_fake_progress();
update_progress_bar(progress);
}
}
Plymouth.SetBootProgressFunction(progress_callback);
#----------------------------------------- Quit --------------------------------
fun quit_callback ()
{
logo.sprite.SetOpacity (1);
}
Plymouth.SetQuitFunction(quit_callback);
#----------------------------------------- Message --------------------------------
message_sprite = Sprite();
message_sprite.SetPosition(10, 10, 10000);
fun display_message_callback(text) {
message = Image.Text(text, 1, 1, 1);
message_sprite.SetImage(message);
message_sprite.SetOpacity(1);
fun display_message_callback (text)
{
my_image = Image.Text(text, 1, 1, 1);
message_sprite.SetImage(my_image);
}
fun hide_message_callback(text) {
fun hide_message_callback (text)
{
message_sprite.SetOpacity(0);
}
Plymouth.SetDisplayMessageFunction(display_message_callback);
Plymouth.SetHideMessageFunction(hide_message_callback);
Plymouth.SetDisplayMessageFunction (display_message_callback);
Plymouth.SetHideMessageFunction (hide_message_callback);
-137
View File
@@ -1,137 +0,0 @@
# Gum Style (generic) Variables
env = FOREGROUND,#{{ foreground }}
env = BACKGROUND,#{{ background }}
env = BORDER_FOREGROUND,#{{ accent }}
env = BORDER_BACKGROUND,#{{ background }}
# Gum Confirm Style Variables
env = GUM_CONFIRM_PROMPT_FOREGROUND,#{{ accent }}
env = GUM_CONFIRM_PROMPT_BACKGROUND,#{{ background }}
env = GUM_CONFIRM_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_CONFIRM_SELECTED_BACKGROUND,#{{ selection_background }}
env = GUM_CONFIRM_UNSELECTED_FOREGROUND,#{{ foreground }}
env = GUM_CONFIRM_UNSELECTED_BACKGROUND,#{{ background }}
# Gum Input Style Variables
env = GUM_INPUT_PROMPT_FOREGROUND,#{{ accent }}
env = GUM_INPUT_PROMPT_BACKGROUND,#{{ background }}
env = GUM_INPUT_PLACEHOLDER_FOREGROUND,#{{ color8 }}
env = GUM_INPUT_PLACEHOLDER_BACKGROUND,#{{ background }}
env = GUM_INPUT_CURSOR_FOREGROUND,#{{ cursor }}
env = GUM_INPUT_CURSOR_BACKGROUND,#{{ background }}
env = GUM_INPUT_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_INPUT_HEADER_BACKGROUND,#{{ background }}
# Gum Choose Style Variables
env = GUM_CHOOSE_CURSOR_FOREGROUND,#{{ cursor }}
env = GUM_CHOOSE_CURSOR_BACKGROUND,#{{ background }}
env = GUM_CHOOSE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_CHOOSE_HEADER_BACKGROUND,#{{ background }}
env = GUM_CHOOSE_ITEM_FOREGROUND,#{{ foreground }}
env = GUM_CHOOSE_ITEM_BACKGROUND,#{{ background }}
env = GUM_CHOOSE_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_CHOOSE_SELECTED_BACKGROUND,#{{ selection_background }}
# Gum Filter Style Variables
env = GUM_FILTER_PROMPT_FOREGROUND,#{{ accent }}
env = GUM_FILTER_PROMPT_BACKGROUND,#{{ background }}
env = GUM_FILTER_TEXT_FOREGROUND,#{{ foreground }}
env = GUM_FILTER_TEXT_BACKGROUND,#{{ background }}
env = GUM_FILTER_MATCH_FOREGROUND,#{{ accent }}
env = GUM_FILTER_CURSOR_TEXT_FOREGROUND,#{{ cursor }}
env = GUM_FILTER_CURSOR_TEXT_BACKGROUND,#{{ background }}
env = GUM_FILTER_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_FILTER_SELECTED_BACKGROUND,#{{ selection_background }}
env = GUM_FILTER_INDICATOR_FOREGROUND,#{{ accent }}
env = GUM_FILTER_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_FILTER_MATCH_BACKGROUND,#{{ background }}
env = GUM_FILTER_HEADER_BACKGROUND,#{{ background }}
env = GUM_FILTER_PLACEHOLDER_FOREGROUND,#{{ color8 }}
env = GUM_FILTER_PLACEHOLDER_BACKGROUND,#{{ background }}
env = GUM_FILTER_INDICATOR_BACKGROUND,#{{ background }}
env = GUM_FILTER_SELECTED_PREFIX_FOREGROUND,#{{ selection_foreground }}
env = GUM_FILTER_SELECTED_PREFIX_BACKGROUND,#{{ selection_background }}
env = GUM_FILTER_UNSELECTED_PREFIX_FOREGROUND,#{{ color8 }}
env = GUM_FILTER_UNSELECTED_PREFIX_BACKGROUND,#{{ background }}
# Gum Table Style Variables
env = GUM_TABLE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_TABLE_HEADER_BACKGROUND,#{{ background }}
env = GUM_TABLE_CELL_FOREGROUND,#{{ foreground }}
env = GUM_TABLE_CELL_BACKGROUND,#{{ background }}
env = GUM_TABLE_BORDER_FOREGROUND,#{{ color8 }}
env = GUM_TABLE_BORDER_BACKGROUND,#{{ background }}
env = GUM_TABLE_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_TABLE_SELECTED_BACKGROUND,#{{ selection_background }}
# Gum Spin Style Variables
env = GUM_SPIN_SPINNER_FOREGROUND,#{{ accent }}
env = GUM_SPIN_SPINNER_BACKGROUND,#{{ background }}
env = GUM_SPIN_TITLE_FOREGROUND,#{{ foreground }}
env = GUM_SPIN_TITLE_BACKGROUND,#{{ background }}
# Gum File Style Variables
env = GUM_FILE_CURSOR_FOREGROUND,#{{ cursor }}
env = GUM_FILE_CURSOR_BACKGROUND,#{{ background }}
env = GUM_FILE_SYMLINK_FOREGROUND,#{{ foreground }}
env = GUM_FILE_SYMLINK_BACKGROUND,#{{ background }}
env = GUM_FILE_DIRECTORY_FOREGROUND,#{{ foreground }}
env = GUM_FILE_DIRECTORY_BACKGROUND,#{{ background }}
env = GUM_FILE_FILE_FOREGROUND,#{{ foreground }}
env = GUM_FILE_FILE_BACKGROUND,#{{ background }}
env = GUM_FILE_PERMISSIONS_FOREGROUND,#{{ color8 }}
env = GUM_FILE_PERMISSIONS_BACKGROUND,#{{ background }}
env = GUM_FILE_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_FILE_SELECTED_BACKGROUND,#{{ selection_background }}
env = GUM_FILE_FILE_SIZE_FOREGROUND,#{{ color8 }}
env = GUM_FILE_FILE_SIZE_BACKGROUND,#{{ background }}
env = GUM_FILE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_FILE_HEADER_BACKGROUND,#{{ background }}
# Gum Pager Style Variables
env = GUM_PAGER_FOREGROUND,#{{ foreground }}
env = GUM_PAGER_BACKGROUND,#{{ background }}
env = GUM_PAGER_LINE_NUMBER_FOREGROUND,#{{ color8 }}
env = GUM_PAGER_LINE_NUMBER_BACKGROUND,#{{ background }}
env = GUM_PAGER_MATCH_FOREGROUND,#{{ accent }}
env = GUM_PAGER_MATCH_BACKGROUND,#{{ background }}
env = GUM_PAGER_MATCH_HIGH_FOREGROUND,#{{ accent }}
env = GUM_PAGER_MATCH_HIGH_BACKGROUND,#{{ background }}
env = GUM_PAGER_HELP_FOREGROUND,#{{ color8 }}
env = GUM_PAGER_HELP_BACKGROUND,#{{ background }}
# Gum Write Style Variables
env = GUM_WRITE_BASE_FOREGROUND,#{{ foreground }}
env = GUM_WRITE_BASE_BACKGROUND,#{{ background }}
env = GUM_WRITE_CURSOR_LINE_NUMBER_FOREGROUND,#{{ color8 }}
env = GUM_WRITE_CURSOR_LINE_NUMBER_BACKGROUND,#{{ background }}
env = GUM_WRITE_CURSOR_LINE_FOREGROUND,#{{ foreground }}
env = GUM_WRITE_CURSOR_LINE_BACKGROUND,#{{ selection_background }}
env = GUM_WRITE_CURSOR_FOREGROUND,#{{ cursor }}
env = GUM_WRITE_CURSOR_BACKGROUND,#{{ background }}
env = GUM_WRITE_END_OF_BUFFER_FOREGROUND,#{{ color8 }}
env = GUM_WRITE_END_OF_BUFFER_BACKGROUND,#{{ background }}
env = GUM_WRITE_LINE_NUMBER_FOREGROUND,#{{ color8 }}
env = GUM_WRITE_LINE_NUMBER_BACKGROUND,#{{ background }}
env = GUM_WRITE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_WRITE_HEADER_BACKGROUND,#{{ background }}
env = GUM_WRITE_PLACEHOLDER_FOREGROUND,#{{ color8 }}
env = GUM_WRITE_PLACEHOLDER_BACKGROUND,#{{ background }}
env = GUM_WRITE_PROMPT_FOREGROUND,#{{ foreground }}
env = GUM_WRITE_PROMPT_BACKGROUND,#{{ background }}
# Gum Log Style Variables
env = GUM_LOG_LEVEL_FOREGROUND,#{{ accent }}
env = GUM_LOG_LEVEL_BACKGROUND,#{{ background }}
env = GUM_LOG_TIME_FOREGROUND,#{{ color8 }}
env = GUM_LOG_TIME_BACKGROUND,#{{ background }}
env = GUM_LOG_PREFIX_FOREGROUND,#{{ foreground }}
env = GUM_LOG_PREFIX_BACKGROUND,#{{ background }}
env = GUM_LOG_MESSAGE_FOREGROUND,#{{ foreground }}
env = GUM_LOG_MESSAGE_BACKGROUND,#{{ background }}
env = GUM_LOG_KEY_FOREGROUND,#{{ foreground }}
env = GUM_LOG_KEY_BACKGROUND,#{{ background }}
env = GUM_LOG_VALUE_FOREGROUND,#{{ foreground }}
env = GUM_LOG_VALUE_BACKGROUND,#{{ background }}
env = GUM_LOG_SEPARATOR_FOREGROUND,#{{ color8 }}
env = GUM_LOG_SEPARATOR_BACKGROUND,#{{ background }}
-132
View File
@@ -1,132 +0,0 @@
# Syntax
"keyword" = "color5"
"keyword.control" = { fg = "color5", modifiers = ["italic"] }
"function" = "color4"
"function.builtin" = "color4"
"function.macro" = "color5"
"type" = "color3"
"type.builtin" = "color5"
"type.enum.variant" = "color6"
"constructor" = "color4"
"constant" = "color3"
"constant.builtin" = "color3"
"constant.numeric" = "color3"
"constant.character" = "color6"
"constant.character.escape" = "color5"
"string" = "color2"
"string.regexp" = "color5"
"string.special" = "color4"
"comment" = { fg = "color8", modifiers = ["italic"] }
"variable" = "foreground"
"variable.parameter" = { fg = "color5", modifiers = ["italic"] }
"variable.builtin" = "color1"
"variable.other.member" = "color4"
"label" = "color4"
"punctuation" = "color8"
"punctuation.special" = "color6"
"operator" = "color6"
"tag" = "color4"
"namespace" = { fg = "color3", modifiers = ["italic"] }
"special" = "color5"
"attribute" = "color3"
# Markup
"markup.heading.1" = "color1"
"markup.heading.2" = "color3"
"markup.heading.3" = "color3"
"markup.heading.4" = "color2"
"markup.heading.5" = "color4"
"markup.heading.6" = "color5"
"markup.list" = "color6"
"markup.list.unchecked" = "color8"
"markup.list.checked" = "color2"
"markup.bold" = { fg = "color1", modifiers = ["bold"] }
"markup.italic" = { fg = "color1", modifiers = ["italic"] }
"markup.strikethrough" = { modifiers = ["crossed_out"] }
"markup.link.url" = { fg = "color4", modifiers = ["italic", "underlined"] }
"markup.link.text" = "color5"
"markup.link.label" = "color4"
"markup.raw" = "color2"
"markup.quote" = "color5"
# Diff
"diff.plus" = "color2"
"diff.minus" = "color1"
"diff.delta" = "color4"
# Leave the editor background transparent so the terminal background shows through
"ui.background" = { }
"ui.linenr" = { fg = "color8" }
"ui.linenr.selected" = { fg = "foreground" }
# Statusline uses an inverted band (background-color text on foreground-color
# background) to guarantee contrast across both light and dark Omarchy themes.
"ui.statusline" = { fg = "background", bg = "foreground" }
"ui.statusline.inactive" = { fg = "background", bg = "color8" }
"ui.statusline.normal" = { fg = "background", bg = "color4", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "background", bg = "color2", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "background", bg = "color5", modifiers = ["bold"] }
"ui.popup" = { fg = "foreground", bg = "background" }
"ui.window" = { fg = "color8" }
"ui.help" = { fg = "foreground", bg = "background" }
"ui.bufferline" = { fg = "color8", bg = "background" }
"ui.bufferline.active" = { fg = "foreground", bg = "background", underline = { color = "color5", style = "line" } }
"ui.text" = "foreground"
"ui.text.focus" = { fg = "foreground", bg = "color0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "color8" }
"ui.text.directory" = { fg = "color4" }
"ui.virtual" = "color8"
"ui.virtual.ruler" = { bg = "color0" }
"ui.virtual.indent-guide" = "color8"
"ui.virtual.inlay-hint" = { fg = "color8" }
"ui.virtual.jump-label" = { fg = "color1", modifiers = ["bold"] }
"ui.virtual.whitespace" = "color8"
"ui.selection" = { bg = "color0" }
"ui.cursor" = { fg = "background", bg = "cursor" }
"ui.cursor.primary" = { fg = "background", bg = "cursor" }
"ui.cursor.match" = { fg = "color3", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "background", bg = "cursor" }
"ui.cursor.primary.insert" = { fg = "background", bg = "color2" }
"ui.cursor.primary.select" = { fg = "background", bg = "color5" }
"ui.cursorline.primary" = { bg = "color0" }
"ui.highlight" = { bg = "color0", modifiers = ["bold"] }
"ui.menu" = { fg = "foreground", bg = "background" }
"ui.menu.selected" = { fg = "background", bg = "foreground", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "color1", style = "curl" } }
"diagnostic.warning" = { underline = { color = "color3", style = "curl" } }
"diagnostic.info" = { underline = { color = "color4", style = "curl" } }
"diagnostic.hint" = { underline = { color = "color6", style = "curl" } }
"diagnostic.unnecessary" = { modifiers = ["dim"] }
"diagnostic.deprecated" = { modifiers = ["crossed_out"] }
error = "color1"
warning = "color3"
info = "color4"
hint = "color6"
[palette]
background = "{{ background }}"
foreground = "{{ foreground }}"
cursor = "{{ cursor }}"
selection_background = "{{ selection_background }}"
selection_foreground = "{{ selection_foreground }}"
color0 = "{{ color0 }}"
color1 = "{{ color1 }}"
color2 = "{{ color2 }}"
color3 = "{{ color3 }}"
color4 = "{{ color4 }}"
color5 = "{{ color5 }}"
color6 = "{{ color6 }}"
color7 = "{{ color7 }}"
color8 = "{{ color8 }}"
-1
View File
@@ -8,7 +8,6 @@ run_logged $OMARCHY_INSTALL/config/increase-sudo-tries.sh
run_logged $OMARCHY_INSTALL/config/increase-lockout-limit.sh
run_logged $OMARCHY_INSTALL/config/ssh-flakiness.sh
run_logged $OMARCHY_INSTALL/config/increase-file-watchers.sh
run_logged $OMARCHY_INSTALL/config/increase-fd-limit.sh
run_logged $OMARCHY_INSTALL/config/detect-keyboard-layout.sh
run_logged $OMARCHY_INSTALL/config/xcompose.sh
run_logged $OMARCHY_INSTALL/config/mise-work.sh
+13 -3
View File
@@ -1,11 +1,15 @@
if lspci | grep -qi 'nvidia'; then
NVIDIA="$(lspci | grep -i 'nvidia')"
if [[ -n $NVIDIA ]]; then
# Check which kernel is installed and set appropriate headers package
KERNEL_HEADERS="$(pacman -Qqs '^linux(-zen|-lts|-hardened)?$' | head -1)-headers"
if omarchy-hw-nvidia-gsp; then
# Turing+ (GTX 16xx, RTX 20xx-50xx, RTX Pro, Quadro RTX, datacenter A/H/T/L series) have GSP firmware
if echo "$NVIDIA" | grep -qE "GTX 16[0-9]{2}|RTX [2-5][0-9]{3}|RTX PRO [0-9]{4}|Quadro RTX|RTX A[0-9]{4}|A[1-9][0-9]{2}|H[1-9][0-9]{2}|T4|L[0-9]+"; then
PACKAGES=(nvidia-open-dkms nvidia-utils lib32-nvidia-utils libva-nvidia-driver)
GPU_ARCH="turing_plus"
elif omarchy-hw-nvidia-without-gsp; then
# Maxwell (GTX 9xx), Pascal (GT/GTX 10xx, Quadro P, MX series), Volta (Titan V, Tesla V100, Quadro GV100) lack GSP
elif echo "$NVIDIA" | grep -qE "GTX (9[0-9]{2}|10[0-9]{2})|GT 10[0-9]{2}|Quadro [PM][0-9]{3,4}|Quadro GV100|MX *[0-9]+|Titan (X|Xp|V)|Tesla V100"; then
PACKAGES=(nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils)
GPU_ARCH="maxwell_pascal_volta"
fi
@@ -20,6 +24,12 @@ if lspci | grep -qi 'nvidia'; then
# Configure modprobe for early KMS
sudo tee /etc/modprobe.d/nvidia.conf <<EOF >/dev/null
options nvidia_drm modeset=1
EOF
# Ensure NVreg_UseKernelSuspendNotifiers is used for hibernation
sudo tee -a /etc/modprobe.d/nvidia.conf <<EOF >/dev/null
options nvidia NVreg_PreserveVideoMemoryAllocations=0
options nvidia NVreg_UseKernelSuspendNotifiers=1
EOF
# Configure mkinitcpio for early loading
-11
View File
@@ -1,11 +0,0 @@
# Raise soft file descriptor limit from systemd's default of 1024 to 65536
# so dev tools (VS Code, Docker, dev servers, databases) get the headroom they need
sudo mkdir -p /etc/systemd/system.conf.d /etc/systemd/user.conf.d
sudo tee /etc/systemd/system.conf.d/99-omarchy-nofile.conf >/dev/null <<'EOF'
[Manager]
DefaultLimitNOFILESoft=65536
EOF
sudo cp /etc/systemd/system.conf.d/99-omarchy-nofile.conf \
/etc/systemd/user.conf.d/99-omarchy-nofile.conf
+2 -4
View File
@@ -1,11 +1,9 @@
if omarchy-battery-present; then
cat <<EOF | sudo tee "/etc/udev/rules.d/99-power-profile.rules"
SUBSYSTEM=="power_supply", ATTR{type}=="Mains", RUN+="/usr/bin/systemd-run --no-block --collect --unit=omarchy-power-profile --property=After=power-profiles-daemon.service $HOME/.local/share/omarchy/bin/omarchy-powerprofiles-set"
SUBSYSTEM=="power_supply", ATTR{type}=="USB", RUN+="/usr/bin/systemd-run --no-block --collect --unit=omarchy-power-profile --property=After=power-profiles-daemon.service $HOME/.local/share/omarchy/bin/omarchy-powerprofiles-set"
SUBSYSTEM=="power_supply", ATTR{type}=="Mains", ATTR{online}=="0", RUN+="/usr/bin/systemd-run --no-block --collect --unit=omarchy-power-profile-battery --property=After=power-profiles-daemon.service $HOME/.local/share/omarchy/bin/omarchy-powerprofiles-set battery"
SUBSYSTEM=="power_supply", ATTR{type}=="Mains", ATTR{online}=="1", RUN+="/usr/bin/systemd-run --no-block --collect --unit=omarchy-power-profile-ac --property=After=power-profiles-daemon.service $HOME/.local/share/omarchy/bin/omarchy-powerprofiles-set ac"
EOF
sudo systemctl enable power-profiles-daemon
sudo udevadm control --reload 2>/dev/null
sudo udevadm trigger --subsystem-match=power_supply 2>/dev/null
fi
+1 -1
View File
@@ -7,6 +7,6 @@ xdg-user-dirs-update --set DESKTOP "$HOME"
rmdir ~/Templates ~/Public ~/Desktop 2>/dev/null || true
touch ~/.config/gtk-3.0/bookmarks
for dir in Downloads Projects Pictures Videos; do
for dir in Downloads Pictures Videos; do
printf 'file://%s/%s %s\n' "$HOME" "$dir" "$dir" >>~/.config/gtk-3.0/bookmarks
done
-1
View File
@@ -1,5 +1,4 @@
run_logged $OMARCHY_INSTALL/login/plymouth.sh
run_logged $OMARCHY_INSTALL/login/default-keyring.sh
run_logged $OMARCHY_INSTALL/login/sddm.sh
run_logged $OMARCHY_INSTALL/login/hibernation.sh
run_logged $OMARCHY_INSTALL/login/limine-snapper.sh
-6
View File
@@ -1,6 +0,0 @@
# Run before limine-snapper.sh so the resume hook + cmdline drop-ins are in
# place when `pacman -S limine-mkinitcpio-hook` triggers its single full UKI
# rebuild. The --no-rebuild flag tells the script to skip its own rebuild —
# limine-snapper's pacman install will produce a UKI that already includes
# hibernation.
omarchy-hibernation-setup --force --no-rebuild
+3 -9
View File
@@ -80,17 +80,11 @@ fi
echo "mkinitcpio hooks re-enabled"
# Installing limine-mkinitcpio-hook above already triggered a full UKI rebuild
# (via 80-limine-efi-deploy.hook + 90-mkinitcpio-install.hook), which writes the
# boot entries into /boot/limine.conf. Only fall back to limine-update if those
# hooks didn't run for some reason — running it unconditionally rebuilds every
# UKI a second time.
if ! grep -q "^/+" /boot/limine.conf; then
sudo limine-update
fi
sudo limine-update
# Verify that limine-update actually added boot entries
if ! grep -q "^/+" /boot/limine.conf; then
echo "Error: failed to add boot entries to /boot/limine.conf" >&2
echo "Error: limine-update failed to add boot entries to /boot/limine.conf" >&2
exit 1
fi
+2 -3
View File
@@ -28,6 +28,7 @@ docker-compose
dosfstools
dotnet-runtime-9.0
dust
elephant-all
evince
exfatprogs
expac
@@ -93,7 +94,6 @@ nvim
obs-studio
obsidian
omarchy-nvim
omarchy-walker
pamixer
pinta
playerctl
@@ -120,8 +120,6 @@ sushi
swaybg
swayosd
system-config-printer
tesseract
tesseract-data-eng
tldr
tree-sitter-cli
tmux
@@ -135,6 +133,7 @@ ufw-docker
unzip
usage
uwsm
walker
waybar
whois
wireless-regdb
+1
View File
@@ -1,3 +1,4 @@
run_logged $OMARCHY_INSTALL/post-install/hibernation.sh
run_logged $OMARCHY_INSTALL/post-install/pacman.sh
source $OMARCHY_INSTALL/post-install/allow-reboot.sh
source $OMARCHY_INSTALL/post-install/finished.sh
+2
View File
@@ -0,0 +1,2 @@
# Enable hibernation
omarchy-hibernation-setup --force
-3
View File
@@ -1,3 +0,0 @@
echo "Install tesseract OCR and language data files"
omarchy-pkg-add tesseract tesseract-data-eng
-2
View File
@@ -1,2 +0,0 @@
echo "Update Plymouth theme for a smoother progress bar animation"
omarchy-refresh-plymouth
+9
View File
@@ -0,0 +1,9 @@
echo "Ensure NVreg_UseKernelSuspendNotifiers is used for hibernation"
if [[ -f /etc/modprobe.d/nvidia.conf ]] && ! grep -q "NVreg_PreserveVideoMemoryAllocations" /etc/modprobe.d/nvidia.conf; then
sudo tee -a /etc/modprobe.d/nvidia.conf <<EOF >/dev/null
options nvidia NVreg_PreserveVideoMemoryAllocations=0
options nvidia NVreg_UseKernelSuspendNotifiers=1
EOF
sudo limine-update
fi
-3
View File
@@ -1,3 +0,0 @@
echo "Fix power profile auto-switching on USB-C only machines and ensure power-profiles-daemon is enabled"
source "$OMARCHY_PATH/install/config/powerprofilesctl-rules.sh"
+36
View File
@@ -0,0 +1,36 @@
echo "Replace deprecated sainnhe.everforest VSCode extension with reesew.everforest-theme"
# Background:
# The original "sainnhe.everforest" extension is no longer maintained — its
# upstream repo (https://github.com/sainnhe/everforest-vscode) was archived
# by the author, so it receives no updates or fixes.
# "reesew.everforest-theme" is a maintained fork of that same extension,
# published from https://github.com/reese/everforest-vscode, and is the
# replacement we now ship in themes/everforest/vscode.json.
# For each VS Code variant, uninstall the old extension and re-apply theme if the
# current Omarchy theme is everforest (which will install the new extension automatically).
uninstall_old_extension() {
local editor_cmd="$1"
omarchy-cmd-present "$editor_cmd" || return 0
if "$editor_cmd" --list-extensions | grep -Fxq "sainnhe.everforest"; then
"$editor_cmd" --uninstall-extension sainnhe.everforest >/dev/null
fi
}
uninstall_old_extension "code"
uninstall_old_extension "code-insiders"
uninstall_old_extension "codium"
uninstall_old_extension "cursor"
# If the user is currently on the everforest theme, refresh it so the updated
# vscode.json (with reesew.everforest-theme) is copied into ~/.config/omarchy/current/theme,
# then omarchy-theme-set-vscode (called by the refresh) installs the new extension.
THEME_NAME_PATH="$HOME/.config/omarchy/current/theme.name"
if [[ -f $THEME_NAME_PATH ]] && [[ "$(cat "$THEME_NAME_PATH")" == "everforest" ]]; then
omarchy-theme-refresh
fi
+7
View File
@@ -0,0 +1,7 @@
echo "Replace coterie of individual Elephant packages with the single elephant-all package"
if omarchy-pkg-present omarchy-walker; then
omarchy-pkg-drop omarchy-walker
omarchy-pkg-add walker elephant-all
omarchy-refresh-walker
fi
+2 -7
View File
@@ -1,10 +1,5 @@
echo "Update interface_ colors for limine 12 (palette index -> RRGGBB)"
echo "Update interface_branding_color for limine 12 (palette index -> RRGGBB)"
if [[ -f /boot/limine.conf ]]; then
sudo sed -i -E 's/^interface_branding_colou?r: 2$/interface_branding_color: 9ece6a/' /boot/limine.conf
sudo sed -i 's/^interface_branding_colour: /interface_branding_color: /' /boot/limine.conf
sudo sed -i -E '/^interface_help_colou?r(_bright)?:/d' /boot/limine.conf
sudo sed -i '/^interface_branding_color:/a interface_help_color_bright: 9ece6a' /boot/limine.conf
sudo sed -i '/^interface_branding_color:/a interface_help_color: 9ece6a' /boot/limine.conf
sudo sed -i 's/^interface_branding_color: 2$/interface_branding_color: 9ece6a/' /boot/limine.conf
fi
-20
View File
@@ -1,20 +0,0 @@
echo "Enable VAAPI hardware video decoding/encoding in Chromium and Brave for h265 and other codecs"
add_flag() {
local file=$1
local flag=$2
[[ -f $file ]] || return
grep -q "$flag" "$file" && return
if grep -q "^--enable-features=" "$file"; then
sed -i "s/^--enable-features=\(.*\)$/--enable-features=\1,$flag/" "$file"
else
echo "--enable-features=$flag" >>"$file"
fi
}
for conf in chromium-flags.conf brave-flags.conf; do
add_flag "$HOME/.config/$conf" "VaapiVideoDecodeLinuxGL"
add_flag "$HOME/.config/$conf" "VaapiVideoEncoder"
done
-3
View File
@@ -1,3 +0,0 @@
echo "Raise soft file descriptor limit so dev tools have headroom (takes effect after reboot)"
bash $OMARCHY_PATH/install/config/increase-fd-limit.sh
-3
View File
@@ -1,3 +0,0 @@
echo "Install ghui (GitHub TUI) via npx wrapper"
omarchy-npx-install @kitlangton/ghui ghui
Regular → Executable
View File
+1 -1
View File
@@ -5,7 +5,7 @@ background = "#060B1E"
selection_foreground = "#060B1E"
selection_background = "#ffcead"
color0 = "#3C486D"
color0 = "#060B1E"
color1 = "#ED5B5A"
color2 = "#92a593"
color3 = "#E9BB4F"
+3 -3
View File
@@ -5,14 +5,14 @@ background = "#FFFCF0"
selection_foreground = "#100F0F"
selection_background = "#CECDC3"
color0 = "#DAD8CE"
color0 = "#100F0F"
color1 = "#D14D41"
color2 = "#879A39"
color3 = "#D0A215"
color4 = "#205EA6"
color5 = "#CE5D97"
color6 = "#3AA99F"
color7 = "#B7B5AC"
color7 = "#FFFCF0"
color8 = "#100F0F"
color9 = "#D14D41"
color10 = "#879A39"
@@ -20,4 +20,4 @@ color11 = "#D0A215"
color12 = "#4385BE"
color13 = "#CE5D97"
color14 = "#3AA99F"
color15 = "#CECDC3"
color15 = "#FFFCF0"
+1 -1
View File
@@ -5,7 +5,7 @@ background = "#0B0C16"
selection_foreground = "#0B0C16"
selection_background = "#ddf7ff"
color0 = "#3E4058"
color0 = "#0B0C16"
color1 = "#50f872"
color2 = "#4fe88f"
color3 = "#50f7d4"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

+2 -2
View File
@@ -11,7 +11,7 @@ selection_foreground = "#000000"
selection_background = "#ffffff"
# Normal colors (ANSI 0-7)
color0 = "#404040"
color0 = "#000000"
color1 = "#a4a4a4"
color2 = "#b6b6b6"
color3 = "#cecece"
@@ -21,7 +21,7 @@ color6 = "#b0b0b0"
color7 = "#ececec"
# Bright colors (ANSI 8-15)
color8 = "#5c5c5c"
color8 = "#fdfdfd"
color9 = "#a4a4a4"
color10 = "#b6b6b6"
color11 = "#cecece"
+1 -1
View File
@@ -11,7 +11,7 @@ selection_foreground = "#ffffff"
selection_background = "#1a1a1a"
# Normal colors (ANSI 0-7)
color0 = "#c0c0c0"
color0 = "#ffffff"
color1 = "#2a2a2a"
color2 = "#3a3a3a"
color3 = "#4a4a4a"