Merge branch 'dev' into rc

This commit is contained in:
David Heinemeier Hansson
2026-05-06 16:52:16 +02:00
89 changed files with 1408 additions and 164 deletions
+59 -2
View File
@@ -6,10 +6,15 @@
- Prefer `(( ))` over numeric operators inside `[[ ]]` (e.g., `(( count < 50 ))`, not `[[ $count -lt 50 ]]`) - Prefer `(( ))` over numeric operators inside `[[ ]]` (e.g., `(( count < 50 ))`, not `[[ $count -lt 50 ]]`)
- For strings/paths with spaces, quote them instead of escaping spaces with `\ ` (e.g., `"$APP_DIR/Disk Usage.desktop"`, not `$APP_DIR/Disk\ Usage.desktop`) - For strings/paths with spaces, quote them instead of escaping spaces with `\ ` (e.g., `"$APP_DIR/Disk Usage.desktop"`, not `$APP_DIR/Disk\ Usage.desktop`)
- Shebangs must use `#!/bin/bash` consistently (never `#!/usr/bin/env bash`) - Shebangs must use `#!/bin/bash` consistently (never `#!/usr/bin/env bash`)
- Scripts under `install/` and `migrations/` may be sourced and intentionally omit shebangs
# Command Naming # Command Naming
All commands start with `omarchy-`. Prefixes indicate purpose: All commands start with `omarchy-`. Prefixes indicate purpose.
The authoritative command group list lives in `bin/omarchy` in `GROUP_DESCRIPTIONS`. Keep `GROUP_DESCRIPTIONS` updated when adding a new command prefix.
Common prefixes include:
- `cmd-` - check if commands exist, misc utility commands - `cmd-` - check if commands exist, misc utility commands
- `capture-` - screenshots, screen recordings, and other capture tools - `capture-` - screenshots, screen recordings, and other capture tools
@@ -24,6 +29,51 @@ All commands start with `omarchy-`. Prefixes indicate purpose:
- `theme-` - theme management - `theme-` - theme management
- `update-` - update components - `update-` - update components
Other current prefixes include:
- `ac-`, `audio-`, `battery-`, `branch-`, `brightness-`, `channel-`, `config-`, `debug-`, `dev-`, `drive-`, `first-`, `font-`, `haptic-`, `hibernation-`, `hook-`, `hyprland-`, `menu-`, `migrate-`, `notification-`, `npx-`, `plymouth-`, `powerprofiles-`, `reinstall-`, `remove-`, `screensaver-`, `show-`, `snapshot-`, `state-`, `sudo-`, `swayosd-`, `system-`, `transcode-`, `tui-`, `tz-`, `upload-`, `version-`, `voxtype-`, `webapp-`, `wifi-`, `windows-`
# Command Metadata
Commands in `bin/` can declare CLI metadata in comments near the top of the file. `bin/omarchy` scans the first 80 lines, and tests expect command metadata to remain valid.
Supported metadata keys:
- `# omarchy:summary=...` - short help text
- `# omarchy:group=...` - command group when it differs from the filename-derived prefix
- `# omarchy:name=...` - command name within the group
- `# omarchy:args=...` - usage arguments
- `# omarchy:examples=...` - examples separated with ` | `
- `# omarchy:alias=...` / `# omarchy:aliases=...` - alternate routes
- `# omarchy:requires-sudo=true` - mark commands that require sudo
Prefer explicit metadata for user-facing commands. Keep routes consistent with the filename unless there is a deliberate alias or compatibility route.
Example:
```bash
# omarchy:summary=Take a screenshot
# omarchy:group=capture
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy]
# omarchy:examples=omarchy screenshot | omarchy capture screenshot region
# omarchy:aliases=omarchy screenshot
```
# Install Scripts
Install entry points (`install.sh`, `boot.sh`) use `#!/bin/bash`. Many scripts under `install/` are sourced via `run_logged` and intentionally do not have shebangs.
Install stage files follow this pattern:
- `install/*/all.sh` lists scripts in execution order
- leaf scripts are sourced by `run_logged $OMARCHY_INSTALL/path/to/script.sh`
- avoid `exit` in sourced install scripts unless intentionally aborting the install
- use `$OMARCHY_INSTALL` and `$OMARCHY_PATH` instead of hard-coded Omarchy paths
- keep hardware-specific logic under `install/config/hardware/`
- prefer helper commands for package and command checks where available
Raw `command -v`, `pacman`, and `pacman-key` are acceptable in bootstrap/preflight/package-helper contexts where the helper commands may not be available yet or where direct package-manager behavior is the point of the script.
# Helper Commands # Helper Commands
Use these instead of raw shell commands: Use these instead of raw shell commands:
@@ -33,6 +83,8 @@ Use these instead of raw shell commands:
- `omarchy-pkg-add` - install packages (handles both pacman and AUR) - `omarchy-pkg-add` - install packages (handles both pacman and AUR)
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands) - `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
Exceptions are allowed for bootstrap, preflight, migration, and package-helper scripts where the helper may not be available yet, where the helper itself is being implemented, or where direct package-manager behavior is required.
# Config Structure # Config Structure
- `config/` - default configs copied to `~/.config/` - `config/` - default configs copied to `~/.config/`
@@ -53,10 +105,15 @@ This copies `~/.local/share/omarchy/config/hypr/hyprlock.conf` to `~/.config/hyp
To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit. To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit.
Migration format: New migration format:
- No shebang line - No shebang line
- Start with an `echo` describing what the migration does - Start with an `echo` describing what the migration does
- Use `$OMARCHY_PATH` to reference the omarchy directory - Use `$OMARCHY_PATH` to reference the omarchy directory
- Prefer helper commands such as `omarchy-cmd-present`, `omarchy-cmd-missing`, `omarchy-pkg-present`, and `omarchy-pkg-missing`
Some older migrations predate these rules. Do not copy older migrations that start with shebangs, omit the leading `echo`, or hard-code `~/.local/share/omarchy`.
Migrations may use raw `pacman`, `command -v`, or direct config edits when needed for historical compatibility or one-off repair work.
Example: Example:
```bash ```bash
+4
View File
@@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Foot Server
NoDisplay=true
+21
View File
@@ -0,0 +1,21 @@
[Desktop Entry]
Type=Application
TryExec=foot
Exec=foot
Icon=foot
Terminal=false
Categories=System;TerminalEmulator;
Name=Foot
GenericName=Terminal
Comment=A fast, lightweight and minimalistic Wayland terminal emulator
StartupNotify=true
StartupWMClass=foot
Actions=New;
X-TerminalArgExec=-e
X-TerminalArgAppId=--app-id=
X-TerminalArgTitle=--title=
X-TerminalArgDir=--working-directory=
[Desktop Action New]
Name=New Terminal
Exec=foot
+4
View File
@@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Foot Client
NoDisplay=true
+31 -23
View File
@@ -17,6 +17,7 @@ declare -A COMMAND_USAGE
declare -A COMMAND_ARGS declare -A COMMAND_ARGS
declare -A COMMAND_EXAMPLES declare -A COMMAND_EXAMPLES
declare -A COMMAND_REQUIRES_SUDO declare -A COMMAND_REQUIRES_SUDO
declare -A COMMAND_HIDDEN
declare -A COMMAND_ALIASES declare -A COMMAND_ALIASES
declare -A COMMAND_HAS_SUMMARY declare -A COMMAND_HAS_SUMMARY
declare -A COMMAND_METADATA_ERRORS declare -A COMMAND_METADATA_ERRORS
@@ -55,17 +56,17 @@ GROUP_DESCRIPTIONS[reinstall]="Reinstall and reset workflows"
GROUP_DESCRIPTIONS[remove]="Removal workflows" GROUP_DESCRIPTIONS[remove]="Removal workflows"
GROUP_DESCRIPTIONS[restart]="Restart Omarchy components" GROUP_DESCRIPTIONS[restart]="Restart Omarchy components"
GROUP_DESCRIPTIONS[setup]="Interactive setup wizards" GROUP_DESCRIPTIONS[setup]="Interactive setup wizards"
GROUP_DESCRIPTIONS[screensaver]="Screensaver branding and animation"
GROUP_DESCRIPTIONS[snapshot]="System snapshots" GROUP_DESCRIPTIONS[snapshot]="System snapshots"
GROUP_DESCRIPTIONS[state]="Persistent Omarchy state"
GROUP_DESCRIPTIONS[sudo]="Sudo configuration helpers" GROUP_DESCRIPTIONS[sudo]="Sudo configuration helpers"
GROUP_DESCRIPTIONS[swayosd]="SwayOSD status display helpers" GROUP_DESCRIPTIONS[swayosd]="SwayOSD status display helpers"
GROUP_DESCRIPTIONS[system]="Reboot, shutdown, logout, and lock" GROUP_DESCRIPTIONS[system]="Reboot, shutdown, logout, and lock"
GROUP_DESCRIPTIONS[theme]="Theme management" GROUP_DESCRIPTIONS[theme]="Theme management"
GROUP_DESCRIPTIONS[toggle]="Toggle Omarchy features" GROUP_DESCRIPTIONS[toggle]="Toggle Omarchy features"
GROUP_DESCRIPTIONS[transcode]="Image and video transcoding"
GROUP_DESCRIPTIONS[tui]="Terminal UI launchers" GROUP_DESCRIPTIONS[tui]="Terminal UI launchers"
GROUP_DESCRIPTIONS[tz]="Timezone selection" GROUP_DESCRIPTIONS[tz]="Timezone selection"
GROUP_DESCRIPTIONS[update]="Omarchy and system updates" GROUP_DESCRIPTIONS[update]="Omarchy and system updates"
GROUP_DESCRIPTIONS[upload]="Upload helpers"
GROUP_DESCRIPTIONS[version]="Version and channel information" GROUP_DESCRIPTIONS[version]="Version and channel information"
GROUP_DESCRIPTIONS[voxtype]="Voxtype dictation" GROUP_DESCRIPTIONS[voxtype]="Voxtype dictation"
GROUP_DESCRIPTIONS[webapp]="Web app launchers" GROUP_DESCRIPTIONS[webapp]="Web app launchers"
@@ -129,6 +130,7 @@ register_command() {
local examples="" local examples=""
local aliases="" local aliases=""
local requires_sudo="" local requires_sudo=""
local hidden=""
local line="" local line=""
local metadata_key="" local metadata_key=""
local metadata_value="" local metadata_value=""
@@ -184,6 +186,10 @@ register_command() {
requires_sudo="$metadata_value" requires_sudo="$metadata_value"
[[ $metadata_value == "true" ]] || metadata_errors=$(append_pipe_value "$metadata_errors" "requires-sudo must be omitted or true") [[ $metadata_value == "true" ]] || metadata_errors=$(append_pipe_value "$metadata_errors" "requires-sudo must be omitted or true")
;; ;;
hidden)
hidden="$metadata_value"
[[ $metadata_value == "true" ]] || metadata_errors=$(append_pipe_value "$metadata_errors" "hidden must be omitted or true")
;;
*) *)
;; ;;
esac esac
@@ -227,6 +233,7 @@ register_command() {
fi fi
[[ $requires_sudo == "true" ]] || requires_sudo="false" [[ $requires_sudo == "true" ]] || requires_sudo="false"
[[ $hidden == "true" ]] || hidden="false"
local key="$file_binary" local key="$file_binary"
COMMAND_KEYS+=("$key") COMMAND_KEYS+=("$key")
@@ -240,6 +247,7 @@ register_command() {
COMMAND_ARGS["$key"]="$args" COMMAND_ARGS["$key"]="$args"
COMMAND_EXAMPLES["$key"]="$examples" COMMAND_EXAMPLES["$key"]="$examples"
COMMAND_REQUIRES_SUDO["$key"]="$requires_sudo" COMMAND_REQUIRES_SUDO["$key"]="$requires_sudo"
COMMAND_HIDDEN["$key"]="$hidden"
COMMAND_HAS_SUMMARY["$key"]="$has_summary" COMMAND_HAS_SUMMARY["$key"]="$has_summary"
COMMAND_METADATA_ERRORS["$key"]="$metadata_errors" COMMAND_METADATA_ERRORS["$key"]="$metadata_errors"
@@ -319,16 +327,6 @@ command_requires_args() {
[[ -n $required ]] [[ -n $required ]]
} }
load_group_extra_commands() {
local group="$1"
case "$group" in
install)
load_command_by_binary omarchy-pkg-add
;;
esac
}
load_group_commands() { load_group_commands() {
local group="$1" local group="$1"
local file="" local file=""
@@ -342,7 +340,6 @@ load_group_commands() {
register_command "$file" register_command "$file"
done done
load_group_extra_commands "$group"
} }
resolve_direct_route() { resolve_direct_route() {
@@ -375,6 +372,9 @@ sorted_keys() {
local key="" local key=""
for key in "${COMMAND_KEYS[@]}"; do for key in "${COMMAND_KEYS[@]}"; do
if [[ $include_all != "true" && ${COMMAND_HIDDEN[$key]} == "true" ]]; then
continue
fi
printf '%s\t%s\n' "${COMMAND_ROUTE[$key]}" "$key" printf '%s\t%s\n' "${COMMAND_ROUTE[$key]}" "$key"
done | sort -u | cut -f2- done | sort -u | cut -f2-
} }
@@ -418,6 +418,10 @@ sorted_group_keys() {
local route="" local route=""
for key in "${COMMAND_KEYS[@]}"; do for key in "${COMMAND_KEYS[@]}"; do
if [[ $include_all != "true" && ${COMMAND_HIDDEN[$key]} == "true" ]]; then
continue
fi
fallback_group=$(fallback_group_for_key "$key") fallback_group=$(fallback_group_for_key "$key")
if [[ ${COMMAND_GROUP[$key]} != "$group" && $fallback_group != "$group" ]]; then if [[ ${COMMAND_GROUP[$key]} != "$group" && $fallback_group != "$group" ]]; then
continue continue
@@ -495,8 +499,6 @@ Discovery:
omarchy commands --all Include commands explicitly marked hidden omarchy commands --all Include commands explicitly marked hidden
omarchy commands --json Machine-readable command list omarchy commands --json Machine-readable command list
omarchy commands --check Validate command metadata and routes omarchy commands --check Validate command metadata and routes
omarchy dev benchmark Measure CLI response times
omarchy dev bin metadata Show bin metadata fields and defaults
EOF EOF
} }
@@ -508,7 +510,7 @@ Usage:
List commands known to the Omarchy command center. List commands known to the Omarchy command center.
Options: Options:
--all Accepted for compatibility --all Include commands explicitly marked hidden
--json Emit machine-readable JSON --json Emit machine-readable JSON
--markdown Emit a Markdown command table --markdown Emit a Markdown command table
--check Validate command metadata and route collisions --check Validate command metadata and route collisions
@@ -560,6 +562,9 @@ show_commands() {
for route in "${!ROUTE_IS_ALIAS[@]}"; do for route in "${!ROUTE_IS_ALIAS[@]}"; do
key="${ROUTE_TO_KEY[$route]}" key="${ROUTE_TO_KEY[$route]}"
if [[ $include_all != "true" && ${COMMAND_HIDDEN[$key]} == "true" ]]; then
continue
fi
alias_rows+="$route"$'\t'"${COMMAND_ROUTE[$key]}"$'\n' alias_rows+="$route"$'\t'"${COMMAND_ROUTE[$key]}"$'\n'
done done
@@ -598,13 +603,14 @@ emit_command_records() {
while IFS= read -r key; do while IFS= read -r key; do
[[ -n $key ]] || continue [[ -n $key ]] || continue
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
"${COMMAND_ROUTE[$key]}" \ "${COMMAND_ROUTE[$key]}" \
"${COMMAND_BINARY[$key]}" \ "${COMMAND_BINARY[$key]}" \
"${COMMAND_GROUP[$key]}" \ "${COMMAND_GROUP[$key]}" \
"${COMMAND_NAME[$key]}" \ "${COMMAND_NAME[$key]}" \
"${COMMAND_SUMMARY[$key]}" \ "${COMMAND_SUMMARY[$key]}" \
"${COMMAND_REQUIRES_SUDO[$key]}" \ "${COMMAND_REQUIRES_SUDO[$key]}" \
"${COMMAND_HIDDEN[$key]}" \
"${COMMAND_ARGS[$key]}" \ "${COMMAND_ARGS[$key]}" \
"${COMMAND_EXAMPLES[$key]}" \ "${COMMAND_EXAMPLES[$key]}" \
"${COMMAND_ALIASES[$key]}" \ "${COMMAND_ALIASES[$key]}" \
@@ -622,11 +628,12 @@ commands_json_filter() {
name: .[3], name: .[3],
summary: .[4], summary: .[4],
requires_sudo: (.[5] == "true"), requires_sudo: (.[5] == "true"),
args: .[6], hidden: (.[6] == "true"),
examples: (.[7] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))), args: .[7],
aliases: (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))), examples: (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
filename_route: .[9], aliases: (.[9] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
routes: ([.[0], .[9]] + (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))) | unique) filename_route: .[10],
routes: ([.[0], .[10]] + (.[9] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))) | unique)
}] | {ok: true, commands: .} }] | {ok: true, commands: .}
EOF EOF
} }
@@ -680,13 +687,14 @@ show_command_json() {
local key="$1" local key="$1"
printf '%s\n' "$key" | while IFS= read -r key; do printf '%s\n' "$key" | while IFS= read -r key; do
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
"${COMMAND_ROUTE[$key]}" \ "${COMMAND_ROUTE[$key]}" \
"${COMMAND_BINARY[$key]}" \ "${COMMAND_BINARY[$key]}" \
"${COMMAND_GROUP[$key]}" \ "${COMMAND_GROUP[$key]}" \
"${COMMAND_NAME[$key]}" \ "${COMMAND_NAME[$key]}" \
"${COMMAND_SUMMARY[$key]}" \ "${COMMAND_SUMMARY[$key]}" \
"${COMMAND_REQUIRES_SUDO[$key]}" \ "${COMMAND_REQUIRES_SUDO[$key]}" \
"${COMMAND_HIDDEN[$key]}" \
"${COMMAND_ARGS[$key]}" \ "${COMMAND_ARGS[$key]}" \
"${COMMAND_EXAMPLES[$key]}" \ "${COMMAND_EXAMPLES[$key]}" \
"${COMMAND_ALIASES[$key]}" \ "${COMMAND_ALIASES[$key]}" \
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Designed to be run by systemd timer every 30 seconds and alerts if battery is low # omarchy:summary=Designed to be run by systemd timer every 30 seconds and alerts if battery is low
# omarchy:hidden=true
BATTERY_THRESHOLD=10 BATTERY_THRESHOLD=10
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified" NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
+15 -6
View File
@@ -1,15 +1,11 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Adjust brightness on the most likely display device. # omarchy:summary=Adjust brightness on the most likely display device.
# omarchy:args=<step> # omarchy:args=<+N%|N%-|N%|off|on>
# omarchy:examples=omarchy brightness display +5% | omarchy brightness display 5%- | omarchy brightness display 50% | omarchy brightness display off | omarchy brightness display on
step="${1:-+5%}" 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. # 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)" device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
for candidate in amdgpu_bl* intel_backlight acpi_video*; do for candidate in amdgpu_bl* intel_backlight acpi_video*; do
@@ -19,6 +15,19 @@ for candidate in amdgpu_bl* intel_backlight acpi_video*; do
fi fi
done done
if [[ $step == "off" ]]; then
hyprctl dispatch dpms off >/dev/null 2>&1
exit 0
elif [[ $step == "on" ]]; then
hyprctl dispatch dpms on >/dev/null 2>&1
exit 0
fi
if omarchy-hyprland-monitor-focused-apple; then
omarchy-brightness-display-apple "$step"
exit
fi
# Current brightness percentage # Current brightness percentage
current=$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%') current=$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')
+2
View File
@@ -1,6 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol. # omarchy:summary=Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
# omarchy:args=<+N%|N%-|N%>
# omarchy:examples=omarchy brightness display apple +5% | omarchy brightness display apple 5%- | omarchy brightness display apple 50%
if (( $# == 0 )); then if (( $# == 0 )); then
echo "Adjust Apple Display brightness by passing +5%, 5%-, or 100%" echo "Adjust Apple Display brightness by passing +5%, 5%-, or 100%"
+9 -1
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Adjust keyboard backlight brightness using available steps. # omarchy:summary=Adjust keyboard backlight brightness using available steps.
# omarchy:args=<up|down|cycle> # omarchy:args=<up|down|cycle|off|restore>
direction="${1:-up}" direction="${1:-up}"
@@ -19,6 +19,14 @@ if [[ -z $device ]]; then
exit 1 exit 1
fi fi
if [[ $direction == "off" ]]; then
brightnessctl -sd "$device" set 0 >/dev/null
exit 0
elif [[ $direction == "restore" ]]; then
brightnessctl -rd "$device" >/dev/null
exit 0
fi
# Get current and max brightness to determine step size. # Get current and max brightness to determine step size.
max_brightness="$(brightnessctl -d "$device" max)" max_brightness="$(brightnessctl -d "$device" max)"
current_brightness="$(brightnessctl -d "$device" get)" current_brightness="$(brightnessctl -d "$device" get)"
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Print the current working directory of the active terminal window # omarchy:summary=Print the current working directory of the active terminal window
# omarchy:hidden=true
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)
+4 -1
View File
@@ -22,7 +22,8 @@ show_json() {
{name: "args", required: false, type: "string", note: "Only set when the command accepts arguments."}, {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: "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: "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."} {name: "requires-sudo", required: false, type: "true", default: false, note: "Only include when true."},
{name: "hidden", required: false, type: "true", default: false, note: "Hide from default command listings; visible with --all."}
] ]
}' }'
} }
@@ -43,6 +44,7 @@ Inferred defaults:
route omarchy <group> <name> route omarchy <group> <name>
binary filename binary filename
requires-sudo false requires-sudo false
hidden false
Optional fields: Optional fields:
# omarchy:group=<group> route override only # omarchy:group=<group> route override only
@@ -51,6 +53,7 @@ Optional fields:
# omarchy:examples=<cmd> | <cmd> pipe-separated examples # omarchy:examples=<cmd> | <cmd> pipe-separated examples
# omarchy:aliases=<route> | <route> pipe-separated alternate routes # omarchy:aliases=<route> | <route> pipe-separated alternate routes
# omarchy:requires-sudo=true only when true # omarchy:requires-sudo=true only when true
# omarchy:hidden=true hide from default command listings
Do not define: Do not define:
binary inferred from filename binary inferred from filename
+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. # omarchy:summary=Select a drive from a list with info that includes space and brand. Used by omarchy-drive-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)')
+1
View File
@@ -16,6 +16,7 @@ if [[ -f $FIRST_RUN_MODE ]]; then
bash "$OMARCHY_PATH/install/first-run/firewall.sh" bash "$OMARCHY_PATH/install/first-run/firewall.sh"
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh" bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh" bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
bash "$OMARCHY_PATH/install/first-run/gtk-primary-paste.sh"
bash "$OMARCHY_PATH/install/first-run/elephant.sh" bash "$OMARCHY_PATH/install/first-run/elephant.sh"
sudo rm -f /etc/sudoers.d/first-run sudo rm -f /etc/sudoers.d/first-run
+8
View File
@@ -22,6 +22,10 @@ if [[ -n $font_name ]]; then
pkill -SIGUSR2 ghostty pkill -SIGUSR2 ghostty
fi fi
if [[ -f ~/.config/foot/foot.ini ]]; then
sed -i "s/^font=.*/font=$font_name:size=9/g" ~/.config/foot/foot.ini
fi
sed -i "s/font_family = .*/font_family = $font_name/g" ~/.config/hypr/hyprlock.conf sed -i "s/font_family = .*/font_family = $font_name/g" ~/.config/hypr/hyprlock.conf
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
@@ -37,6 +41,10 @@ if [[ -n $font_name ]]; then
notify-send -u low " You must restart Ghostty to see font change" notify-send -u low " You must restart Ghostty to see font change"
fi fi
if pgrep -x foot; then
notify-send -u low " You must restart Foot to see font change"
fi
omarchy-hook font-set "$font_name" omarchy-hook font-set "$font_name"
else else
echo "Font '$font_name' not found." echo "Font '$font_name' not found."
+1 -1
View File
@@ -2,4 +2,4 @@
# omarchy:summary=Return success if the focused Hyprland monitor is an Apple display. # 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 hyprctl monitors -j | jq -e '.[] | select(.focused == true) | select(.make == "Apple Computer Inc" and (.model | test("StudioDisplay|ProDisplayXDR|Studio XDR")))' >/dev/null
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Cycle scaling for the focused Hyprland monitor # omarchy:summary=Cycle focused Hyprland monitor scaling through 1x, 1.25x, 1.6x, 2x, and 3x
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')
+106
View File
@@ -0,0 +1,106 @@
#!/bin/bash
# omarchy:summary=Install a supported browser and make it the default
# omarchy:args=<chrome|brave|brave-origin|edge|firefox|zen>
# omarchy:examples=omarchy install browser firefox | omarchy install browser brave
make_default() {
xdg-settings set default-web-browser "$1"
xdg-mime default "$1" x-scheme-handler/http
xdg-mime default "$1" x-scheme-handler/https
xdg-mime default "$1" text/html
}
setup_policy_directory() {
sudo mkdir -p "$1"
sudo chmod a+rw "$1"
}
announce_default_browser() {
echo ""
echo "$1 is now the default browser. Start it with Super + Shift + Return."
}
copy_chromium_flags() {
mkdir -p ~/.config
cp -f "${OMARCHY_PATH:-$HOME/.local/share/omarchy}/config/chromium-flags.conf" "$1"
}
setup_firefox_preferences() {
local distribution_dir="$1"
setup_policy_directory "$distribution_dir"
sudo cp -f "$OMARCHY_PATH/default/firefox/policies.json" "$distribution_dir/policies.json"
}
setup_firefox_wayland() {
mkdir -p ~/.config/environment.d
echo "MOZ_ENABLE_WAYLAND=1" > ~/.config/environment.d/omarchy-firefox-wayland.conf
}
case $1 in
chrome)
echo "Installing Chrome..."
omarchy-pkg-aur-add google-chrome || exit 1
setup_policy_directory /etc/opt/chrome/policies/managed
copy_chromium_flags ~/.config/chrome-flags.conf
make_default google-chrome.desktop
omarchy-theme-set-browser
announce_default_browser "Chrome"
;;
edge)
echo "Installing Edge..."
omarchy-pkg-aur-add microsoft-edge-stable-bin || exit 1
setup_policy_directory /etc/opt/edge/policies/managed
copy_chromium_flags ~/.config/microsoft-edge-stable-flags.conf
make_default microsoft-edge.desktop
omarchy-theme-set-browser
announce_default_browser "Edge"
;;
brave)
echo "Installing Brave..."
omarchy-pkg-aur-add brave-bin || exit 1
setup_policy_directory /etc/brave/policies/managed
copy_chromium_flags ~/.config/brave-flags.conf
make_default brave-browser.desktop
omarchy-theme-set-browser
announce_default_browser "Brave"
;;
brave-origin)
echo "Installing Brave Origin..."
omarchy-pkg-aur-add brave-origin-beta-bin || exit 1
setup_policy_directory /etc/brave/policies/managed
mkdir -p ~/.config
# FIXME: Use normal chromium flags when Brave Origin wrapper has been fixed
echo "--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url" > ~/.config/brave-origin-beta-flags.conf
make_default brave-origin-beta.desktop
omarchy-theme-set-browser
announce_default_browser "Brave Origin"
;;
firefox)
echo "Installing Firefox..."
omarchy-pkg-add firefox || exit 1
setup_firefox_preferences /usr/lib/firefox/distribution
setup_firefox_wayland
make_default firefox.desktop
announce_default_browser "Firefox"
;;
zen)
echo "Installing Zen..."
omarchy-pkg-aur-add zen-browser-bin || exit 1
setup_firefox_preferences /opt/zen-browser/distribution
setup_firefox_wayland
make_default zen.desktop
announce_default_browser "Zen"
;;
*)
echo "Usage: omarchy-install-browser <chrome|brave|brave-origin|edge|firefox|zen>"
exit 1
;;
esac
+4 -2
View File
@@ -21,8 +21,9 @@ omarchy-pkg-add \
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \ libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \ libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
libretro-yabause \ libretro-yabause \
libretro-fbneo-git \ libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
libretro-database-git libretro-database-git \
retroarch-joypad-autoconfig-git
# Set up ~/Games for BIOS files and ROMs # Set up ~/Games for BIOS files and ROMs
mkdir -p "$HOME/Games/bios" "$HOME/Games/roms" mkdir -p "$HOME/Games/bios" "$HOME/Games/roms"
@@ -49,6 +50,7 @@ set_cfg libretro_info_path "/usr/share/libretro/info"
set_cfg overlay_directory "/usr/share/libretro/overlays" set_cfg overlay_directory "/usr/share/libretro/overlays"
set_cfg osk_overlay_directory "/usr/share/libretro/overlays/keyboards" set_cfg osk_overlay_directory "/usr/share/libretro/overlays/keyboards"
set_cfg video_shader_dir "/usr/share/libretro/shaders/shaders_slang" set_cfg video_shader_dir "/usr/share/libretro/shaders/shaders_slang"
set_cfg joypad_autoconfig_dir "/usr/share/libretro/autoconfig"
# Point at the database, cheats, and cursors from libretro-database-git # Point at the database, cheats, and cursors from libretro-database-git
set_cfg content_database_path "/usr/share/libretro/database/rdb" set_cfg content_database_path "/usr/share/libretro/database/rdb"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Install Helix and configure it to use the current Omarchy theme. # omarchy:summary=Install Helix and configure it to use the current Omarchy theme
echo "Installing Helix..." echo "Installing Helix..."
omarchy-pkg-add helix omarchy-pkg-add helix
+11 -5
View File
@@ -1,11 +1,11 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc). # omarchy:summary=Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc).
# omarchy:args=<alacritty|ghostty|kitty> # omarchy:args=<alacritty|foot|ghostty|kitty>
# omarchy:requires-sudo=true # omarchy:requires-sudo=true
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-install-terminal [alacritty|ghostty|kitty]" echo "Usage: omarchy-install-terminal [alacritty|foot|ghostty|kitty]"
exit 1 exit 1
fi fi
@@ -14,6 +14,7 @@ package="$1"
# Map package name to desktop entry ID # Map package name to desktop entry ID
case "$package" in case "$package" in
alacritty) desktop_id="Alacritty.desktop" ;; alacritty) desktop_id="Alacritty.desktop" ;;
foot) desktop_id="foot.desktop" ;;
ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;; ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;;
kitty) desktop_id="kitty.desktop" ;; kitty) desktop_id="kitty.desktop" ;;
*) *)
@@ -26,10 +27,15 @@ echo "Installing $package..."
# Install package # Install package
if omarchy-pkg-add $package; then if omarchy-pkg-add $package; then
# Copy custom desktop entry for alacritty with X-TerminalArg* keys # Copy custom desktop entries with X-TerminalArg* keys
if [[ $package == "alacritty" ]]; then if [[ $package == "alacritty" || $package == "foot" ]]; then
mkdir -p ~/.local/share/applications mkdir -p ~/.local/share/applications
cp $OMARCHY_PATH/applications/Alacritty.desktop ~/.local/share/applications/ cp "$OMARCHY_PATH/applications/$desktop_id" ~/.local/share/applications/
fi
# Copy default config for optional terminals when missing
if [[ ! -e ~/.config/$package ]]; then
cp -Rpf "$OMARCHY_PATH/config/$package" ~/.config/
fi fi
# Update xdg-terminals.list to prioritize the proper terminal # Update xdg-terminals.list to prioritize the proper terminal
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
# omarchy:summary=Install Zed Editor and configure it with the current Omarchy theme
echo "Installing Zed Editor..."
omarchy-pkg-add zed omazed
# Apply Omarchy theme to Zed
omazed setup
setsid gtk-launch dev.zed.Zed
+7 -1
View File
@@ -37,6 +37,12 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
--font-size=18 \ --font-size=18 \
-e omarchy-screensaver -e omarchy-screensaver
;; ;;
*foot*)
hyprctl dispatch exec -- \
foot --app-id=org.omarchy.screensaver \
--config="$OMARCHY_PATH/default/foot/screensaver.ini" \
-e omarchy-screensaver
;;
*kitty*) *kitty*)
hyprctl dispatch exec -- \ hyprctl dispatch exec -- \
kitty --class=org.omarchy.screensaver \ kitty --class=org.omarchy.screensaver \
@@ -45,7 +51,7 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
-e omarchy-screensaver -e omarchy-screensaver
;; ;;
*) *)
notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty" notify-send -u low "✋ Screensaver only runs in Alacritty, Foot, Ghostty, or Kitty"
;; ;;
esac esac
done done
+69 -8
View File
@@ -93,8 +93,9 @@ show_learn_menu() {
} }
show_trigger_menu() { show_trigger_menu() {
case $(menu "Trigger" " Capture\n Share\n󰔎 Toggle\n Hardware") in case $(menu "Trigger" " Capture\n󰧸 Transcode\n Share\n󰔎 Toggle\n Hardware") in
*Capture*) show_capture_menu ;; *Capture*) show_capture_menu ;;
*Transcode*) show_transcode_menu ;;
*Share*) show_share_menu ;; *Share*) show_share_menu ;;
*Toggle*) show_toggle_menu ;; *Toggle*) show_toggle_menu ;;
*Hardware*) show_hardware_menu ;; *Hardware*) show_hardware_menu ;;
@@ -166,6 +167,14 @@ show_share_menu() {
esac esac
} }
show_transcode_menu() {
case $(menu "Transcode" " Picture\n Video") in
*Picture*) present_terminal "omarchy-transcode --path '$HOME/Pictures'" ;;
*Video*) present_terminal "omarchy-transcode --path '$HOME/Videos'" ;;
*) back_to show_trigger_menu ;;
esac
}
show_toggle_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󰂛 Notifications\n󰍜 Top Bar\n󱂬 Workspace Layout\n Window Gaps\n 1-Window Ratio\n󰍹 Monitor Scaling\n Direct Boot\n󰟵 Passwordless Sudo"
@@ -217,12 +226,36 @@ show_style_menu() {
*Font*) show_font_menu ;; *Font*) show_font_menu ;;
*Background*) show_background_menu ;; *Background*) show_background_menu ;;
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;; *Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
*Screensaver*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;; *Screensaver*) show_screensaver_menu ;;
*About*) open_in_editor ~/.config/omarchy/branding/about.txt ;; *About*) open_in_editor ~/.config/omarchy/branding/about.txt ;;
*) show_main_menu ;; *) show_main_menu ;;
esac esac
} }
show_screensaver_menu() {
case $(menu "Screensaver" " Edit Text\n Set From Image\n󱄄 Preview\n Restore Default") in
*Text*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
*Image*) set_screensaver_from_image ;;
*Preview*) omarchy-launch-screensaver force ;;
*Default*) terminal bash -lc 'omarchy-screensaver-logo default; echo; read -n 1 -s -r -p "Press any key to close..."' ;;
*) show_style_menu ;;
esac
}
set_screensaver_from_image() {
terminal bash -lc '
image=$(fd --type file --ignore-case --extension svg --extension png . "$HOME" 2>/dev/null | fzf --prompt "Logo image> ")
if [[ -n $image ]]; then
if omarchy-screensaver-logo "$image"; then
echo
echo "Preview with: omarchy-launch-screensaver force"
fi
echo
read -n 1 -s -r -p "Press any key to close..."
fi
'
}
show_theme_menu() { show_theme_menu() {
omarchy-launch-walker -m menus:omarchythemes --width 800 --minheight 400 omarchy-launch-walker -m menus:omarchythemes --width 800 --minheight 400
} }
@@ -319,7 +352,7 @@ show_setup_system_menu() {
} }
show_install_menu() { show_install_menu() {
case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n Terminal\n󱚤 AI\n󰍲 Windows\n Gaming") in case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n Terminal\n Browser\n󱚤 AI\n Gaming\n󰍲 Windows") in
*Package*) terminal omarchy-pkg-install ;; *Package*) terminal omarchy-pkg-install ;;
*AUR*) terminal omarchy-pkg-aur-install ;; *AUR*) terminal omarchy-pkg-aur-install ;;
*Web*) present_terminal omarchy-webapp-install ;; *Web*) present_terminal omarchy-webapp-install ;;
@@ -329,13 +362,26 @@ show_install_menu() {
*Development*) show_install_development_menu ;; *Development*) show_install_development_menu ;;
*Editor*) show_install_editor_menu ;; *Editor*) show_install_editor_menu ;;
*Terminal*) show_install_terminal_menu ;; *Terminal*) show_install_terminal_menu ;;
*Browser*) show_install_browser_menu ;;
*Gaming*) show_install_gaming_menu ;;
*AI*) show_install_ai_menu ;; *AI*) show_install_ai_menu ;;
*Windows*) present_terminal "omarchy-windows-vm install" ;; *Windows*) present_terminal "omarchy-windows-vm install" ;;
*Gaming*) show_install_gaming_menu ;;
*) show_main_menu ;; *) show_main_menu ;;
esac esac
} }
show_install_browser_menu() {
case $(menu "Install" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in
*Chrome*) present_terminal "omarchy-install-browser chrome" ;;
*Edge*) present_terminal "omarchy-install-browser edge" ;;
*"Brave Origin"*) present_terminal "omarchy-install-browser brave-origin" ;;
*Brave*) present_terminal "omarchy-install-browser brave" ;;
*Firefox*) present_terminal "omarchy-install-browser firefox" ;;
*Zen*) present_terminal "omarchy-install-browser zen" ;;
*) show_install_menu ;;
esac
}
show_install_service_menu() { show_install_service_menu() {
case $(menu "Install" " Dropbox\n Tailscale\n󱇱 NordVPN [AUR]\n󰏖 ONCE\n󰟵 Bitwarden\n Chromium Account") in case $(menu "Install" " Dropbox\n Tailscale\n󱇱 NordVPN [AUR]\n󰏖 ONCE\n󰟵 Bitwarden\n Chromium Account") in
*Dropbox*) present_terminal omarchy-install-dropbox ;; *Dropbox*) present_terminal omarchy-install-dropbox ;;
@@ -352,7 +398,7 @@ show_install_editor_menu() {
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
*VSCode*) present_terminal omarchy-install-vscode ;; *VSCode*) present_terminal omarchy-install-vscode ;;
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;; *Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;; *Zed*) present_terminal omarchy-install-zed ;;
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; *Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
*Helix*) present_terminal omarchy-install-helix ;; *Helix*) present_terminal omarchy-install-helix ;;
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;; *Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
@@ -361,8 +407,9 @@ show_install_editor_menu() {
} }
show_install_terminal_menu() { show_install_terminal_menu() {
case $(menu "Install" " Alacritty\n Ghostty\n Kitty") in case $(menu "Install" " Alacritty\n Foot\n Ghostty\n Kitty") in
*Alacritty*) install_terminal "alacritty" ;; *Alacritty*) install_terminal "alacritty" ;;
*Foot*) install_terminal "foot" ;;
*Ghostty*) install_terminal "ghostty" ;; *Ghostty*) install_terminal "ghostty" ;;
*Kitty*) install_terminal "kitty" ;; *Kitty*) install_terminal "kitty" ;;
*) show_install_menu ;; *) show_install_menu ;;
@@ -468,8 +515,9 @@ show_install_elixir_menu() {
} }
show_remove_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 Browser\n Web App\n TUI\n󰵮 Development\n Gaming\n󰏓 Preinstalls\n Dictation\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in
*Package*) terminal omarchy-pkg-remove ;; *Package*) terminal omarchy-pkg-remove ;;
*Browser*) show_remove_browser_menu ;;
*Web*) present_terminal omarchy-webapp-remove ;; *Web*) present_terminal omarchy-webapp-remove ;;
*TUI*) present_terminal omarchy-tui-remove ;; *TUI*) present_terminal omarchy-tui-remove ;;
*Development*) show_remove_development_menu ;; *Development*) show_remove_development_menu ;;
@@ -484,6 +532,18 @@ show_remove_menu() {
esac esac
} }
show_remove_browser_menu() {
case $(menu "Remove" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in
*Chrome*) present_terminal "omarchy-remove-browser chrome" ;;
*Edge*) present_terminal "omarchy-remove-browser edge" ;;
*"Brave Origin"*) present_terminal "omarchy-remove-browser brave-origin" ;;
*Brave*) present_terminal "omarchy-remove-browser brave" ;;
*Firefox*) present_terminal "omarchy-remove-browser firefox" ;;
*Zen*) present_terminal "omarchy-remove-browser zen" ;;
*) show_remove_menu ;;
esac
}
show_remove_gaming_menu() { 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 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 ;; *Steam*) present_terminal omarchy-remove-gaming-steam ;;
@@ -608,7 +668,7 @@ show_update_hardware_menu() {
show_update_password_menu() { show_update_password_menu() {
case $(menu "Update Password" " Drive Encryption\n User") in case $(menu "Update Password" " Drive Encryption\n User") in
*Drive*) present_terminal omarchy-drive-set-password ;; *Drive*) present_terminal omarchy-drive-password ;;
*User*) present_terminal passwd ;; *User*) present_terminal passwd ;;
*) show_update_menu ;; *) show_update_menu ;;
esac esac
@@ -648,6 +708,7 @@ go_to_menu() {
*toggle*) show_toggle_menu ;; *toggle*) show_toggle_menu ;;
*hardware*) show_hardware_menu ;; *hardware*) show_hardware_menu ;;
*share*) show_share_menu ;; *share*) show_share_menu ;;
*transcode*) show_transcode_menu ;;
*background*) show_background_menu ;; *background*) show_background_menu ;;
*capture*) show_capture_menu ;; *capture*) show_capture_menu ;;
*style*) show_style_menu ;; *style*) show_style_menu ;;
+1 -3
View File
@@ -1,10 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Install Arch packages if they are missing # omarchy:summary=Install Arch packages if they are missing
# omarchy:group=install
# omarchy:name=package
# omarchy:args=<packages...> # omarchy:args=<packages...>
# omarchy:examples=omarchy install package jq ripgrep # omarchy:examples=omarchy pkg add jq ripgrep
# omarchy:requires-sudo=true # omarchy:requires-sudo=true
if omarchy-pkg-missing "$@"; then if omarchy-pkg-missing "$@"; then
+1
View File
@@ -2,6 +2,7 @@
# omarchy:summary=Preview a Plymouth boot screen with custom colors and logo # omarchy:summary=Preview a Plymouth boot screen with custom colors and logo
# omarchy:args=<background-hex> <text-hex> <path-to-logo.png> <output-path> # omarchy:args=<background-hex> <text-hex> <path-to-logo.png> <output-path>
# omarchy:examples=omarchy plymouth preview '#1d2021' '#ebdbb2' ~/.config/omarchy/current/theme/plymouth/logo.png /tmp/plymouth-preview.png
# Render a Plymouth login-screen preview PNG by compositing the staged omarchy # Render a Plymouth login-screen preview PNG by compositing the staged omarchy
# theme assets (recolored with the given text color) onto the background. # theme assets (recolored with the given text color) onto the background.
+1
View File
@@ -2,6 +2,7 @@
# omarchy:summary=Set the Plymouth boot theme colors and logo # omarchy:summary=Set the Plymouth boot theme colors and logo
# omarchy:args=<background-hex> <text-hex> <path-to-logo.png> # omarchy:args=<background-hex> <text-hex> <path-to-logo.png>
# omarchy:examples=omarchy plymouth set '#1d2021' '#ebdbb2' ~/.config/omarchy/current/theme/plymouth/logo.png
# omarchy:requires-sudo=true # omarchy:requires-sudo=true
# Configure the Plymouth boot theme with a custom background color, text color, and logo. # Configure the Plymouth boot theme with a custom background color, text color, and logo.
+73
View File
@@ -0,0 +1,73 @@
#!/bin/bash
# omarchy:summary=Remove a supported browser and clean up Omarchy browser defaults
# omarchy:args=<chrome|brave|brave-origin|edge|firefox|zen>
# omarchy:examples=omarchy remove browser firefox | omarchy remove browser brave
# omarchy:requires-sudo=true
set_fallback_default_browser() {
local current_browser
current_browser=$(xdg-settings get default-web-browser)
if [[ $current_browser != "$1" ]]; then
return
fi
if omarchy-cmd-present chromium; then
xdg-settings set default-web-browser chromium.desktop
xdg-mime default chromium.desktop x-scheme-handler/http
xdg-mime default chromium.desktop x-scheme-handler/https
xdg-mime default chromium.desktop text/html
fi
}
case $1 in
chrome)
echo "Removing Chrome..."
set_fallback_default_browser google-chrome.desktop
omarchy-pkg-drop google-chrome
rm -f ~/.config/chrome-flags.conf
sudo rm -f /etc/opt/chrome/policies/managed/color.json
;;
edge)
echo "Removing Edge..."
set_fallback_default_browser microsoft-edge.desktop
omarchy-pkg-drop microsoft-edge-stable-bin
rm -f ~/.config/microsoft-edge-stable-flags.conf
sudo rm -f /etc/opt/edge/policies/managed/color.json
;;
brave)
echo "Removing Brave..."
set_fallback_default_browser brave-browser.desktop
omarchy-pkg-drop brave-bin
rm -f ~/.config/brave-flags.conf
if omarchy-pkg-missing brave-origin-beta-bin; then
sudo rm -rf /etc/brave
fi
;;
brave-origin)
echo "Removing Brave Origin..."
set_fallback_default_browser brave-origin-beta.desktop
omarchy-pkg-drop brave-origin-beta-bin
rm -f ~/.config/brave-origin-beta-flags.conf
if omarchy-pkg-missing brave-bin; then
sudo rm -rf /etc/brave
fi
;;
firefox)
echo "Removing Firefox..."
set_fallback_default_browser firefox.desktop
omarchy-pkg-drop firefox
;;
zen)
echo "Removing Zen..."
set_fallback_default_browser zen.desktop
omarchy-pkg-drop zen-browser-bin
;;
*)
echo "Usage: omarchy-remove-browser <chrome|brave|brave-origin|edge|firefox|zen>"
exit 1
;;
esac
+2 -1
View File
@@ -21,7 +21,8 @@ omarchy-pkg-drop \
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \ libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \ libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
libretro-yabause \ libretro-yabause \
libretro-fbneo-git libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
retroarch-joypad-autoconfig-git
rm -rf \ rm -rf \
"$HOME/.config/retroarch" \ "$HOME/.config/retroarch" \
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Reload Helix configuration (used by the Omarchy theme switching). # omarchy:summary=Reload Helix configuration
if pgrep -x helix >/dev/null; then if pgrep -x helix >/dev/null; then
pkill -USR1 helix pkill -USR1 helix
+1 -1
View File
@@ -4,7 +4,7 @@
# omarchy:requires-sudo=true # omarchy:requires-sudo=true
for dev in /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-*; do for dev in /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-*; do
[ -e "$dev" ] || continue [[ -e $dev ]] || continue
I2C_DEVICE=$(basename "$dev") I2C_DEVICE=$(basename "$dev")
echo "Resetting $I2C_DEVICE via i2c_hid_acpi unbind/rebind..." echo "Resetting $I2C_DEVICE via i2c_hid_acpi unbind/rebind..."
echo "$I2C_DEVICE" | sudo tee /sys/bus/i2c/drivers/i2c_hid_acpi/unbind > /dev/null echo "$I2C_DEVICE" | sudo tee /sys/bus/i2c/drivers/i2c_hid_acpi/unbind > /dev/null
+384
View File
@@ -0,0 +1,384 @@
#!/bin/bash
# omarchy:summary=Set the screensaver logo text from an SVG/PNG or the default
# omarchy:args=<default|path-to-logo.svg|png> [--width <columns>] [--height <rows>] [--mode <braille|block>] [--threshold <percent>] [--invert] [--stdout]
# omarchy:examples=omarchy screensaver logo ~/logo.svg | omarchy screensaver logo default | omarchy screensaver logo ~/logo.png --width 80 --mode block --stdout
set -o pipefail
usage() {
cat <<'EOF'
Usage: omarchy-screensaver-logo <default|path-to-logo.svg|png> [options]
Sets the screensaver logo text from an image.
Pass "default" instead of an image path to restore the Omarchy default.
By default, writes to ~/.config/omarchy/branding/screensaver.txt.
Options:
-w, --width <columns> Maximum output width in terminal columns (default: 80)
-H, --height <rows> Maximum output height in terminal rows (default: 26)
-m, --mode <braille|block> Output style (default: braille)
-t, --threshold <percent> Pixel threshold from 0-100 (default: 50)
--invert Treat light pixels as the logo instead of dark pixels
--no-trim Preserve surrounding whitespace/background
--stdout Print converted text instead of writing the screensaver file
--help Show this help
EOF
}
width=80
height=26
mode=braille
threshold=50
invert=false
trim=true
output_path="$HOME/.config/omarchy/branding/screensaver.txt"
image_path=""
reset_default=false
while (($# > 0)); do
case "$1" in
--help)
usage
exit 0
;;
-w | --width)
shift
if [[ -z $1 ]]; then
echo "Missing value for --width" >&2
exit 1
fi
width="$1"
;;
--width=*)
width="${1#*=}"
;;
-H | --height)
shift
if [[ -z $1 ]]; then
echo "Missing value for --height" >&2
exit 1
fi
height="$1"
;;
--height=*)
height="${1#*=}"
;;
-m | --mode)
shift
if [[ -z $1 ]]; then
echo "Missing value for --mode" >&2
exit 1
fi
mode="$1"
;;
--mode=*)
mode="${1#*=}"
;;
--block | --blocks)
mode=block
;;
--braille)
mode=braille
;;
-t | --threshold)
shift
if [[ -z $1 ]]; then
echo "Missing value for --threshold" >&2
exit 1
fi
threshold="$1"
;;
--threshold=*)
threshold="${1#*=}"
;;
--invert)
invert=true
;;
--no-trim)
trim=false
;;
--stdout)
output_path="-"
;;
--)
shift
break
;;
-*)
echo "Unknown option: $1" >&2
usage >&2
exit 1
;;
*)
if [[ $1 == "default" && -z $image_path ]]; then
reset_default=true
elif [[ -z $image_path ]]; then
image_path="$1"
else
echo "Unexpected argument: $1" >&2
usage >&2
exit 1
fi
;;
esac
shift
done
if (($# > 0)); then
while (($# > 0)); do
if [[ $1 == "default" && -z $image_path ]]; then
reset_default=true
elif [[ -z $image_path ]]; then
image_path="$1"
else
echo "Unexpected argument: $1" >&2
usage >&2
exit 1
fi
shift
done
fi
if [[ $reset_default == "true" ]]; then
if [[ -n $image_path ]]; then
echo "default does not accept an image path" >&2
exit 1
fi
default_path="${OMARCHY_PATH:-$HOME/.local/share/omarchy}/logo.txt"
if [[ ! -f $default_path ]]; then
echo "Default screensaver logo text not found: $default_path" >&2
exit 1
fi
if [[ $output_path == "-" ]]; then
cat "$default_path"
else
mkdir -p "$(dirname "$output_path")"
cp "$default_path" "$output_path"
echo "Restored default screensaver logo text to $output_path"
fi
exit 0
fi
if [[ -z $image_path ]]; then
usage >&2
exit 1
fi
if ! [[ $width =~ ^[0-9]+$ ]] || (( width < 1 )); then
echo "Invalid width: $width" >&2
exit 1
fi
if ! [[ $height =~ ^[0-9]+$ ]] || (( height < 1 )); then
echo "Invalid height: $height" >&2
exit 1
fi
if [[ $mode != "braille" && $mode != "block" ]]; then
echo "Invalid mode: $mode (expected braille or block)" >&2
exit 1
fi
if ! [[ $threshold =~ ^[0-9]+$ ]] || (( threshold < 0 || threshold > 100 )); then
echo "Invalid threshold: $threshold (expected 0-100)" >&2
exit 1
fi
if [[ ! -f $image_path ]]; then
echo "Logo file not found: $image_path" >&2
exit 1
fi
if omarchy-cmd-missing magick; then
echo "ImageMagick is required to convert logo images" >&2
exit 1
fi
case "$mode" in
braille)
pixel_width=$((width * 2))
pixel_height=$((height * 4))
;;
block)
pixel_width=$width
pixel_height=$((height * 2))
;;
esac
alpha_min=$(magick -background none "$image_path" -alpha extract -format '%[fx:minima]' info: 2>/dev/null) || {
echo "Unable to read logo image: $image_path" >&2
exit 1
}
alpha_max=$(magick -background none "$image_path" -alpha extract -format '%[fx:maxima]' info: 2>/dev/null) || {
echo "Unable to read logo image: $image_path" >&2
exit 1
}
use_alpha=false
if awk -v min="$alpha_min" -v max="$alpha_max" 'BEGIN { exit !(min < 0.999 && max > min) }'; then
use_alpha=true
fi
magick_args=(-background none "$image_path" -auto-orient)
if [[ $use_alpha == "true" ]]; then
magick_args+=(-alpha extract -alpha off)
if [[ $invert == "true" ]]; then
magick_args+=(-negate)
fi
else
magick_args+=(-alpha remove -alpha off -colorspace Gray)
if [[ $invert == "false" ]]; then
magick_args+=(-negate)
fi
fi
if [[ $trim == "true" ]]; then
magick_args+=(-bordercolor black -border 1 -trim +repage)
fi
magick_args+=(-resize "${pixel_width}x${pixel_height}" -threshold "${threshold}%" -negate -compress none pbm:-)
tmp_output=$(mktemp)
trap 'rm -f "$tmp_output"' EXIT
if [[ $mode == "braille" ]]; then
if ! magick "${magick_args[@]}" | awk '
BEGIN {
braille_base = 10240
dot[0,0] = 1
dot[0,1] = 2
dot[0,2] = 4
dot[1,0] = 8
dot[1,1] = 16
dot[1,2] = 32
dot[0,3] = 64
dot[1,3] = 128
}
{
sub(/#.*/, "")
for (i = 1; i <= NF; i++) {
token[++token_count] = $i
}
}
END {
if (token[1] != "P1") {
exit 1
}
width = token[2]
height = token[3]
pixel_offset = 4
for (y = 0; y < height; y += 4) {
line = ""
for (x = 0; x < width; x += 2) {
code = 0
for (dy = 0; dy < 4; dy++) {
for (dx = 0; dx < 2; dx++) {
if (y + dy < height && x + dx < width) {
pixel = token[pixel_offset + ((y + dy) * width) + x + dx]
if (pixel == 1) {
code += dot[dx,dy]
}
}
}
}
if (code == 0) {
line = line " "
} else {
line = line sprintf("%c", braille_base + code)
}
}
sub(/[ ]+$/, "", line)
lines[++line_count] = line
}
first = 1
while (first <= line_count && lines[first] ~ /^[ ]*$/) {
first++
}
last = line_count
while (last >= first && lines[last] ~ /^[ ]*$/) {
last--
}
for (i = first; i <= last; i++) {
print lines[i]
}
}
' >"$tmp_output"; then
echo "Unable to convert logo image: $image_path" >&2
exit 1
fi
else
if ! magick "${magick_args[@]}" | awk '
BEGIN {
block["11"] = "█"
block["10"] = "▀"
block["01"] = "▄"
block["00"] = " "
}
{
sub(/#.*/, "")
for (i = 1; i <= NF; i++) {
token[++token_count] = $i
}
}
END {
if (token[1] != "P1") {
exit 1
}
width = token[2]
height = token[3]
pixel_offset = 4
for (y = 0; y < height; y += 2) {
line = ""
for (x = 0; x < width; x++) {
top = token[pixel_offset + (y * width) + x]
bottom = (y + 1 < height) ? token[pixel_offset + ((y + 1) * width) + x] : 0
line = line block[top bottom]
}
sub(/[ ]+$/, "", line)
lines[++line_count] = line
}
first = 1
while (first <= line_count && lines[first] ~ /^[ ]*$/) {
first++
}
last = line_count
while (last >= first && lines[last] ~ /^[ ]*$/) {
last--
}
for (i = first; i <= last; i++) {
print lines[i]
}
}
' >"$tmp_output"; then
echo "Unable to convert logo image: $image_path" >&2
exit 1
fi
fi
if [[ ! -s $tmp_output ]]; then
echo "No logo pixels found in: $image_path" >&2
exit 1
fi
if [[ $output_path == "-" ]]; then
cat "$tmp_output"
else
mkdir -p "$(dirname "$output_path")"
cp "$tmp_output" "$output_path"
echo "Wrote screensaver logo text to $output_path"
fi
+1
View File
@@ -2,6 +2,7 @@
# omarchy:summary=Manage persistent state files for Omarchy toggles and settings. # omarchy:summary=Manage persistent state files for Omarchy toggles and settings.
# omarchy:args=<set|clear> <state-name-or-pattern> # omarchy:args=<set|clear> <state-name-or-pattern>
# omarchy:hidden=true
STATE_DIR="$HOME/.local/state/omarchy" STATE_DIR="$HOME/.local/state/omarchy"
mkdir -p "$STATE_DIR" mkdir -p "$STATE_DIR"
+2 -1
View File
@@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Display brightness level using SwayOSD on the current monitor. # omarchy:summary=Display brightness level using SwayOSD on the current monitor.
# omarchy:args=<percent> # omarchy:args=<0-100>
# omarchy:examples=omarchy swayosd brightness 0 | omarchy swayosd brightness 50 | omarchy swayosd brightness 100
percent="$1" percent="$1"
+2 -1
View File
@@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Display keyboard brightness level using SwayOSD on the current monitor. # omarchy:summary=Display keyboard brightness level using SwayOSD on the current monitor.
# omarchy:args=<percent> # omarchy:args=<0-100>
# omarchy:examples=omarchy swayosd kbd brightness 0 | omarchy swayosd kbd brightness 50 | omarchy swayosd kbd brightness 100
percent="$1" percent="$1"
+16 -2
View File
@@ -1,11 +1,16 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Lock the screen # omarchy:summary=Lock the computer and turn off the display
# omarchy:group=system # omarchy:group=system
# omarchy:name=lock # omarchy:name=lock
# omarchy:examples=omarchy system lock # omarchy:examples=omarchy system lock
pidof hyprlock || hyprlock & if ! pidof hyprlock >/dev/null; then
(
hyprlock
omarchy-system-wake
) &
fi
# Set keyboard layout to default (first layout) # Set keyboard layout to default (first layout)
hyprctl switchxkblayout all 0 > /dev/null 2>&1 hyprctl switchxkblayout all 0 > /dev/null 2>&1
@@ -17,3 +22,12 @@ fi
# Avoid running screensaver when locked # Avoid running screensaver when locked
pkill -f org.omarchy.screensaver pkill -f org.omarchy.screensaver
if [[ ${OMARCHY_LOCK_ONLY:-false} != "true" ]]; then
(
sleep 3
pidof hyprlock >/dev/null || exit 0
omarchy-brightness-keyboard off
omarchy-brightness-display off
) &
fi
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# omarchy:summary=Wake displays and restore brightness after idle
# omarchy:group=system
# omarchy:name=wake
# omarchy:examples=omarchy system wake
omarchy-brightness-display on
omarchy-brightness-keyboard restore
+6 -1
View File
@@ -9,9 +9,14 @@ if [[ -z $1 ]]; then
exit 1 exit 1
fi fi
BACKGROUND="$1" BACKGROUND="$(realpath "$1")"
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background" CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
if [[ ! -f "$BACKGROUND" ]]; then
echo "File does not exist: $BACKGROUND" >&2
exit 1
fi
# Create symlink to the new background # Create symlink to the new background
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK" ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"
+1
View File
@@ -2,6 +2,7 @@
# omarchy:summary=Generate a theme's colors.toml from its alacritty.toml palette # omarchy:summary=Generate a theme's colors.toml from its alacritty.toml palette
# omarchy:args=<theme-dir> # omarchy:args=<theme-dir>
# omarchy:hidden=true
set -e set -e
+1 -1
View File
@@ -5,5 +5,5 @@
THEME_NAME_PATH="$HOME/.config/omarchy/current/theme.name" THEME_NAME_PATH="$HOME/.config/omarchy/current/theme.name"
if [[ -f $THEME_NAME_PATH ]]; then if [[ -f $THEME_NAME_PATH ]]; then
omarchy-theme-set "$(cat $THEME_NAME_PATH)" OMARCHY_THEME_SKIP_BACKGROUND=1 omarchy-theme-set "$(cat $THEME_NAME_PATH)"
fi fi
+5 -2
View File
@@ -45,7 +45,9 @@ mv "$NEXT_THEME_PATH" "$CURRENT_THEME_PATH"
echo "$THEME_NAME" >"$HOME/.config/omarchy/current/theme.name" echo "$THEME_NAME" >"$HOME/.config/omarchy/current/theme.name"
# Change background with theme # Change background with theme
omarchy-theme-bg-next if [[ $OMARCHY_THEME_SKIP_BACKGROUND != "1" ]]; then
omarchy-theme-bg-next
fi
# Restart components to apply new theme # Restart components to apply new theme
if pgrep -x waybar >/dev/null; then if pgrep -x waybar >/dev/null; then
@@ -60,6 +62,7 @@ omarchy-restart-mako
omarchy-restart-helix omarchy-restart-helix
# Change app-specific themes # Change app-specific themes
omarchy-theme-set-foot
omarchy-theme-set-gnome omarchy-theme-set-gnome
omarchy-theme-set-browser omarchy-theme-set-browser
omarchy-theme-set-vscode omarchy-theme-set-vscode
@@ -67,4 +70,4 @@ omarchy-theme-set-obsidian
omarchy-theme-set-keyboard omarchy-theme-set-keyboard
# Call hook on theme set # Call hook on theme set
omarchy-hook theme-set "$THEME_NAME" omarchy-hook theme-set "$THEME_NAME" >/dev/null
+38 -24
View File
@@ -1,30 +1,44 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Apply the current theme color to Chromium and Brave # omarchy:summary=Apply the current theme color to Chromium, Chrome, Edge, and Brave
# omarchy:hidden=true
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
if omarchy-cmd-present chromium || omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then if [[ -f $CHROMIUM_THEME ]]; then
if [[ -f $CHROMIUM_THEME ]]; then THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
THEME_RGB_COLOR=$(<$CHROMIUM_THEME) THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ }) else
else # Use a default, neutral grey if theme doesn't have a color
# Use a default, neutral grey if theme doesn't have a color THEME_HEX_COLOR="#1c2027"
THEME_RGB_COLOR="28,32,39"
THEME_HEX_COLOR="#1c2027"
fi
if omarchy-cmd-present chromium; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
pgrep -x chromium >/dev/null && chromium --refresh-platform-policy --no-startup-window &>/dev/null
fi
# Brave and Brave Origin Beta share /etc/brave/policies, so a single write covers both
if omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null
if pgrep -x brave >/dev/null; then
omarchy-cmd-present brave && brave --refresh-platform-policy --no-startup-window &>/dev/null
omarchy-cmd-present brave-origin-beta && brave-origin-beta --refresh-platform-policy --no-startup-window &>/dev/null
fi
fi
fi fi
set_browser_policy() {
local policy_dir="$1"
[[ -d $policy_dir ]] || return
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "$policy_dir/color.json" >/dev/null
}
refresh_running_browser() {
local process="$1"
local command="$2"
local pgrep_args="${3:--x}"
if omarchy-cmd-present "$command" && pgrep $pgrep_args "$process" >/dev/null; then
"$command" --refresh-platform-policy --no-startup-window &>/dev/null
fi
}
set_browser_policy /etc/chromium/policies/managed
refresh_running_browser chromium chromium
set_browser_policy /etc/opt/chrome/policies/managed
refresh_running_browser chrome google-chrome-stable || refresh_running_browser chrome google-chrome
set_browser_policy /etc/opt/edge/policies/managed
refresh_running_browser msedge microsoft-edge-stable
set_browser_policy /etc/brave/policies/managed
refresh_running_browser brave brave
refresh_running_browser brave-origin-beta brave-origin-beta -f
+28
View File
@@ -0,0 +1,28 @@
#!/bin/bash
# omarchy:summary=Apply current Omarchy theme colors to running Foot terminals
# omarchy:hidden=true
foot_theme=~/.config/omarchy/current/theme/foot.ini
if [[ ! -f $foot_theme ]] || ! pgrep -x foot >/dev/null; then
exit 0
fi
foot_osc=$(awk -F= '
function color(value) { return "#" value }
/^foreground=/ { printf "\033]10;%s\007", color($2) }
/^background=/ { printf "\033]11;%s\007", color($2) }
/^cursor=/ { split($2, parts, " "); printf "\033]12;%s\007", color(parts[2]) }
/^selection-background=/ { printf "\033]17;%s\007", color($2) }
/^selection-foreground=/ { printf "\033]19;%s\007", color($2) }
/^regular[0-7]=/ { split($1, parts, "regular"); printf "\033]4;%d;%s\007", parts[2], color($2) }
/^bright[0-7]=/ { split($1, parts, "bright"); printf "\033]4;%d;%s\007", parts[2] + 8, color($2) }
' "$foot_theme")
for foot_pid in $(pgrep -x foot); do
for child_pid in $(pgrep -P "$foot_pid"); do
tty=$(readlink "/proc/$child_pid/fd/1" 2>/dev/null)
[[ $tty == /dev/pts/* ]] && printf '%b' "$foot_osc" >"$tty"
done
done
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Apply the current theme to GNOME color mode and icon settings # omarchy:summary=Apply the current theme to GNOME color mode and icon settings
# omarchy:hidden=true
if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
gsettings set org.gnome.desktop.interface color-scheme "prefer-light" gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Apply the current theme keyboard color to supported keyboards # omarchy:summary=Apply the current theme keyboard color to supported keyboards
# omarchy:hidden=true
omarchy-theme-set-keyboard-asus-rog omarchy-theme-set-keyboard-asus-rog
omarchy-theme-set-keyboard-f16 omarchy-theme-set-keyboard-f16
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Apply the current theme keyboard color to ASUS ROG keyboards # omarchy:summary=Apply the current theme keyboard color to ASUS ROG keyboards
# omarchy:hidden=true
ASUSCTL_THEME=~/.config/omarchy/current/theme/keyboard.rgb ASUSCTL_THEME=~/.config/omarchy/current/theme/keyboard.rgb
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Apply the current theme keyboard color to Framework Laptop 16 keyboards # omarchy:summary=Apply the current theme keyboard color to Framework Laptop 16 keyboards
# omarchy:hidden=true
FRAMEWORK16_THEME=~/.config/omarchy/current/theme/keyboard.rgb FRAMEWORK16_THEME=~/.config/omarchy/current/theme/keyboard.rgb
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Sync Omarchy theme to all Obsidian vaults # omarchy:summary=Sync Omarchy theme to all Obsidian vaults
# omarchy:hidden=true
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Generate themed config files from Omarchy templates # omarchy:summary=Generate themed config files from Omarchy templates
# omarchy:hidden=true
TEMPLATES_DIR="$OMARCHY_PATH/default/themed" TEMPLATES_DIR="$OMARCHY_PATH/default/themed"
USER_TEMPLATES_DIR="$HOME/.config/omarchy/themed" USER_TEMPLATES_DIR="$HOME/.config/omarchy/themed"
+1
View File
@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Sync Omarchy theme to VS Code, VSCodium, and Cursor # omarchy:summary=Sync Omarchy theme to VS Code, VSCodium, and Cursor
# omarchy:hidden=true
VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json" VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
+231
View File
@@ -0,0 +1,231 @@
#!/bin/bash
# omarchy:group=transcode
# omarchy:name=
# omarchy:summary=Transcode pictures and videos for sharing
# omarchy:args=[--path path] [input] [format] [resolution]
# omarchy:examples=omarchy transcode|omarchy transcode --path ~/Downloads|omarchy transcode ~/Videos/demo.mov mp4 1080p|omarchy transcode ~/Pictures/wallpaper.heic jpg medium
set -euo pipefail
usage() {
cat <<'EOF'
Usage:
omarchy transcode [--path path] [input] [format] [resolution]
With no input, fuzzy-pick a picture or video from ~/Pictures and ~/Videos,
or only from --path when provided. Then pick the output format and resolution.
Options:
--path path Limit interactive fuzzy file selection to this path
Formats:
Pictures: jpg, png
Videos: mp4, gif
Resolutions:
Pictures: high, medium, low
Videos: 4k, 1080p, 720p
EOF
}
pick_file() {
local search_path="$1"
local paths=()
if [[ -n $search_path ]]; then
[[ -e $search_path ]] || { echo "Path not found: $search_path" >&2; return 1; }
paths=("$search_path")
else
paths=("$HOME/Pictures" "$HOME/Videos")
fi
find "${paths[@]}" -type f \
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' -o -iname '*.gif' -o -iname '*.heic' -o -iname '*.avif' \
-o -iname '*.mp4' -o -iname '*.mov' -o -iname '*.m4v' -o -iname '*.mkv' -o -iname '*.webm' -o -iname '*.avi' \) \
-printf '%T@\t%p\n' 2>/dev/null | sort -rn | cut -f2- | fzf --layout=reverse-list --prompt="Transcode file> "
}
pick_option() {
local prompt="$1"
shift
gum choose --header "$prompt" "$@"
}
media_type() {
local mime
mime=$(file -b --mime-type "$1")
case "$mime" in
image/*) echo picture ;;
video/*) echo video ;;
*)
echo "Unsupported file type: $mime" >&2
return 1
;;
esac
}
output_path() {
local input="$1"
local format="$2"
local resolution="$3"
local dir base stem
dir=$(dirname -- "$input")
base=$(basename -- "$input")
stem="${base%.*}"
printf '%s/%s-%s.%s' "$dir" "$stem" "$resolution" "$format"
}
transcode_picture() {
local input="$1" format="$2" resolution="$3" output="$4"
local resize
case "$resolution" in
high) resize='3160x>' ;;
medium) resize='2160x>' ;;
low) resize='1080x>' ;;
*)
echo "Invalid picture resolution: $resolution" >&2
return 1
;;
esac
case "$format" in
jpg)
magick "$input" -resize "$resize" -quality 85 -strip "$output"
;;
png)
magick "$input" -resize "$resize" -strip -define png:compression-filter=5 \
-define png:compression-level=9 \
-define png:compression-strategy=1 \
-define png:exclude-chunk=all \
"$output"
;;
*)
echo "Invalid picture format: $format" >&2
return 1
;;
esac
}
transcode_video() {
local input="$1" format="$2" resolution="$3" output="$4"
local scale
case "$resolution" in
4k) scale='scale=-2:2160' ;;
1080p) scale='scale=-2:1080' ;;
720p) scale='scale=-2:720' ;;
*)
echo "Invalid video resolution: $resolution" >&2
return 1
;;
esac
case "$format" in
mp4)
if [[ $resolution == "4k" ]]; then
ffmpeg -i "$input" -vf "$scale" -c:v libx265 -preset slow -crf 24 -c:a aac -b:a 192k "$output"
else
ffmpeg -i "$input" -vf "$scale" -c:v libx264 -preset fast -crf 23 -c:a copy "$output"
fi
;;
gif)
ffmpeg -i "$input" -vf "fps=10,$scale:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" "$output"
;;
*)
echo "Invalid video format: $format" >&2
return 1
;;
esac
}
copy_to_clipboard() {
local output="$1"
local uri
uri="file://$(realpath -- "$output")"
printf '%s\n' "$uri" | wl-copy --type text/uri-list
}
main() {
local input="" format="" resolution="" search_path=""
local type output positional=()
while (( $# > 0 )); do
case "$1" in
--path)
shift
[[ $# -gt 0 ]] || { echo "Missing value for --path" >&2; return 2; }
search_path="$1"
;;
--help | -h)
usage
return 0
;;
--)
shift
positional+=("$@")
break
;;
--*)
echo "Unknown option: $1" >&2
usage >&2
return 2
;;
*)
positional+=("$1")
;;
esac
shift
done
input="${positional[0]:-}"
format="${positional[1]:-}"
resolution="${positional[2]:-}"
if [[ -z $input ]]; then
input=$(pick_file "$search_path")
fi
[[ -n $input ]] || return 1
[[ -f $input ]] || { echo "File not found: $input" >&2; return 1; }
type=$(media_type "$input")
if [[ -z $format ]]; then
if [[ $type == "picture" ]]; then
format=$(pick_option "Select format..." jpg png)
else
format=$(pick_option "Select format..." mp4 gif)
fi
fi
if [[ -z $resolution ]]; then
if [[ $type == "picture" ]]; then
resolution=$(pick_option "Select resolution..." high medium low)
else
resolution=$(pick_option "Select resolution..." 4k 1080p 720p)
fi
fi
output=$(output_path "$input" "$format" "$resolution")
if [[ $type == "picture" ]]; then
transcode_picture "$input" "$format" "$resolution" "$output"
else
transcode_video "$input" "$format" "$resolution" "$output"
echo ""
fi
copy_to_clipboard "$output"
echo "Your $type has been transcoded into $format as $resolution. It's on your clipboard."
echo ""
echo "It's also in $output"
}
main "$@"
+1
View File
@@ -1,3 +1,4 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=No-op now that omarchy-update-perform is responsible for idle management. # omarchy:summary=No-op now that omarchy-update-perform is responsible for idle management.
# omarchy:hidden=true
+1
View File
@@ -2,6 +2,7 @@
# omarchy:summary=Upload logs to 0x0.st # omarchy:summary=Upload logs to 0x0.st
# omarchy:args=<log-file> # omarchy:args=<log-file>
# omarchy:hidden=true
LOG_TYPE="${1:-install}" LOG_TYPE="${1:-install}"
TEMP_LOG="/tmp/upload-log.txt" TEMP_LOG="/tmp/upload-log.txt"
-1
View File
@@ -1 +0,0 @@
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
-1
View File
@@ -1 +0,0 @@
brave-flags.conf
+19
View File
@@ -0,0 +1,19 @@
[main]
include=~/.config/omarchy/current/theme/foot.ini
term=xterm-256color
font=JetBrainsMono Nerd Font:size=9
pad=14x14
initial-window-mode=windowed
workers=0
[scrollback]
lines=10000
[cursor]
style=block
blink=no
[key-bindings]
clipboard-copy=Control+Insert
primary-paste=none
clipboard-paste=Shift+Insert
+9 -18
View File
@@ -1,28 +1,19 @@
general { general {
lock_cmd = omarchy-system-lock # lock screen and 1password lock_cmd = omarchy-system-lock # lock screen and 1password
before_sleep_cmd = loginctl lock-session # lock before suspend. before_sleep_cmd = OMARCHY_LOCK_ONLY=true omarchy-system-lock # lock before suspend without scheduling display off.
after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # delay for PAM readiness, then turn on display. after_sleep_cmd = sleep 1 && omarchy-system-wake # delay for PAM readiness, then turn on display.
inhibit_sleep = 3 # wait until screen is locked inhibit_sleep = 3 # wait until screen is locked
} }
# Start screensaver after 2.5 minutes
listener { listener {
timeout = 150 # 2.5min timeout = 150
on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already) on-timeout = pidof hyprlock || omarchy-launch-screensaver
} }
# Lock system after 5 minutes
listener { listener {
timeout = 151 # 5min timeout = 152
on-timeout = loginctl lock-session # lock screen when timeout has passed on-timeout = omarchy-system-lock
} on-resume = omarchy-system-wake
listener {
timeout = 330 # 5.5min
on-timeout = brightnessctl -sd '*::kbd_backlight' set 0 # save state and turn off keyboard backlight
on-resume = brightnessctl -rd '*::kbd_backlight' # restore keyboard backlight
}
listener {
timeout = 330 # 5.5min
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected
} }
+1 -1
View File
@@ -41,7 +41,7 @@ input {
} }
# Scroll nicely in the terminal # Scroll nicely in the terminal
windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5 windowrule = match:class (Alacritty|kitty|foot), scroll_touchpad 1.5
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2 windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
# Enable touchpad gestures for changing workspaces # Enable touchpad gestures for changing workspaces
+6
View File
@@ -32,3 +32,9 @@ layout {
# Avoid overly wide single-window layouts on wide screens # Avoid overly wide single-window layouts on wide screens
# single_window_aspect_ratio = 1 1 # single_window_aspect_ratio = 1 1
} }
# https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/
scrolling {
# See only one column per screen instead of two
# column_width = 0.97
}
+3
View File
@@ -70,6 +70,9 @@ set -g set-clipboard on
set -g allow-passthrough on set -g allow-passthrough on
setw -g aggressive-resize on setw -g aggressive-resize on
set -g detach-on-destroy off set -g detach-on-destroy off
set -g extended-keys on
set -g extended-keys-format csi-u
set -sg escape-time 10
# Status bar # Status bar
set -g status-position top set -g status-position top
+1 -1
View File
@@ -46,7 +46,7 @@ _omarchy_complete() {
fi fi
} }
complete -F _omarchy_complete omarchy complete -o default -F _omarchy_complete omarchy
# Hide individual omarchy-* binaries from initial-word command completion; # Hide individual omarchy-* binaries from initial-word command completion;
# the unified `omarchy` dispatcher is the user-facing entry point. # the unified `omarchy` dispatcher is the user-facing entry point.
+10 -35
View File
@@ -1,58 +1,33 @@
# Transcode a video to a good-balance 1080p that's great for sharing online # Transcoding helpers have moved to omarchy-transcode.
transcode-video-1080p() { transcode-video-1080p() {
ffmpeg -i "$1" -vf scale=1920:1080 -c:v libx264 -preset fast -crf 23 -c:a copy "${1%.*}-1080p.mp4" omarchy-transcode "$1" mp4 1080p
} }
# Transcode a video to a good-balance 4K that's great for sharing online
transcode-video-4K() { transcode-video-4K() {
ffmpeg -i "$1" -c:v libx265 -preset slow -crf 24 -c:a aac -b:a 192k "${1%.*}-optimized.mp4" omarchy-transcode "$1" mp4 4k
} }
# Transcode a video to an animated GIF using a palette for accurate colors
transcode-video-gif() { 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" omarchy-transcode "$1" gif 1080p
} }
# Transcode any image to JPG image that's great for shrinking wallpapers
img2jpg() { img2jpg() {
img="$1" omarchy-transcode "$1" jpg high
shift
magick "$img" "$@" -quality 85 -strip "${img%.*}-converted.jpg"
} }
# Transcode any image to a small JPG (max 1080px wide)
img2jpg-small() { img2jpg-small() {
img="$1" omarchy-transcode "$1" jpg low
shift
magick "$img" "$@" -resize 1080x\> -quality 85 -strip "${img%.*}-small.jpg"
} }
# Transcode any image to a 4K JPG (max 2160px wide)
img2jpg-medium() { img2jpg-medium() {
img="$1" omarchy-transcode "$1" jpg medium
shift
magick "$img" "$@" -resize 2160x\> -quality 85 -strip "${img%.*}-medium.jpg"
} }
# Transcode any image to a 6K JPG (max 3160px wide)
img2jpg-large() { img2jpg-large() {
img="$1" omarchy-transcode "$1" jpg high
shift
magick "$img" "$@" -resize 3160x\> -quality 85 -strip "${img%.*}-large.jpg"
} }
# Transcode any image to compressed-but-lossless PNG
img2png() { img2png() {
img="$1" omarchy-transcode "$1" png high
shift
magick "$img" "$@" -strip -define png:compression-filter=5 \
-define png:compression-level=9 \
-define png:compression-strategy=1 \
-define png:exclude-chunk=all \
"${img%.*}-optimized.png"
} }
+26
View File
@@ -0,0 +1,26 @@
{
"policies": {
"Preferences": {
"apz.overscroll.enabled": {
"Value": true,
"Status": "default"
},
"media.ffmpeg.vaapi.enabled": {
"Value": true,
"Status": "default"
},
"media.hardware-video-decoding.force-enabled": {
"Value": true,
"Status": "default"
},
"widget.disable-swipe-tracker": {
"Value": false,
"Status": "default"
},
"widget.wayland.fractional-scale.enabled": {
"Value": true,
"Status": "default"
}
}
}
}
+7
View File
@@ -0,0 +1,7 @@
[main]
font=JetBrainsMono Nerd Font:size=18
pad=0x0
[colors-dark]
background=000000
foreground=ffffff
+1 -1
View File
@@ -3,7 +3,7 @@ windowrule = float on, match:tag floating-window
windowrule = center on, match:tag floating-window windowrule = center on, match:tag floating-window
windowrule = size 875 600, match:tag floating-window windowrule = size 875 600, match:tag floating-window
windowrule = tag +floating-window, match:class (org.omarchy.bluetui|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.btop|org.omarchy.terminal|org.omarchy.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Omarchy|About|TUI.float|imv|mpv) windowrule = tag +floating-window, match:class (org.omarchy.bluetui|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.btop|org.omarchy.terminal|org.omarchy.bash|org.codeberg.dnkl.foot|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Omarchy|About|TUI.float|imv|mpv)
windowrule = tag +floating-window, match:class (xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), match:title ^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*) windowrule = tag +floating-window, match:class (xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), match:title ^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)
windowrule = float on, match:class org.gnome.Calculator windowrule = float on, match:class org.gnome.Calculator
+1 -1
View File
@@ -1,4 +1,4 @@
# Define terminal tag to style them uniformly # Define terminal tag to style them uniformly
windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty) windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty|foot)
windowrule = tag -default-opacity, match:tag terminal windowrule = tag -default-opacity, match:tag terminal
windowrule = opacity 0.97 0.9, match:tag terminal windowrule = opacity 0.97 0.9, match:tag terminal
+4 -1
View File
@@ -15,7 +15,7 @@ bindd = , XF86Calculator, Calculator, exec, gnome-calculator
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar
bindd = SUPER CTRL, SPACE, Theme background menu, exec, omarchy-menu background bindd = SUPER CTRL, SPACE, Theme background menu, exec, omarchy-menu background
bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, omarchy-menu theme bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, omarchy-menu theme
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, omarchy-hyprland-active-window-transparency-toggle bindd = SUPER, BACKSPACE, Toggle window transparency, exec, omarchy-hyprland-window-transparency-toggle
bindd = SUPER SHIFT, BACKSPACE, Toggle window gaps, exec, omarchy-hyprland-window-gaps-toggle bindd = SUPER SHIFT, BACKSPACE, Toggle window gaps, exec, omarchy-hyprland-window-gaps-toggle
bindd = SUPER CTRL, BACKSPACE, Toggle single-window square aspect, exec, omarchy-hyprland-window-single-square-aspect-toggle bindd = SUPER CTRL, BACKSPACE, Toggle single-window square aspect, exec, omarchy-hyprland-window-single-square-aspect-toggle
@@ -43,6 +43,9 @@ bindd = SUPER CTRL, PRINT, Extract text (OCR) from screenshot, exec, omarchy-cap
# File sharing # File sharing
bindd = SUPER CTRL, S, Share, exec, omarchy-menu share bindd = SUPER CTRL, S, Share, exec, omarchy-menu share
# Transcoding
bindd = SUPER CTRL, R, Transcode, exec, omarchy-menu transcode
# Waybar-less information # Waybar-less information
bindd = SUPER CTRL ALT, T, Show time, exec, notify-send -u low " $(date +"%A %H:%M · %d %B %Y · Week %V")" bindd = SUPER CTRL ALT, T, Show time, exec, notify-send -u low " $(date +"%A %H:%M · %d %B %Y · Week %V")"
bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send -u low "$(omarchy-battery-status)" bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send -u low "$(omarchy-battery-status)"
+4
View File
@@ -113,6 +113,10 @@ dwindle {
force_split = 2 # Always split on the right force_split = 2 # Always split on the right
} }
scrolling {
column_width = 0.49
}
# See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more # See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more
master { master {
new_status = master new_status = master
+4
View File
@@ -4,3 +4,7 @@ general {
gaps_in = 0 gaps_in = 0
border_size = 0 border_size = 0
} }
decoration {
rounding = 0
}
+4 -3
View File
@@ -3,7 +3,7 @@ name: omarchy
description: > description: >
REQUIRED for end-user customization of Linux desktop, window manager, or system config. REQUIRED for end-user customization of Linux desktop, window manager, or system config.
Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/, Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/,
~/.config/alacritty/, ~/.config/kitty/, ~/.config/ghostty/, ~/.config/mako/, ~/.config/alacritty/, ~/.config/foot/, ~/.config/kitty/, ~/.config/ghostty/, ~/.config/mako/,
or ~/.config/omarchy/. Triggers: Hyprland, window rules, animations, keybindings, or ~/.config/omarchy/. Triggers: Hyprland, window rules, animations, keybindings,
monitors, gaps, borders, blur, opacity, waybar, walker, terminal config, themes, monitors, gaps, borders, blur, opacity, waybar, walker, terminal config, themes,
wallpaper, night light, idle, lock screen, screenshots, layer rules, workspace wallpaper, night light, idle, lock screen, screenshots, layer rules, workspace
@@ -24,7 +24,7 @@ It is not for contributing to Omarchy source code.
- Editing ANY file in `~/.config/hypr/` (window rules, animations, keybindings, monitors, etc.) - Editing ANY file in `~/.config/hypr/` (window rules, animations, keybindings, monitors, etc.)
- Editing ANY file in `~/.config/waybar/`, `~/.config/walker/`, `~/.config/mako/` - Editing ANY file in `~/.config/waybar/`, `~/.config/walker/`, `~/.config/mako/`
- Editing terminal configs (alacritty, kitty, ghostty) - Editing terminal configs (alacritty, foot, kitty, ghostty)
- Editing ANY file in `~/.config/omarchy/` - Editing ANY file in `~/.config/omarchy/`
- Window behavior, animations, opacity, blur, gaps, borders - Window behavior, animations, opacity, blur, gaps, borders
- Layer rules, workspace settings, display/monitor configuration - Layer rules, workspace settings, display/monitor configuration
@@ -78,7 +78,7 @@ Omarchy is built on:
| **Hyprland** | Wayland compositor/WM | `~/.config/hypr/` | | **Hyprland** | Wayland compositor/WM | `~/.config/hypr/` |
| **Waybar** | Status bar | `~/.config/waybar/` | | **Waybar** | Status bar | `~/.config/waybar/` |
| **Walker** | App launcher | `~/.config/walker/` | | **Walker** | App launcher | `~/.config/walker/` |
| **Alacritty/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` | | **Alacritty/Foot/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` |
| **Mako** | Notifications | `~/.config/mako/` | | **Mako** | Notifications | `~/.config/mako/` |
| **SwayOSD** | On-screen display | `~/.config/swayosd/` | | **SwayOSD** | On-screen display | `~/.config/swayosd/` |
@@ -163,6 +163,7 @@ Run `omarchy --help` for the full list. The most common groups:
``` ```
~/.config/alacritty/alacritty.toml ~/.config/alacritty/alacritty.toml
~/.config/foot/foot.ini
~/.config/kitty/kitty.conf ~/.config/kitty/kitty.conf
~/.config/ghostty/config ~/.config/ghostty/config
``` ```
+25
View File
@@ -0,0 +1,25 @@
[colors-dark]
foreground={{ foreground_strip }}
background={{ background_strip }}
selection-foreground={{ selection_foreground_strip }}
selection-background={{ selection_background_strip }}
cursor={{ background_strip }} {{ cursor_strip }}
regular0={{ color0_strip }}
regular1={{ color1_strip }}
regular2={{ color2_strip }}
regular3={{ color3_strip }}
regular4={{ color4_strip }}
regular5={{ color5_strip }}
regular6={{ color6_strip }}
regular7={{ color7_strip }}
bright0={{ color8_strip }}
bright1={{ color9_strip }}
bright2={{ color10_strip }}
bright3={{ color11_strip }}
bright4={{ color12_strip }}
bright5={{ color13_strip }}
bright6={{ color14_strip }}
bright7={{ color15_strip }}
+1 -1
View File
@@ -23,7 +23,7 @@ env = GUM_INPUT_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_INPUT_HEADER_BACKGROUND,#{{ background }} env = GUM_INPUT_HEADER_BACKGROUND,#{{ background }}
# Gum Choose Style Variables # Gum Choose Style Variables
env = GUM_CHOOSE_CURSOR_FOREGROUND,#{{ cursor }} env = GUM_CHOOSE_CURSOR_FOREGROUND,#{{ accent }}
env = GUM_CHOOSE_CURSOR_BACKGROUND,#{{ background }} env = GUM_CHOOSE_CURSOR_BACKGROUND,#{{ background }}
env = GUM_CHOOSE_HEADER_FOREGROUND,#{{ foreground }} env = GUM_CHOOSE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_CHOOSE_HEADER_BACKGROUND,#{{ background }} env = GUM_CHOOSE_HEADER_BACKGROUND,#{{ background }}
+1
View File
@@ -47,6 +47,7 @@ run_logged $OMARCHY_INSTALL/config/hardware/intel/ipu7-camera.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/ptl-kernel.sh run_logged $OMARCHY_INSTALL/config/hardware/intel/ptl-kernel.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/fred.sh run_logged $OMARCHY_INSTALL/config/hardware/intel/fred.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/fix-wifi7-eht.sh run_logged $OMARCHY_INSTALL/config/hardware/intel/fix-wifi7-eht.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/sof-firmware.sh
run_logged $OMARCHY_INSTALL/config/hardware/dell/fix-xps-haptic-touchpad.sh run_logged $OMARCHY_INSTALL/config/hardware/dell/fix-xps-haptic-touchpad.sh
@@ -0,0 +1,8 @@
# Install Sound Open Firmware for the audio DSP on non-XPS Intel Panther
# Lake systems. XPS PTL stays on linux-ptl, which hard-deps sof-firmware.
# Mainline `linux` only optdeps it, so without this the DSP fails to boot
# and only auto_null shows up in PipeWire.
if omarchy-hw-intel-ptl && ! omarchy-hw-match "XPS"; then
omarchy-pkg-add sof-firmware
fi
View File
+1 -5
View File
@@ -5,14 +5,10 @@ sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-next-symbolic.svg /usr
# Setup user theme folder # Setup user theme folder
mkdir -p ~/.config/omarchy/themes mkdir -p ~/.config/omarchy/themes
# Add managed policy directories for Chromium and Brave for theme changes. # Chromium policy directory for theme
# Must exist before the first omarchy-theme-set, which writes color.json into them.
sudo mkdir -p /etc/chromium/policies/managed sudo mkdir -p /etc/chromium/policies/managed
sudo chmod a+rw /etc/chromium/policies/managed sudo chmod a+rw /etc/chromium/policies/managed
sudo mkdir -p /etc/brave/policies/managed
sudo chmod a+rw /etc/brave/policies/managed
# Set initial theme # Set initial theme
omarchy-theme-set "Tokyo Night" omarchy-theme-set "Tokyo Night"
rm -rf ~/.config/chromium/SingletonLock # otherwise archiso will own the chromium singleton rm -rf ~/.config/chromium/SingletonLock # otherwise archiso will own the chromium singleton
+1
View File
@@ -0,0 +1 @@
gsettings set org.gnome.desktop.interface gtk-enable-primary-paste true
+1
View File
@@ -41,6 +41,7 @@ pipewire-jack
pipewire-pulse pipewire-pulse
qt6-wayland qt6-wayland
snapper snapper
sof-firmware
thermald thermald
webp-pixbuf-loader webp-pixbuf-loader
yay-debug yay-debug
+1 -1
View File
@@ -1,4 +1,4 @@
echo "Add opencode with system themeing" echo "Add opencode with system theming"
omarchy-pkg-add opencode omarchy-pkg-add opencode
+1 -1
View File
@@ -1,4 +1,4 @@
echo "Switch back to mainline chromium now that it supports full live themeing" echo "Switch back to mainline chromium now that it supports full live theming"
if omarchy-pkg-present omarchy-chromium; then if omarchy-pkg-present omarchy-chromium; then
if gum confirm "Ready to switch to mainstream chromium? (Will close Chromium + reset settings)"; then if gum confirm "Ready to switch to mainstream chromium? (Will close Chromium + reset settings)"; then
+10
View File
@@ -0,0 +1,10 @@
echo "Remove stale Xe Panel Replay kernel cmdline from Dell XPS Panther Lake systems"
DEFAULT_LIMINE="/etc/default/limine"
if omarchy-hw-match "XPS" && omarchy-hw-intel-ptl; then
if [[ -f $DEFAULT_LIMINE ]] && grep -q 'xe\.enable_panel_replay' "$DEFAULT_LIMINE"; then
sudo sed -i '/^KERNEL_CMDLINE.*xe\.enable_panel_replay/d' "$DEFAULT_LIMINE"
sudo limine-update
fi
fi
+5
View File
@@ -0,0 +1,5 @@
echo "Enable middle-click primary paste for GTK/Chromium-family apps (Ghostty, Brave, Chromium)"
if command -v gsettings >/dev/null; then
gsettings set org.gnome.desktop.interface gtk-enable-primary-paste true || true
fi
+45
View File
@@ -0,0 +1,45 @@
echo "Add Foot terminal config and theme support"
if [[ ! -f ~/.config/foot/foot.ini ]]; then
mkdir -p ~/.config/foot
cp -Rpf "$OMARCHY_PATH/config/foot/foot.ini" ~/.config/foot/foot.ini
elif ! grep -q "^primary-paste=none" ~/.config/foot/foot.ini; then
sed -i '/^clipboard-copy=Control+Insert/a primary-paste=none' ~/.config/foot/foot.ini
fi
if [[ -f ~/.config/omarchy/current/theme/foot.ini ]]; then
sed -i 's/^\[colors\]$/[colors-dark]/' ~/.config/omarchy/current/theme/foot.ini
fi
if [[ ! -f ~/.config/omarchy/current/theme/foot.ini && -f ~/.config/omarchy/current/theme/colors.toml ]]; then
sed_script=$(mktemp)
while IFS='=' read -r key value; do
key="${key//[\"\' ]/}"
[[ $key && $key != \#* ]] || continue
value="${value#*[\"\']}"
value="${value%%[\"\']*}"
printf 's|{{ %s }}|%s|g\n' "$key" "$value"
printf 's|{{ %s_strip }}|%s|g\n' "$key" "${value#\#}"
done <~/.config/omarchy/current/theme/colors.toml >"$sed_script"
sed -f "$sed_script" "$OMARCHY_PATH/default/themed/foot.ini.tpl" >~/.config/omarchy/current/theme/foot.ini
rm "$sed_script"
fi
if omarchy-cmd-present foot; then
mkdir -p ~/.local/share/applications
rm -f ~/.local/share/applications/org.codeberg.dnkl.foot.desktop
cp -Rpf "$OMARCHY_PATH/applications/foot.desktop" ~/.local/share/applications/
cp -Rpf "$OMARCHY_PATH/applications/footclient.desktop" ~/.local/share/applications/
cp -Rpf "$OMARCHY_PATH/applications/foot-server.desktop" ~/.local/share/applications/
fi
if [[ -f ~/.config/hypr/input.conf ]]; then
sed -Ei 's/match:class \(Alacritty\|kitty\)/match:class (Alacritty|kitty|foot)/' ~/.config/hypr/input.conf
fi
if [[ -f ~/.config/hypr/apps/terminals.conf ]]; then
sed -Ei 's/match:class \(Alacritty\|kitty\|com\.mitchellh\.ghostty\)/match:class (Alacritty|kitty|com.mitchellh.ghostty|foot)/' ~/.config/hypr/apps/terminals.conf
fi
+11
View File
@@ -0,0 +1,11 @@
echo "Install sof-firmware on Intel Panther Lake to restore DSP audio"
# linux-ptl hard-depped sof-firmware, mainline linux only optdeps it, so the
# orphan sweep after migration 1777572869 removed it. Force explicit so a
# subsequent orphan sweep in the same update cycle cannot take it again.
if omarchy-hw-intel-ptl && ! omarchy-hw-match "XPS"; then
omarchy-pkg-add sof-firmware
sudo pacman -D --asexplicit sof-firmware >/dev/null
omarchy-state set reboot-required
fi
+7
View File
@@ -0,0 +1,7 @@
echo "Enable extended keyboard support in tmux"
tmux_config="$HOME/.config/tmux/tmux.conf"
if [[ -f $tmux_config ]] && ! grep -qxF "set -g extended-keys on" "$tmux_config"; then
sed -i '/^set -g detach-on-destroy off$/a set -g extended-keys on\nset -g extended-keys-format csi-u\nset -sg escape-time 10' "$tmux_config"
fi
+3
View File
@@ -0,0 +1,3 @@
echo "Use omarchy-system-lock and omarchy-system-wake in hypridle"
omarchy-refresh-hypridle
+1 -1
View File
@@ -7,7 +7,7 @@ return {
{ {
"LazyVim/LazyVim", "LazyVim/LazyVim",
opts = { opts = {
colorscheme = "catppuccin", colorscheme = "catppuccin-nvim",
}, },
}, },
} }
+1 -1
View File
@@ -1 +1 @@
3.7.0 3.7.1