Compare commits

..
Author SHA1 Message Date
David Heinemeier Hansson 089d2cef9b Workspace saving
AI vibe experiment
2026-05-06 12:27:50 +02:00
David Heinemeier Hansson 13b7aaae1d Spike of waybar styling 2026-05-05 14:52:28 +02:00
134 changed files with 1738 additions and 1439 deletions
+2 -61
View File
@@ -6,15 +6,10 @@
- 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
@@ -29,52 +24,6 @@ Common prefixes include:
- `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:hidden=true` - hide from default command listings
- `# 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:
@@ -84,8 +33,6 @@ 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/`
@@ -106,16 +53,10 @@ 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.
New migration format: Migration format:
- File permissions must be `0644` (`-rw-r--r--`); migrations are sourced, not executed directly
- 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
-2
View File
@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true
-2
View File
@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true
+23 -54
View File
@@ -17,7 +17,6 @@ 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
@@ -35,7 +34,6 @@ GROUP_DESCRIPTIONS[channel]="Omarchy release channel management"
GROUP_DESCRIPTIONS[cmd]="Command and shortcut helpers" GROUP_DESCRIPTIONS[cmd]="Command and shortcut helpers"
GROUP_DESCRIPTIONS[config]="System configuration helpers" GROUP_DESCRIPTIONS[config]="System configuration helpers"
GROUP_DESCRIPTIONS[debug]="Diagnostics and support logs" GROUP_DESCRIPTIONS[debug]="Diagnostics and support logs"
GROUP_DESCRIPTIONS[default]="Default application selection"
GROUP_DESCRIPTIONS[dev]="Omarchy development tools" GROUP_DESCRIPTIONS[dev]="Omarchy development tools"
GROUP_DESCRIPTIONS[drive]="Drive selection and encryption" GROUP_DESCRIPTIONS[drive]="Drive selection and encryption"
GROUP_DESCRIPTIONS[font]="Font management" GROUP_DESCRIPTIONS[font]="Font management"
@@ -59,6 +57,7 @@ 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[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"
@@ -68,9 +67,9 @@ 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[weather]="Weather status"
GROUP_DESCRIPTIONS[webapp]="Web app launchers" GROUP_DESCRIPTIONS[webapp]="Web app launchers"
GROUP_DESCRIPTIONS[wifi]="Wi-Fi helpers" GROUP_DESCRIPTIONS[wifi]="Wi-Fi helpers"
GROUP_DESCRIPTIONS[windows]="Windows VM management" GROUP_DESCRIPTIONS[windows]="Windows VM management"
@@ -132,7 +131,6 @@ 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=""
@@ -188,10 +186,6 @@ 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
@@ -235,7 +229,6 @@ 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")
@@ -249,7 +242,6 @@ 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"
@@ -329,6 +321,16 @@ 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,6 +344,7 @@ load_group_commands() {
register_command "$file" register_command "$file"
done done
load_group_extra_commands "$group"
} }
resolve_direct_route() { resolve_direct_route() {
@@ -374,9 +377,6 @@ 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-
} }
@@ -420,10 +420,6 @@ 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
@@ -501,6 +497,8 @@ 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
} }
@@ -512,7 +510,7 @@ Usage:
List commands known to the Omarchy command center. List commands known to the Omarchy command center.
Options: Options:
--all Include commands explicitly marked hidden --all Accepted for compatibility
--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
@@ -564,9 +562,6 @@ 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
@@ -605,14 +600,13 @@ 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\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\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]}" \
@@ -630,12 +624,11 @@ commands_json_filter() {
name: .[3], name: .[3],
summary: .[4], summary: .[4],
requires_sudo: (.[5] == "true"), requires_sudo: (.[5] == "true"),
hidden: (.[6] == "true"), args: .[6],
args: .[7], examples: (.[7] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
examples: (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))), aliases: (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
aliases: (.[9] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))), filename_route: .[9],
filename_route: .[10], routes: ([.[0], .[9]] + (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))) | unique)
routes: ([.[0], .[10]] + (.[9] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))) | unique)
}] | {ok: true, commands: .} }] | {ok: true, commands: .}
EOF EOF
} }
@@ -689,14 +682,13 @@ 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\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\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]}" \
@@ -789,25 +781,6 @@ show_group_help() {
fi fi
} }
show_prefix_help() {
local prefix="$1"
local prefix_with_space="$prefix "
local key=""
local rows=""
while IFS= read -r key; do
[[ -n $key ]] || continue
if [[ ${COMMAND_USAGE[$key]} == $prefix_with_space* ]]; then
rows+="${COMMAND_USAGE[$key]}"$'\t'$'\t'"${COMMAND_SUMMARY[$key]}"$'\n'
fi
done < <(sorted_keys false)
[[ -n $rows ]] || return 1
echo "${prefix#omarchy } commands:"
print_command_table "$rows"
}
show_related_commands() { show_related_commands() {
local key="$1" local key="$1"
local group="${COMMAND_GROUP[$key]}" local group="${COMMAND_GROUP[$key]}"
@@ -1025,10 +998,6 @@ dispatch_or_help() {
return 0 return 0
fi fi
if show_prefix_help "omarchy ${args[*]}"; then
return 0
fi
echo "Unknown Omarchy command: omarchy ${args[*]}" >&2 echo "Unknown Omarchy command: omarchy ${args[*]}" >&2
suggestion=$(suggest_command "${args[0]}") suggestion=$(suggest_command "${args[0]}")
if [[ -n $suggestion ]]; then if [[ -n $suggestion ]]; then
-1
View File
@@ -1,7 +1,6 @@
#!/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"
+6 -15
View File
@@ -1,11 +1,15 @@
#!/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=<+N%|N%-|N%|off|on> # omarchy:args=<step>
# 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
@@ -15,19 +19,6 @@ 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,8 +1,6 @@
#!/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%"
+1 -9
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|off|restore> # omarchy:args=<up|down|cycle>
direction="${1:-up}" direction="${1:-up}"
@@ -19,14 +19,6 @@ 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 -1
View File
@@ -18,7 +18,7 @@ SELECTION=$(slurp 2>/dev/null)
[[ -z $SELECTION ]] && exit 0 [[ -z $SELECTION ]] && exit 0
TEXT=$(grim -g "$SELECTION" - | tesseract stdin stdout --oem 1 --psm 6 -l "${OMARCHY_OCR_LANGS:-eng}" --dpi 300 -c preserve_interword_spaces=1 2>/dev/null) || exit 1 TEXT=$(grim -g "$SELECTION" - | tesseract stdin stdout --oem 1 --psm 6 -l eng --dpi 300 -c preserve_interword_spaces=1 2>/dev/null) || exit 1
[[ -z $TEXT ]] && exit 1 [[ -z $TEXT ]] && exit 1
-1
View File
@@ -1,7 +1,6 @@
#!/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)
-40
View File
@@ -1,40 +0,0 @@
#!/bin/bash
# omarchy:summary=Set the default browser for Omarchy and XDG handlers
# omarchy:args=[chromium|chrome|brave|brave-origin|edge|firefox|zen]
# omarchy:examples=omarchy default browser firefox | omarchy default browser brave
if (($# == 0)); then
case "$(xdg-settings get default-web-browser)" in
chromium.desktop) echo "chromium" ;;
google-chrome.desktop) echo "chrome" ;;
brave-browser.desktop) echo "brave" ;;
brave-origin-beta.desktop) echo "brave-origin" ;;
microsoft-edge.desktop) echo "edge" ;;
firefox.desktop) echo "firefox" ;;
zen.desktop) echo "zen" ;;
*) xdg-settings get default-web-browser ;;
esac
exit 0
fi
case "$1" in
chromium) desktop_id="chromium.desktop"; name="Chromium"; glyph="" ;;
chrome) desktop_id="google-chrome.desktop"; name="Chrome"; glyph="󰊯" ;;
brave) desktop_id="brave-browser.desktop"; name="Brave"; glyph="󰖟" ;;
brave-origin) desktop_id="brave-origin-beta.desktop"; name="Brave Origin"; glyph="󰖟" ;;
edge) desktop_id="microsoft-edge.desktop"; name="Edge"; glyph="󰇩" ;;
firefox) desktop_id="firefox.desktop"; name="Firefox"; glyph="󰈹" ;;
zen) desktop_id="zen.desktop"; name="Zen"; glyph="󰰷" ;;
*)
echo "Usage: omarchy-default-browser <chromium|chrome|brave|brave-origin|edge|firefox|zen>"
exit 1
;;
esac
xdg-settings set default-web-browser "$desktop_id"
xdg-mime default "$desktop_id" x-scheme-handler/http
xdg-mime default "$desktop_id" x-scheme-handler/https
xdg-mime default "$desktop_id" text/html
notify-send -u low "$glyph $name is now the default browser"
-30
View File
@@ -1,30 +0,0 @@
#!/bin/bash
# omarchy:summary=Set the default editor for $EDITOR
# omarchy:args=[code|cursor|zed|sublime_text|helix|vim|emacs|nvim]
# omarchy:examples=omarchy default editor | omarchy default editor code | omarchy default editor helix
if (($# == 0)); then
sed -n 's/^export EDITOR=//p' ~/.config/uwsm/default | head -n 1
exit 0
fi
case "$1" in
code) editor="code"; name="VSCode"; glyph="" ;;
cursor) editor="cursor"; name="Cursor"; glyph="" ;;
zed) editor="zed"; name="Zed"; glyph="" ;;
sublime_text) editor="sublime_text"; name="Sublime Text"; glyph="" ;;
helix) editor="helix"; name="Helix"; glyph="" ;;
vim) editor="vim"; name="Vim"; glyph="" ;;
emacs) editor="emacs"; name="Emacs"; glyph="" ;;
nvim) editor="nvim"; name="Neovim"; glyph="" ;;
*)
echo "Usage: omarchy-default-editor <code|cursor|zed|sublime_text|helix|vim|emacs|nvim>"
exit 1
;;
esac
sed -i "s/^export EDITOR=.*/export EDITOR=$editor/" ~/.config/uwsm/default
export EDITOR="$editor"
notify-send -u low "$glyph $name is now the default editor" " Effective after logging out"
-36
View File
@@ -1,36 +0,0 @@
#!/bin/bash
# omarchy:summary=Set the default terminal used by xdg-terminal-exec
# omarchy:args=[alacritty|foot|ghostty|kitty]
# omarchy:examples=omarchy default terminal ghostty | omarchy default terminal kitty
if (($# == 0)); then
desktop_id=$(grep -vE '^($|#)' ~/.config/xdg-terminals.list 2>/dev/null | head -n 1)
case "$desktop_id" in
Alacritty.desktop) echo "alacritty" ;;
foot.desktop) echo "foot" ;;
com.mitchellh.ghostty.desktop) echo "ghostty" ;;
kitty.desktop) echo "kitty" ;;
*) echo "$desktop_id" ;;
esac
exit 0
fi
case "$1" in
alacritty) desktop_id="Alacritty.desktop"; name="Alacritty"; glyph="" ;;
foot) desktop_id="foot.desktop"; name="Foot"; glyph="" ;;
ghostty) desktop_id="com.mitchellh.ghostty.desktop"; name="Ghostty"; glyph="" ;;
kitty) desktop_id="kitty.desktop"; name="Kitty"; glyph="" ;;
*)
echo "Usage: omarchy-default-terminal <alacritty|foot|ghostty|kitty>"
exit 1
;;
esac
cat >~/.config/xdg-terminals.list <<EOF
# Terminal emulator preference order for xdg-terminal-exec
# The first found and valid terminal will be used
$desktop_id
EOF
notify-send -u low "$glyph $name is now the default terminal"
+1 -4
View File
@@ -22,8 +22,7 @@ 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."}
] ]
}' }'
} }
@@ -44,7 +43,6 @@ 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
@@ -53,7 +51,6 @@ 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-password. # omarchy:summary=Select a drive from a list with info that includes space and brand. Used by omarchy-drive-set-password.
if (($# == 0)); then if (($# == 0)); then
drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)') drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)')
-1
View File
@@ -18,7 +18,6 @@ if [[ -f $FIRST_RUN_MODE ]]; then
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/gtk-primary-paste.sh"
bash "$OMARCHY_PATH/install/first-run/elephant.sh" bash "$OMARCHY_PATH/install/first-run/elephant.sh"
omarchy-hook-install post-update "$OMARCHY_PATH/install/first-run/install-voxtype.hook"
sudo rm -f /etc/sudoers.d/first-run sudo rm -f /etc/sudoers.d/first-run
bash "$OMARCHY_PATH/install/first-run/welcome.sh" bash "$OMARCHY_PATH/install/first-run/welcome.sh"
-8
View File
@@ -22,10 +22,6 @@ 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
@@ -41,10 +37,6 @@ 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."
+2 -11
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Run a named hook from ~/.config/omarchy/hooks/<name> and ~/.config/omarchy/hooks/<name>.d/. # omarchy:summary=Run a named hook, like post-update (available in ~/.config/omarchy/hooks/post-update).
# omarchy:args=[name] [args...] # omarchy:args=[name] [args...]
set -e set -e
@@ -12,17 +12,8 @@ fi
HOOK=$1 HOOK=$1
HOOK_PATH="$HOME/.config/omarchy/hooks/$1" HOOK_PATH="$HOME/.config/omarchy/hooks/$1"
HOOK_DIR="$HOOK_PATH.d"
shift shift
if [[ -f $HOOK_PATH ]]; then if [[ -f $HOOK_PATH ]]; then
bash "$HOOK_PATH" "$@" || echo "Hook failed: $HOOK_PATH" bash "$HOOK_PATH" "$@"
fi
if [[ -d $HOOK_DIR ]]; then
for hook in "$HOOK_DIR"/*; do
[[ -f $hook ]] || continue
[[ $hook == *.sample ]] && continue
bash "$hook" "$@" || echo "Hook failed: $hook"
done
fi fi
-31
View File
@@ -1,31 +0,0 @@
#!/bin/bash
# omarchy:summary=Install a hook into ~/.config/omarchy/hooks/<type>.d/
# omarchy:group=hook
# omarchy:name=install
# omarchy:args=<type> <file>
# omarchy:examples=omarchy hook install post-update ~/my-hook
set -e
if (( $# != 2 )); then
echo "Usage: omarchy-hook-install <type> <file>"
exit 1
fi
HOOK_TYPE=$1
HOOK_FILE=$2
HOOK_DIR="$HOME/.config/omarchy/hooks/$HOOK_TYPE.d"
HOOK_NAME=$(basename "$HOOK_FILE")
HOOK_PATH="$HOOK_DIR/$HOOK_NAME"
if [[ ! -f $HOOK_FILE ]]; then
echo "Hook file not found: $HOOK_FILE"
exit 1
fi
mkdir -p "$HOOK_DIR"
cp "$HOOK_FILE" "$HOOK_PATH"
chmod 755 "$HOOK_PATH"
echo "Installed $HOOK_TYPE hook: $HOOK_PATH"
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
# omarchy:summary=Detect ASUS Zenbook UX5406AA series laptops on Intel Panther Lake.
omarchy-hw-match "ux5406aa" && omarchy-hw-intel-ptl
+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|Studio XDR")))' >/dev/null hyprctl monitors -j | jq -e '.[] | select(.focused == true) | select(.make == "Apple Computer Inc" and (.model | test("StudioDisplay|ProDisplayXDR")))' >/dev/null
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Cycle focused Hyprland monitor scaling through 1x, 1.25x, 1.6x, 2x, and 3x # omarchy:summary=Cycle scaling for the focused Hyprland monitor
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')
-93
View File
@@ -1,93 +0,0 @@
#!/bin/bash
# omarchy:summary=Install a supported browser
# omarchy:args=<chrome|brave|brave-origin|edge|firefox|zen>
# omarchy:examples=omarchy install browser firefox | omarchy install browser brave
setup_policy_directory() {
sudo mkdir -p "$1"
sudo chmod a+rw "$1"
}
announce_browser_installed() {
echo ""
echo "$1 browser installed. Make it the default via Setup > Defaults > Browser."
}
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
omarchy-theme-set-browser
announce_browser_installed "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
omarchy-theme-set-browser
announce_browser_installed "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
omarchy-theme-set-browser
announce_browser_installed "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
omarchy-theme-set-browser
announce_browser_installed "Brave Origin"
;;
firefox)
echo "Installing Firefox..."
omarchy-pkg-add firefox || exit 1
setup_firefox_preferences /usr/lib/firefox/distribution
setup_firefox_wayland
announce_browser_installed "Firefox"
;;
zen)
echo "Installing Zen..."
omarchy-pkg-aur-add zen-browser-bin || exit 1
setup_firefox_preferences /opt/zen-browser/distribution
setup_firefox_wayland
announce_browser_installed "Zen"
;;
*)
echo "Usage: omarchy-install-browser <chrome|brave|brave-origin|edge|firefox|zen>"
exit 1
;;
esac
+1 -1
View File
@@ -21,7 +21,7 @@ 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-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \ libretro-fbneo-git \
libretro-database-git \ libretro-database-git \
retroarch-joypad-autoconfig-git retroarch-joypad-autoconfig-git
+4 -13
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|foot|ghostty|kitty> # omarchy:args=<alacritty|ghostty|kitty>
# omarchy:requires-sudo=true # omarchy:requires-sudo=true
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-install-terminal [alacritty|foot|ghostty|kitty]" echo "Usage: omarchy-install-terminal [alacritty|ghostty|kitty]"
exit 1 exit 1
fi fi
@@ -14,7 +14,6 @@ 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" ;;
*) *)
@@ -27,18 +26,10 @@ echo "Installing $package..."
# Install package # Install package
if omarchy-pkg-add $package; then if omarchy-pkg-add $package; then
# Copy custom desktop entries with X-TerminalArg* keys # Copy custom desktop entry for alacritty with X-TerminalArg* keys
if [[ $package == "alacritty" ]]; then if [[ $package == "alacritty" ]]; then
mkdir -p ~/.local/share/applications mkdir -p ~/.local/share/applications
cp "$OMARCHY_PATH/applications/$desktop_id" ~/.local/share/applications/ cp $OMARCHY_PATH/applications/Alacritty.desktop ~/.local/share/applications/
elif [[ $package == "foot" ]]; then
mkdir -p ~/.local/share/applications
cp "$OMARCHY_PATH/default/foot/$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
@@ -1,11 +0,0 @@
#!/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
+1 -7
View File
@@ -37,12 +37,6 @@ 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 \
@@ -51,7 +45,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, Foot, Ghostty, or Kitty" notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
;; ;;
esac esac
done done
+25 -149
View File
@@ -93,11 +93,12 @@ show_learn_menu() {
} }
show_trigger_menu() { show_trigger_menu() {
case $(menu "Trigger" " Capture\n󰧸 Transcode\n Share\n󰔎 Toggle\n Hardware") in case $(menu "Trigger" " Capture\n󰧸 Transcode\n Share\n󰔎 Toggle\n󰧨 Workspace\n Hardware") in
*Capture*) show_capture_menu ;; *Capture*) show_capture_menu ;;
*Transcode*) show_transcode_menu ;; *Transcode*) show_transcode_menu ;;
*Share*) show_share_menu ;; *Share*) show_share_menu ;;
*Toggle*) show_toggle_menu ;; *Toggle*) show_toggle_menu ;;
*Workspace*) show_workspace_menu ;;
*Hardware*) show_hardware_menu ;; *Hardware*) show_hardware_menu ;;
*) show_main_menu ;; *) show_main_menu ;;
esac esac
@@ -175,6 +176,14 @@ show_transcode_menu() {
esac esac
} }
show_workspace_menu() {
case $(menu "Workspace" "󰑓 Restore\n󰆓 Save") in
*Restore*) omarchy-workspace-restore ;;
*Save*) omarchy-workspace-save ;;
*) 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"
@@ -233,11 +242,11 @@ show_style_menu() {
} }
show_screensaver_menu() { show_screensaver_menu() {
case $(menu "Screensaver" " Edit Text\n Set From Image\n󱄄 Preview\n Restore Default") in case $(menu "Screensaver" " Set From Image\n Restore Default\n Edit Text\n󱄄 Preview") in
*Text*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
*Image*) set_screensaver_from_image ;; *Image*) set_screensaver_from_image ;;
*Default*) terminal bash -lc 'omarchy-screensaver-set-logo default; echo; read -n 1 -s -r -p "Press any key to close..."' ;;
*Text*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
*Preview*) omarchy-launch-screensaver force ;; *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 ;; *) show_style_menu ;;
esac esac
} }
@@ -246,7 +255,7 @@ set_screensaver_from_image() {
terminal bash -lc ' terminal bash -lc '
image=$(fd --type file --ignore-case --extension svg --extension png . "$HOME" 2>/dev/null | fzf --prompt "Logo image> ") image=$(fd --type file --ignore-case --extension svg --extension png . "$HOME" 2>/dev/null | fzf --prompt "Logo image> ")
if [[ -n $image ]]; then if [[ -n $image ]]; then
if omarchy-screensaver-logo "$image"; then if omarchy-screensaver-set-logo "$image"; then
echo echo
echo "Preview with: omarchy-launch-screensaver force" echo "Preview with: omarchy-launch-screensaver force"
fi fi
@@ -277,7 +286,7 @@ show_setup_menu() {
local options=" Audio\n Wifi\n󰂯 Bluetooth\n󱐋 Power Profile\n System Sleep\n󰍹 Monitors" local options=" Audio\n Wifi\n󰂯 Bluetooth\n󱐋 Power Profile\n System Sleep\n󰍹 Monitors"
[[ -f ~/.config/hypr/bindings.conf ]] && options="$options\n Keybindings" [[ -f ~/.config/hypr/bindings.conf ]] && options="$options\n Keybindings"
[[ -f ~/.config/hypr/input.conf ]] && options="$options\n Input" [[ -f ~/.config/hypr/input.conf ]] && options="$options\n Input"
options="$options\n Defaults\n󰱔 DNS\n Security\n Config" options="$options\n󰱔 DNS\n Security\n Config"
case $(menu "Setup" "$options") in case $(menu "Setup" "$options") in
*Audio*) omarchy-launch-audio ;; *Audio*) omarchy-launch-audio ;;
@@ -288,7 +297,6 @@ show_setup_menu() {
*Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;; *Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;;
*Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;; *Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;;
*Input*) open_in_editor ~/.config/hypr/input.conf ;; *Input*) open_in_editor ~/.config/hypr/input.conf ;;
*Defaults*) show_setup_default_menu ;;
*DNS*) present_terminal omarchy-setup-dns ;; *DNS*) present_terminal omarchy-setup-dns ;;
*Security*) show_setup_security_menu ;; *Security*) show_setup_security_menu ;;
*Config*) show_setup_config_menu ;; *Config*) show_setup_config_menu ;;
@@ -314,114 +322,9 @@ show_setup_security_menu() {
esac esac
} }
show_setup_default_menu() {
case $(menu "Default" " Browser\n Terminal\n Editor") in
*Browser*) show_setup_default_browser_menu ;;
*Terminal*) show_setup_default_terminal_menu ;;
*Editor*) show_setup_default_editor_menu ;;
*) show_setup_menu ;;
esac
}
browser_desktop_exists() {
[[ -f ~/.local/share/applications/$1 || -f ~/.nix-profile/share/applications/$1 || -f /usr/share/applications/$1 ]]
}
show_setup_default_browser_menu() {
local options=""
browser_desktop_exists chromium.desktop && options="$options Chromium"
browser_desktop_exists google-chrome.desktop && options="${options:+$options\n}󰊯 Chrome"
browser_desktop_exists brave-browser.desktop && options="${options:+$options\n}󰖟 Brave"
browser_desktop_exists brave-origin-beta.desktop && options="${options:+$options\n}󰖟 Brave Origin"
browser_desktop_exists microsoft-edge.desktop && options="${options:+$options\n}󰇩 Edge"
browser_desktop_exists firefox.desktop && options="${options:+$options\n}󰈹 Firefox"
browser_desktop_exists zen.desktop && options="${options:+$options\n}󰖟 Zen"
local current=""
case "$(omarchy-default-browser)" in
chromium) current=" Chromium" ;;
chrome) current="󰊯 Chrome" ;;
brave) current="󰖟 Brave" ;;
brave-origin) current="󰖟 Brave Origin" ;;
edge) current="󰇩 Edge" ;;
firefox) current="󰈹 Firefox" ;;
zen) current="󰖟 Zen" ;;
esac
case $(menu "Default Browser" "$options" "" "$current") in
*Chromium*) omarchy-default-browser chromium ;;
*Chrome*) omarchy-default-browser chrome ;;
*"Brave Origin"*) omarchy-default-browser brave-origin ;;
*Brave*) omarchy-default-browser brave ;;
*Edge*) omarchy-default-browser edge ;;
*Firefox*) omarchy-default-browser firefox ;;
*Zen*) omarchy-default-browser zen ;;
*) show_setup_default_menu ;;
esac
}
show_setup_default_terminal_menu() {
local options=""
omarchy-cmd-present alacritty && options="$options Alacritty"
omarchy-cmd-present foot && options="${options:+$options\n} Foot"
omarchy-cmd-present ghostty && options="${options:+$options\n} Ghostty"
omarchy-cmd-present kitty && options="${options:+$options\n} Kitty"
local current=""
case "$(omarchy-default-terminal)" in
alacritty) current=" Alacritty" ;;
foot) current=" Foot" ;;
ghostty) current=" Ghostty" ;;
kitty) current=" Kitty" ;;
esac
case $(menu "Default Terminal" "$options" "" "$current") in
*Alacritty*) omarchy-default-terminal alacritty ;;
*Foot*) omarchy-default-terminal foot ;;
*Ghostty*) omarchy-default-terminal ghostty ;;
*Kitty*) omarchy-default-terminal kitty ;;
*) show_setup_default_menu ;;
esac
}
show_setup_default_editor_menu() {
local options=""
omarchy-cmd-present nvim && options="$options Neovim"
omarchy-cmd-present code && options="${options:+$options\n} VSCode"
omarchy-cmd-present cursor && options="${options:+$options\n} Cursor"
omarchy-cmd-present zed && options="${options:+$options\n} Zed"
omarchy-cmd-present sublime_text && options="${options:+$options\n} Sublime Text"
omarchy-cmd-present helix && options="${options:+$options\n} Helix"
omarchy-cmd-present vim && options="${options:+$options\n} Vim"
omarchy-cmd-present emacs && options="${options:+$options\n} Emacs"
local current=""
case "$(omarchy-default-editor)" in
nvim) current=" Neovim" ;;
code) current=" VSCode" ;;
cursor) current=" Cursor" ;;
zed) current=" Zed" ;;
sublime_text) current=" Sublime Text" ;;
helix) current=" Helix" ;;
vim) current=" Vim" ;;
emacs) current=" Emacs" ;;
esac
case $(menu "Default Editor" "$options" "" "$current") in
*Neovim*) omarchy-default-editor nvim ;;
*VSCode*) omarchy-default-editor code ;;
*Cursor*) omarchy-default-editor cursor ;;
*Zed*) omarchy-default-editor zed ;;
*Sublime*) omarchy-default-editor sublime_text ;;
*Helix*) omarchy-default-editor helix ;;
*Vim*) omarchy-default-editor vim ;;
*Emacs*) omarchy-default-editor emacs ;;
*) show_setup_default_menu ;;
esac
}
show_setup_config_menu() { show_setup_config_menu() {
case $(menu "Setup" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar\n󰞅 XCompose") in case $(menu "Setup" " Defaults\n Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar\n󰞅 XCompose") in
*Defaults*) open_in_editor ~/.config/uwsm/default ;;
*Hyprland*) open_in_editor ~/.config/hypr/hyprland.conf ;; *Hyprland*) open_in_editor ~/.config/hypr/hyprland.conf ;;
*Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && omarchy-restart-hypridle ;; *Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && omarchy-restart-hypridle ;;
*Hyprlock*) open_in_editor ~/.config/hypr/hyprlock.conf ;; *Hyprlock*) open_in_editor ~/.config/hypr/hyprlock.conf ;;
@@ -458,7 +361,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 Browser\n󱚤 AI\n Gaming\n󰍲 Windows") in 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
*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 ;;
@@ -468,26 +371,13 @@ 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 ;;
@@ -501,22 +391,20 @@ show_install_service_menu() {
} }
show_install_editor_menu() { show_install_editor_menu() {
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Vim\n Emacs") in case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
*VSCode*) present_terminal omarchy-install-vscode ;; *VSCode*) present_terminal omarchy-install-vscode ;;
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;; *Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
*Zed*) present_terminal omarchy-install-zed ;; *Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; *Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
*Helix*) present_terminal omarchy-install-helix ;; *Helix*) present_terminal omarchy-install-helix ;;
*Vim*) install "Vim" "vim" ;;
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;; *Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
*) show_install_menu ;; *) show_install_menu ;;
esac esac
} }
show_install_terminal_menu() { show_install_terminal_menu() {
case $(menu "Install" " Alacritty\n Foot\n Ghostty\n Kitty") in case $(menu "Install" " Alacritty\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 ;;
@@ -622,9 +510,8 @@ show_install_elixir_menu() {
} }
show_remove_menu() { show_remove_menu() {
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 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
*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 ;;
@@ -639,18 +526,6 @@ 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 ;;
@@ -775,7 +650,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-password ;; *Drive*) present_terminal omarchy-drive-set-password ;;
*User*) present_terminal passwd ;; *User*) present_terminal passwd ;;
*) show_update_menu ;; *) show_update_menu ;;
esac esac
@@ -814,6 +689,7 @@ go_to_menu() {
*trigger*) show_trigger_menu ;; *trigger*) show_trigger_menu ;;
*toggle*) show_toggle_menu ;; *toggle*) show_toggle_menu ;;
*hardware*) show_hardware_menu ;; *hardware*) show_hardware_menu ;;
*workspace*) show_workspace_menu ;;
*share*) show_share_menu ;; *share*) show_share_menu ;;
*transcode*) show_transcode_menu ;; *transcode*) show_transcode_menu ;;
*background*) show_background_menu ;; *background*) show_background_menu ;;
+3 -1
View File
@@ -1,8 +1,10 @@
#!/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 pkg add jq ripgrep # omarchy:examples=omarchy install package jq ripgrep
# omarchy:requires-sudo=true # omarchy:requires-sudo=true
if omarchy-pkg-missing "$@"; then if omarchy-pkg-missing "$@"; then
-1
View File
@@ -2,7 +2,6 @@
# 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.
+2 -9
View File
@@ -2,7 +2,6 @@
# 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.
@@ -68,16 +67,10 @@ sddm_dir="/usr/share/sddm/themes/omarchy"
sddm_template="$HOME/.local/share/omarchy/default/sddm/omarchy/Main.qml" sddm_template="$HOME/.local/share/omarchy/default/sddm/omarchy/Main.qml"
sed \ sed \
-e "s/#1a1b26/#$bg_hex/g" \ -e "s/#000000/#$bg_hex/g" \
-e "s/#ffffff/#$text_hex/g" \ -e "s/#ffffff/#$text_hex/g" \
-e 's|source: "logo.svg"|source: "logo.png"|' \
"$sddm_template" | sudo tee "$sddm_dir/Main.qml" >/dev/null "$sddm_template" | sudo tee "$sddm_dir/Main.qml" >/dev/null
sudo cp "$logo_path" "$sddm_dir/logo.png" sudo cp "$logo_path" "$sddm_dir/logo.png"
for asset in bullet.png entry.png lock.png; do
sudo cp "$staging_dir/$asset" "$sddm_dir/$asset"
done
for asset in entry lock; do
magick "$staging_dir/$asset.png" -channel RGB +level-colors "#f7768e","#f7768e" "$staging_dir/$asset-failed.png"
sudo cp "$staging_dir/$asset-failed.png" "$sddm_dir/$asset-failed.png"
done
sudo rm -f "$sddm_dir/logo.svg" sudo rm -f "$sddm_dir/logo.svg"
+2 -7
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Ensure all default .desktop, web apps, TUIs, and npx wrappers are installed. # omarchy:summary=Ensure all default .desktop, web apps, and TUIs are installed.
mkdir -p ~/.local/share/icons/hicolor/48x48/apps/ mkdir -p ~/.local/share/icons/hicolor/48x48/apps/
cp ~/.local/share/omarchy/applications/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/ cp ~/.local/share/omarchy/applications/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/
@@ -11,14 +11,9 @@ mkdir -p ~/.local/share/applications
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/ cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/ cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
if omarchy-cmd-present foot; then # Refresh the webapps and TUIs
cp ~/.local/share/omarchy/default/foot/foot.desktop ~/.local/share/applications/
fi
# Refresh the webapps, TUIs, and npx wrappers
bash $OMARCHY_PATH/install/packaging/icons.sh bash $OMARCHY_PATH/install/packaging/icons.sh
bash $OMARCHY_PATH/install/packaging/webapps.sh bash $OMARCHY_PATH/install/packaging/webapps.sh
bash $OMARCHY_PATH/install/packaging/tuis.sh bash $OMARCHY_PATH/install/packaging/tuis.sh
bash $OMARCHY_PATH/install/packaging/npx.sh
update-desktop-database ~/.local/share/applications update-desktop-database ~/.local/share/applications
+1
View File
@@ -5,4 +5,5 @@
omarchy-refresh-config waybar/config.jsonc omarchy-refresh-config waybar/config.jsonc
omarchy-refresh-config waybar/style.css omarchy-refresh-config waybar/style.css
echo "top" >"$HOME/.config/waybar/.style"
omarchy-restart-waybar omarchy-restart-waybar
-73
View File
@@ -1,73 +0,0 @@
#!/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
+1 -1
View File
@@ -21,7 +21,7 @@ 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-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \ libretro-fbneo-git \
retroarch-joypad-autoconfig-git retroarch-joypad-autoconfig-git
rm -rf \ rm -rf \
@@ -2,13 +2,13 @@
# omarchy:summary=Set the screensaver logo text from an SVG/PNG or the default # 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: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 # omarchy:examples=omarchy screensaver set logo ~/logo.svg | omarchy screensaver set logo default | omarchy screensaver set logo ~/logo.png --width 80 --mode block --stdout
set -o pipefail set -o pipefail
usage() { usage() {
cat <<'EOF' cat <<'EOF'
Usage: omarchy-screensaver-logo <default|path-to-logo.svg|png> [options] Usage: omarchy-screensaver-set-logo <default|path-to-logo.svg|png> [options]
Sets the screensaver logo text from an image. Sets the screensaver logo text from an image.
Pass "default" instead of an image path to restore the Omarchy default. Pass "default" instead of an image path to restore the Omarchy default.
-1
View File
@@ -2,7 +2,6 @@
# 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"
+1 -2
View File
@@ -1,8 +1,7 @@
#!/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=<0-100> # omarchy:args=<percent>
# omarchy:examples=omarchy swayosd brightness 0 | omarchy swayosd brightness 50 | omarchy swayosd brightness 100
percent="$1" percent="$1"
+1 -2
View File
@@ -1,8 +1,7 @@
#!/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=<0-100> # omarchy:args=<percent>
# omarchy:examples=omarchy swayosd kbd brightness 0 | omarchy swayosd kbd brightness 50 | omarchy swayosd kbd brightness 100
percent="$1" percent="$1"
+2 -16
View File
@@ -1,16 +1,11 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Lock the computer and turn off the display # omarchy:summary=Lock the screen
# omarchy:group=system # omarchy:group=system
# omarchy:name=lock # omarchy:name=lock
# omarchy:examples=omarchy system lock # omarchy:examples=omarchy system lock
if ! pidof hyprlock >/dev/null; then pidof hyprlock || hyprlock &
(
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
@@ -22,12 +17,3 @@ 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
@@ -1,9 +0,0 @@
#!/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
+1 -6
View File
@@ -9,14 +9,9 @@ if [[ -z $1 ]]; then
exit 1 exit 1
fi fi
BACKGROUND="$(realpath "$1")" BACKGROUND="$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,7 +2,6 @@
# 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 -2
View File
@@ -62,7 +62,6 @@ 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
@@ -70,4 +69,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" >/dev/null omarchy-hook theme-set "$THEME_NAME"
+22 -36
View File
@@ -1,44 +1,30 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Apply the current theme color to Chromium, Chrome, Edge, and Brave # omarchy:summary=Apply the current theme color to Chromium and Brave
# omarchy:hidden=true
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
if [[ -f $CHROMIUM_THEME ]]; then if omarchy-cmd-present chromium || omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then
THEME_RGB_COLOR=$(<$CHROMIUM_THEME) if [[ -f $CHROMIUM_THEME ]]; then
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ }) THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
else THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
# Use a default, neutral grey if theme doesn't have a color else
THEME_HEX_COLOR="#1c2027" # Use a default, neutral grey if theme doesn't have a color
fi THEME_RGB_COLOR="28,32,39"
THEME_HEX_COLOR="#1c2027"
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 fi
}
set_browser_policy /etc/chromium/policies/managed if omarchy-cmd-present chromium; then
refresh_running_browser chromium chromium 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
set_browser_policy /etc/opt/chrome/policies/managed # Brave and Brave Origin Beta share /etc/brave/policies, so a single write covers both
refresh_running_browser chrome google-chrome-stable || refresh_running_browser chrome google-chrome 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
set_browser_policy /etc/opt/edge/policies/managed if pgrep -x brave >/dev/null; then
refresh_running_browser msedge microsoft-edge-stable 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
set_browser_policy /etc/brave/policies/managed fi
refresh_running_browser brave brave fi
refresh_running_browser brave-origin-beta brave-origin-beta -f fi
-28
View File
@@ -1,28 +0,0 @@
#!/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,7 +1,6 @@
#!/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,7 +1,6 @@
#!/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,7 +1,6 @@
#!/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,7 +1,6 @@
#!/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,7 +1,6 @@
#!/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,7 +1,6 @@
#!/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,7 +1,6 @@
#!/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"
-1
View File
@@ -1,4 +1,3 @@
#!/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,7 +2,6 @@
# 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 -1
View File
@@ -21,5 +21,5 @@ if gum confirm "Install Voxtype + AI model (~150MB) to enable dictation?"; then
voxtype setup systemd voxtype setup systemd
omarchy-restart-waybar omarchy-restart-waybar
notify-send " Voxtype Dictation Ready" "Hold F9 to dictate (or toggle with Super + Ctrl + X)." -t 10000 notify-send " Voxtype Dictation Ready" "Press Super + Ctrl + X to toggle dictation.\nEdit ~/.config/voxtype/config.toml for options." -t 10000
fi fi
+58
View File
@@ -0,0 +1,58 @@
#!/bin/bash
# omarchy:summary=Set Waybar style
# omarchy:args=<top|pill|float|toggle|list>
# omarchy:examples=omarchy waybar set pill | omarchy waybar set float | omarchy waybar set toggle
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
STYLE_DIR="$OMARCHY_PATH/config/waybar/styles"
CONFIG_DIR="$OMARCHY_PATH/config/waybar/configs"
CURRENT_STYLE_FILE="$HOME/.config/waybar/.style"
STYLE=${1:-toggle}
list_styles() {
for style in "$STYLE_DIR"/*.css; do
[[ -e $style ]] || continue
basename "$style" .css
done
}
current_style() {
if [[ -f $CURRENT_STYLE_FILE ]]; then
read -r current <"$CURRENT_STYLE_FILE"
[[ -n $current ]] && printf '%s\n' "$current" && return
fi
echo "top"
}
if [[ $STYLE == "list" ]]; then
list_styles
exit
fi
if [[ $STYLE == "default" ]]; then
STYLE="top"
fi
if [[ $STYLE == "toggle" ]]; then
if [[ $(current_style) == "pill" ]]; then
STYLE="top"
else
STYLE="pill"
fi
fi
if [[ ! -f $STYLE_DIR/$STYLE.css || ! -f $CONFIG_DIR/$STYLE.jsonc ]]; then
echo "Unknown Waybar style '$STYLE'"
echo "Available styles:"
list_styles
exit 1
fi
mkdir -p "$HOME/.config/waybar"
cp "$CONFIG_DIR/$STYLE.jsonc" "$HOME/.config/waybar/config.jsonc"
cp "$STYLE_DIR/$STYLE.css" "$HOME/.config/waybar/style.css"
echo "$STYLE" >"$CURRENT_STYLE_FILE"
omarchy-restart-waybar
-36
View File
@@ -1,36 +0,0 @@
#!/bin/bash
# omarchy:summary=Returns a weather condition icon, adjusted for live sunrise and sunset.
weather_data=$(curl -fsS --max-time 3 "https://wttr.in?format=j1" 2>/dev/null | jq -er '[.current_condition[0].weatherCode, .weather[0].astronomy[0].sunrise, .weather[0].astronomy[0].sunset] | select(all(. != null and . != "")) | @tsv' 2>/dev/null) || exit 1
IFS=$'\t' read -r weather_code sunrise sunset <<< "$weather_data"
if [[ ! $weather_code =~ ^[0-9]+$ || ! $sunrise =~ ^[0-9]{1,2}:[0-9]{2}\ [AP]M$ || ! $sunset =~ ^[0-9]{1,2}:[0-9]{2}\ [AP]M$ ]]; then
exit 1
fi
now_epoch=$(date +%s)
sunrise_epoch=$(date -d "today $sunrise" +%s 2>/dev/null || echo 0)
sunset_epoch=$(date -d "today $sunset" +%s 2>/dev/null || echo 0)
if (( sunrise_epoch > 0 && sunset_epoch > 0 && (now_epoch < sunrise_epoch || now_epoch >= sunset_epoch) )); then
night=true
else
night=false
fi
case $weather_code in
113) [[ $night == "true" ]] && icon="" || icon="" ;;
116) [[ $night == "true" ]] && icon="" || icon="" ;;
119|122) icon="" ;;
143|248|260) icon="" ;;
176|263|266|293|296|353) [[ $night == "true" ]] && icon="" || icon="" ;;
179|227|230|323|326|368) [[ $night == "true" ]] && icon="" || icon="" ;;
182|185|281|284|311|314|317|320|350|362|365|374|377) icon="" ;;
200|386|389|392|395) icon="" ;;
299|302|305|308|356|359) icon="" ;;
329|332|335|338|371) icon="" ;;
*) icon="" ;;
esac
printf '%s\n' "$icon"
-26
View File
@@ -1,26 +0,0 @@
#!/bin/bash
# omarchy:summary=Returns a formatted weather status string with temperature and wind speed.
weather=$(curl -fsS --max-time 4 "https://wttr.in?format=%l|%t|%w" 2>/dev/null | tr -d '\n')
if [[ -z $weather ]]; then
echo "Weather unavailable"
exit 1
fi
IFS='|' read -r place temperature wind <<< "$weather"
place=${place%%,*}
place=${place^}
format_temperature() {
local celsius=${1#+}
celsius=${celsius//°/}
celsius=${celsius%C}
echo "${celsius}°c / $((celsius * 9 / 5 + 32))°f"
}
temperature=$(format_temperature "$temperature")
wind=${wind//km\// km/}
echo "$(omarchy-weather-icon) $place · Temperature $temperature · Wind $wind"
+395
View File
@@ -0,0 +1,395 @@
#!/bin/bash
# omarchy:summary=Restore the saved layout for the current Hyprland workspace
# omarchy:args=
# omarchy:examples=omarchy workspace restore
set -euo pipefail
monitor=$(omarchy-hyprland-monitor-focused)
workspace=$(hyprctl monitors -j | jq -r --arg monitor "$monitor" '.[] | select(.name == $monitor) | .activeWorkspace.id')
file="$HOME/.config/hypr/workspaces/$monitor-$workspace.tsv"
if [[ ! -f $file ]]; then
notify-send -u low "󱂬 No saved workspace $workspace for $monitor" "$file" -t 3000
exit 1
fi
restore_data=$(grep -v '^#' "$file" || true)
if [[ -z $restore_data ]]; then
notify-send -u low "󱂬 No windows saved for workspace $workspace" "$file" -t 3000
exit 1
fi
restore_map=$(mktemp)
assigned_addresses=$(mktemp)
trap 'rm -f "$restore_map" "$assigned_addresses"' EXIT
declare -a classes commands xs ys ws hs focuseds addresses launched
count=0
while IFS=$'\t' read -r _ saved_workspace mode class command x y w h focused; do
[[ -n $class ]] || continue
workspace=$saved_workspace
classes[count]=$class
commands[count]=$command
xs[count]=$x
ys[count]=$y
ws[count]=$w
hs[count]=$h
focuseds[count]=${focused:-false}
addresses[count]=""
launched[count]=false
(( count += 1 ))
done <<< "$restore_data"
hyprctl dispatch workspace "$workspace" >/dev/null
for (( i = 0; i < count; i++ )); do
class=${classes[i]}
hyprctl keyword windowrulev2 "workspace $workspace silent,class:^($class)$" >/dev/null
if [[ ${mode:-tiled} == "floating" ]]; then
hyprctl keyword windowrulev2 "float,class:^($class)$" >/dev/null
else
hyprctl keyword windowrulev2 "tile,class:^($class)$" >/dev/null
fi
done
existing_unassigned_json() {
local class=$1
{
hyprctl clients -j | jq -r --arg class "$class" '.[] | select(.class == $class or .initialClass == $class) | .address' |
grep -Fvx -f "$assigned_addresses" || true
} | jq -R -s -c 'split("\n")[:-1]'
}
wait_for_address() {
local class=$1
local existing=${2:-[]}
local tries=0
local address=""
while [[ -z $address ]]; do
address=$(hyprctl clients -j | jq -r --arg class "$class" --argjson existing "$existing" \
'.[] | select((.class == $class or .initialClass == $class) and (.address as $address | $existing | index($address) | not)) | .address' | head -n1)
if [[ -n $address ]]; then
printf '%s\n' "$address"
return 0
fi
sleep 0.2
(( tries += 1 ))
# Single-instance apps may focus/reuse an existing window instead of creating a new one.
if (( tries >= 25 )) && [[ $existing != "[]" ]]; then
jq -r '.[0]' <<< "$existing"
return 0
fi
if (( tries >= 75 )); then
echo "Timed out waiting for $class" >&2
return 1
fi
done
}
ensure_window() {
local id=$1
local class=${classes[id]}
local command=${commands[id]}
local existing address
if [[ ${launched[id]} == "true" ]]; then
last_address=${addresses[id]}
return 0
fi
existing=$(existing_unassigned_json "$class")
if [[ $existing != "[]" && ( $class == chrome-* || $class == chromium* ) ]]; then
address=$(jq -r '.[0]' <<< "$existing")
else
hyprctl dispatch exec "[workspace $workspace silent] $command" >/dev/null
address=$(wait_for_address "$class" "$existing") || return 1
fi
hyprctl dispatch movetoworkspacesilent "$workspace,address:$address" >/dev/null || true
if [[ ${mode:-tiled} == "floating" ]]; then
hyprctl dispatch setfloating "address:$address" >/dev/null || true
hyprctl dispatch resizewindowpixel exact "${ws[id]}" "${hs[id]}",address:"$address" >/dev/null || true
hyprctl dispatch movewindowpixel exact "${xs[id]}" "${ys[id]}",address:"$address" >/dev/null || true
else
hyprctl dispatch settiled "address:$address" >/dev/null || true
hyprctl dispatch focuswindow "address:$address" >/dev/null || true
fi
addresses[id]=$address
launched[id]=true
printf '%s\n' "$address" >>"$assigned_addresses"
printf '%s\t%s\t%s\t%s\t%s\t%s\n' "$address" "$id" "${xs[id]}" "${ys[id]}" "${ws[id]}" "${hs[id]}" >>"$restore_map"
if [[ ${focuseds[id]} == "true" ]]; then
focused_address=$address
fi
sleep 0.4
last_address=$address
}
choose_rep() {
local best=""
local best_area=-1
local id area
for id in "$@"; do
area=$(( ws[id] * hs[id] ))
if (( area > best_area )); then
best=$id
best_area=$area
fi
done
printf '%s\n' "$best"
}
find_launched_address() {
local id
for id in "$@"; do
if [[ ${launched[id]} == "true" ]]; then
printf '%s\n' "${addresses[id]}"
return 0
fi
done
return 1
}
opposite_direction() {
case $1 in
l) echo r ;;
r) echo l ;;
u) echo d ;;
d) echo u ;;
esac
}
abs() {
local value=$1
if (( value < 0 )); then
echo $(( -value ))
else
echo "$value"
fi
}
find_partition() {
local ids=("$@")
local best_score=9223372036854775807
local best_a=""
local best_b=""
local best_dir=""
local orientation i j id edge start cut gap right bottom area_a area_b score valid a b
for orientation in v h; do
for i in "${ids[@]}"; do
for j in "${ids[@]}"; do
if [[ $orientation == "v" ]]; then
edge=$(( xs[i] + ws[i] ))
start=${xs[j]}
[[ $edge -lt $start ]] || continue
else
edge=$(( ys[i] + hs[i] ))
start=${ys[j]}
[[ $edge -lt $start ]] || continue
fi
cut=$(( (edge + start) / 2 ))
gap=$(( start - edge ))
valid=true
a=""
b=""
area_a=0
area_b=0
for id in "${ids[@]}"; do
if [[ $orientation == "v" ]]; then
right=$(( xs[id] + ws[id] ))
if (( right <= cut )); then
a="$a $id"
area_a=$(( area_a + ws[id] * hs[id] ))
elif (( xs[id] >= cut )); then
b="$b $id"
area_b=$(( area_b + ws[id] * hs[id] ))
else
valid=false
break
fi
else
bottom=$(( ys[id] + hs[id] ))
if (( bottom <= cut )); then
a="$a $id"
area_a=$(( area_a + ws[id] * hs[id] ))
elif (( ys[id] >= cut )); then
b="$b $id"
area_b=$(( area_b + ws[id] * hs[id] ))
else
valid=false
break
fi
fi
done
[[ $valid == "true" && -n $a && -n $b ]] || continue
score=$(abs $(( area_a - area_b )))
score=$(( score * 1000 - gap ))
if (( score < best_score )); then
best_score=$score
best_a=${a# }
best_b=${b# }
if [[ $orientation == "v" ]]; then
best_dir=r
else
best_dir=d
fi
fi
done
done
done
if [[ -z $best_a || -z $best_b ]]; then
fallback_partition "${ids[@]}"
return
fi
read -r -a part_a <<< "$best_a"
read -r -a part_b <<< "$best_b"
part_dir=$best_dir
}
fallback_partition() {
local ids=("$@")
local sorted=()
local line id bbox_min_x=999999 bbox_min_y=999999 bbox_max_x=0 bbox_max_y=0 bbox_w bbox_h key index
for id in "${ids[@]}"; do
(( xs[id] < bbox_min_x )) && bbox_min_x=${xs[id]}
(( ys[id] < bbox_min_y )) && bbox_min_y=${ys[id]}
(( xs[id] + ws[id] > bbox_max_x )) && bbox_max_x=$(( xs[id] + ws[id] ))
(( ys[id] + hs[id] > bbox_max_y )) && bbox_max_y=$(( ys[id] + hs[id] ))
done
bbox_w=$(( bbox_max_x - bbox_min_x ))
bbox_h=$(( bbox_max_y - bbox_min_y ))
while read -r line; do
sorted+=("${line#* }")
done < <(
for id in "${ids[@]}"; do
if (( bbox_w >= bbox_h )); then
key=${xs[id]}
else
key=${ys[id]}
fi
printf '%s %s\n' "$key" "$id"
done | sort -n
)
part_a=()
part_b=()
for index in "${!sorted[@]}"; do
if (( index < ${#sorted[@]} / 2 )); then
part_a+=("${sorted[index]}")
else
part_b+=("${sorted[index]}")
fi
done
if (( bbox_w >= bbox_h )); then
part_dir=r
else
part_dir=d
fi
}
materialize_group() {
local ids=("$@")
local rep_a rep_b addr_a addr_b dir opposite
if (( ${#ids[@]} == 0 )); then
return 0
fi
if (( ${#ids[@]} == 1 )); then
ensure_window "${ids[0]}" >/dev/null || true
return 0
fi
find_partition "${ids[@]}"
dir=$part_dir
opposite=$(opposite_direction "$dir")
addr_a=$(find_launched_address "${part_a[@]}" || true)
addr_b=$(find_launched_address "${part_b[@]}" || true)
if [[ -z $addr_a && -z $addr_b ]]; then
rep_a=$(choose_rep "${part_a[@]}")
ensure_window "$rep_a" || return 0
addr_a=$last_address
hyprctl dispatch focuswindow "address:$addr_a" >/dev/null || true
hyprctl dispatch layoutmsg preselect "$dir" >/dev/null || true
rep_b=$(choose_rep "${part_b[@]}")
ensure_window "$rep_b" || true
addr_b=${last_address:-}
elif [[ -n $addr_a && -z $addr_b ]]; then
hyprctl dispatch focuswindow "address:$addr_a" >/dev/null || true
hyprctl dispatch layoutmsg preselect "$dir" >/dev/null || true
rep_b=$(choose_rep "${part_b[@]}")
ensure_window "$rep_b" || true
addr_b=${last_address:-}
elif [[ -z $addr_a && -n $addr_b ]]; then
hyprctl dispatch focuswindow "address:$addr_b" >/dev/null || true
hyprctl dispatch layoutmsg preselect "$opposite" >/dev/null || true
rep_a=$(choose_rep "${part_a[@]}")
ensure_window "$rep_a" || true
addr_a=${last_address:-}
fi
materialize_group "${part_a[@]}"
materialize_group "${part_b[@]}"
}
ids=()
for (( i = 0; i < count; i++ )); do
ids+=("$i")
done
if [[ ${mode:-tiled} == "floating" ]]; then
for id in "${ids[@]}"; do
ensure_window "$id" >/dev/null || true
done
else
materialize_group "${ids[@]}"
for _ in 1 2 3 4; do
while IFS=$'\t' read -r address _ _ _ w h; do
hyprctl dispatch resizewindowpixel exact "$w" "$h",address:"$address" >/dev/null || true
done < <(sort -t $'\t' -k3,3n -k4,4n "$restore_map")
sleep 0.1
done
fi
if [[ -n ${focused_address:-} ]]; then
hyprctl dispatch focuswindow "address:$focused_address" >/dev/null || true
fi
notify-send -u low "󱂬 Restored workspace $workspace for $monitor" -t 3000
hyprctl dispatch workspace "$workspace" >/dev/null
+74
View File
@@ -0,0 +1,74 @@
#!/bin/bash
# omarchy:summary=Save the current Hyprland workspace app layout to ~/.config/hypr/workspaces/<monitor-name>-<workspace-id>.tsv
# omarchy:args=
# omarchy:examples=omarchy workspace save
set -euo pipefail
monitor=$(omarchy-hyprland-monitor-focused)
workspace=$(hyprctl monitors -j | jq -r --arg monitor "$monitor" '.[] | select(.name == $monitor) | .activeWorkspace.id')
mkdir -p ~/.config/hypr/workspaces
file="$HOME/.config/hypr/workspaces/$monitor-$workspace.tsv"
clients=$(hyprctl clients -j)
active_address=$(hyprctl activewindow -j | jq -r '.address // ""')
webapp_command() {
local class=$1
local initial_title=$2
local encoded host path
[[ $class == chrome-* ]] || return 1
if [[ $initial_title == http://* || $initial_title == https://* ]]; then
printf 'omarchy-launch-webapp %s\n' "${initial_title//_/\/}"
return 0
fi
encoded=${class#chrome-}
encoded=${encoded%-Default}
if [[ $encoded == *__* ]]; then
host=${encoded%%__*}
path=${encoded#*__}
printf 'omarchy-launch-webapp https://%s/%s\n' "$host" "${path//_/\/}"
else
printf 'omarchy-launch-webapp https://%s\n' "${encoded//_/\/}"
fi
}
launch_command() {
local class=$1
local initial_title=$2
local pid=$3
if webapp_command "$class" "$initial_title"; then
return 0
elif [[ -r /proc/$pid/cmdline ]]; then
tr '\0' ' ' <"/proc/$pid/cmdline" | sed 's/[[:space:]]*$//'
else
echo "$class"
fi
}
{
printf '# monitor\tworkspace\tmode\tclass\tcommand\tx\ty\tw\th\tfocused\n'
jq -r --argjson workspace "$workspace" '
[.[] | select(.workspace.id == $workspace)]
| sort_by(.at[0], .at[1])
| .[]
| [(.initialClass // .class), .initialTitle, .pid, .at[0], .at[1], .size[0], .size[1], .address]
| @tsv
' <<< "$clients" | while IFS=$'\t' read -r class initial_title pid x y w h address; do
command=$(launch_command "$class" "$initial_title" "$pid")
focused=false
if [[ $address == "$active_address" ]]; then
focused=true
fi
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$monitor" "$workspace" "tiled" "$class" "$command" "$x" "$y" "$w" "$h" "$focused"
done
} >"$file"
notify-send -u low "󱂬 Saved workspace $workspace for $monitor" -t 3000
+1
View File
@@ -0,0 +1 @@
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
+1
View File
@@ -0,0 +1 @@
brave-flags.conf
-19
View File
@@ -1,19 +0,0 @@
[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
+18 -9
View File
@@ -1,19 +1,28 @@
general { general {
lock_cmd = omarchy-system-lock # lock screen and 1password lock_cmd = omarchy-system-lock # lock screen and 1password
before_sleep_cmd = OMARCHY_LOCK_ONLY=true omarchy-system-lock # lock before suspend without scheduling display off. before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = sleep 1 && omarchy-system-wake # delay for PAM readiness, then turn on display. after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # 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 timeout = 150 # 2.5min
on-timeout = pidof hyprlock || omarchy-launch-screensaver on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already)
} }
# Lock system after 5 minutes
listener { listener {
timeout = 152 timeout = 151 # 5min
on-timeout = omarchy-system-lock on-timeout = loginctl lock-session # lock screen when timeout has passed
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|foot), scroll_touchpad 1.5 windowrule = match:class (Alacritty|kitty), 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,9 +32,3 @@ 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
}
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# This hook is called with the current battery percentage when the low battery # This hook is called with the current battery percentage when the low battery
# notification is sent. To put it into use, remove .sample from this file name. # notification is sent. To put it into use, remove .sample from the name.
SOUND_FILE="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga" SOUND_FILE="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga"
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# This hook is called with the snake-cased name of the font that has just been set. # This hook is called with the snake-cased name of the font that has just been set.
# To put it into use, remove .sample from this file name. # To put it into use, remove .sample from the name.
# Example: Show the name of the font that was just set. # Example: Show the name of the theme that was just set.
# notify-send -u low "New font" "Your new font is $1" # notify-send -u low "New font" "Your new font is $1"
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# This hook is called after an Omarchy system update has been performed. # This hook is called after an Omarchy system update has been performed.
# To put it into use, remove .sample from this file name. # To put it into use, remove .sample from the name.
# Example: Show notification after the system has been updated. # Example: Show notification after the system has been updated.
# notify-send -u low "Update Performed" "Your system is now up to date" # notify-send -u low "Update Performed" "Your system is now up to date"
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# This hook is called with the snake-cased name of the theme that has just been set. # This hook is called with the snake-cased name of the theme that has just been set.
# To put it into use, remove .sample from this file name. # To put it into use, remove .sample from the name.
# Example: Show the name of the theme that was just set. # Example: Show the name of the theme that was just set.
# notify-send -u low "New theme" "Your new theme is $1" # notify-send -u low "New theme" "Your new theme is $1"
-3
View File
@@ -70,9 +70,6 @@ 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 -8
View File
@@ -5,7 +5,7 @@
"spacing": 0, "spacing": 0,
"height": 26, "height": 26,
"modules-left": ["custom/omarchy", "hyprland/workspaces"], "modules-left": ["custom/omarchy", "hyprland/workspaces"],
"modules-center": ["clock", "custom/weather", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"], "modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
"modules-right": [ "modules-right": [
"group/tray-expander", "group/tray-expander",
"bluetooth", "bluetooth",
@@ -66,13 +66,6 @@
"tooltip": false, "tooltip": false,
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select" "on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
}, },
"custom/weather": {
"exec": "$OMARCHY_PATH/default/waybar/weather.sh",
"return-type": "json",
"interval": 600,
"tooltip": false,
"on-click": "notify-send -u low \"$(omarchy-weather-status)\""
},
"network": { "network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"], "format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format": "{icon}", "format": "{icon}",
+193
View File
@@ -0,0 +1,193 @@
{
"reload_style_on_change": true,
"layer": "top",
"position": "top",
"spacing": 0,
"height": 26,
"margin-top": 10,
"margin-left": 10,
"margin-right": 10,
"modules-left": ["custom/omarchy", "hyprland/workspaces", "hyprland/window"],
"modules-center": ["clock", "custom/update", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
"modules-right": [
"mpris",
"group/tray-expander",
"backlight",
"network",
"bluetooth",
"pulseaudio",
"cpu",
"battery"
],
"hyprland/workspaces": {
"on-click": "activate",
"format": "{icon}",
"format-icons": {
"default": "",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"10": "0",
"active": "󱓻"
},
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": []
}
},
"custom/omarchy": {
"format": "<span font='omarchy'>\ue900</span>",
"on-click": "omarchy-menu",
"on-click-right": "xdg-terminal-exec",
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
},
"custom/update": {
"format": "",
"exec": "omarchy-update-available",
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
"tooltip-format": "Omarchy update available",
"signal": 7,
"interval": 21600
},
"cpu": {
"interval": 5,
"format": "󰍛",
"on-click": "omarchy-launch-or-focus-tui btop",
"on-click-right": "alacritty"
},
"clock": {
"format": "{:%I:%M %p}",
"format-alt": "{:%A %d/%m/%Y}",
"tooltip-format": "<span>{calendar}</span>",
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
},
"network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format": "{icon} {essid}",
"format-wifi": "{icon} {essid}",
"format-ethernet": "󰀂",
"format-disconnected": "󰤮",
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
"spacing": 1,
"on-click": "omarchy-launch-wifi"
},
"battery": {
"format": "{capacity}% {icon}",
"format-discharging": "{icon}",
"format-charging": "{icon}",
"format-plugged": "",
"format-icons": {
"charging": ["󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"],
"default": ["󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
},
"format-full": "󰂅",
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
"interval": 5,
"on-click": "omarchy-menu power",
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
"states": {
"warning": 20,
"critical": 10
}
},
"bluetooth": {
"format": "",
"format-off": "󰂲",
"format-disabled": "󰂲",
"format-connected": "",
"format-no-controller": "",
"tooltip-format": "Devices connected: {num_connections}",
"on-click": "omarchy-launch-bluetooth"
},
"pulseaudio": {
"format": "{icon}",
"on-click": "omarchy-launch-audio",
"on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%",
"scroll-step": 5,
"format-muted": "",
"format-icons": {
"headphone": "",
"headset": "",
"default": ["", "", ""]
}
},
"group/tray-expander": {
"orientation": "inherit",
"drawer": {
"transition-duration": 600,
"children-class": "tray-group-item"
},
"modules": ["custom/expand-icon", "tray", "memory", "custom/weather"]
},
"custom/expand-icon": {
"format": " ",
"tooltip": false
},
"custom/screenrecording-indicator": {
"on-click": "omarchy-capture-screenrecording",
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
"signal": 8,
"return-type": "json"
},
"custom/idle-indicator": {
"on-click": "omarchy-toggle-idle",
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
"signal": 9,
"return-type": "json"
},
"custom/notification-silencing-indicator": {
"on-click": "omarchy-toggle-notification-silencing",
"exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh",
"signal": 10,
"return-type": "json"
},
"tray": {
"icon-size": 12,
"spacing": 12
},
"backlight": {
"format": "{percent}% {icon}",
"format-icons": ["🌑", "🌘", "🌗", "🌖", "🌕"]
},
"memory": {
"format": " {used:0.1f}gb",
"interval": 2,
"on-click": "omarchy-launch-or-focus-tui btop"
},
"custom/weather": {
"format": "{}°",
"tooltip": true,
"interval": 600,
"exec": "omarchy-cmd-present wttrbar && wttrbar || true",
"return-type": "json"
},
"mpris": {
"format": "{player_icon} {artist} - {title}",
"format-paused": "{status_icon} <i>{artist} - {title}</i>",
"player-icons": {
"default": "🎵",
"mpv": "🎵"
},
"status-icons": {
"paused": "⏸"
},
"max-length": 50
},
"hyprland/window": {
"format": "{}"
}
}
+189
View File
@@ -0,0 +1,189 @@
{
"reload_style_on_change": true,
"layer": "top",
"position": "top",
"spacing": 0,
"height": 26,
"modules-left": ["custom/omarchy", "hyprland/workspaces", "hyprland/window"],
"modules-center": ["clock", "custom/update", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
"modules-right": [
"mpris",
"group/tray-expander",
"backlight",
"network",
"bluetooth",
"pulseaudio",
"cpu",
"battery"
],
"hyprland/workspaces": {
"on-click": "activate",
"format": "{icon}",
"format-icons": {
"default": "",
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"active": ""
},
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": []
}
},
"custom/omarchy": {
"format": "<span font='omarchy'>\ue900</span>",
"on-click": "omarchy-menu",
"on-click-right": "xdg-terminal-exec",
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
},
"custom/update": {
"format": "",
"exec": "omarchy-update-available",
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
"tooltip-format": "Omarchy update available",
"signal": 7,
"interval": 21600
},
"cpu": {
"interval": 5,
"format": "󰍛",
"on-click": "omarchy-launch-or-focus-tui btop",
"on-click-right": "alacritty"
},
"clock": {
"format": "{:%I:%M %p}",
"format-alt": "{:%A %d/%m/%Y}",
"tooltip-format": "<span>{calendar}</span>",
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
},
"network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format": "{icon} {essid}",
"format-wifi": "{icon} {essid}",
"format-ethernet": "󰀂",
"format-disconnected": "󰤮",
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
"spacing": 1,
"on-click": "omarchy-launch-wifi"
},
"battery": {
"format": "{capacity}% {icon}",
"format-discharging": "{capacity}% {icon}",
"format-charging": "{capacity}% {icon}",
"format-plugged": "",
"format-icons": {
"charging": ["󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"],
"default": ["󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
},
"format-full": "󰂅",
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
"interval": 5,
"on-click": "omarchy-menu power",
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
"states": {
"warning": 20,
"critical": 10
}
},
"bluetooth": {
"format": "",
"format-off": "󰂲",
"format-disabled": "󰂲",
"format-connected": "",
"format-no-controller": "",
"tooltip-format": "Devices connected: {num_connections}",
"on-click": "omarchy-launch-bluetooth"
},
"pulseaudio": {
"format": "{icon}",
"on-click": "omarchy-launch-audio",
"on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%",
"scroll-step": 5,
"format-muted": "",
"format-icons": {
"headphone": "",
"headset": "",
"default": ["", "", ""]
}
},
"group/tray-expander": {
"orientation": "inherit",
"drawer": {
"transition-duration": 600,
"children-class": "tray-group-item"
},
"modules": ["custom/expand-icon", "tray", "memory", "custom/weather"]
},
"custom/expand-icon": {
"format": " ",
"tooltip": false
},
"custom/screenrecording-indicator": {
"on-click": "omarchy-capture-screenrecording",
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
"signal": 8,
"return-type": "json"
},
"custom/idle-indicator": {
"on-click": "omarchy-toggle-idle",
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
"signal": 9,
"return-type": "json"
},
"custom/notification-silencing-indicator": {
"on-click": "omarchy-toggle-notification-silencing",
"exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh",
"signal": 10,
"return-type": "json"
},
"tray": {
"icon-size": 12,
"spacing": 12
},
"backlight": {
"format": "{percent}% {icon}",
"format-icons": ["🌑", "🌘", "🌗", "🌖", "🌕"]
},
"memory": {
"format": " {used:0.1f}gb",
"interval": 2,
"on-click": "omarchy-launch-or-focus-tui btop"
},
"custom/weather": {
"format": "{}°",
"tooltip": true,
"interval": 600,
"exec": "omarchy-cmd-present wttrbar && wttrbar || true",
"return-type": "json"
},
"mpris": {
"format": "{player_icon} {artist} - {title}",
"format-paused": "{status_icon} <i>{artist} - {title}</i>",
"player-icons": {
"default": "🎵",
"mpv": "🎵"
},
"status-icons": {
"paused": "⏸"
}
},
"hyprland/window": {
"format": "{}"
}
}
+175
View File
@@ -0,0 +1,175 @@
{
"reload_style_on_change": true,
"layer": "top",
"position": "top",
"spacing": 0,
"height": 26,
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
"modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
"modules-right": [
"group/tray-expander",
"bluetooth",
"network",
"pulseaudio",
"cpu",
"battery"
],
"hyprland/workspaces": {
"on-click": "activate",
"format": "{icon}",
"format-icons": {
"default": "",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"10": "0",
"active": "󱓻"
},
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": []
}
},
"custom/omarchy": {
"format": "<span font='omarchy'>\ue900</span>",
"on-click": "omarchy-menu",
"on-click-right": "xdg-terminal-exec",
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
},
"custom/update": {
"format": "",
"exec": "omarchy-update-available",
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
"tooltip-format": "Omarchy update available",
"signal": 7,
"interval": 21600
},
"cpu": {
"interval": 5,
"format": "󰍛",
"on-click": "omarchy-launch-or-focus-tui btop",
"on-click-right": "alacritty"
},
"clock": {
"format": "{:L%A %H:%M}",
"format-alt": "{:L%d %B W%V %Y}",
"tooltip": false,
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
},
"network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format": "{icon}",
"format-wifi": "{icon}",
"format-ethernet": "󰀂",
"format-disconnected": "󰤮",
"tooltip-format-wifi": "{essid} ({frequency} GHz)",
"tooltip-format-ethernet": "Connected",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
"spacing": 1,
"on-click": "omarchy-launch-wifi"
},
"battery": {
"format": "{capacity}% {icon}",
"format-discharging": "{icon}",
"format-charging": "{icon}",
"format-plugged": "",
"format-icons": {
"charging": ["󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"],
"default": ["󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
},
"format-full": "󰂅",
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
"interval": 5,
"on-click": "omarchy-menu power",
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
"states": {
"warning": 20,
"critical": 10
}
},
"bluetooth": {
"format": "",
"format-off": "󰂲",
"format-disabled": "󰂲",
"format-connected": "󰂱",
"format-no-controller": "",
"tooltip-format": "Devices connected: {num_connections}",
"on-click": "omarchy-launch-bluetooth"
},
"pulseaudio": {
"format": "{icon}",
"on-click": "omarchy-launch-audio",
"on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%",
"scroll-step": 5,
"format-muted": "",
"format-icons": {
"headphone": "",
"headset": "",
"default": ["", "", ""]
}
},
"group/tray-expander": {
"orientation": "inherit",
"drawer": {
"transition-duration": 600,
"children-class": "tray-group-item"
},
"modules": ["custom/expand-icon", "tray"]
},
"custom/expand-icon": {
"format": "",
"tooltip": false,
"on-scroll-up": "",
"on-scroll-down": "",
"on-scroll-left": "",
"on-scroll-right": ""
},
"custom/screenrecording-indicator": {
"on-click": "omarchy-capture-screenrecording",
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
"signal": 8,
"return-type": "json"
},
"custom/idle-indicator": {
"on-click": "omarchy-toggle-idle",
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
"signal": 9,
"return-type": "json"
},
"custom/notification-silencing-indicator": {
"on-click": "omarchy-toggle-notification-silencing",
"exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh",
"signal": 10,
"return-type": "json"
},
"custom/voxtype": {
"exec": "omarchy-voxtype-status",
"return-type": "json",
"format": "{icon}",
"format-icons": {
"idle": "",
"recording": "󰍬",
"transcribing": "󰔟"
},
"tooltip": true,
"on-click-right": "omarchy-voxtype-config",
"on-click": "omarchy-voxtype-model"
},
"tray": {
"icon-size": 12,
"spacing": 17
}
}
-11
View File
@@ -67,17 +67,6 @@ tooltip {
margin-left: 8.75px; margin-left: 8.75px;
} }
#custom-weather {
margin-left: 7.5px;
margin-right: 7.5px;
}
#custom-weather.unavailable {
min-width: 0;
margin: 0;
padding: 0;
}
.hidden { .hidden {
opacity: 0; opacity: 0;
} }
+86
View File
@@ -0,0 +1,86 @@
@import "../omarchy/current/theme/waybar.css";
* {
background-color: @background;
color: @foreground;
border: none;
border-radius: 10px;
padding: 2px 2px;
min-height: 0;
font-family: 'JetBrainsMono Nerd Font';
font-size: 14px;
}
.modules-left {
margin-left: 8px;
}
.modules-right {
margin-right: 8px;
}
#workspaces button {
all: initial;
padding: 0 6px;
margin: 0 1.5px;
min-width: 9px;
}
#workspaces button.empty {
opacity: 0.5;
}
#backlight,
#custom-weather,
#memory,
#mpris,
#window,
#tray,
#cpu,
#battery,
#network,
#bluetooth,
#pulseaudio,
#custom-omarchy,
#custom-screenrecording-indicator,
#custom-idle-indicator,
#custom-notification-silencing-indicator,
#custom-update {
min-width: 12px;
margin: 0 7.5px;
}
#custom-expand-icon {
margin-right: 7px;
}
tooltip {
padding: 2px;
border-radius: 10px;
}
#custom-update,
#custom-screenrecording-indicator,
#custom-idle-indicator,
#custom-notification-silencing-indicator {
font-size: 10px;
}
.hidden {
opacity: 0;
}
#custom-screenrecording-indicator.active,
#custom-idle-indicator.active,
#custom-notification-silencing-indicator.active {
color: #a55555;
}
#bluetooth {
margin: 0 5px;
}
#mpris {
margin-right: 10px;
}
+202
View File
@@ -0,0 +1,202 @@
@import "../omarchy/current/theme/waybar.css";
* {
border: none;
border-radius: 0;
min-height: 0;
font-family: 'JetBrainsMono Nerd Font';
font-size: 14px;
padding: 1px;
}
.modules-left {
margin-left: 5px;
}
.modules-right {
margin-right: 5px;
}
window#waybar {
background: @background;
margin-top: 10px;
}
window#waybar.empty #window {
background: transparent;
color: transparent;
padding: 0;
margin-left: 5px;
transition: .5s;
}
mpris.empty {
background: transparent;
}
#workspaces button {
all: initial;
padding: 3px 10px 3px 5px;
margin: 0 5px;
min-width: 9px;
}
#workspaces button.active {
background: @foreground;
color: @background;
border-radius: 30px;
padding: 3px 10px 3px 5px;
}
#workspaces button:hover {
background: alpha(@foreground, .3);
border-radius: 30px;
padding: 3px 10px 3px 5px;
transition: .7s;
}
#workspaces button.active:hover {
background: @foreground;
color: @background;
border-radius: 30px;
padding: 3px 10px 3px 5px;
}
#workspaces button.empty {
opacity: 0.3;
}
#custom-weather,
#memory,
#mpris,
#window,
#tray-expander,
#workspaces,
#clock,
#cpu,
#battery,
#network,
#bluetooth,
#pulseaudio,
#custom-screenrecording-indicator,
#custom-idle-indicator,
#custom-notification-silencing-indicator,
#custom-update {
background-color: alpha(@foreground, .1);
padding: 5px 10px;
margin: 5px 0;
}
#mpris:hover,
#window:hover,
#clock:hover,
#backlight:hover,
#cpu:hover,
#network:hover,
#bluetooth:hover,
#pulseaudio:hover,
#custom-screenrecording-indicator:hover,
#custom-idle-indicator:hover,
#custom-notification-silencing-indicator:hover,
#custom-update:hover {
background-color: alpha(@foreground, .2);
transition: .7s;
}
#custom-expand-icon {
margin-right: 7px;
}
#tray,
#memory,
#custom-weather {
background-color: transparent;
margin: 5px;
padding: 0 2px;
}
#custom-update,
#custom-screenrecording-indicator,
#custom-idle-indicator,
#custom-notification-silencing-indicator {
font-size: 10px;
}
#clock {
border-radius: 10px;
padding: 0 10px;
margin: 5px;
}
.hidden {
opacity: 0;
}
#custom-screenrecording-indicator,
#custom-idle-indicator,
#custom-notification-silencing-indicator {
border-radius: 10px;
min-width: 12px;
padding: 0 11px 0 10px;
}
#custom-screenrecording-indicator.active,
#custom-idle-indicator.active,
#custom-notification-silencing-indicator.active {
color: #a55555;
}
#custom-omarchy,
#battery {
background-color: @foreground;
color: @background;
min-width: 10px;
border-radius: 10px;
padding: 0 10px;
margin: 5px 0 5px 5px;
}
#workspaces,
#mpris {
margin: 5px;
border-radius: 10px;
}
#window,
#mpris {
border-radius: 10px;
padding: 5px 10px;
}
#tray-expander {
padding: 0 0 0 10px;
margin-left: 1px;
border-radius: 10px;
}
#backlight {
background-color: alpha(@foreground, .1);
border-radius: 10px;
padding: 5px 10px;
margin: 5px;
}
#network {
border-radius: 10px 0 0 10px;
}
#cpu {
padding: 0 15px 0 10px;
border-radius: 0 10px 10px 0;
margin-right: 1px;
}
#pulseaudio {
padding: 0 15px 0 10px;
}
tooltip {
border-radius: 10px;
background: @background;
border: 3px solid alpha(@foreground, .5);
}
+100
View File
@@ -0,0 +1,100 @@
@import "../omarchy/current/theme/waybar.css";
* {
background-color: @background;
color: @foreground;
border: none;
border-radius: 0;
min-height: 0;
font-family: 'JetBrainsMono Nerd Font';
font-size: 12px;
}
.modules-left {
margin-left: 8px;
}
.modules-right {
margin-right: 8px;
}
#workspaces button {
all: initial;
padding: 0 6px;
margin: 0 1.5px;
min-width: 9px;
}
#workspaces button.empty {
opacity: 0.5;
}
#cpu,
#battery,
#pulseaudio,
#custom-omarchy,
#custom-update {
min-width: 12px;
margin: 0 7.5px;
}
#tray {
margin-right: 16px;
}
#bluetooth {
margin-right: 17px;
}
#network {
margin-right: 13px;
}
#custom-expand-icon {
margin-right: 18px;
}
tooltip {
padding: 2px;
}
#custom-update {
font-size: 10px;
}
#clock {
margin-left: 8.75px;
}
.hidden {
opacity: 0;
}
#custom-screenrecording-indicator,
#custom-idle-indicator,
#custom-notification-silencing-indicator {
min-width: 12px;
margin-left: 5px;
margin-right: 0;
font-size: 10px;
padding-bottom: 1px;
}
#custom-screenrecording-indicator.active {
color: #a55555;
}
#custom-idle-indicator.active,
#custom-notification-silencing-indicator.active {
color: #a55555;
}
#custom-voxtype {
min-width: 12px;
margin: 0 0 0 7.5px;
}
#custom-voxtype.recording {
color: #a55555;
}
-26
View File
@@ -1,26 +0,0 @@
{
"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"
}
}
}
}
-21
View File
@@ -1,21 +0,0 @@
[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
-7
View File
@@ -1,7 +0,0 @@
[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.codeberg.dnkl.foot|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.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|foot) windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty)
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
+5 -2
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-window-transparency-toggle bindd = SUPER, BACKSPACE, Toggle window transparency, exec, omarchy-hyprland-active-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
@@ -46,10 +46,13 @@ bindd = SUPER CTRL, S, Share, exec, omarchy-menu share
# Transcoding # Transcoding
bindd = SUPER CTRL, R, Transcode, exec, omarchy-menu transcode bindd = SUPER CTRL, R, Transcode, exec, omarchy-menu transcode
# Workspace layouts
bindd = SUPER CTRL, HOME, Restore workspace layout, exec, omarchy-workspace-restore
bindd = SUPER CTRL ALT, HOME, Save workspace layout, exec, omarchy-workspace-save
# 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)"
bindd = SUPER CTRL ALT, W, Show weather, exec, notify-send -u low "$(omarchy-weather-status)"
# Control panels # Control panels
bindd = SUPER CTRL, A, Audio controls, exec, omarchy-launch-audio bindd = SUPER CTRL, A, Audio controls, exec, omarchy-launch-audio
-4
View File
@@ -113,10 +113,6 @@ 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
-3
View File
@@ -29,9 +29,6 @@ on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy
[summary~="Learn Keybindings"] [summary~="Learn Keybindings"]
on-button-left=exec sh -c 'omarchy-notification-dismiss "Learn Keybindings"; omarchy-menu-keybindings' on-button-left=exec sh -c 'omarchy-notification-dismiss "Learn Keybindings"; omarchy-menu-keybindings'
[summary~="Install Dictation with Voxtype"]
on-button-left=exec sh -c 'omarchy-notification-dismiss "Install Dictation with Voxtype"; omarchy-launch-floating-terminal-with-presentation omarchy-voxtype-install'
[summary~="Screenshot copied & saved"] [summary~="Screenshot copied & saved"]
max-icon-size=80 max-icon-size=80
format=<b>%s</b>\n%b format=<b>%s</b>\n%b
@@ -1,94 +0,0 @@
import shlex
import shutil
from gi import require_version
require_version("Nautilus", "4.1")
from gi.repository import GObject, Gio, Nautilus
SUPPORTED_MIME_PREFIXES = ("image/", "video/")
SUPPORTED_EXTENSIONS = {
".jpg", ".jpeg", ".png", ".webp", ".gif", ".heic", ".avif",
".mp4", ".mov", ".m4v", ".mkv", ".webm", ".avi",
}
class TranscodeAction(GObject.GObject, Nautilus.MenuProvider):
def _launch_transcode(self, paths):
wrapper = shutil.which("omarchy-launch-floating-terminal-with-presentation")
binary = shutil.which("omarchy-transcode")
if not wrapper or not binary:
return
if len(paths) == 1:
cmd = shlex.join([binary, paths[0]])
else:
cmd = "; ".join(
f"echo {shlex.quote(f'Transcoding {path}')} && "
f"{shlex.join([binary, path])} || true"
for path in paths
)
Gio.Subprocess.new([wrapper, cmd], Gio.SubprocessFlags.NONE)
def _is_supported(self, file):
mime = file.get_mime_type() or ""
if mime.startswith(SUPPORTED_MIME_PREFIXES):
return True
location = file.get_location()
if not location:
return False
path = location.get_path() or ""
lower = path.lower()
return any(lower.endswith(ext) for ext in SUPPORTED_EXTENSIONS)
def _selected_paths(self, files):
paths = []
seen = set()
for file in files:
if file.is_directory():
continue
if not self._is_supported(file):
continue
location = file.get_location()
if not location:
continue
path = location.get_path()
if path and path not in seen:
seen.add(path)
paths.append(path)
return paths
def _make_item(self, paths):
label = "Transcode" if len(paths) == 1 else f"Transcode {len(paths)} items"
item = Nautilus.MenuItem(
name="OmarchyTranscodeNautilus::transcode",
label=label,
icon="media-playback-start",
)
item.connect("activate", self._on_activate, paths)
return item
def _on_activate(self, _menu, paths):
self._launch_transcode(paths)
def _tools_available(self):
return bool(
shutil.which("omarchy-launch-floating-terminal-with-presentation")
and shutil.which("omarchy-transcode")
)
def get_file_items(self, *args):
files = args[0] if len(args) == 1 else args[1]
if not self._tools_available():
return []
paths = self._selected_paths(files)
if not paths:
return []
return [self._make_item(paths)]
+3 -4
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/foot/, ~/.config/kitty/, ~/.config/ghostty/, ~/.config/mako/, ~/.config/alacritty/, ~/.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, foot, kitty, ghostty) - Editing terminal configs (alacritty, 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/Foot/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` | | **Alacritty/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,7 +163,6 @@ 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
``` ```
@@ -1,41 +0,0 @@
/**
* Syncs pi's light/dark theme with the active Omarchy theme.
*
* Omarchy light themes include:
* ~/.config/omarchy/current/theme/light.mode
*/
import { existsSync } from "node:fs";
import { join } from "node:path";
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
const home = process.env.HOME ?? "";
const lightModePath = join(home, ".config/omarchy/current/theme/light.mode");
function omarchyPiTheme(): "light" | "dark" {
return existsSync(lightModePath) ? "light" : "dark";
}
export default function (pi: ExtensionAPI) {
let intervalId: ReturnType<typeof setInterval> | null = null;
pi.on("session_start", (_event, ctx) => {
let currentTheme = omarchyPiTheme();
ctx.ui.setTheme(currentTheme);
intervalId = setInterval(() => {
const nextTheme = omarchyPiTheme();
if (nextTheme !== currentTheme) {
currentTheme = nextTheme;
ctx.ui.setTheme(currentTheme);
}
}, 2000);
});
pi.on("session_shutdown", () => {
if (intervalId) {
clearInterval(intervalId);
intervalId = null;
}
});
}
-11
View File
@@ -1,11 +0,0 @@
# Minimal Hyprland config for the SDDM Wayland greeter.
# SDDM starts the greeter itself after the compositor is ready.
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
force_default_wallpaper = 0
}
animations {
enabled = false
}
+78 -95
View File
@@ -2,115 +2,98 @@ import QtQuick 2.0
import SddmComponents 2.0 import SddmComponents 2.0
Rectangle { Rectangle {
id: root id: root
width: 640 width: 640
height: 480 height: 480
color: "#1a1b26" color: "#000000"
property string currentUser: userModel.lastUser property string currentUser: userModel.lastUser
property bool loginFailed: false property int sessionIndex: {
property int sessionIndex: { for (var i = 0; i < sessionModel.rowCount(); i++) {
for (var i = 0; i < sessionModel.rowCount(); i++) { var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString()
var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString() if (name.indexOf("uwsm") !== -1)
if (name.indexOf("uwsm") !== -1) return i
return i }
} return sessionModel.lastIndex
return sessionModel.lastIndex
}
Connections {
target: sddm
function onLoginFailed() {
root.loginFailed = true
password.text = ""
password.focus = true
}
function onLoginSucceeded() {
root.loginFailed = false
}
}
Column {
anchors.centerIn: parent
spacing: 40
Image {
id: logo
source: "logo.png"
width: Math.min(sourceSize.width, root.width * 0.8)
height: sourceSize.width > 0 ? Math.round(width * sourceSize.height / sourceSize.width) : 0
fillMode: Image.PreserveAspectFit
anchors.horizontalCenter: parent.horizontalCenter
} }
Row { Connections {
anchors.horizontalCenter: parent.horizontalCenter target: sddm
spacing: 15 function onLoginFailed() {
errorMessage.text = "Login failed"
password.text = ""
password.focus = true
}
function onLoginSucceeded() {
errorMessage.text = ""
}
}
Image { Column {
source: root.loginFailed ? "lock-failed.png" : "lock.png" anchors.centerIn: parent
width: 34 spacing: root.height * 0.04
height: 38 width: parent.width
fillMode: Image.PreserveAspectFit
anchors.verticalCenter: parent.verticalCenter
}
Item {
width: entry.width
height: entry.height
Image { Image {
id: entry source: "logo.svg"
source: root.loginFailed ? "entry-failed.png" : "entry.png" width: root.width * 0.35
anchors.centerIn: parent height: Math.round(width * sourceSize.height / sourceSize.width)
fillMode: Image.PreserveAspectFit
anchors.horizontalCenter: parent.horizontalCenter
} }
Row { Row {
anchors.left: parent.left anchors.horizontalCenter: parent.horizontalCenter
anchors.leftMargin: 20 spacing: root.width * 0.007
anchors.verticalCenter: parent.verticalCenter
spacing: 5
Repeater { Text {
model: Math.min(password.text.length, 21) text: "\uf023"
color: "#ffffff"
Image { font.family: "JetBrainsMono Nerd Font"
source: "bullet.png" font.pixelSize: root.height * 0.025
width: 7 anchors.verticalCenter: parent.verticalCenter
height: 7 }
Rectangle {
width: root.width * 0.17
height: root.height * 0.04
color: "#000000"
border.color: "#ffffff"
border.width: 1
clip: true
TextInput {
id: password
anchors.fill: parent
anchors.margins: root.height * 0.008
verticalAlignment: TextInput.AlignVCenter
echoMode: TextInput.Password
font.family: "JetBrainsMono Nerd Font"
font.pixelSize: root.height * 0.02
font.letterSpacing: root.height * 0.004
passwordCharacter: "\u2022"
color: "#ffffff"
focus: true
Keys.onPressed: {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(root.currentUser, password.text, root.sessionIndex)
event.accepted = true
}
}
}
} }
}
} }
TextInput { Text {
id: password id: errorMessage
anchors.fill: parent text: ""
anchors.leftMargin: 20 color: "#f7768e"
anchors.rightMargin: 20 font.family: "JetBrainsMono Nerd Font"
verticalAlignment: TextInput.AlignVCenter font.pixelSize: root.height * 0.018
echoMode: TextInput.Password anchors.horizontalCenter: parent.horizontalCenter
font.family: "JetBrainsMono Nerd Font"
font.pixelSize: 24
font.letterSpacing: 5
passwordCharacter: "\u2022"
color: "transparent"
selectionColor: "transparent"
selectedTextColor: "transparent"
focus: true
onTextChanged: root.loginFailed = false
Keys.onPressed: {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(root.currentUser, password.text, root.sessionIndex)
event.accepted = true
}
}
} }
}
} }
} Component.onCompleted: password.forceActiveFocus()
Component.onCompleted: password.forceActiveFocus()
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

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