Compare commits

..
42 Commits
Author SHA1 Message Date
David Heinemeier HanssonandGitHub bc9777c0b8 Merge pull request #5388 from basecamp/rc
Omarchy 3.6.0
2026-04-23 15:12:57 +02:00
David Heinemeier Hansson add6a3c506 Merge branch 'dev' into rc 2026-04-23 14:39:27 +02:00
David Heinemeier Hansson 7dc086bb47 Merge branch 'dev' into rc 2026-04-23 13:03:33 +02:00
David Heinemeier Hansson 8346eea614 Merge branch 'dev' into rc 2026-04-23 12:48:31 +02:00
David Heinemeier Hansson 1abc92aadd Merge branch 'dev' into rc 2026-04-23 11:57:26 +02:00
141edc262f Quote OMARCHY_PATH in migration source command
Agent-Logs-Url: https://github.com/basecamp/omarchy/sessions/36fb96d5-70fd-4365-9550-e7ff5f8735d1

Co-authored-by: dhh <2741+dhh@users.noreply.github.com>
2026-04-22 20:31:31 +00:00
David Heinemeier Hansson 12494bcd8f Merge branch 'dev' into rc 2026-04-22 22:18:40 +02:00
David Heinemeier Hansson 577cd1e8ab Merge branch 'dev' into rc 2026-04-22 21:28:28 +02:00
David Heinemeier Hansson 2f5be43407 Merge branch 'dev' into rc 2026-04-22 20:11:29 +02:00
David Heinemeier Hansson 77c9bca045 Merge branch 'dev' into rc 2026-04-22 16:33:50 +02:00
David Heinemeier Hansson 2537edb1e6 Merge branch 'dev' into rc 2026-04-22 16:31:09 +02:00
David Heinemeier HanssonandGitHub 236a34b23c Merge pull request #5280 from basecamp/rc
Omarchy 3.5.1
2026-04-16 16:12:03 +02:00
David Heinemeier Hansson 2c4b4488c0 Merge branch 'dev' into rc 2026-04-16 16:03:49 +02:00
David Heinemeier Hansson 8f7d64ba78 Merge branch 'dev' into rc 2026-04-16 15:34:24 +02:00
David Heinemeier Hansson 9ece3318ec Merge branch 'dev' into rc 2026-04-16 15:24:11 +02:00
David Heinemeier Hansson d51a3f6b37 Merge branch 'dev' into rc 2026-04-15 18:16:27 +02:00
David Heinemeier Hansson cdb8628502 Merge branch 'dev' into rc 2026-04-15 16:21:03 +02:00
David Heinemeier Hansson b919a5541a Merge branch 'dev' into rc 2026-04-15 16:17:19 +02:00
David Heinemeier Hansson 4ee44c36a6 Merge branch 'dev' into rc 2026-04-15 15:55:55 +02:00
David Heinemeier Hansson d71ddf022a Merge branch 'dev' into rc 2026-04-15 15:02:11 +02:00
David Heinemeier Hansson cd511f77b9 Merge branch 'dev' into rc 2026-04-15 14:36:44 +02:00
David Heinemeier Hansson e6b105d0b2 Merge branch 'dev' into rc 2026-04-15 13:52:05 +02:00
David Heinemeier Hansson 2554fe8555 Merge branch 'dev' into rc 2026-04-15 12:34:23 +02:00
David Heinemeier Hansson feda8b7231 Merge branch 'dev' into rc 2026-04-15 12:11:18 +02:00
David Heinemeier Hansson 46eb5568d9 Merge branch 'dev' into rc 2026-04-15 11:56:00 +02:00
David Heinemeier Hansson 33c92f554b Merge branch 'dev' into rc 2026-04-15 11:49:29 +02:00
David Heinemeier Hansson 997011e985 Merge branch 'dev' into rc 2026-04-13 16:00:11 -07:00
David Heinemeier Hansson 0e126b7916 Merge branch 'dev' into rc 2026-04-13 15:59:23 -07:00
David Heinemeier Hansson f81b3c842d Merge branch 'dev' into rc 2026-04-11 20:48:42 -04:00
David Heinemeier Hansson ecbd912b09 Merge branch 'dev' into rc 2026-04-11 18:02:01 -04:00
David Heinemeier HanssonandGitHub 76d09b29b7 Merge pull request #5192 from basecamp/rc
Omarchy 3.5.0
2026-04-03 19:16:29 +02:00
David Heinemeier Hansson f18dfdd101 Merge branch 'dev' into rc 2026-04-03 11:36:14 +02:00
David Heinemeier Hansson e4757abb80 Merge branch 'dev' into rc 2026-04-03 10:57:18 +02:00
David Heinemeier Hansson fc1cb1a751 Merge branch 'dev' into rc 2026-04-02 18:06:32 +02:00
David Heinemeier Hansson 50d3579d66 Don't use the names here since they break the all-themes setup in omarchy-nvim 2026-04-02 18:04:55 +02:00
David Heinemeier Hansson b72a831bf5 Merge branch 'dev' into rc 2026-04-02 17:39:10 +02:00
David Heinemeier Hansson e2b6b5ed5a Merge branch 'dev' into rc 2026-04-02 17:23:41 +02:00
David Heinemeier Hansson e5bcec53d1 Merge branch 'dev' into rc 2026-04-02 16:07:23 +02:00
David Heinemeier Hansson 1b07638732 Merge branch 'dev' into rc 2026-04-02 16:06:29 +02:00
David Heinemeier Hansson 4a3355e767 Merge branch 'dev' into rc 2026-04-01 18:16:31 +02:00
David Heinemeier Hansson 3b8ab81781 Merge branch 'dev' into rc 2026-03-08 18:29:04 +01:00
David Heinemeier Hansson da0bb37a19 Merge branch 'dev' into rc 2026-03-08 17:54:04 +01:00
377 changed files with 491 additions and 3341 deletions
-1
View File
@@ -12,7 +12,6 @@
All commands start with `omarchy-`. Prefixes indicate purpose: All commands start with `omarchy-`. Prefixes indicate purpose:
- `cmd-` - check if commands exist, misc utility commands - `cmd-` - check if commands exist, misc utility commands
- `capture-` - screenshots, screen recordings, and other capture tools
- `pkg-` - package management helpers - `pkg-` - package management helpers
- `hw-` - hardware detection (return exit codes for use in conditionals) - `hw-` - hardware detection (return exit codes for use in conditionals)
- `refresh-` - copy default config to user's `~/.config/` - `refresh-` - copy default config to user's `~/.config/`
-2
View File
@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true
Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

-1032
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Returns true if AC power is connected. # Returns true if AC power is connected.
for ac in /sys/class/power_supply/AC* /sys/class/power_supply/ADP*; do for ac in /sys/class/power_supply/AC* /sys/class/power_supply/ADP*; do
[[ -r $ac/online && $(cat "$ac/online") == "1" ]] && exit 0 [[ -r $ac/online && $(cat "$ac/online") == "1" ]] && exit 0
-11
View File
@@ -1,11 +0,0 @@
#!/bin/bash
# omarchy:summary=Toggle microphone mute. Dell XPS and ThinkPad systems get special handling for the hardware LED.
if omarchy-hw-match "XPS"; then
omarchy-audio-input-mute-xps
elif omarchy-hw-match "ThinkPad"; then
omarchy-audio-input-mute-thinkpad
else
omarchy-swayosd-client --input-volume mute-toggle
fi
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Returns the battery full capacity in Wh (rounded to whole number). # Returns the battery full capacity in Wh (rounded to whole number).
# Used by omarchy-battery-status for displaying battery capacity.
battery_info=$(upower -i $(upower -e | grep BAT)) battery_info=$(upower -i $(upower -e | grep BAT))
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Designed to be run by systemd timer every 30 seconds and alerts if battery is low # Designed to be run by systemd timer every 30 seconds and alerts if battery is low
BATTERY_THRESHOLD=10 BATTERY_THRESHOLD=10
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified" NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Returns true if a battery is present on the system. # 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 for bat in /sys/class/power_supply/BAT*; do
[[ -r $bat/present ]] && [[ -r $bat/present ]] &&
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=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.
upower -i $(upower -e | grep BAT) | awk '/percentage/ { upower -i $(upower -e | grep BAT) | awk '/percentage/ {
print int($2) print int($2)
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Returns the battery time remaining (to empty or full) in a compact format. # Returns the battery time remaining (to empty or full) in a compact format.
battery_info=$(upower -i $(upower -e | grep BAT)) battery_info=$(upower -i $(upower -e | grep BAT))
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Returns a formatted battery status string with percentage and power draw/charge. # Returns a formatted battery status string with percentage and power draw/charge.
# Used by the battery notification hotkey (Ctrl + Shift + Super + B).
battery_info=$(upower -i $(upower -e | grep BAT)) battery_info=$(upower -i $(upower -e | grep BAT))
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Set the branch for Omarchy's git repository. # Set the branch for Omarchy's git repository.
# omarchy:args=<master|rc|dev>
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-branch-set [master|rc|dev]" echo "Usage: omarchy-branch-set [master|rc|dev]"
+2 -27
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Adjust brightness on the most likely display device. # Adjust brightness on the most likely display device.
# omarchy:args=<step> # Usage: omarchy-brightness-display <step>
step="${1:-+5%}" step="${1:-+5%}"
@@ -14,31 +14,6 @@ for candidate in amdgpu_bl* intel_backlight acpi_video*; do
fi fi
done done
# Current brightness percentage
current=$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')
# Apply non-uniform step size: 1% steps if at or below 5%, otherwise set an
# absolute target percentage to avoid raw backlight rounding causing uneven OSD steps.
if [[ $step == "+5%" ]]; then
if (( current < 5 )); then
(( target = current + 1 ))
else
(( target = current + 5 ))
fi
(( target > 100 )) && target=100
step="$target%"
elif [[ $step == "5%-" ]]; then
if (( current <= 5 )); then
(( target = current - 1 ))
else
(( target = current - 5 ))
fi
(( target < 1 )) && target=1
step="$target%"
fi
# Set the actual brightness of the display device. # Set the actual brightness of the display device.
brightnessctl -d "$device" set "$step" >/dev/null brightnessctl -d "$device" set "$step" >/dev/null
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol. # Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
# omarchy:requires-sudo=true
if (( $# == 0 )); then if (( $# == 0 )); then
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)" echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Adjust keyboard backlight brightness using available steps. # Adjust keyboard backlight brightness using available steps.
# omarchy:args=<up|down|cycle> # Usage: omarchy-brightness-keyboard <up|down|cycle>
direction="${1:-up}" direction="${1:-up}"
+12 -3
View File
@@ -1,8 +1,17 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Set the Omarchy channel, which dictates what git branch and package repository is used. # Set the Omarchy channel, which dictates what git branch and package repository is used.
# omarchy:args=<stable|rc|edge|dev> #
# omarchy:requires-sudo=true # Stable uses the master branch, which only sees updates on official releases, and
# the stable package repository, which typically lags the edge by a month to ensure
# better compatibility.
#
# Edge tracks the latest package repository, but still relies on the master branch,
# so new packages which require config changes may cause conflicts or errors.
#
# Dev tracks the active development dev branch, which may include partial or broken updates,
# as well as the latest package repository. This should only be used by Omarchy developers
# and people with a lot of experience managing Linux systems.
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-channel-set [stable|rc|edge|dev]" echo "Usage: omarchy-channel-set [stable|rc|edge|dev]"
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Switch between audio outputs while preserving the mute status. By default mapped to Super + Mute. # Switch between audio outputs while preserving the mute status. By default mapped to Super + Mute.
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')
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Finish the installation of Omarchy with items that can only be done after logging in. # Finish the installation of Omarchy with items that can only be done after logging in.
# omarchy:requires-sudo=true
set -e set -e
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
# Toggle microphone mute. Dell XPS and ThinkPad systems get special handling for the hardware LED.
if omarchy-hw-match "XPS"; then
omarchy-cmd-mic-mute-xps
elif omarchy-hw-match "ThinkPad"; then
omarchy-cmd-mic-mute-thinkpad
else
omarchy-swayosd-client --input-volume mute-toggle
fi
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Toggle microphone mute on ThinkPad systems. Uses wpctl for reliable toggling # Toggle microphone mute on ThinkPad systems. Uses wpctl for reliable toggling
# and syncs the platform::micmute LED via brightnessctl.
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
@@ -16,6 +17,7 @@ fi
brightnessctl --device="platform::micmute" set "$led_value" >/dev/null 2>&1 || true brightnessctl --device="platform::micmute" set "$led_value" >/dev/null 2>&1 || true
omarchy-swayosd-client \ swayosd-client \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-message "$osd_message" \ --custom-message "$osd_message" \
--custom-icon "$osd_icon" --custom-icon "$osd_icon"
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Toggle microphone mute on Dell XPS systems. Uses wpctl for reliable toggling # Toggle microphone mute on Dell XPS systems. Uses wpctl for reliable toggling
# and syncs the ALSA capture switch so the hardware mic mute LED follows state.
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Check whether any required commands are missing # Returns true if any of the commands passed in as arguments are missing on the system.
for cmd in "$@"; do for cmd in "$@"; do
if ! command -v "$cmd" &>/dev/null; then if ! command -v "$cmd" &>/dev/null; then
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Check whether all required commands are available # Returns true if all the commands passed in as arguments exit on the system.
for cmd in "$@"; do for cmd in "$@"; do
command -v "$cmd" &>/dev/null || exit 1 command -v "$cmd" &>/dev/null || exit 1
@@ -1,10 +1,9 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Start or stop screen recording # Start and stop a screenrecording, which will be saved to ~/Videos by default.
# omarchy:group=capture # Alternative location can be set via OMARCHY_SCREENRECORD_DIR or XDG_VIDEOS_DIR ENVs.
# omarchy:args=[--with-desktop-audio] [--with-microphone-audio] [--with-webcam] [--webcam-device=<device>] [--resolution=<size>] [--stop-recording] # Resolution is capped to 4K for monitors above 4K, native otherwise.
# omarchy:examples=omarchy screenrecord | omarchy capture screenrecord --with-desktop-audio # Override via --resolution= (e.g. --resolution=1920x1080, --resolution=0x0 for native).
# omarchy:aliases=omarchy screenrecord
[[ -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}}"
@@ -165,17 +164,12 @@ finalize_recording() {
latest=$(cat "$RECORDING_FILE" 2>/dev/null) latest=$(cat "$RECORDING_FILE" 2>/dev/null)
[[ -f $latest ]] || return [[ -f $latest ]] || return
# Re-encode only when the first GOP contains discardable warmup packets — stream copy can't
# trim those (it rewinds to the keyframe). Clean recordings stay on the fast stream-copy path.
local video_codec=(-c:v copy)
if ffprobe -v error -select_streams v:0 -read_intervals %+0.2 -show_entries packet=flags -of csv=p=0 "$latest" 2>/dev/null | grep -q D; then
video_codec=(-c:v libx264 -preset veryfast -crf 20)
fi
# Trim the first frame, and normalize audio to -14 LUFS if present, in a single pass # 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[@]}") local args=(-y -ss 0.1 -i "$latest")
if ffprobe -v error -select_streams a -show_entries stream=codec_type -of csv=p=0 "$latest" 2>/dev/null | grep -q audio; then if ffprobe -v error -select_streams a -show_entries stream=codec_type -of csv=p=0 "$latest" 2>/dev/null | grep -q audio; then
args+=(-af loudnorm=I=-14:TP=-1.5:LRA=11) args+=(-af loudnorm=I=-14:TP=-1.5:LRA=11 -c:v copy)
else
args+=(-c copy)
fi fi
local processed="${latest%.mp4}-processed.mp4" local processed="${latest%.mp4}-processed.mp4"
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Run the Omarchy screensaver using random effects from TTE. # Run the Omarchy screensaver using random effects from TTE.
screensaver_in_focus() { screensaver_in_focus() {
hyprctl activewindow -j | jq -e '.class == "org.omarchy.screensaver"' >/dev/null 2>&1 hyprctl activewindow -j | jq -e '.class == "org.omarchy.screensaver"' >/dev/null 2>&1
@@ -1,10 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Take a screenshot # Take a screenshot of the whole screen, a specific window, or a user-drawn region.
# omarchy:group=capture # Saves to ~/Pictures by default, but that can be changed via OMARCHY_SCREENSHOT_DIR or XDG_PICTURES_DIR ENVs.
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy] [--editor=<name>] # Editor defaults to Satty but can be changed via --editor=<name> or OMARCHY_SCREENSHOT_EDITOR env
# omarchy:examples=omarchy screenshot | omarchy capture screenshot region
# omarchy:aliases=omarchy screenshot
[[ -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}}"
@@ -65,13 +63,6 @@ get_rectangles() {
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])"'
} }
# 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
# Select based on mode # Select based on mode
case "$MODE" in case "$MODE" in
region) region)
@@ -79,12 +70,14 @@ region)
PID=$! PID=$!
sleep .1 sleep .1
SELECTION=$(slurp 2>/dev/null) SELECTION=$(slurp 2>/dev/null)
kill $PID 2>/dev/null
;; ;;
windows) windows)
hyprpicker -r -z >/dev/null 2>&1 & hyprpicker -r -z >/dev/null 2>&1 &
PID=$! 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
;; ;;
fullscreen) fullscreen)
SELECTION=$(hyprctl monitors -j | jq -r "${JQ_MONITOR_GEO} .[] | select(.focused == true) | format_geo") SELECTION=$(hyprctl monitors -j | jq -r "${JQ_MONITOR_GEO} .[] | select(.focused == true) | format_geo")
@@ -95,6 +88,7 @@ smart | *)
PID=$! PID=$!
sleep .1 sleep .1
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null) SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
kill $PID 2>/dev/null
# If the selection 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
@@ -1,13 +1,9 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Share clipboard, files, or folders with LocalSend # Share clipboard, file, or folder using LocalSend. Bound to Super + Ctrl + S by default.
# omarchy:group=share
# omarchy:name=
# omarchy:args=<clipboard|file|folder> [path...]
# omarchy:examples=omarchy share clipboard | omarchy share file ~/Downloads/example.txt
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-menu-share [clipboard|file|folder]" echo "Usage: omarchy-cmd-share [clipboard|file|folder]"
exit 1 exit 1
fi fi
+3 -1
View File
@@ -1,7 +1,9 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Print the current working directory of the active terminal window # Returns the current working directory of the active terminal window,
# so a new terminal window can be started in the same directory.
# Go from current active terminal to its child shell process and run cwd there
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}') terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
shell_pid=$(pgrep -P "$terminal_pid" | tail -n1) shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
+20 -33
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Add or remove an EFI boot entry for the Omarchy UKI, allowing the system to boot directly # Add an EFI boot entry for the Omarchy UKI, allowing the system to boot directly
# omarchy:requires-sudo=true # without a bootloader like Limine. Requires UEFI firmware and a built UKI.
if [[ ! -d /sys/firmware/efi ]]; then if [[ ! -d /sys/firmware/efi ]]; then
echo "Error: System is not booted in UEFI mode" >&2 echo "Error: System is not booted in UEFI mode" >&2
@@ -23,36 +23,23 @@ if cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then
exit 1 exit 1
fi fi
existing_entry=$(efibootmgr | grep -E "^Boot[0-9A-Fa-f]+\*? Omarchy([[:space:]]|$)" | head -1) uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1)
if [[ -n $existing_entry ]]; then if [[ -z $uki_file ]]; then
boot_num=$(echo "$existing_entry" | sed -n 's/^Boot\([0-9A-Fa-f]\+\).*/\1/p') echo "Error: No Omarchy UKI found in /boot/EFI/Linux/" >&2
exit 1
if gum confirm "Disable direct boot (remove Omarchy EFI entry)?"; then fi
echo "Removing EFI boot entry $boot_num"
sudo efibootmgr --bootnum "$boot_num" --delete-bootnum >/dev/null boot_source=$(findmnt -n -o SOURCE /boot)
fi disk=$(echo "$boot_source" | sed 's/p\?[0-9]*$//')
part=$(echo "$boot_source" | grep -o 'p\?[0-9]*$' | sed 's/^p//')
exit 0
else if gum confirm "Setup direct boot (so snapshot booting must be done via bios)?"; then
uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1) echo "Creating EFI boot entry for $uki_file"
if [[ -z $uki_file ]]; then sudo efibootmgr --create \
echo "Error: No Omarchy UKI found in /boot/EFI/Linux/" >&2 --disk "$disk" \
exit 1 --part "$part" \
fi --label "Omarchy" \
--loader "\\EFI\\Linux\\$uki_file"
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
fi fi
+1 -4
View File
@@ -1,9 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Print debugging information # Return exhaustive debugging information about the system to help diagnose problems.
# omarchy:args=[--no-sudo] [--print]
# omarchy:examples=omarchy debug --print --no-sudo
# omarchy:requires-sudo=true
NO_SUDO=false NO_SUDO=false
PRINT_ONLY=false PRINT_ONLY=false
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Creates a new Omarchy migration named after the unix timestamp of the last commit. # Creates a new Omarchy migration named after the unix timestamp of the last commit.
# Only intended for Omarchy developers.
cd ~/.local/share/omarchy 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"
-111
View File
@@ -1,111 +0,0 @@
#!/bin/bash
# omarchy:summary=Measure Omarchy CLI response times
# omarchy:args=[--repeat=<count>]
# omarchy:examples=omarchy dev benchmark | omarchy dev benchmark --repeat=10
set -euo pipefail
OMARCHY_BIN_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
CLI="$OMARCHY_BIN_DIR/omarchy"
REPEAT=5
show_help() {
cat <<'EOF'
Usage:
omarchy dev benchmark [--repeat=<count>]
Measure response times for common Omarchy CLI surfaces.
Options:
--repeat=<count> Number of times to run each case (default: 5)
EOF
}
now_us() {
local now="${EPOCHREALTIME/./}"
printf '%s' "$now"
}
format_ms() {
local us="$1"
printf '%d.%03d' "$(( us / 1000 ))" "$(( us % 1000 ))"
}
run_case() {
local label="$1"
shift
local total_us=0
local min_us=0
local max_us=0
local elapsed_us=0
local start_us=0
local end_us=0
local status=0
for (( i = 1; i <= REPEAT; i++ )); do
start_us=$(now_us)
if "$@" >/dev/null; then
status=0
else
status=$?
fi
end_us=$(now_us)
if (( status != 0 )); then
printf '%-34s failed (exit %d)\n' "$label" "$status"
return "$status"
fi
elapsed_us=$(( end_us - start_us ))
total_us=$(( total_us + elapsed_us ))
if (( i == 1 || elapsed_us < min_us )); then
min_us=$elapsed_us
fi
if (( elapsed_us > max_us )); then
max_us=$elapsed_us
fi
done
printf '%-34s avg %8s ms min %8s ms max %8s ms\n' \
"$label" \
"$(format_ms "$(( total_us / REPEAT ))")" \
"$(format_ms "$min_us")" \
"$(format_ms "$max_us")"
}
while (( $# > 0 )); do
case "$1" in
--repeat=*)
REPEAT="${1#*=}"
;;
--help | -h)
show_help
exit 0
;;
*)
echo "Unknown option: $1" >&2
show_help >&2
exit 2
;;
esac
shift
done
if [[ ! $REPEAT =~ ^[0-9]+$ ]] || (( REPEAT < 1 )); then
echo "--repeat must be a positive integer" >&2
exit 2
fi
printf 'Omarchy CLI benchmark (%d runs each)\n\n' "$REPEAT"
run_case "omarchy" "$CLI"
run_case "omarchy --help" "$CLI" --help
run_case "omarchy commands" "$CLI" commands
run_case "omarchy commands --json" "$CLI" commands --json
run_case "omarchy commands --all --json" "$CLI" commands --all --json
run_case "omarchy theme set --help" "$CLI" theme set --help
run_case "omarchy screenshot --help" "$CLI" screenshot --help
run_case "omarchy restart --help" "$CLI" restart --help
run_case "omarchy theme current" "$CLI" theme current
-86
View File
@@ -1,86 +0,0 @@
#!/bin/bash
# omarchy:summary=Show Omarchy bin metadata fields and defaults
# omarchy:args=[--json]
set -euo pipefail
show_json() {
jq -n '{
ok: true,
defaults: {
group: "first filename segment after omarchy-",
name: "remaining filename segments with dashes converted to spaces",
route: "omarchy <group> <name>",
binary: "filename",
requires_sudo: false
},
fields: [
{name: "summary", required: true, type: "string", note: "One-line human and agent-facing description."},
{name: "group", required: false, type: "string", note: "Only set when the route group should differ from the filename-derived group."},
{name: "name", required: false, type: "string", note: "Only set when the route name should differ from the filename-derived name. May be empty for root commands."},
{name: "args", required: false, type: "string", note: "Only set when the command accepts arguments."},
{name: "examples", required: false, type: "string", note: "Pipe-separated examples."},
{name: "aliases", required: false, type: "string", note: "Pipe-separated alternate routes, e.g. omarchy screenshot."},
{name: "requires-sudo", required: false, type: "true", default: false, note: "Only include when true."}
]
}'
}
show_help() {
cat <<'EOF'
Omarchy bin metadata
Metadata lives in the top comment block of each executable bin/omarchy-* file.
Keep it slim: define only fields that are required or override defaults.
Required:
# omarchy:summary=<one-line description>
Inferred defaults:
group first filename segment after omarchy-
name remaining filename segments, with dashes converted to spaces
route omarchy <group> <name>
binary filename
requires-sudo false
Optional fields:
# omarchy:group=<group> route override only
# omarchy:name=<name> route override only; may be empty
# omarchy:args=<args> only if the command accepts args
# omarchy:examples=<cmd> | <cmd> pipe-separated examples
# omarchy:aliases=<route> | <route> pipe-separated alternate routes
# omarchy:requires-sudo=true only when true
Do not define:
binary inferred from filename
usage derived from route + args
false flags or empty args
Examples:
# omarchy:summary=Restart Walker and related user services
# omarchy:summary=Take a screenshot
# omarchy:group=capture
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy] [--editor=<name>]
# omarchy:examples=omarchy screenshot | omarchy capture screenshot region
# omarchy:aliases=omarchy screenshot
EOF
}
case "${1:-}" in
--json)
show_json
;;
--help | -h)
show_help
;;
"")
show_help
;;
*)
echo "Unknown option: $1" >&2
show_help >&2
exit 2
;;
esac
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Print drive information such as size, model, and mount details # Returns drive information about a given volumne, like /dev/nvme0, which is used by omarchy-drive-select.
# omarchy:args=<drive>
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-drive-info [/dev/drive]" echo "Usage: omarchy-drive-info [/dev/drive]"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Select a drive from a list with info that includes space and brand. Used by omarchy-drive-set-password. # Select a drive from a list with info that includes space and brand. Used by omarchy-drive-set-password.
if (($# == 0)); then if (($# == 0)); then
drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)') drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)')
+2 -3
View File
@@ -1,12 +1,11 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Set a new encryption password for a drive selected. # Set a new encryption password for a drive selected.
# omarchy:requires-sudo=true
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") == 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")"
+2 -2
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Show current monospace font # Returns the name of the current monospace font being used by extracting it from the Waybar stylesheet.
# omarchy:examples=omarchy font current # This can be changed using omarchy-font-set.
grep -oP 'font-family:\s*["'\'']?\K[^;"'\'']+' ~/.config/waybar/style.css | head -n1 grep -oP 'font-family:\s*["'\'']?\K[^;"'\'']+' ~/.config/waybar/style.css | head -n1
+1 -2
View File
@@ -1,6 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=List available monospace fonts # Returns a list of all the monospace fonts available on the system that can be set using omarchy-font-set.
# omarchy:examples=omarchy font list | omarchy font set "CaskaydiaMono Nerd Font"
fc-list :spacing=100 -f "%{family[0]}\n" | grep -v -i -E 'emoji|signwriting|omarchy' | sort -u fc-list :spacing=100 -f "%{family[0]}\n" | grep -v -i -E 'emoji|signwriting|omarchy' | sort -u
+2 -3
View File
@@ -1,8 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Set the system monospace font # Set the system-wide monospace font that should be used by the terminal, hyprlock, waybar, swayosd, etc.
# omarchy:args=<font-name> # The font name must be one of the ones returned by omarchy-font-list.
# omarchy:examples=omarchy font list | omarchy font set "CaskaydiaMono Nerd Font"
font_name="$1" font_name="$1"
-2
View File
@@ -1,7 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# omarchy:summary=Run the Synaptics touchpad haptic feedback daemon
"""Haptic feedback daemon for Synaptics touchpads with Manual Trigger. """Haptic feedback daemon for Synaptics touchpads with Manual Trigger.
Monitors touchpad button press events and sends haptic pulses via HID Monitors touchpad button press events and sends haptic pulses via HID
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Check if hibernation is supported # Check if hibernation is supported
if [[ ! -f /sys/power/image_size ]]; then if [[ ! -f /sys/power/image_size ]]; then
exit 1 exit 1
fi fi
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Remove hibernation setup including swap and boot resume settings # Removes hibernation setup: disables swap, removes swapfile, removes fstab entry,
# omarchy:requires-sudo=true # removes resume hook, and removes suspend-then-hibernate configuration.
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf" MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Set up hibernation with swap and boot resume configuration # Creates a swap file in the btrfs subvolume, adds the swap file to /etc/fstab,
# omarchy:requires-sudo=true # 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 "Hibernation is not supported on your system" >&2 echo -e "Hibernation is not supported on your system" >&2
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Run a named hook, like post-update (available in ~/.config/omarchy/hooks/post-update). # Run a named hook, like post-update (available in ~/.config/omarchy/hooks/post-update).
# omarchy:args=[name] [args...]
set -e set -e
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
# omarchy:summary=Detect ASUS ExpertBook B9406 series laptops on Intel Panther Lake.
omarchy-hw-match "B9406" && omarchy-hw-intel-ptl
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Detect whether the computer is an Asus ROG machine. # Detect whether the computer is an Asus ROG machine.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "ASUSTeK COMPUTER INC." ]] && [[ $(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 grep -q "ROG" /sys/class/dmi/id/product_family 2>/dev/null
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Match Dell XPS systems with LG OLED panel on Intel Panther Lake (Xe3) GPU. # Match Dell XPS systems with LG OLED panel on Intel Panther Lake (Xe3) GPU.
omarchy-hw-match "XPS" \ omarchy-hw-match "XPS" \
&& omarchy-hw-intel-ptl \ && omarchy-hw-intel-ptl \
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Returns true when an external monitor is physically connected. # Returns true when an external monitor is physically connected.
# Uses kernel DRM state so the result is independent of Hyprland's startup timing.
for status in /sys/class/drm/card*-*/status; do for status in /sys/class/drm/card*-*/status; do
[[ "$status" == *-eDP-*/status ]] && continue [[ "$status" == *-eDP-*/status ]] && continue
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Detect whether the computer is a Framework Laptop 16. # Detect whether the computer is a Framework Laptop 16.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Framework" ]] && [[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Framework" ]] &&
omarchy-hw-match "Laptop 16" omarchy-hw-match "Laptop 16"
+1 -7
View File
@@ -1,9 +1,3 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Detect whether the system has an active hybrid GPU configuration (($(lspci | grep -cE 'VGA|3D|Display') >= 2))
if command -v supergfxctl &>/dev/null; then
supergfxctl -s 2>/dev/null | grep -qw Hybrid
else
(($(lspci | grep -cE 'VGA|3D|Display') >= 2))
fi
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Detect whether the computer has an Intel CPU. # Detect whether the computer has an Intel CPU.
[[ $(grep -m1 "vendor_id" /proc/cpuinfo 2>/dev/null | cut -d: -f2 | tr -d ' ') == "GenuineIntel" ]] [[ $(grep -m1 "vendor_id" /proc/cpuinfo 2>/dev/null | cut -d: -f2 | tr -d ' ') == "GenuineIntel" ]]
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Detect whether the computer has an Intel Panther Lake GPU. # Detect whether the computer has an Intel Panther Lake GPU.
lspci | grep -iE 'vga|3d|display' | grep -qi 'panther lake' lspci | grep -iE 'vga|3d|display' | grep -qi 'panther lake'
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Match against the computer's DMI product name or product family (case-insensitive). # Match against the computer's DMI product name or product family (case-insensitive).
# omarchy:args=<pattern> # Usage: omarchy-hw-match "XPS" or omarchy-hw-match "ThinkPad"
grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null || grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null ||
grep -qi "$1" /sys/class/dmi/id/product_family 2>/dev/null grep -qi "$1" /sys/class/dmi/id/product_family 2>/dev/null
+3 -1
View File
@@ -1,6 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Clear the internal-monitor-disable toggle if no external display is connected. # Clear the internal-monitor-disable toggle if no external display is connected.
# Runs before the graphical session so Hyprland doesn't block on having no output
# to render to when the user rebooted with the external unplugged.
TOGGLE="$HOME/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf" TOGGLE="$HOME/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Detect whether the computer is a Microsoft Surface device. # Detect whether the computer is a Microsoft Surface device.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Microsoft Corporation" ]] && [[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Microsoft Corporation" ]] &&
omarchy-hw-match "Surface" omarchy-hw-match "Surface"
-2
View File
@@ -1,6 +1,4 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Print the detected Hyprland touchpad or trackpad device name
device=$(hyprctl devices -j | jq -r '[.mice[] | .name | select(test("touchpad|trackpad"; "i"))] | first // empty') device=$(hyprctl devices -j | jq -r '[.mice[] | .name | select(test("touchpad|trackpad"; "i"))] | first // empty')
[[ -n $device ]] && echo "$device" [[ -n $device ]] && echo "$device"
-6
View File
@@ -1,6 +0,0 @@
#!/bin/bash
# omarchy:summary=Print the detected Hyprland touchscreen or tablet device name
device=$(hyprctl devices -j | jq -r '[.touch[]?.name, .tablets[]?.name] | first // empty')
[[ -n $device ]] && echo "$device"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Detect whether Vulkan is available. # Detect whether Vulkan is available.
[[ -d /usr/share/vulkan/icd.d ]] && [[ -d /usr/share/vulkan/icd.d ]] &&
find /usr/share/vulkan/icd.d -maxdepth 1 -name "*.json" -print -quit | grep -q . find /usr/share/vulkan/icd.d -maxdepth 1 -name "*.json" -print -quit | grep -q .
@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Toggles transparency for the currently focused window. # Toggles transparency for the currently focused window.
hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Print the name of the currently focused Hyprland monitor. # Print the name of the currently focused Hyprland monitor.
hyprctl monitors -j | jq -r '.[] | select(.focused == true).name' hyprctl monitors -j | jq -r '.[] | select(.focused == true).name'
+5 -14
View File
@@ -1,14 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Enable, disable, toggle, or recover the internal laptop display
# omarchy:args=<on|off|toggle|recover>
TOGGLE="internal-monitor-disable" TOGGLE="internal-monitor-disable"
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.conf"
MIRROR_TOGGLE="internal-monitor-mirror"
# Get internal monitor name dynamically
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
enable() { enable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
@@ -17,15 +9,14 @@ enable() {
} }
disable() { disable() {
if ! omarchy-hw-external-monitors; then if omarchy-hw-external-monitors; then
if omarchy-hyprland-toggle-disabled "$TOGGLE"; then
omarchy-hyprland-toggle --enabled-notification "󰍹 Laptop display disabled" "$TOGGLE"
fi
else
notify-send -u low "󰍹 Can't disable the only active display" notify-send -u low "󰍹 Can't disable the only active display"
exit 1 exit 1
fi fi
if omarchy-hyprland-toggle-disabled "$TOGGLE" && omarchy-hyprland-toggle-disabled "$MIRROR_TOGGLE"; then
echo "monitor=$INTERNAL,disable" >"$TOGGLE_FLAG"
notify-send -u low "󰍹 Laptop display disabled"
hyprctl reload
fi
} }
recover() { recover() {
@@ -1,58 +0,0 @@
#!/bin/bash
# omarchy:summary=Enable, disable, toggle, or recover mirroring the internal display to an external monitor
# omarchy:args=<on|off|toggle|recover>
TOGGLE="internal-monitor-mirror"
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.conf"
DISABLE_TOGGLE="internal-monitor-disable"
# Get names dynamically
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
# Get the first available external monitor
EXTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP") | not).name' | head -n 1)
enable() {
if [[ -z "$EXTERNAL" ]]; then
notify-send -u low "󰍹 No external monitors found for mirror"
exit 1
fi
if [[ -z "$INTERNAL" ]]; then
notify-send -u low "󰍹 No laptop monitor found to mirror"
exit 1
fi
if omarchy-hyprland-toggle-enabled "$DISABLE_TOGGLE"; then
omarchy-hyprland-toggle "$DISABLE_TOGGLE"
fi
if omarchy-hyprland-toggle-disabled "$TOGGLE"; then
echo "monitor=$EXTERNAL, preferred, auto, 1, mirror, $INTERNAL" > "$TOGGLE_FLAG"
notify-send -u low "󰍹 Mirroring enabled ($EXTERNAL)"
hyprctl reload
fi
}
disable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle --disabled-notification "󰍹 Extended mode restored" "$TOGGLE"
fi
}
recover() {
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle "$TOGGLE"
fi
}
case "$1" in
on) enable ;;
off) disable ;;
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then disable; else enable; fi ;;
recover) recover ;;
*)
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
exit 1
;;
esac
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Cycle scaling for the focused Hyprland monitor # Get the active monitor (the one with the cursor)
MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)') MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)')
ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name') ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name')
CURRENT_SCALE=$(echo "$MONITOR_INFO" | jq -r '.scale') CURRENT_SCALE=$(echo "$MONITOR_INFO" | jq -r '.scale')
+2 -2
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Watch Hyprland monitor events and recover monitor toggles when a monitor is removed # Listen on Hyprland's event socket and recover the internal display whenever
# a monitor is removed.
SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
@@ -8,7 +9,6 @@ socat -U - "UNIX-CONNECT:$SOCKET" | while read -r event; do
case "$event" in case "$event" in
monitorremoved\>\>*|monitorremovedv2\>\>*) monitorremoved\>\>*|monitorremovedv2\>\>*)
omarchy-hyprland-monitor-internal recover omarchy-hyprland-monitor-internal recover
omarchy-hyprland-monitor-internal-mirror recover
;; ;;
esac esac
done done
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Toggle permanent Hyprland flags by copying them into a directory that's sourced entirely. # Toggle permanent Hyprland flags by copying them into a directory that's sourced entirely.
# omarchy:args=[--enabled-notification <text>] [--disabled-notification <text>] <flag-name>
ENABLED_NOTIFICATION="" ENABLED_NOTIFICATION=""
DISABLED_NOTIFICATION="" DISABLED_NOTIFICATION=""
+1 -2
View File
@@ -1,6 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Check if a Hyprland toggle is currently disabled (missing). # Check if a Hyprland toggle is currently disabled (missing).
# omarchy:args=<flag-name>
[[ ! -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]] [[ ! -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
+1 -2
View File
@@ -1,6 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Check if a Hyprland toggle is currently enabled. # Check if a Hyprland toggle is currently enabled.
# omarchy:args=<flag-name>
[[ -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]] [[ -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Close all open windows # Close all open windows
hyprctl clients -j | \ hyprctl clients -j | \
jq -r ".[].address" | \ jq -r ".[].address" | \
xargs -I{} hyprctl dispatch closewindow address:{} xargs -I{} hyprctl dispatch closewindow address:{}
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Toggles the window gaps globally between no gaps and the default. # Toggles the window gaps globally between no gaps and the default.
omarchy-hyprland-toggle window-no-gaps omarchy-hyprland-toggle window-no-gaps
+14 -2
View File
@@ -1,7 +1,19 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Toggle to pop-out a tile to stay fixed on a display basis. # Toggle to pop-out a tile to stay fixed on a display basis.
# omarchy:args=[width height x y]
# Usage:
# omarchy-hyprland-window-pop [width height [x y]]
#
# Arguments:
# width Optional. Width of the floating window. Default: 1300
# height Optional. Height of the floating window. Default: 900
# x Optional. X position of the window. Must provide both X and Y to take effect.
# y Optional. Y position of the window. Must provide both X and Y to take effect.
#
# Behavior:
# - If the window is already pinned, it will be unpinned and removed from the pop layer.
# - If the window is not pinned, it will be floated, resized, moved/centered, pinned, brought to top, and popped.
width=${1:-1300} width=${1:-1300}
height=${2:-900} height=${2:-900}
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Toggle single-window square aspect ratio. # Toggle single-window square aspect ratio.
omarchy-hyprland-toggle \ omarchy-hyprland-toggle \
--enabled-notification " Enable single-window square aspect ratio" \ --enabled-notification " Enable single-window square aspect ratio" \
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Toggle the layout on the current active workspace between dwindle and scrolling # Toggle the layout on the current active workspace between dwindle and scrolling
ACTIVE_WORKSPACE=$(hyprctl activeworkspace -j | jq -r '.id') ACTIVE_WORKSPACE=$(hyprctl activeworkspace -j | jq -r '.id')
CURRENT_LAYOUT=$(hyprctl activeworkspace -j | jq -r '.tiledLayout') CURRENT_LAYOUT=$(hyprctl activeworkspace -j | jq -r '.tiledLayout')
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Allow Chromium to sign in to Google accounts by adding the required OAuth credentials # Allow Chromium to sign in to Google accounts by adding the correct
# oauth client id and secret to ~/.config/chromium-flags.conf.
if [[ -f ~/.config/chromium-flags.conf ]]; then if [[ -f ~/.config/chromium-flags.conf ]]; then
CONF=~/.config/chromium-flags.conf CONF=~/.config/chromium-flags.conf
+1 -5
View File
@@ -1,10 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install a supported development environment # Install one of the supported development environments. Usually called via Install > Development > * in the Omarchy Menu.
# omarchy:name=dev-env
# omarchy:args=<ruby|node|bun|deno|go|laravel|symfony|php|python|elixir|phoenix|rust|java|zig|ocaml|dotnet|clojure|scala>
# omarchy:examples=omarchy install dev-env ruby | omarchy install dev-env node
# omarchy:requires-sudo=true
if [[ -z $1 ]]; then if [[ -z $1 ]]; then
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 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
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install one of the supported databases in a Docker container with the suitable development options. # Install one of the supported databases in a Docker container with the suitable development options.
# omarchy:requires-sudo=true # Usually called via Install > Development > Docker DB from the Omarchy Menu.
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL") options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL")
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install and start the Dropbox service. Must then be authenticated via the web. # Install and start the Dropbox service. Must then be authenticated via the web.
echo "Installing all dependencies..." echo "Installing all dependencies..."
omarchy-pkg-add dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox omarchy-pkg-add dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install and launch Geforce Now. # Install and launch Geforce Now.
set -e set -e
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install the NordVPN service with optional GUI. # Install the NordVPN service with optional GUI.
# omarchy:requires-sudo=true
echo "Installing NordVPN..." echo "Installing NordVPN..."
omarchy-pkg-aur-add nordvpn-bin omarchy-pkg-aur-add nordvpn-bin
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install the ONCE service, enable its background service, and launch the TUI. # Install the ONCE service, enable its background service, and launch the TUI.
# omarchy:requires-sudo=true
echo "Installing ONCE..." echo "Installing ONCE..."
omarchy-pkg-add once-bin omarchy-pkg-add once-bin
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install Steam and graphics drivers selected for this system # Install and launch Steam after first letting the user pick the correct grahics card drivers.
# omarchy:requires-sudo=true
set -e set -e
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install the Tailscale mesh VPN service and a web app for the Tailscale Admin Console. # Install the Tailscale mesh VPN service and a web app for the Tailscale Admin Console.
# omarchy:requires-sudo=true
echo -e "\nInstalling Tailscale..." echo -e "\nInstalling Tailscale..."
omarchy-pkg-add tailscale omarchy-pkg-add tailscale
+1 -3
View File
@@ -1,8 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc). # Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc).
# omarchy:args=<alacritty|ghostty|kitty>
# omarchy:requires-sudo=true
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-install-terminal [alacritty|ghostty|kitty]" echo "Usage: omarchy-install-terminal [alacritty|ghostty|kitty]"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install VS Code and configure Omarchy defaults for secrets, updates, and theme # Install VSCode and configure it to use the gnome-libsecret password store, not to update automatically, and to use the current Omarchy theme.
echo "Installing VSCode..." echo "Installing VSCode..."
omarchy-pkg-add visual-studio-code-bin omarchy-pkg-add visual-studio-code-bin
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install support for using Xbox controllers with Steam/RetroArch/etc. # Install support for using Xbox controllers with Steam/RetroArch/etc.
# omarchy:requires-sudo=true
set -e set -e
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch the fastfetch TUI that gives information about the current system. # Launch the fastfetch TUI that gives information about the current system.
exec omarchy-launch-or-focus-tui "bash -c 'fastfetch; read -n 1 -s'" exec omarchy-launch-or-focus-tui "bash -c 'fastfetch; read -n 1 -s'"
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch the Omarchy audio controls TUI (provided by wiremix). # Launch the Omarchy audio controls TUI (provided by wiremix).
omarchy-launch-or-focus-tui wiremix omarchy-launch-or-focus-tui wiremix
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch the Omarchy bluetooth controls TUI (provided by bluetui). # Launch the Omarchy bluetooth controls TUI (provided by bluetui).
# Also attempts to unblock bluetooth service if rfkill had blocked it.
rfkill unblock bluetooth rfkill unblock bluetooth
exec omarchy-launch-or-focus-tui bluetui exec omarchy-launch-or-focus-tui bluetui
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch the default browser as determined by xdg-settings. # Launch the default browser as determined by xdg-settings.
# omarchy:args=[url] # Automatically converts --private into the correct flag for the given browser.
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)
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch the default editor as determined by $EDITOR (set via ~/.config/uwsm/default) (or nvim if missing). # Launch the default editor as determined by $EDITOR (set via ~/.config/uwsm/default) (or nvim if missing).
# omarchy:args=<path> # Starts suitable editors in a terminal window and otherwise as a regular application.
omarchy-cmd-present "$EDITOR" || EDITOR=nvim omarchy-cmd-present "$EDITOR" || EDITOR=nvim
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch a floating terminal with the Omarchy presentation wrapper # Launch a floating terminal with the Omarchy logo presentation, then execute the command passed in, and finally end with the omarchy-show-done presentation.
# omarchy:args=<command> # 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 (( \$? != 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"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch an app or focus an existing window matching a pattern # Launch or focus on a given command identified by the passed in window-pattern.
# omarchy:args=<window-pattern> <launch-command> # Use by some default bindings, like the one for Spotify, to ensure there is only one instance of the application open.
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-launch-or-focus [window-pattern] [launch-command]" echo "Usage: omarchy-launch-or-focus [window-pattern] [launch-command]"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch a TUI or focus an existing terminal window for it # Launch or focus on a given TUI identified by the passed in as the command.
# omarchy:args=<command> [args...] # Use by commands like omarchy-launch-wifi to ensure there is only one wifi configuration screen open.
APP_ID="org.omarchy.$(basename "$1")" APP_ID="org.omarchy.$(basename "$1")"
LAUNCH_COMMAND="omarchy-launch-tui $@" LAUNCH_COMMAND="omarchy-launch-tui $@"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch or focus on a given web app identified by the window-pattern. # Launch or focus on a given web app identified by the window-pattern.
# omarchy:args=<window-pattern> <url-and-flags...> # Use by some default bindings, like the one for WhatsApp, to ensure there is only one instance of the application open.
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-launch-or-focus-webapp [window-pattern] [url-and-flags...]" echo "Usage: omarchy-launch-or-focus-webapp [window-pattern] [url-and-flags...]"
+5 -4
View File
@@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch the Omarchy screensaver in the default terminal on the system with the correct font configuration. # Launch the Omarchy screensaver in the default terminal on the system with the correct font configuration.
# Exit early if we don't have the tte show
if ! command -v tte &>/dev/null; then if ! command -v tte &>/dev/null; then
exit 1 exit 1
fi fi
@@ -28,21 +29,21 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
hyprctl dispatch exec -- \ hyprctl dispatch exec -- \
alacritty --class=org.omarchy.screensaver \ alacritty --class=org.omarchy.screensaver \
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \ --config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
-e omarchy-screensaver -e omarchy-cmd-screensaver
;; ;;
*ghostty*) *ghostty*)
hyprctl dispatch exec -- \ hyprctl dispatch exec -- \
ghostty --class=org.omarchy.screensaver \ ghostty --class=org.omarchy.screensaver \
--config-file=~/.local/share/omarchy/default/ghostty/screensaver \ --config-file=~/.local/share/omarchy/default/ghostty/screensaver \
--font-size=18 \ --font-size=18 \
-e omarchy-screensaver -e omarchy-cmd-screensaver
;; ;;
*kitty*) *kitty*)
hyprctl dispatch exec -- \ hyprctl dispatch exec -- \
kitty --class=org.omarchy.screensaver \ kitty --class=org.omarchy.screensaver \
--override font_size=18 \ --override font_size=18 \
--override window_padding_width=0 \ --override window_padding_width=0 \
-e omarchy-screensaver -e omarchy-cmd-screensaver
;; ;;
*) *)
notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty" notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
+1 -2
View File
@@ -1,6 +1,5 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch a TUI command in the default terminal with Omarchy styling # Launch the TUI command passed in as an argument in the default terminal with an org.omarchy.COMMAND app id for styling.
# omarchy:args=<command> [args...]
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.$(basename $1) -e "$1" "${@:2}" exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.$(basename $1) -e "$1" "${@:2}"
+2 -1
View File
@@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch Walker and ensure its Elephant data provider is running # Launch the Walker application launcher while ensuring that it's data provider (called elephant) is running first.
# Ensure elephant is running before launching walker
if ! pgrep -x elephant > /dev/null; then if ! pgrep -x elephant > /dev/null; then
setsid uwsm-app -- elephant & setsid uwsm-app -- elephant &
fi fi
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch a URL as a web app in the default supported browser # Launch the passed in URL as a web app in the default browser (or chromium if the default doesn't support --app).
# omarchy:args=<url>
browser=$(xdg-settings get default-web-browser) browser=$(xdg-settings get default-web-browser)
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Launch the Omarchy wifi controls (provided by the Impala TUI). # Launch the Omarchy wifi controls (provided by the Impala TUI).
# Attempts to unblock the wifi service first in case it should be been blocked.
rfkill unblock wifi rfkill unblock wifi
omarchy-launch-or-focus-tui impala omarchy-launch-or-focus-tui impala
@@ -1,10 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Lock the screen # Locks the system using hyprlock, but not before ensuring 1password has also been locked, and the screensaver stopped.
# omarchy:group=system
# omarchy:name=lock
# omarchy:examples=omarchy system lock
# Lock the screen
pidof hyprlock || hyprlock & pidof hyprlock || hyprlock &
# Set keyboard layout to default (first layout) # Set keyboard layout to default (first layout)

Some files were not shown because too many files have changed in this diff Show More