mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-01 20:28:16 +02:00
Merge branch 'dev' into waybar-styling
This commit is contained in:
@@ -6,10 +6,15 @@
|
|||||||
- Prefer `(( ))` over numeric operators inside `[[ ]]` (e.g., `(( count < 50 ))`, not `[[ $count -lt 50 ]]`)
|
- Prefer `(( ))` over numeric operators inside `[[ ]]` (e.g., `(( count < 50 ))`, not `[[ $count -lt 50 ]]`)
|
||||||
- For strings/paths with spaces, quote them instead of escaping spaces with `\ ` (e.g., `"$APP_DIR/Disk Usage.desktop"`, not `$APP_DIR/Disk\ Usage.desktop`)
|
- For strings/paths with spaces, quote them instead of escaping spaces with `\ ` (e.g., `"$APP_DIR/Disk Usage.desktop"`, not `$APP_DIR/Disk\ Usage.desktop`)
|
||||||
- Shebangs must use `#!/bin/bash` consistently (never `#!/usr/bin/env bash`)
|
- Shebangs must use `#!/bin/bash` consistently (never `#!/usr/bin/env bash`)
|
||||||
|
- Scripts under `install/` and `migrations/` may be sourced and intentionally omit shebangs
|
||||||
|
|
||||||
# Command Naming
|
# Command Naming
|
||||||
|
|
||||||
All commands start with `omarchy-`. Prefixes indicate purpose:
|
All commands start with `omarchy-`. Prefixes indicate purpose.
|
||||||
|
|
||||||
|
The authoritative command group list lives in `bin/omarchy` in `GROUP_DESCRIPTIONS`. Keep `GROUP_DESCRIPTIONS` updated when adding a new command prefix.
|
||||||
|
|
||||||
|
Common prefixes include:
|
||||||
|
|
||||||
- `cmd-` - check if commands exist, misc utility commands
|
- `cmd-` - check if commands exist, misc utility commands
|
||||||
- `capture-` - screenshots, screen recordings, and other capture tools
|
- `capture-` - screenshots, screen recordings, and other capture tools
|
||||||
@@ -24,6 +29,52 @@ All commands start with `omarchy-`. Prefixes indicate purpose:
|
|||||||
- `theme-` - theme management
|
- `theme-` - theme management
|
||||||
- `update-` - update components
|
- `update-` - update components
|
||||||
|
|
||||||
|
Other current prefixes include:
|
||||||
|
|
||||||
|
- `ac-`, `audio-`, `battery-`, `branch-`, `brightness-`, `channel-`, `config-`, `debug-`, `dev-`, `drive-`, `first-`, `font-`, `haptic-`, `hibernation-`, `hook-`, `hyprland-`, `menu-`, `migrate-`, `notification-`, `npx-`, `plymouth-`, `powerprofiles-`, `reinstall-`, `remove-`, `screensaver-`, `show-`, `snapshot-`, `state-`, `sudo-`, `swayosd-`, `system-`, `transcode-`, `tui-`, `tz-`, `upload-`, `version-`, `voxtype-`, `webapp-`, `wifi-`, `windows-`
|
||||||
|
|
||||||
|
# Command Metadata
|
||||||
|
|
||||||
|
Commands in `bin/` can declare CLI metadata in comments near the top of the file. `bin/omarchy` scans the first 80 lines, and tests expect command metadata to remain valid.
|
||||||
|
|
||||||
|
Supported metadata keys:
|
||||||
|
|
||||||
|
- `# omarchy:summary=...` - short help text
|
||||||
|
- `# omarchy:group=...` - command group when it differs from the filename-derived prefix
|
||||||
|
- `# omarchy:name=...` - command name within the group
|
||||||
|
- `# omarchy:args=...` - usage arguments
|
||||||
|
- `# omarchy:examples=...` - examples separated with ` | `
|
||||||
|
- `# omarchy:alias=...` / `# omarchy:aliases=...` - alternate routes
|
||||||
|
- `# omarchy: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:
|
||||||
@@ -33,6 +84,8 @@ Use these instead of raw shell commands:
|
|||||||
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
|
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
|
||||||
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
|
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
|
||||||
|
|
||||||
|
Exceptions are allowed for bootstrap, preflight, migration, and package-helper scripts where the helper may not be available yet, where the helper itself is being implemented, or where direct package-manager behavior is required.
|
||||||
|
|
||||||
# Config Structure
|
# Config Structure
|
||||||
|
|
||||||
- `config/` - default configs copied to `~/.config/`
|
- `config/` - default configs copied to `~/.config/`
|
||||||
@@ -53,10 +106,16 @@ This copies `~/.local/share/omarchy/config/hypr/hyprlock.conf` to `~/.config/hyp
|
|||||||
|
|
||||||
To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit.
|
To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit.
|
||||||
|
|
||||||
Migration format:
|
New migration format:
|
||||||
|
- 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
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 63 KiB |
+56
-23
@@ -17,6 +17,7 @@ declare -A COMMAND_USAGE
|
|||||||
declare -A COMMAND_ARGS
|
declare -A COMMAND_ARGS
|
||||||
declare -A COMMAND_EXAMPLES
|
declare -A COMMAND_EXAMPLES
|
||||||
declare -A COMMAND_REQUIRES_SUDO
|
declare -A COMMAND_REQUIRES_SUDO
|
||||||
|
declare -A COMMAND_HIDDEN
|
||||||
declare -A COMMAND_ALIASES
|
declare -A COMMAND_ALIASES
|
||||||
declare -A COMMAND_HAS_SUMMARY
|
declare -A COMMAND_HAS_SUMMARY
|
||||||
declare -A COMMAND_METADATA_ERRORS
|
declare -A COMMAND_METADATA_ERRORS
|
||||||
@@ -28,12 +29,14 @@ declare -A GROUP_DESCRIPTIONS
|
|||||||
GROUP_DESCRIPTIONS[ac]="AC power detection"
|
GROUP_DESCRIPTIONS[ac]="AC power detection"
|
||||||
GROUP_DESCRIPTIONS[battery]="Battery status helpers"
|
GROUP_DESCRIPTIONS[battery]="Battery status helpers"
|
||||||
GROUP_DESCRIPTIONS[branch]="Omarchy git branch management"
|
GROUP_DESCRIPTIONS[branch]="Omarchy git branch management"
|
||||||
|
GROUP_DESCRIPTIONS[branding]="About and screensaver branding"
|
||||||
GROUP_DESCRIPTIONS[brightness]="Display and keyboard brightness"
|
GROUP_DESCRIPTIONS[brightness]="Display and keyboard brightness"
|
||||||
GROUP_DESCRIPTIONS[capture]="Screenshots and screen recording"
|
GROUP_DESCRIPTIONS[capture]="Screenshots and screen recording"
|
||||||
GROUP_DESCRIPTIONS[channel]="Omarchy release channel management"
|
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"
|
||||||
@@ -52,12 +55,12 @@ GROUP_DESCRIPTIONS[plymouth]="Plymouth boot theme management"
|
|||||||
GROUP_DESCRIPTIONS[powerprofiles]="Power profile management"
|
GROUP_DESCRIPTIONS[powerprofiles]="Power profile management"
|
||||||
GROUP_DESCRIPTIONS[refresh]="Reset config to defaults"
|
GROUP_DESCRIPTIONS[refresh]="Reset config to defaults"
|
||||||
GROUP_DESCRIPTIONS[reinstall]="Reinstall and reset workflows"
|
GROUP_DESCRIPTIONS[reinstall]="Reinstall and reset workflows"
|
||||||
|
GROUP_DESCRIPTIONS[reminder]="Desktop notification reminders"
|
||||||
GROUP_DESCRIPTIONS[remove]="Removal workflows"
|
GROUP_DESCRIPTIONS[remove]="Removal workflows"
|
||||||
GROUP_DESCRIPTIONS[restart]="Restart Omarchy components"
|
GROUP_DESCRIPTIONS[restart]="Restart Omarchy components"
|
||||||
GROUP_DESCRIPTIONS[setup]="Interactive setup wizards"
|
GROUP_DESCRIPTIONS[setup]="Interactive setup wizards"
|
||||||
GROUP_DESCRIPTIONS[screensaver]="Screensaver branding and animation"
|
GROUP_DESCRIPTIONS[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"
|
||||||
@@ -67,9 +70,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"
|
||||||
@@ -131,6 +134,7 @@ register_command() {
|
|||||||
local examples=""
|
local examples=""
|
||||||
local aliases=""
|
local aliases=""
|
||||||
local requires_sudo=""
|
local requires_sudo=""
|
||||||
|
local hidden=""
|
||||||
local line=""
|
local line=""
|
||||||
local metadata_key=""
|
local metadata_key=""
|
||||||
local metadata_value=""
|
local metadata_value=""
|
||||||
@@ -186,6 +190,10 @@ register_command() {
|
|||||||
requires_sudo="$metadata_value"
|
requires_sudo="$metadata_value"
|
||||||
[[ $metadata_value == "true" ]] || metadata_errors=$(append_pipe_value "$metadata_errors" "requires-sudo must be omitted or true")
|
[[ $metadata_value == "true" ]] || metadata_errors=$(append_pipe_value "$metadata_errors" "requires-sudo must be omitted or true")
|
||||||
;;
|
;;
|
||||||
|
hidden)
|
||||||
|
hidden="$metadata_value"
|
||||||
|
[[ $metadata_value == "true" ]] || metadata_errors=$(append_pipe_value "$metadata_errors" "hidden must be omitted or true")
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -229,6 +237,7 @@ register_command() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
[[ $requires_sudo == "true" ]] || requires_sudo="false"
|
[[ $requires_sudo == "true" ]] || requires_sudo="false"
|
||||||
|
[[ $hidden == "true" ]] || hidden="false"
|
||||||
|
|
||||||
local key="$file_binary"
|
local key="$file_binary"
|
||||||
COMMAND_KEYS+=("$key")
|
COMMAND_KEYS+=("$key")
|
||||||
@@ -242,6 +251,7 @@ register_command() {
|
|||||||
COMMAND_ARGS["$key"]="$args"
|
COMMAND_ARGS["$key"]="$args"
|
||||||
COMMAND_EXAMPLES["$key"]="$examples"
|
COMMAND_EXAMPLES["$key"]="$examples"
|
||||||
COMMAND_REQUIRES_SUDO["$key"]="$requires_sudo"
|
COMMAND_REQUIRES_SUDO["$key"]="$requires_sudo"
|
||||||
|
COMMAND_HIDDEN["$key"]="$hidden"
|
||||||
COMMAND_HAS_SUMMARY["$key"]="$has_summary"
|
COMMAND_HAS_SUMMARY["$key"]="$has_summary"
|
||||||
COMMAND_METADATA_ERRORS["$key"]="$metadata_errors"
|
COMMAND_METADATA_ERRORS["$key"]="$metadata_errors"
|
||||||
|
|
||||||
@@ -321,16 +331,6 @@ command_requires_args() {
|
|||||||
[[ -n $required ]]
|
[[ -n $required ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
load_group_extra_commands() {
|
|
||||||
local group="$1"
|
|
||||||
|
|
||||||
case "$group" in
|
|
||||||
install)
|
|
||||||
load_command_by_binary omarchy-pkg-add
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
load_group_commands() {
|
load_group_commands() {
|
||||||
local group="$1"
|
local group="$1"
|
||||||
local file=""
|
local file=""
|
||||||
@@ -344,7 +344,6 @@ load_group_commands() {
|
|||||||
register_command "$file"
|
register_command "$file"
|
||||||
done
|
done
|
||||||
|
|
||||||
load_group_extra_commands "$group"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve_direct_route() {
|
resolve_direct_route() {
|
||||||
@@ -377,6 +376,9 @@ sorted_keys() {
|
|||||||
local key=""
|
local key=""
|
||||||
|
|
||||||
for key in "${COMMAND_KEYS[@]}"; do
|
for key in "${COMMAND_KEYS[@]}"; do
|
||||||
|
if [[ $include_all != "true" && ${COMMAND_HIDDEN[$key]} == "true" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
printf '%s\t%s\n' "${COMMAND_ROUTE[$key]}" "$key"
|
printf '%s\t%s\n' "${COMMAND_ROUTE[$key]}" "$key"
|
||||||
done | sort -u | cut -f2-
|
done | sort -u | cut -f2-
|
||||||
}
|
}
|
||||||
@@ -420,6 +422,10 @@ sorted_group_keys() {
|
|||||||
local route=""
|
local route=""
|
||||||
|
|
||||||
for key in "${COMMAND_KEYS[@]}"; do
|
for key in "${COMMAND_KEYS[@]}"; do
|
||||||
|
if [[ $include_all != "true" && ${COMMAND_HIDDEN[$key]} == "true" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
fallback_group=$(fallback_group_for_key "$key")
|
fallback_group=$(fallback_group_for_key "$key")
|
||||||
if [[ ${COMMAND_GROUP[$key]} != "$group" && $fallback_group != "$group" ]]; then
|
if [[ ${COMMAND_GROUP[$key]} != "$group" && $fallback_group != "$group" ]]; then
|
||||||
continue
|
continue
|
||||||
@@ -497,8 +503,6 @@ Discovery:
|
|||||||
omarchy commands --all Include commands explicitly marked hidden
|
omarchy commands --all Include commands explicitly marked hidden
|
||||||
omarchy commands --json Machine-readable command list
|
omarchy commands --json Machine-readable command list
|
||||||
omarchy commands --check Validate command metadata and routes
|
omarchy commands --check Validate command metadata and routes
|
||||||
omarchy dev benchmark Measure CLI response times
|
|
||||||
omarchy dev bin metadata Show bin metadata fields and defaults
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -510,7 +514,7 @@ Usage:
|
|||||||
List commands known to the Omarchy command center.
|
List commands known to the Omarchy command center.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--all Accepted for compatibility
|
--all Include commands explicitly marked hidden
|
||||||
--json Emit machine-readable JSON
|
--json Emit machine-readable JSON
|
||||||
--markdown Emit a Markdown command table
|
--markdown Emit a Markdown command table
|
||||||
--check Validate command metadata and route collisions
|
--check Validate command metadata and route collisions
|
||||||
@@ -562,6 +566,9 @@ show_commands() {
|
|||||||
|
|
||||||
for route in "${!ROUTE_IS_ALIAS[@]}"; do
|
for route in "${!ROUTE_IS_ALIAS[@]}"; do
|
||||||
key="${ROUTE_TO_KEY[$route]}"
|
key="${ROUTE_TO_KEY[$route]}"
|
||||||
|
if [[ $include_all != "true" && ${COMMAND_HIDDEN[$key]} == "true" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
alias_rows+="$route"$'\t'"${COMMAND_ROUTE[$key]}"$'\n'
|
alias_rows+="$route"$'\t'"${COMMAND_ROUTE[$key]}"$'\n'
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -600,13 +607,14 @@ emit_command_records() {
|
|||||||
|
|
||||||
while IFS= read -r key; do
|
while IFS= read -r key; do
|
||||||
[[ -n $key ]] || continue
|
[[ -n $key ]] || continue
|
||||||
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
|
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
|
||||||
"${COMMAND_ROUTE[$key]}" \
|
"${COMMAND_ROUTE[$key]}" \
|
||||||
"${COMMAND_BINARY[$key]}" \
|
"${COMMAND_BINARY[$key]}" \
|
||||||
"${COMMAND_GROUP[$key]}" \
|
"${COMMAND_GROUP[$key]}" \
|
||||||
"${COMMAND_NAME[$key]}" \
|
"${COMMAND_NAME[$key]}" \
|
||||||
"${COMMAND_SUMMARY[$key]}" \
|
"${COMMAND_SUMMARY[$key]}" \
|
||||||
"${COMMAND_REQUIRES_SUDO[$key]}" \
|
"${COMMAND_REQUIRES_SUDO[$key]}" \
|
||||||
|
"${COMMAND_HIDDEN[$key]}" \
|
||||||
"${COMMAND_ARGS[$key]}" \
|
"${COMMAND_ARGS[$key]}" \
|
||||||
"${COMMAND_EXAMPLES[$key]}" \
|
"${COMMAND_EXAMPLES[$key]}" \
|
||||||
"${COMMAND_ALIASES[$key]}" \
|
"${COMMAND_ALIASES[$key]}" \
|
||||||
@@ -624,11 +632,12 @@ commands_json_filter() {
|
|||||||
name: .[3],
|
name: .[3],
|
||||||
summary: .[4],
|
summary: .[4],
|
||||||
requires_sudo: (.[5] == "true"),
|
requires_sudo: (.[5] == "true"),
|
||||||
args: .[6],
|
hidden: (.[6] == "true"),
|
||||||
examples: (.[7] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
|
args: .[7],
|
||||||
aliases: (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
|
examples: (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
|
||||||
filename_route: .[9],
|
aliases: (.[9] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
|
||||||
routes: ([.[0], .[9]] + (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))) | unique)
|
filename_route: .[10],
|
||||||
|
routes: ([.[0], .[10]] + (.[9] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))) | unique)
|
||||||
}] | {ok: true, commands: .}
|
}] | {ok: true, commands: .}
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@@ -682,13 +691,14 @@ show_command_json() {
|
|||||||
local key="$1"
|
local key="$1"
|
||||||
|
|
||||||
printf '%s\n' "$key" | while IFS= read -r key; do
|
printf '%s\n' "$key" | while IFS= read -r key; do
|
||||||
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
|
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
|
||||||
"${COMMAND_ROUTE[$key]}" \
|
"${COMMAND_ROUTE[$key]}" \
|
||||||
"${COMMAND_BINARY[$key]}" \
|
"${COMMAND_BINARY[$key]}" \
|
||||||
"${COMMAND_GROUP[$key]}" \
|
"${COMMAND_GROUP[$key]}" \
|
||||||
"${COMMAND_NAME[$key]}" \
|
"${COMMAND_NAME[$key]}" \
|
||||||
"${COMMAND_SUMMARY[$key]}" \
|
"${COMMAND_SUMMARY[$key]}" \
|
||||||
"${COMMAND_REQUIRES_SUDO[$key]}" \
|
"${COMMAND_REQUIRES_SUDO[$key]}" \
|
||||||
|
"${COMMAND_HIDDEN[$key]}" \
|
||||||
"${COMMAND_ARGS[$key]}" \
|
"${COMMAND_ARGS[$key]}" \
|
||||||
"${COMMAND_EXAMPLES[$key]}" \
|
"${COMMAND_EXAMPLES[$key]}" \
|
||||||
"${COMMAND_ALIASES[$key]}" \
|
"${COMMAND_ALIASES[$key]}" \
|
||||||
@@ -781,6 +791,25 @@ 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]}"
|
||||||
@@ -998,6 +1027,10 @@ 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,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Designed to be run by systemd timer every 30 seconds and alerts if battery is low
|
# omarchy:summary=Designed to be run by systemd timer every 30 seconds and alerts if battery is low
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
BATTERY_THRESHOLD=10
|
BATTERY_THRESHOLD=10
|
||||||
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
||||||
|
|||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Edit, set, or reset About branding
|
||||||
|
# omarchy:group=branding
|
||||||
|
# omarchy:name=about
|
||||||
|
# omarchy:args=<image|text|reset>
|
||||||
|
# omarchy:examples=omarchy branding about image | omarchy branding about text | omarchy branding about reset
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
image)
|
||||||
|
image=$(omarchy-menu-file "Logo image" "$HOME" "svg png")
|
||||||
|
if [[ -n $image ]] && omarchy-transcode-ascii "$image" ~/.config/omarchy/branding/about.txt --width 54 --height 26 --mode block; then
|
||||||
|
omarchy-launch-about >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
text)
|
||||||
|
omarchy-launch-editor ~/.config/omarchy/branding/about.txt >/dev/null 2>&1 && omarchy-launch-about >/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
reset)
|
||||||
|
cp "$OMARCHY_PATH/icon.txt" ~/.config/omarchy/branding/about.txt && omarchy-launch-about >/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-branding-about <image|text|reset>" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Edit, set, or reset screensaver branding
|
||||||
|
# omarchy:group=branding
|
||||||
|
# omarchy:name=screensaver
|
||||||
|
# omarchy:args=<image|text|reset>
|
||||||
|
# omarchy:examples=omarchy branding screensaver image | omarchy branding screensaver text | omarchy branding screensaver reset
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
image)
|
||||||
|
image=$(omarchy-menu-file "Logo image" "$HOME" "svg png")
|
||||||
|
if [[ -n $image ]] && omarchy-transcode-ascii "$image" ~/.config/omarchy/branding/screensaver.txt; then
|
||||||
|
omarchy-launch-screensaver force >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
text)
|
||||||
|
omarchy-launch-editor ~/.config/omarchy/branding/screensaver.txt >/dev/null 2>&1 && omarchy-launch-screensaver force >/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
reset)
|
||||||
|
cp "$OMARCHY_PATH/logo.txt" ~/.config/omarchy/branding/screensaver.txt && omarchy-launch-screensaver force >/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-branding-screensaver <image|text|reset>" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -1,15 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Adjust brightness on the most likely display device.
|
# omarchy:summary=Adjust brightness on the most likely display device.
|
||||||
# omarchy:args=<step>
|
# omarchy:args=<+N%|N%-|N%|off|on>
|
||||||
|
# omarchy:examples=omarchy brightness display +5% | omarchy brightness display 5%- | omarchy brightness display 50% | omarchy brightness display off | omarchy brightness display on
|
||||||
|
|
||||||
step="${1:-+5%}"
|
step="${1:-+5%}"
|
||||||
|
|
||||||
if omarchy-hyprland-monitor-focused-apple; then
|
|
||||||
omarchy-brightness-display-apple "$step"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Start with the first possible output, then refine to the most likely given an order heuristic.
|
# Start with the first possible output, then refine to the most likely given an order heuristic.
|
||||||
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
|
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
|
||||||
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
||||||
@@ -19,6 +15,19 @@ for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if [[ $step == "off" ]]; then
|
||||||
|
hyprctl dispatch dpms off >/dev/null 2>&1
|
||||||
|
exit 0
|
||||||
|
elif [[ $step == "on" ]]; then
|
||||||
|
hyprctl dispatch dpms on >/dev/null 2>&1
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if omarchy-hyprland-monitor-focused-apple; then
|
||||||
|
omarchy-brightness-display-apple "$step"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
# Current brightness percentage
|
# Current brightness percentage
|
||||||
current=$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')
|
current=$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
|
# omarchy:summary=Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
|
||||||
|
# omarchy:args=<+N%|N%-|N%>
|
||||||
|
# omarchy:examples=omarchy brightness display apple +5% | omarchy brightness display apple 5%- | omarchy brightness display apple 50%
|
||||||
|
|
||||||
if (( $# == 0 )); then
|
if (( $# == 0 )); then
|
||||||
echo "Adjust Apple Display brightness by passing +5%, 5%-, or 100%"
|
echo "Adjust Apple Display brightness by passing +5%, 5%-, or 100%"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Adjust keyboard backlight brightness using available steps.
|
# omarchy:summary=Adjust keyboard backlight brightness using available steps.
|
||||||
# omarchy:args=<up|down|cycle>
|
# omarchy:args=<up|down|cycle|off|restore>
|
||||||
|
|
||||||
direction="${1:-up}"
|
direction="${1:-up}"
|
||||||
|
|
||||||
@@ -19,6 +19,14 @@ if [[ -z $device ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ $direction == "off" ]]; then
|
||||||
|
brightnessctl -sd "$device" set 0 >/dev/null
|
||||||
|
exit 0
|
||||||
|
elif [[ $direction == "restore" ]]; then
|
||||||
|
brightnessctl -rd "$device" >/dev/null
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
# Get current and max brightness to determine step size.
|
# Get current and max brightness to determine step size.
|
||||||
max_brightness="$(brightnessctl -d "$device" max)"
|
max_brightness="$(brightnessctl -d "$device" max)"
|
||||||
current_brightness="$(brightnessctl -d "$device" get)"
|
current_brightness="$(brightnessctl -d "$device" get)"
|
||||||
|
|||||||
@@ -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 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 "${OMARCHY_OCR_LANGS:-eng}" --dpi 300 -c preserve_interword_spaces=1 2>/dev/null) || exit 1
|
||||||
|
|
||||||
[[ -z $TEXT ]] && exit 1
|
[[ -z $TEXT ]] && exit 1
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Print the current working directory of the active terminal window
|
# omarchy:summary=Print the current working directory of the active terminal window
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
|
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
|
||||||
shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
|
shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
|
||||||
|
|||||||
Executable
+40
@@ -0,0 +1,40 @@
|
|||||||
|
#!/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"
|
||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
#!/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 | zeditor) editor="zeditor"; 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"
|
||||||
Executable
+36
@@ -0,0 +1,36 @@
|
|||||||
|
#!/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"
|
||||||
@@ -22,7 +22,8 @@ show_json() {
|
|||||||
{name: "args", required: false, type: "string", note: "Only set when the command accepts arguments."},
|
{name: "args", required: false, type: "string", note: "Only set when the command accepts arguments."},
|
||||||
{name: "examples", required: false, type: "string", note: "Pipe-separated examples."},
|
{name: "examples", required: false, type: "string", note: "Pipe-separated examples."},
|
||||||
{name: "aliases", required: false, type: "string", note: "Pipe-separated alternate routes, e.g. omarchy screenshot."},
|
{name: "aliases", required: false, type: "string", note: "Pipe-separated alternate routes, e.g. omarchy screenshot."},
|
||||||
{name: "requires-sudo", required: false, type: "true", default: false, note: "Only include when true."}
|
{name: "requires-sudo", required: false, type: "true", default: false, note: "Only include when true."},
|
||||||
|
{name: "hidden", required: false, type: "true", default: false, note: "Hide from default command listings; visible with --all."}
|
||||||
]
|
]
|
||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
@@ -43,6 +44,7 @@ Inferred defaults:
|
|||||||
route omarchy <group> <name>
|
route omarchy <group> <name>
|
||||||
binary filename
|
binary filename
|
||||||
requires-sudo false
|
requires-sudo false
|
||||||
|
hidden false
|
||||||
|
|
||||||
Optional fields:
|
Optional fields:
|
||||||
# omarchy:group=<group> route override only
|
# omarchy:group=<group> route override only
|
||||||
@@ -51,6 +53,7 @@ Optional fields:
|
|||||||
# omarchy:examples=<cmd> | <cmd> pipe-separated examples
|
# omarchy:examples=<cmd> | <cmd> pipe-separated examples
|
||||||
# omarchy:aliases=<route> | <route> pipe-separated alternate routes
|
# omarchy:aliases=<route> | <route> pipe-separated alternate routes
|
||||||
# omarchy:requires-sudo=true only when true
|
# omarchy:requires-sudo=true only when true
|
||||||
|
# omarchy:hidden=true hide from default command listings
|
||||||
|
|
||||||
Do not define:
|
Do not define:
|
||||||
binary inferred from filename
|
binary inferred from filename
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Select a drive from a list with info that includes space and brand. Used by omarchy-drive-set-password.
|
# omarchy:summary=Select a drive from a list with info that includes space and brand. Used by omarchy-drive-password.
|
||||||
|
|
||||||
if (($# == 0)); then
|
if (($# == 0)); then
|
||||||
drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)')
|
drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)')
|
||||||
|
|||||||
@@ -16,8 +16,10 @@ if [[ -f $FIRST_RUN_MODE ]]; then
|
|||||||
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
|
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
|
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
||||||
|
bash "$OMARCHY_PATH/install/first-run/swayosd.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"
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ if [[ -n $font_name ]]; then
|
|||||||
pkill -SIGUSR2 ghostty
|
pkill -SIGUSR2 ghostty
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -f ~/.config/foot/foot.ini ]]; then
|
||||||
|
sed -i "s/^font=.*/font=$font_name:size=9/g" ~/.config/foot/foot.ini
|
||||||
|
fi
|
||||||
|
|
||||||
sed -i "s/font_family = .*/font_family = $font_name/g" ~/.config/hypr/hyprlock.conf
|
sed -i "s/font_family = .*/font_family = $font_name/g" ~/.config/hypr/hyprlock.conf
|
||||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css
|
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css
|
||||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
|
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
|
||||||
@@ -37,6 +41,10 @@ if [[ -n $font_name ]]; then
|
|||||||
notify-send -u low " You must restart Ghostty to see font change"
|
notify-send -u low " You must restart Ghostty to see font change"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if pgrep -x foot; then
|
||||||
|
notify-send -u low " You must restart Foot to see font change"
|
||||||
|
fi
|
||||||
|
|
||||||
omarchy-hook font-set "$font_name"
|
omarchy-hook font-set "$font_name"
|
||||||
else
|
else
|
||||||
echo "Font '$font_name' not found."
|
echo "Font '$font_name' not found."
|
||||||
|
|||||||
@@ -1,96 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# omarchy:summary=Run the Synaptics touchpad haptic feedback daemon
|
|
||||||
|
|
||||||
"""Haptic feedback daemon for Synaptics touchpads with Manual Trigger.
|
|
||||||
|
|
||||||
Monitors touchpad button press events and sends haptic pulses via HID
|
|
||||||
feature reports. Required because the kernel's HID haptic subsystem only
|
|
||||||
supports Auto Trigger with waveform enumeration, not the simpler Manual
|
|
||||||
Trigger protocol used by these Synaptics touchpads.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import fcntl, glob, os, struct, sys
|
|
||||||
|
|
||||||
VENDOR = "06CB"
|
|
||||||
REPORT_ID = 0x37
|
|
||||||
INTENSITY = 40 # 0-100
|
|
||||||
|
|
||||||
# input_event: struct timeval (16 bytes on 64-bit) + type(H) + code(H) + value(i)
|
|
||||||
EVENT_FORMAT = "llHHi"
|
|
||||||
EVENT_SIZE = struct.calcsize(EVENT_FORMAT)
|
|
||||||
EV_KEY = 0x01
|
|
||||||
BTN_LEFT = 272
|
|
||||||
BTN_RIGHT = 273
|
|
||||||
BTN_MIDDLE = 274
|
|
||||||
|
|
||||||
# ioctl: HIDIOCSFEATURE(len) = _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len)
|
|
||||||
def HIDIOCSFEATURE(length):
|
|
||||||
return 0xC0000000 | (length << 16) | (ord("H") << 8) | 0x06
|
|
||||||
|
|
||||||
|
|
||||||
def find_hidraw():
|
|
||||||
for path in sorted(glob.glob("/sys/class/hidraw/hidraw*")):
|
|
||||||
uevent = os.path.join(path, "device", "uevent")
|
|
||||||
try:
|
|
||||||
with open(uevent) as f:
|
|
||||||
content = f.read().upper()
|
|
||||||
if f"0000{VENDOR}" in content:
|
|
||||||
return os.path.join("/dev", os.path.basename(path))
|
|
||||||
except OSError:
|
|
||||||
continue
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def find_touchpad_event():
|
|
||||||
for path in sorted(glob.glob("/sys/class/input/event*/device/name")):
|
|
||||||
try:
|
|
||||||
with open(path) as f:
|
|
||||||
name = f.read().strip().upper()
|
|
||||||
if VENDOR in name and "TOUCHPAD" in name:
|
|
||||||
event = path.split("/")[-3]
|
|
||||||
return os.path.join("/dev/input", event)
|
|
||||||
except OSError:
|
|
||||||
continue
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
hidraw = find_hidraw()
|
|
||||||
if not hidraw:
|
|
||||||
print("No Synaptics haptic touchpad hidraw device found", file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
event = find_touchpad_event()
|
|
||||||
if not event:
|
|
||||||
print("No Synaptics haptic touchpad input device found", file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
print(f"Haptic touchpad: hidraw={hidraw} input={event} intensity={INTENSITY}", flush=True)
|
|
||||||
|
|
||||||
haptic_report = struct.pack("BB", REPORT_ID, INTENSITY)
|
|
||||||
ioctl_req = HIDIOCSFEATURE(len(haptic_report))
|
|
||||||
|
|
||||||
hidraw_fd = os.open(hidraw, os.O_RDWR)
|
|
||||||
event_fd = os.open(event, os.O_RDONLY)
|
|
||||||
|
|
||||||
try:
|
|
||||||
while True:
|
|
||||||
data = os.read(event_fd, EVENT_SIZE)
|
|
||||||
if len(data) < EVENT_SIZE:
|
|
||||||
continue
|
|
||||||
_, _, ev_type, code, value = struct.unpack(EVENT_FORMAT, data)
|
|
||||||
if ev_type == EV_KEY and code in (BTN_LEFT, BTN_RIGHT, BTN_MIDDLE) and value == 1:
|
|
||||||
try:
|
|
||||||
fcntl.ioctl(hidraw_fd, ioctl_req, haptic_report)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
pass
|
|
||||||
finally:
|
|
||||||
os.close(event_fd)
|
|
||||||
os.close(hidraw_fd)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
+11
-2
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Run a named hook, like post-update (available in ~/.config/omarchy/hooks/post-update).
|
# omarchy:summary=Run a named hook from ~/.config/omarchy/hooks/<name> and ~/.config/omarchy/hooks/<name>.d/.
|
||||||
# omarchy:args=[name] [args...]
|
# omarchy:args=[name] [args...]
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
@@ -12,8 +12,17 @@ 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" "$@"
|
bash "$HOOK_PATH" "$@" || echo "Hook failed: $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
|
||||||
|
|||||||
Executable
+31
@@ -0,0 +1,31 @@
|
|||||||
|
#!/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"
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Detect ASUS Zenbook UX5406AA series laptops on Intel Panther Lake.
|
||||||
|
|
||||||
|
omarchy-hw-match "ux5406aa" && omarchy-hw-intel-ptl
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Match Dell XPS systems with the Synaptics haptic touchpad.
|
||||||
|
|
||||||
|
omarchy-hw-match "XPS" && [[ -e /sys/bus/i2c/devices/i2c-VEN_06CB:00 ]]
|
||||||
@@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
# omarchy:summary=Return success if the focused Hyprland monitor is an Apple display.
|
# omarchy:summary=Return success if the focused Hyprland monitor is an Apple display.
|
||||||
|
|
||||||
hyprctl monitors -j | jq -e '.[] | select(.focused == true) | select(.make == "Apple Computer Inc" and (.model | test("StudioDisplay|ProDisplayXDR")))' >/dev/null
|
hyprctl monitors -j | jq -e '.[] | select(.focused == true) | select(.make == "Apple Computer Inc" and (.model | test("StudioDisplay|ProDisplayXDR|Studio XDR")))' >/dev/null
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Cycle scaling for the focused Hyprland monitor
|
# omarchy:summary=Cycle focused Hyprland monitor scaling through 1x, 1.25x, 1.6x, 2x, 3x, and 4x
|
||||||
|
|
||||||
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')
|
||||||
@@ -9,8 +9,8 @@ WIDTH=$(echo "$MONITOR_INFO" | jq -r '.width')
|
|||||||
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
|
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
|
||||||
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
|
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
|
||||||
|
|
||||||
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 1 (or reverse with --reverse)
|
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 4 → 1 (or reverse with --reverse)
|
||||||
SCALES=(1 1.25 1.6 2 3)
|
SCALES=(1 1.25 1.6 2 3 4)
|
||||||
|
|
||||||
# Find the index of the scale closest to the current one (Hyprland may
|
# Find the index of the scale closest to the current one (Hyprland may
|
||||||
# snap fractional scales to nearby values, so we can't match exactly)
|
# snap fractional scales to nearby values, so we can't match exactly)
|
||||||
|
|||||||
Executable
+93
@@ -0,0 +1,93 @@
|
|||||||
|
#!/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
|
||||||
@@ -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-fbneo-git \
|
libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
|
||||||
libretro-database-git \
|
libretro-database-git \
|
||||||
retroarch-joypad-autoconfig-git
|
retroarch-joypad-autoconfig-git
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc).
|
# omarchy:summary=Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc).
|
||||||
# omarchy:args=<alacritty|ghostty|kitty>
|
# omarchy:args=<alacritty|foot|ghostty|kitty>
|
||||||
# omarchy:requires-sudo=true
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
if (($# == 0)); then
|
if (($# == 0)); then
|
||||||
echo "Usage: omarchy-install-terminal [alacritty|ghostty|kitty]"
|
echo "Usage: omarchy-install-terminal [alacritty|foot|ghostty|kitty]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -14,6 +14,7 @@ package="$1"
|
|||||||
# Map package name to desktop entry ID
|
# Map package name to desktop entry ID
|
||||||
case "$package" in
|
case "$package" in
|
||||||
alacritty) desktop_id="Alacritty.desktop" ;;
|
alacritty) desktop_id="Alacritty.desktop" ;;
|
||||||
|
foot) desktop_id="foot.desktop" ;;
|
||||||
ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;;
|
ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;;
|
||||||
kitty) desktop_id="kitty.desktop" ;;
|
kitty) desktop_id="kitty.desktop" ;;
|
||||||
*)
|
*)
|
||||||
@@ -26,10 +27,18 @@ echo "Installing $package..."
|
|||||||
|
|
||||||
# Install package
|
# Install package
|
||||||
if omarchy-pkg-add $package; then
|
if omarchy-pkg-add $package; then
|
||||||
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
# Copy custom desktop entries with X-TerminalArg* keys
|
||||||
if [[ $package == "alacritty" ]]; then
|
if [[ $package == "alacritty" ]]; then
|
||||||
mkdir -p ~/.local/share/applications
|
mkdir -p ~/.local/share/applications
|
||||||
cp $OMARCHY_PATH/applications/Alacritty.desktop ~/.local/share/applications/
|
cp "$OMARCHY_PATH/applications/$desktop_id" ~/.local/share/applications/
|
||||||
|
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
|
||||||
|
|||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Install Zed Editor and configure it with the current Omarchy theme
|
||||||
|
|
||||||
|
echo "Installing Zed Editor..."
|
||||||
|
omarchy-pkg-add zed omazed
|
||||||
|
|
||||||
|
# Apply Omarchy theme to Zed
|
||||||
|
omazed setup
|
||||||
|
|
||||||
|
setsid gtk-launch dev.zed.Zed
|
||||||
@@ -37,6 +37,12 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
|||||||
--font-size=18 \
|
--font-size=18 \
|
||||||
-e omarchy-screensaver
|
-e omarchy-screensaver
|
||||||
;;
|
;;
|
||||||
|
*foot*)
|
||||||
|
hyprctl dispatch exec -- \
|
||||||
|
foot --app-id=org.omarchy.screensaver \
|
||||||
|
--config="$OMARCHY_PATH/default/foot/screensaver.ini" \
|
||||||
|
-e omarchy-screensaver
|
||||||
|
;;
|
||||||
*kitty*)
|
*kitty*)
|
||||||
hyprctl dispatch exec -- \
|
hyprctl dispatch exec -- \
|
||||||
kitty --class=org.omarchy.screensaver \
|
kitty --class=org.omarchy.screensaver \
|
||||||
@@ -45,7 +51,7 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
|||||||
-e omarchy-screensaver
|
-e omarchy-screensaver
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
|
notify-send -u low "✋ Screensaver only runs in Alacritty, Foot, Ghostty, or Kitty"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
+229
-49
@@ -93,9 +93,10 @@ 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" " Reminder\n Capture\n Transcode\n Share\n Toggle\n Hardware") in
|
||||||
|
*Reminder*) show_reminder_menu ;;
|
||||||
*Capture*) show_capture_menu ;;
|
*Capture*) show_capture_menu ;;
|
||||||
*Transcode*) show_transcode_menu ;;
|
*Transcode*) omarchy-transcode || back_to show_trigger_menu ;;
|
||||||
*Share*) show_share_menu ;;
|
*Share*) show_share_menu ;;
|
||||||
*Toggle*) show_toggle_menu ;;
|
*Toggle*) show_toggle_menu ;;
|
||||||
*Hardware*) show_hardware_menu ;;
|
*Hardware*) show_hardware_menu ;;
|
||||||
@@ -103,6 +104,41 @@ show_trigger_menu() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_reminder_menu() {
|
||||||
|
case $(menu "Reminder" " Set one\n Show all\n Clear all") in
|
||||||
|
*Set*) show_custom_reminder_input ;;
|
||||||
|
*"Show all"*) omarchy-reminder show ;;
|
||||||
|
*"Clear all"*) omarchy-reminder clear ;;
|
||||||
|
*) back_to show_trigger_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
show_custom_reminder_input() {
|
||||||
|
local minutes
|
||||||
|
minutes=$(omarchy-menu-input "Remind in minutes")
|
||||||
|
|
||||||
|
if [[ $minutes =~ ^[0-9]+$ ]] && ((minutes > 0)); then
|
||||||
|
show_reminder_message_input "$minutes"
|
||||||
|
elif [[ -n $minutes ]]; then
|
||||||
|
omarchy-notification-send "" "Invalid reminder" "Enter the number of minutes" -u critical
|
||||||
|
show_custom_reminder_input
|
||||||
|
else
|
||||||
|
back_to show_reminder_menu
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
show_reminder_message_input() {
|
||||||
|
local minutes="$1"
|
||||||
|
local message
|
||||||
|
message=$(omarchy-menu-input "Reminder message")
|
||||||
|
|
||||||
|
if [[ -n $message ]]; then
|
||||||
|
omarchy-reminder "$minutes" "$message"
|
||||||
|
else
|
||||||
|
omarchy-reminder "$minutes"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
show_capture_menu() {
|
show_capture_menu() {
|
||||||
case $(menu "Capture" " Screenshot\n Screenrecord\n Text Extraction\n Color") in
|
case $(menu "Capture" " Screenshot\n Screenrecord\n Text Extraction\n Color") in
|
||||||
*Screenshot*) omarchy-capture-screenshot ;;
|
*Screenshot*) omarchy-capture-screenshot ;;
|
||||||
@@ -167,14 +203,6 @@ show_share_menu() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_transcode_menu() {
|
|
||||||
case $(menu "Transcode" " Picture\n Video") in
|
|
||||||
*Picture*) present_terminal "omarchy-transcode --path '$HOME/Pictures'" ;;
|
|
||||||
*Video*) present_terminal "omarchy-transcode --path '$HOME/Videos'" ;;
|
|
||||||
*) back_to show_trigger_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_toggle_menu() {
|
show_toggle_menu() {
|
||||||
local options=" Screensaver\n Nightlight\n Idle Lock\n Notifications\n Top Bar\n Workspace Layout\n Window Gaps\n 1-Window Ratio\n Monitor Scaling\n Direct Boot\n Passwordless Sudo"
|
local options=" Screensaver\n Nightlight\n Idle Lock\n Notifications\n Top Bar\n Workspace Layout\n Window Gaps\n 1-Window Ratio\n Monitor Scaling\n Direct Boot\n Passwordless Sudo"
|
||||||
|
|
||||||
@@ -205,13 +233,18 @@ show_hardware_menu() {
|
|||||||
options="$options\n Touchpad"
|
options="$options\n Touchpad"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if omarchy-hw-dell-xps-haptic-touchpad && omarchy-cmd-present dell-xps-touchpad-haptics; then
|
||||||
|
options="$options\n Touchpad Haptics"
|
||||||
|
fi
|
||||||
|
|
||||||
if omarchy-hw-touchscreen; then
|
if omarchy-hw-touchscreen; then
|
||||||
options="$options\n Touchscreen"
|
options="$options\n Touchscreen"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case $(menu "Toggle" "$options") in
|
case $(menu "Toggle" "$options") in
|
||||||
*Laptop*) omarchy-hyprland-monitor-internal toggle ;;
|
*Laptop*) omarchy-hyprland-monitor-internal toggle ;;
|
||||||
*Mirror*) omarchy-hyprland-monitor-internal-mirror toggle;;
|
*Mirror*) omarchy-hyprland-monitor-internal-mirror toggle ;;
|
||||||
|
*Haptics*) show_hardware_touchpad_haptics_menu ;;
|
||||||
*Touchpad*) omarchy-toggle-touchpad ;;
|
*Touchpad*) omarchy-toggle-touchpad ;;
|
||||||
*Touchscreen*) omarchy-toggle-touchscreen ;;
|
*Touchscreen*) omarchy-toggle-touchscreen ;;
|
||||||
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
|
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
|
||||||
@@ -219,6 +252,17 @@ show_hardware_menu() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_hardware_touchpad_haptics_menu() {
|
||||||
|
local current=$(dell-xps-touchpad-haptics get)
|
||||||
|
local selected=$(menu "Touchpad Haptics" "low\nmid\nhigh" "" "$current")
|
||||||
|
|
||||||
|
if [[ -n $selected ]]; then
|
||||||
|
dell-xps-touchpad-haptics set "$selected"
|
||||||
|
else
|
||||||
|
back_to show_hardware_menu
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
show_style_menu() {
|
show_style_menu() {
|
||||||
case $(menu "Style" " Theme\n Unlock\n Font\n Background\n Hyprland\n Screensaver\n About") in
|
case $(menu "Style" " Theme\n Unlock\n Font\n Background\n Hyprland\n Screensaver\n About") in
|
||||||
*Theme*) show_theme_menu ;;
|
*Theme*) show_theme_menu ;;
|
||||||
@@ -227,33 +271,27 @@ show_style_menu() {
|
|||||||
*Background*) show_background_menu ;;
|
*Background*) show_background_menu ;;
|
||||||
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
|
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
|
||||||
*Screensaver*) show_screensaver_menu ;;
|
*Screensaver*) show_screensaver_menu ;;
|
||||||
*About*) open_in_editor ~/.config/omarchy/branding/about.txt ;;
|
*About*) show_about_menu ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_screensaver_menu() {
|
show_about_menu() {
|
||||||
case $(menu "Screensaver" " Set From Image\n Restore Default\n Edit Text\n Preview") in
|
case $(menu "About" " Edit Text\n Set From Image\n Restore Default") in
|
||||||
*Image*) set_screensaver_from_image ;;
|
*Text*) omarchy-branding-about text ;;
|
||||||
*Default*) terminal bash -lc 'omarchy-screensaver-set-logo default; echo; read -n 1 -s -r -p "Press any key to close..."' ;;
|
*Image*) omarchy-branding-about image ;;
|
||||||
*Text*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
|
*Default*) omarchy-branding-about reset ;;
|
||||||
*Preview*) omarchy-launch-screensaver force ;;
|
|
||||||
*) show_style_menu ;;
|
*) show_style_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
set_screensaver_from_image() {
|
show_screensaver_menu() {
|
||||||
terminal bash -lc '
|
case $(menu "Screensaver" " Edit Text\n Set From Image\n Restore Default") in
|
||||||
image=$(fd --type file --ignore-case --extension svg --extension png . "$HOME" 2>/dev/null | fzf --prompt "Logo image> ")
|
*Text*) omarchy-branding-screensaver text ;;
|
||||||
if [[ -n $image ]]; then
|
*Image*) omarchy-branding-screensaver image ;;
|
||||||
if omarchy-screensaver-set-logo "$image"; then
|
*Default*) omarchy-branding-screensaver reset ;;
|
||||||
echo
|
*) show_style_menu ;;
|
||||||
echo "Preview with: omarchy-launch-screensaver force"
|
esac
|
||||||
fi
|
|
||||||
echo
|
|
||||||
read -n 1 -s -r -p "Press any key to close..."
|
|
||||||
fi
|
|
||||||
'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
show_theme_menu() {
|
show_theme_menu() {
|
||||||
@@ -277,7 +315,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 DNS\n Security\n Config"
|
options="$options\n Defaults\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,6 +326,7 @@ 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 ;;
|
||||||
@@ -307,15 +346,120 @@ show_setup_power_menu() {
|
|||||||
|
|
||||||
show_setup_security_menu() {
|
show_setup_security_menu() {
|
||||||
case $(menu "Setup" " Fingerprint\n Fido2") in
|
case $(menu "Setup" " Fingerprint\n Fido2") in
|
||||||
*Fingerprint*) present_terminal omarchy-setup-fingerprint ;;
|
*Fingerprint*) present_terminal omarchy-setup-security-fingerprint ;;
|
||||||
*Fido2*) present_terminal omarchy-setup-fido2 ;;
|
*Fido2*) present_terminal omarchy-setup-security-fido2 ;;
|
||||||
*) show_setup_menu ;;
|
*) show_setup_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 zeditor && 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 | zeditor) 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" " Defaults\n Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n Walker\n Waybar\n XCompose") in
|
case $(menu "Setup" " 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 ;;
|
||||||
@@ -352,7 +496,7 @@ show_setup_system_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_menu() {
|
show_install_menu() {
|
||||||
case $(menu "Install" " Package\n AUR\n Web App\n TUI\n Service\n Style\n Development\n Editor\n Terminal\n AI\n Windows\n Gaming") in
|
case $(menu "Install" " Package\n AUR\n Web App\n TUI\n Service\n Style\n Development\n Editor\n Terminal\n Browser\n AI\n Gaming\n Windows") in
|
||||||
*Package*) terminal omarchy-pkg-install ;;
|
*Package*) terminal omarchy-pkg-install ;;
|
||||||
*AUR*) terminal omarchy-pkg-aur-install ;;
|
*AUR*) terminal omarchy-pkg-aur-install ;;
|
||||||
*Web*) present_terminal omarchy-webapp-install ;;
|
*Web*) present_terminal omarchy-webapp-install ;;
|
||||||
@@ -362,13 +506,26 @@ show_install_menu() {
|
|||||||
*Development*) show_install_development_menu ;;
|
*Development*) show_install_development_menu ;;
|
||||||
*Editor*) show_install_editor_menu ;;
|
*Editor*) show_install_editor_menu ;;
|
||||||
*Terminal*) show_install_terminal_menu ;;
|
*Terminal*) show_install_terminal_menu ;;
|
||||||
|
*Browser*) show_install_browser_menu ;;
|
||||||
|
*Gaming*) show_install_gaming_menu ;;
|
||||||
*AI*) show_install_ai_menu ;;
|
*AI*) show_install_ai_menu ;;
|
||||||
*Windows*) present_terminal "omarchy-windows-vm install" ;;
|
*Windows*) present_terminal "omarchy-windows-vm install" ;;
|
||||||
*Gaming*) show_install_gaming_menu ;;
|
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_install_browser_menu() {
|
||||||
|
case $(menu "Install" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in
|
||||||
|
*Chrome*) present_terminal "omarchy-install-browser chrome" ;;
|
||||||
|
*Edge*) present_terminal "omarchy-install-browser edge" ;;
|
||||||
|
*"Brave Origin"*) present_terminal "omarchy-install-browser brave-origin" ;;
|
||||||
|
*Brave*) present_terminal "omarchy-install-browser brave" ;;
|
||||||
|
*Firefox*) present_terminal "omarchy-install-browser firefox" ;;
|
||||||
|
*Zen*) present_terminal "omarchy-install-browser zen" ;;
|
||||||
|
*) show_install_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
show_install_service_menu() {
|
show_install_service_menu() {
|
||||||
case $(menu "Install" " Dropbox\n Tailscale\n NordVPN [AUR]\n ONCE\n Bitwarden\n Chromium Account") in
|
case $(menu "Install" " Dropbox\n Tailscale\n NordVPN [AUR]\n ONCE\n Bitwarden\n Chromium Account") in
|
||||||
*Dropbox*) present_terminal omarchy-install-dropbox ;;
|
*Dropbox*) present_terminal omarchy-install-dropbox ;;
|
||||||
@@ -382,20 +539,22 @@ 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 Emacs") in
|
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Vim\n Emacs") in
|
||||||
*VSCode*) present_terminal omarchy-install-vscode ;;
|
*VSCode*) present_terminal omarchy-install-vscode ;;
|
||||||
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
||||||
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
|
*Zed*) present_terminal omarchy-install-zed ;;
|
||||||
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
||||||
*Helix*) present_terminal omarchy-install-helix ;;
|
*Helix*) present_terminal omarchy-install-helix ;;
|
||||||
|
*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 Ghostty\n Kitty") in
|
case $(menu "Install" " Alacritty\n Foot\n Ghostty\n Kitty") in
|
||||||
*Alacritty*) install_terminal "alacritty" ;;
|
*Alacritty*) install_terminal "alacritty" ;;
|
||||||
|
*Foot*) install_terminal "foot" ;;
|
||||||
*Ghostty*) install_terminal "ghostty" ;;
|
*Ghostty*) install_terminal "ghostty" ;;
|
||||||
*Kitty*) install_terminal "kitty" ;;
|
*Kitty*) install_terminal "kitty" ;;
|
||||||
*) show_install_menu ;;
|
*) show_install_menu ;;
|
||||||
@@ -419,7 +578,7 @@ show_install_ai_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_gaming_menu() {
|
show_install_gaming_menu() {
|
||||||
case $(menu "Install" " Steam\n RetroArch\n Minecraft\n NVIDIA GeForce NOW\n Xbox Cloud Gaming\n Xbox Controller ()\n Moonlight (GameStream)\n Lutris (Battle.net)\n Heroic (Epic Games)") in
|
case $(menu "Install" " Steam\n RetroArch\n Minecraft\n NVIDIA GeForce NOW\n Xbox Cloud Gaming\n Xbox Controller\n Moonlight (GameStream)\n Lutris (Battle.net)\n Heroic (Epic Games)") in
|
||||||
*Steam*) present_terminal omarchy-install-gaming-steam ;;
|
*Steam*) present_terminal omarchy-install-gaming-steam ;;
|
||||||
*RetroArch*) present_terminal omarchy-install-gaming-retroarch ;;
|
*RetroArch*) present_terminal omarchy-install-gaming-retroarch ;;
|
||||||
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
||||||
@@ -501,22 +660,42 @@ show_install_elixir_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_remove_menu() {
|
show_remove_menu() {
|
||||||
case $(menu "Remove" " Package\n Web App\n TUI\n Development\n Gaming\n Preinstalls\n Dictation\n Theme\n Windows\n Fingerprint\n Fido2") in
|
case $(menu "Remove" " Package\n Web App\n TUI\n Development\n Theme\n Browser\n Dictation\n Gaming\n Windows\n Preinstalls\n Security") in
|
||||||
*Package*) terminal omarchy-pkg-remove ;;
|
*Package*) terminal omarchy-pkg-remove ;;
|
||||||
*Web*) present_terminal omarchy-webapp-remove ;;
|
*Web*) present_terminal omarchy-webapp-remove ;;
|
||||||
*TUI*) present_terminal omarchy-tui-remove ;;
|
*TUI*) present_terminal omarchy-tui-remove ;;
|
||||||
*Development*) show_remove_development_menu ;;
|
*Development*) show_remove_development_menu ;;
|
||||||
*Gaming*) show_remove_gaming_menu ;;
|
|
||||||
*Preinstalls*) present_terminal omarchy-remove-preinstalls ;;
|
|
||||||
*Dictation*) present_terminal omarchy-voxtype-remove ;;
|
|
||||||
*Theme*) present_terminal omarchy-theme-remove ;;
|
*Theme*) present_terminal omarchy-theme-remove ;;
|
||||||
|
*Browser*) show_remove_browser_menu ;;
|
||||||
|
*Dictation*) present_terminal omarchy-voxtype-remove ;;
|
||||||
|
*Gaming*) show_remove_gaming_menu ;;
|
||||||
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
||||||
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
|
*Preinstalls*) present_terminal omarchy-remove-preinstalls ;;
|
||||||
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
|
*Security*) show_remove_security_menu ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_remove_security_menu() {
|
||||||
|
case $(menu "Remove" " Fingerprint\n Fido2") in
|
||||||
|
*Fingerprint*) present_terminal omarchy-remove-security-fingerprint ;;
|
||||||
|
*Fido2*) present_terminal omarchy-remove-security-fido2 ;;
|
||||||
|
*) show_remove_menu ;;
|
||||||
|
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 ;;
|
||||||
@@ -641,7 +820,7 @@ show_update_hardware_menu() {
|
|||||||
|
|
||||||
show_update_password_menu() {
|
show_update_password_menu() {
|
||||||
case $(menu "Update Password" " Drive Encryption\n User") in
|
case $(menu "Update Password" " Drive Encryption\n User") in
|
||||||
*Drive*) present_terminal omarchy-drive-set-password ;;
|
*Drive*) present_terminal omarchy-drive-password ;;
|
||||||
*User*) present_terminal passwd ;;
|
*User*) present_terminal passwd ;;
|
||||||
*) show_update_menu ;;
|
*) show_update_menu ;;
|
||||||
esac
|
esac
|
||||||
@@ -681,7 +860,8 @@ go_to_menu() {
|
|||||||
*toggle*) show_toggle_menu ;;
|
*toggle*) show_toggle_menu ;;
|
||||||
*hardware*) show_hardware_menu ;;
|
*hardware*) show_hardware_menu ;;
|
||||||
*share*) show_share_menu ;;
|
*share*) show_share_menu ;;
|
||||||
*transcode*) show_transcode_menu ;;
|
*reminder-set*) show_custom_reminder_input ;;
|
||||||
|
*reminder*) show_reminder_menu ;;
|
||||||
*background*) show_background_menu ;;
|
*background*) show_background_menu ;;
|
||||||
*capture*) show_capture_menu ;;
|
*capture*) show_capture_menu ;;
|
||||||
*style*) show_style_menu ;;
|
*style*) show_style_menu ;;
|
||||||
|
|||||||
Executable
+48
@@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Pick a file with Walker
|
||||||
|
# omarchy:group=menu
|
||||||
|
# omarchy:name=file
|
||||||
|
# omarchy:args=label paths formats [walker args...]
|
||||||
|
# omarchy:examples=omarchy menu file "Select image" "$HOME/Pictures" "jpg png webp"|omarchy-menu-file "Select media" "$HOME/Pictures:$HOME/Videos" "jpg png mp4 mov" --width 800
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if (( $# < 3 )); then
|
||||||
|
echo "Usage: omarchy-menu-file <label> <paths> <formats> [walker args...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
label="$1"
|
||||||
|
paths_arg="$2"
|
||||||
|
formats_arg="$3"
|
||||||
|
shift 3
|
||||||
|
|
||||||
|
IFS=: read -r -a paths <<<"$paths_arg"
|
||||||
|
read -r -a formats <<<"$formats_arg"
|
||||||
|
|
||||||
|
if (( ${#paths[@]} == 0 || ${#formats[@]} == 0 )); then
|
||||||
|
echo "Usage: omarchy-menu-file <label> <paths> <formats> [walker args...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for path in "${paths[@]}"; do
|
||||||
|
[[ -e $path ]] || { echo "Path not found: $path" >&2; exit 1; }
|
||||||
|
done
|
||||||
|
|
||||||
|
find_args=("${paths[@]}" "(" -type d -name ".*" ! -name "." -prune ")" -o -type f ! -name ".*" "(")
|
||||||
|
first_format=true
|
||||||
|
for format in "${formats[@]}"; do
|
||||||
|
if [[ $first_format == "true" ]]; then
|
||||||
|
first_format=false
|
||||||
|
else
|
||||||
|
find_args+=(-o)
|
||||||
|
fi
|
||||||
|
|
||||||
|
format="${format#.}"
|
||||||
|
find_args+=(-iname "*.$format")
|
||||||
|
done
|
||||||
|
find_args+=(")" -printf '%T@\t%p\n')
|
||||||
|
|
||||||
|
find "${find_args[@]}" 2>/dev/null | sort -rn | cut -f2- |
|
||||||
|
omarchy-launch-walker --dmenu --width 800 --minheight 1 --maxheight 500 -p "$label…" "$@" 2>/dev/null
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Prompt for text input with Walker
|
||||||
|
# omarchy:group=menu
|
||||||
|
# omarchy:name=input
|
||||||
|
# omarchy:args=prompt [walker args...]
|
||||||
|
# omarchy:examples=omarchy menu input Reminder|omarchy-menu-input "Reminder in minutes" --width 400
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
prompt="${1:-Input}"
|
||||||
|
if (( $# > 0 )); then
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
omarchy-launch-walker --dmenu --inputonly --width 295 --minheight 1 --maxheight 1 -p "$prompt…" "$@" 2>/dev/null
|
||||||
Executable
+38
@@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Pick one option with Walker
|
||||||
|
# omarchy:group=menu
|
||||||
|
# omarchy:name=select
|
||||||
|
# omarchy:args=prompt option... [-- walker args...]
|
||||||
|
# omarchy:examples=omarchy menu select Format jpg png|omarchy-menu-select Resolution 4k 1080p 720p -- --width 400
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if (( $# < 2 )); then
|
||||||
|
echo "Usage: omarchy-menu-select <prompt> <option>... [-- walker args...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
prompt="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
options=()
|
||||||
|
walker_args=()
|
||||||
|
|
||||||
|
while (( $# > 0 )); do
|
||||||
|
if [[ $1 == "--" ]]; then
|
||||||
|
shift
|
||||||
|
walker_args=("$@")
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
options+=("$1")
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if (( ${#options[@]} == 0 )); then
|
||||||
|
echo "Usage: omarchy-menu-select <prompt> <option>... [-- walker args...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' "${options[@]}" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 300 -p "$prompt…" "${walker_args[@]}" 2>/dev/null
|
||||||
Executable
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Send a desktop notification with Omarchy glyph and body spacing
|
||||||
|
# omarchy:args=<glyph> <headline> [description] [notify-send options]
|
||||||
|
# omarchy:examples=omarchy notification send "" "Reminder" "5 minutes are up" -u critical
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if (($# < 2)); then
|
||||||
|
echo "Usage: omarchy-notification-send <glyph> <headline> [description] [notify-send options]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
glyph=$1
|
||||||
|
headline=$2
|
||||||
|
description=${3:-}
|
||||||
|
shift 2
|
||||||
|
|
||||||
|
if (($# > 0)) && [[ $1 != -* ]]; then
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
description=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
summary="$glyph $headline"
|
||||||
|
|
||||||
|
if [[ -n $description ]]; then
|
||||||
|
description=$(sed 's/^/ /' <<<"$description")
|
||||||
|
notify-send "$@" "$summary" "$description"
|
||||||
|
else
|
||||||
|
notify-send "$@" "$summary"
|
||||||
|
fi
|
||||||
+1
-3
@@ -1,10 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Install Arch packages if they are missing
|
# omarchy:summary=Install Arch packages if they are missing
|
||||||
# omarchy:group=install
|
|
||||||
# omarchy:name=package
|
|
||||||
# omarchy:args=<packages...>
|
# omarchy:args=<packages...>
|
||||||
# omarchy:examples=omarchy install package jq ripgrep
|
# omarchy:examples=omarchy pkg add jq ripgrep
|
||||||
# omarchy:requires-sudo=true
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
if omarchy-pkg-missing "$@"; then
|
if omarchy-pkg-missing "$@"; then
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
# omarchy:summary=Preview a Plymouth boot screen with custom colors and logo
|
# omarchy:summary=Preview a Plymouth boot screen with custom colors and logo
|
||||||
# omarchy:args=<background-hex> <text-hex> <path-to-logo.png> <output-path>
|
# omarchy:args=<background-hex> <text-hex> <path-to-logo.png> <output-path>
|
||||||
|
# omarchy:examples=omarchy plymouth preview '#1d2021' '#ebdbb2' ~/.config/omarchy/current/theme/plymouth/logo.png /tmp/plymouth-preview.png
|
||||||
|
|
||||||
# Render a Plymouth login-screen preview PNG by compositing the staged omarchy
|
# Render a Plymouth login-screen preview PNG by compositing the staged omarchy
|
||||||
# theme assets (recolored with the given text color) onto the background.
|
# theme assets (recolored with the given text color) onto the background.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
# omarchy:summary=Set the Plymouth boot theme colors and logo
|
# omarchy:summary=Set the Plymouth boot theme colors and logo
|
||||||
# omarchy:args=<background-hex> <text-hex> <path-to-logo.png>
|
# omarchy:args=<background-hex> <text-hex> <path-to-logo.png>
|
||||||
|
# omarchy:examples=omarchy plymouth set '#1d2021' '#ebdbb2' ~/.config/omarchy/current/theme/plymouth/logo.png
|
||||||
# omarchy:requires-sudo=true
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
# Configure the Plymouth boot theme with a custom background color, text color, and logo.
|
# Configure the Plymouth boot theme with a custom background color, text color, and logo.
|
||||||
@@ -67,10 +68,16 @@ 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/#000000/#$bg_hex/g" \
|
-e "s/#1a1b26/#$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"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Ensure all default .desktop, web apps, and TUIs are installed.
|
# omarchy:summary=Ensure all default .desktop, web apps, TUIs, and npx wrappers 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,9 +11,14 @@ 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/
|
||||||
|
|
||||||
# Refresh the webapps and TUIs
|
if omarchy-cmd-present foot; then
|
||||||
|
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
|
||||||
|
|||||||
Executable
+139
@@ -0,0 +1,139 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set and show lightweight desktop notification reminders
|
||||||
|
# omarchy:args=<minutes> [message] | show | clear
|
||||||
|
# omarchy:examples=omarchy reminder 5 | omarchy reminder 30 "Check the oven" | omarchy reminder show | omarchy reminder clear
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
format_remaining() {
|
||||||
|
local seconds=$1
|
||||||
|
local minutes=$((seconds / 60))
|
||||||
|
local remainder=$((seconds % 60))
|
||||||
|
|
||||||
|
if ((minutes > 0 && remainder > 0)); then
|
||||||
|
echo "${minutes}m ${remainder}s"
|
||||||
|
elif ((minutes > 0)); then
|
||||||
|
echo "${minutes}m"
|
||||||
|
else
|
||||||
|
echo "${remainder}s"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_systemd_timespan() {
|
||||||
|
local timespan="$1"
|
||||||
|
local total=0
|
||||||
|
local value unit whole
|
||||||
|
|
||||||
|
while read -r value unit; do
|
||||||
|
whole=${value%.*}
|
||||||
|
|
||||||
|
case $unit in
|
||||||
|
d) total=$((total + whole * 86400)) ;;
|
||||||
|
h) total=$((total + whole * 3600)) ;;
|
||||||
|
min) total=$((total + whole * 60)) ;;
|
||||||
|
s) total=$((total + whole)) ;;
|
||||||
|
ms | us) ;;
|
||||||
|
esac
|
||||||
|
done < <(grep -oE '[0-9]+([.][0-9]+)?(d|h|min|s|ms|us)' <<<"$timespan" | sed -E 's/^([0-9.]+)([a-z]+)$/\1 \2/')
|
||||||
|
|
||||||
|
echo "$total"
|
||||||
|
}
|
||||||
|
|
||||||
|
show_reminders() {
|
||||||
|
local timers timer next next_seconds uptime remaining body=""
|
||||||
|
local reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders"
|
||||||
|
local reminder_message=""
|
||||||
|
|
||||||
|
timers=$(systemctl --user list-timers --all --no-legend --no-pager "omarchy-reminder-*.timer" 2>/dev/null | awk '{ print $(NF - 1) }')
|
||||||
|
uptime=${SECONDS_SINCE_BOOT:-$(awk '{ print int($1) }' /proc/uptime)}
|
||||||
|
|
||||||
|
for timer in $timers; do
|
||||||
|
next=$(systemctl --user show -P NextElapseUSecMonotonic "$timer" 2>/dev/null || true)
|
||||||
|
[[ -z $next ]] && continue
|
||||||
|
|
||||||
|
next_seconds=$(parse_systemd_timespan "$next")
|
||||||
|
((next_seconds <= uptime)) && continue
|
||||||
|
|
||||||
|
remaining=$((next_seconds - uptime))
|
||||||
|
reminder=${timer%.timer}
|
||||||
|
reminder=${reminder#omarchy-reminder-}
|
||||||
|
set_at=${reminder##*-}
|
||||||
|
reminder_minutes=${reminder%%m-*}
|
||||||
|
reminder_message=""
|
||||||
|
[[ -f $reminder_dir/${timer%.timer}.message ]] && reminder_message=$(<"$reminder_dir/${timer%.timer}.message")
|
||||||
|
|
||||||
|
if [[ -n $reminder_message ]]; then
|
||||||
|
body+="$reminder_message in $(format_remaining $remaining) ($(date -d "@$((set_at + reminder_minutes * 60))" +%-H:%M))"$'\n'
|
||||||
|
else
|
||||||
|
body+="${reminder_minutes}-min reminder in $(format_remaining $remaining) ($(date -d "@$((set_at + reminder_minutes * 60))" +%-H:%M))"$'\n'
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z $body ]]; then
|
||||||
|
omarchy-notification-send "" "Upcoming reminders" "No outstanding reminders" -u low
|
||||||
|
else
|
||||||
|
omarchy-notification-send "" "Upcoming reminders" "${body%$'\n'}" -u low
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_reminders() {
|
||||||
|
local units
|
||||||
|
local reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders"
|
||||||
|
|
||||||
|
units=$(systemctl --user list-timers --all --no-legend --no-pager "omarchy-reminder-*.timer" 2>/dev/null | awk '{ print $(NF - 1), $NF }')
|
||||||
|
|
||||||
|
if [[ -n $units ]]; then
|
||||||
|
xargs -r systemctl --user stop <<<"$units" || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$reminder_dir"/omarchy-reminder-*.message 2>/dev/null || true
|
||||||
|
omarchy-notification-send "" "All reminders have been cleared" -u low
|
||||||
|
}
|
||||||
|
|
||||||
|
case ${1:-} in
|
||||||
|
show | list)
|
||||||
|
show_reminders
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
clear)
|
||||||
|
clear_reminders
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
minutes=${1:-}
|
||||||
|
shift || true
|
||||||
|
message="$*"
|
||||||
|
custom_message="$message"
|
||||||
|
|
||||||
|
if [[ -z $minutes ]] || [[ ! $minutes =~ ^[0-9]+$ ]] || ((minutes == 0)); then
|
||||||
|
echo "Usage: omarchy-reminder <minutes> [message]"
|
||||||
|
echo " omarchy-reminder show"
|
||||||
|
echo " omarchy-reminder clear"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $message ]]; then
|
||||||
|
message="Your ${minutes} minutes are up"
|
||||||
|
fi
|
||||||
|
|
||||||
|
set_at=$(date +%s)
|
||||||
|
remind_at=$(date -d "+${minutes} minutes" +%H:%M)
|
||||||
|
unit="omarchy-reminder-${minutes}m-$set_at"
|
||||||
|
reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders"
|
||||||
|
message_file="$reminder_dir/$unit.message"
|
||||||
|
confirmation="You'll be reminded at $remind_at"
|
||||||
|
confirmation_title="Reminder set for ${minutes} minutes"
|
||||||
|
|
||||||
|
mkdir -p "$reminder_dir"
|
||||||
|
|
||||||
|
if [[ -n $custom_message ]]; then
|
||||||
|
printf "%s" "$custom_message" >"$message_file"
|
||||||
|
confirmation_title="$custom_message in ${minutes} minutes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemd-run --user --quiet --collect --on-active="${minutes}m" --unit="$unit" \
|
||||||
|
bash -c 'omarchy-notification-send "" "Reminder" "$1" -u critical; rm -f "$2"' bash "$message" "$message_file"
|
||||||
|
|
||||||
|
omarchy-notification-send "" "$confirmation_title" "$confirmation" -u low
|
||||||
Executable
+73
@@ -0,0 +1,73 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Remove a supported browser and clean up Omarchy browser defaults
|
||||||
|
# omarchy:args=<chrome|brave|brave-origin|edge|firefox|zen>
|
||||||
|
# omarchy:examples=omarchy remove browser firefox | omarchy remove browser brave
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set_fallback_default_browser() {
|
||||||
|
local current_browser
|
||||||
|
current_browser=$(xdg-settings get default-web-browser)
|
||||||
|
|
||||||
|
if [[ $current_browser != "$1" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if omarchy-cmd-present chromium; then
|
||||||
|
xdg-settings set default-web-browser chromium.desktop
|
||||||
|
xdg-mime default chromium.desktop x-scheme-handler/http
|
||||||
|
xdg-mime default chromium.desktop x-scheme-handler/https
|
||||||
|
xdg-mime default chromium.desktop text/html
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
chrome)
|
||||||
|
echo "Removing Chrome..."
|
||||||
|
set_fallback_default_browser google-chrome.desktop
|
||||||
|
omarchy-pkg-drop google-chrome
|
||||||
|
rm -f ~/.config/chrome-flags.conf
|
||||||
|
sudo rm -f /etc/opt/chrome/policies/managed/color.json
|
||||||
|
;;
|
||||||
|
edge)
|
||||||
|
echo "Removing Edge..."
|
||||||
|
set_fallback_default_browser microsoft-edge.desktop
|
||||||
|
omarchy-pkg-drop microsoft-edge-stable-bin
|
||||||
|
rm -f ~/.config/microsoft-edge-stable-flags.conf
|
||||||
|
sudo rm -f /etc/opt/edge/policies/managed/color.json
|
||||||
|
;;
|
||||||
|
brave)
|
||||||
|
echo "Removing Brave..."
|
||||||
|
set_fallback_default_browser brave-browser.desktop
|
||||||
|
omarchy-pkg-drop brave-bin
|
||||||
|
rm -f ~/.config/brave-flags.conf
|
||||||
|
|
||||||
|
if omarchy-pkg-missing brave-origin-beta-bin; then
|
||||||
|
sudo rm -rf /etc/brave
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
brave-origin)
|
||||||
|
echo "Removing Brave Origin..."
|
||||||
|
set_fallback_default_browser brave-origin-beta.desktop
|
||||||
|
omarchy-pkg-drop brave-origin-beta-bin
|
||||||
|
rm -f ~/.config/brave-origin-beta-flags.conf
|
||||||
|
|
||||||
|
if omarchy-pkg-missing brave-bin; then
|
||||||
|
sudo rm -rf /etc/brave
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
firefox)
|
||||||
|
echo "Removing Firefox..."
|
||||||
|
set_fallback_default_browser firefox.desktop
|
||||||
|
omarchy-pkg-drop firefox
|
||||||
|
;;
|
||||||
|
zen)
|
||||||
|
echo "Removing Zen..."
|
||||||
|
set_fallback_default_browser zen.desktop
|
||||||
|
omarchy-pkg-drop zen-browser-bin
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-remove-browser <chrome|brave|brave-origin|edge|firefox|zen>"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -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-fbneo-git \
|
libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
|
||||||
retroarch-joypad-autoconfig-git
|
retroarch-joypad-autoconfig-git
|
||||||
|
|
||||||
rm -rf \
|
rm -rf \
|
||||||
|
|||||||
Executable
+35
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Remove FIDO2 authentication from sudo and polkit
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
remove_pam_config() {
|
||||||
|
# Remove from sudo
|
||||||
|
if grep -q pam_u2f.so /etc/pam.d/sudo; then
|
||||||
|
echo "Removing FIDO2 authentication from sudo..."
|
||||||
|
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/sudo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove from polkit
|
||||||
|
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
||||||
|
echo "Removing FIDO2 authentication from polkit..."
|
||||||
|
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\e[32mRemoving FIDO2 device from authentication.\n\e[0m"
|
||||||
|
|
||||||
|
remove_pam_config
|
||||||
|
|
||||||
|
if [[ -d /etc/fido2 ]]; then
|
||||||
|
echo "Removing FIDO2 configuration..."
|
||||||
|
sudo rm -rf /etc/fido2
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Removing FIDO2 packages..."
|
||||||
|
omarchy-pkg-drop libfido2 pam-u2f
|
||||||
|
|
||||||
|
echo -e "\e[32mFIDO2 authentication has been completely removed.\e[0m"
|
||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Remove fingerprint authentication from sudo, polkit, and lock screen
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
remove_pam_config() {
|
||||||
|
# Remove from sudo
|
||||||
|
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
||||||
|
echo "Removing fingerprint authentication from sudo..."
|
||||||
|
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove from polkit
|
||||||
|
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
||||||
|
echo "Removing fingerprint authentication from polkit..."
|
||||||
|
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_hyprlock_fingerprint_icon() {
|
||||||
|
echo "Removing fingerprint icon from hyprlock placeholder text..."
|
||||||
|
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
|
||||||
|
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\e[32mRemoving fingerprint scanner from authentication.\n\e[0m"
|
||||||
|
|
||||||
|
remove_pam_config
|
||||||
|
remove_hyprlock_fingerprint_icon
|
||||||
|
|
||||||
|
echo "Removing fingerprint packages..."
|
||||||
|
omarchy-pkg-drop fprintd libfprint-git
|
||||||
|
|
||||||
|
echo -e "\e[32mFingerprint authentication has been completely removed.\e[0m"
|
||||||
@@ -2,5 +2,9 @@
|
|||||||
|
|
||||||
# omarchy:summary=Restart the PipeWire audio service to fix audio issues or apply new configuration.
|
# omarchy:summary=Restart the PipeWire audio service to fix audio issues or apply new configuration.
|
||||||
|
|
||||||
echo -e "Restarting pipewire audio service...\n"
|
echo -e "Restarting PipeWire audio services...\n"
|
||||||
systemctl --user restart pipewire.service
|
systemctl --user restart wireplumber.service pipewire.service
|
||||||
|
|
||||||
|
if systemctl --user --quiet is-active pipewire-pulse.service; then
|
||||||
|
systemctl --user restart pipewire-pulse.service
|
||||||
|
fi
|
||||||
|
|||||||
@@ -2,4 +2,8 @@
|
|||||||
|
|
||||||
# omarchy:summary=Restart the SwayOSD server
|
# omarchy:summary=Restart the SwayOSD server
|
||||||
|
|
||||||
omarchy-restart-app swayosd-server
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user stop swayosd-server.service || true
|
||||||
|
pkill -x swayosd-server || true
|
||||||
|
systemctl --user reset-failed swayosd-server.service || true
|
||||||
|
systemctl --user enable --now swayosd-server.service
|
||||||
|
|||||||
@@ -3,4 +3,5 @@
|
|||||||
# omarchy:summary=Restart Waybar
|
# omarchy:summary=Restart Waybar
|
||||||
# omarchy:examples=omarchy restart waybar
|
# omarchy:examples=omarchy restart waybar
|
||||||
|
|
||||||
omarchy-restart-app waybar
|
pkill -9 -x waybar
|
||||||
|
setsid uwsm-app -- waybar >/dev/null 2>&1 &
|
||||||
|
|||||||
@@ -1,131 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# omarchy:summary=Set up or remove FIDO2 authentication for sudo and polkit
|
|
||||||
# omarchy:args=[--remove]
|
|
||||||
# omarchy:requires-sudo=true
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
RED='\033[0;31m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
print_success() {
|
|
||||||
echo -e "${GREEN}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_error() {
|
|
||||||
echo -e "${RED}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_info() {
|
|
||||||
echo -e "${YELLOW}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_fido2_hardware() {
|
|
||||||
tokens=$(fido2-token -L 2>/dev/null)
|
|
||||||
if [[ -z $tokens ]]; then
|
|
||||||
print_error "\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well)."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_pam_config() {
|
|
||||||
# Configure sudo
|
|
||||||
if ! grep -q pam_u2f.so /etc/pam.d/sudo; then
|
|
||||||
print_info "Configuring sudo for FIDO2 authentication..."
|
|
||||||
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configure polkit
|
|
||||||
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
|
||||||
print_info "Configuring polkit for FIDO2 authentication..."
|
|
||||||
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
|
|
||||||
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
|
||||||
print_info "Creating polkit configuration with FIDO2 authentication..."
|
|
||||||
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
|
||||||
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
|
|
||||||
auth required pam_unix.so
|
|
||||||
|
|
||||||
account required pam_unix.so
|
|
||||||
password required pam_unix.so
|
|
||||||
session required pam_unix.so
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_pam_config() {
|
|
||||||
# Remove from sudo
|
|
||||||
if grep -q pam_u2f.so /etc/pam.d/sudo; then
|
|
||||||
print_info "Removing FIDO2 authentication from sudo..."
|
|
||||||
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/sudo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove from polkit
|
|
||||||
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
|
||||||
print_info "Removing FIDO2 authentication from polkit..."
|
|
||||||
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "--remove" == $1 ]]; then
|
|
||||||
print_success "Removing FIDO2 device from authentication.\n"
|
|
||||||
|
|
||||||
# Remove PAM configuration
|
|
||||||
remove_pam_config
|
|
||||||
|
|
||||||
# Remove FIDO2 configuration
|
|
||||||
if [[ -d /etc/fido2 ]]; then
|
|
||||||
print_info "Removing FIDO2 configuration..."
|
|
||||||
sudo rm -rf /etc/fido2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Uninstall packages
|
|
||||||
print_info "Removing FIDO2 packages..."
|
|
||||||
sudo pacman -Rns --noconfirm libfido2 pam-u2f
|
|
||||||
|
|
||||||
print_success "FIDO2 authentication has been completely removed."
|
|
||||||
else
|
|
||||||
print_success "Setting up FIDO2 device for authentication.\n"
|
|
||||||
|
|
||||||
# Install required packages
|
|
||||||
print_info "Installing required packages..."
|
|
||||||
omarchy-pkg-add libfido2 pam-u2f
|
|
||||||
|
|
||||||
if ! check_fido2_hardware; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create the pamu2fcfg file
|
|
||||||
if [[ ! -f /etc/fido2/fido2 ]]; then
|
|
||||||
sudo mkdir -p /etc/fido2
|
|
||||||
print_success "\nLet's setup your device by confirming on the device now."
|
|
||||||
print_info "Touch your FIDO2 key when it lights up...\n"
|
|
||||||
|
|
||||||
if pamu2fcfg >/tmp/fido2; then
|
|
||||||
sudo mv /tmp/fido2 /etc/fido2/fido2
|
|
||||||
print_success "FIDO2 device registered successfully!"
|
|
||||||
else
|
|
||||||
print_error "\nFIDO2 registration failed. Please try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
print_info "FIDO2 device already registered."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configure PAM
|
|
||||||
setup_pam_config
|
|
||||||
|
|
||||||
# Test with sudo
|
|
||||||
print_info "\nTesting FIDO2 authentication with sudo..."
|
|
||||||
print_info "Touch your FIDO2 key when prompted.\n"
|
|
||||||
|
|
||||||
if sudo echo "FIDO2 authentication test successful"; then
|
|
||||||
print_success "\nPerfect! FIDO2 authentication is now configured."
|
|
||||||
print_info "You can use your FIDO2 key for sudo and polkit authentication."
|
|
||||||
else
|
|
||||||
print_error "\nVerification failed. You may want to check your configuration."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# omarchy:summary=Set up or remove fingerprint authentication for sudo, polkit, and lock screen
|
|
||||||
# omarchy:args=[--remove]
|
|
||||||
# omarchy:requires-sudo=true
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
RED='\033[0;31m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
print_success() {
|
|
||||||
echo -e "${GREEN}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_error() {
|
|
||||||
echo -e "${RED}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_info() {
|
|
||||||
echo -e "${YELLOW}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_fingerprint_hardware() {
|
|
||||||
# Get fingerprint devices for the user
|
|
||||||
devices=$(fprintd-list "$USER" 2>/dev/null)
|
|
||||||
|
|
||||||
# Exit if no devices found
|
|
||||||
if [[ -z $devices ]]; then
|
|
||||||
print_error "\nNo fingerprint sensor detected."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_pam_config() {
|
|
||||||
# Configure sudo
|
|
||||||
if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
|
||||||
print_info "Configuring sudo for fingerprint authentication..."
|
|
||||||
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configure polkit
|
|
||||||
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
|
||||||
print_info "Configuring polkit for fingerprint authentication..."
|
|
||||||
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
|
|
||||||
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
|
||||||
print_info "Creating polkit configuration with fingerprint authentication..."
|
|
||||||
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
|
||||||
auth sufficient pam_fprintd.so
|
|
||||||
auth required pam_unix.so
|
|
||||||
|
|
||||||
account required pam_unix.so
|
|
||||||
password required pam_unix.so
|
|
||||||
session required pam_unix.so
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
add_hyprlock_fingerprint_icon() {
|
|
||||||
print_info "Adding fingerprint icon to hyprlock placeholder text..."
|
|
||||||
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password <\/span>/' ~/.config/hypr/hyprlock.conf
|
|
||||||
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = true/' ~/.config/hypr/hyprlock.conf
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_hyprlock_fingerprint_icon() {
|
|
||||||
print_info "Removing fingerprint icon from hyprlock placeholder text..."
|
|
||||||
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
|
|
||||||
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_pam_config() {
|
|
||||||
# Remove from sudo
|
|
||||||
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
|
||||||
print_info "Removing fingerprint authentication from sudo..."
|
|
||||||
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove from polkit
|
|
||||||
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
|
||||||
print_info "Removing fingerprint authentication from polkit..."
|
|
||||||
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "--remove" == $1 ]]; then
|
|
||||||
print_success "Removing fingerprint scanner from authentication.\n"
|
|
||||||
|
|
||||||
# Remove PAM configuration
|
|
||||||
remove_pam_config
|
|
||||||
|
|
||||||
# Remove fingerprint icon from hyprlock placeholder text
|
|
||||||
remove_hyprlock_fingerprint_icon
|
|
||||||
|
|
||||||
# Uninstall packages
|
|
||||||
print_info "Removing fingerprint packages..."
|
|
||||||
sudo pacman -Rns --noconfirm fprintd
|
|
||||||
|
|
||||||
print_success "Fingerprint authentication has been completely removed."
|
|
||||||
else
|
|
||||||
print_success "Setting up fingerprint scanner for authentication.\n"
|
|
||||||
|
|
||||||
# Install required packages
|
|
||||||
print_info "Installing required packages..."
|
|
||||||
|
|
||||||
# ASUS ExpertBook B9406CAA ships a FocalTech FT9349 ESS reader (USB
|
|
||||||
# 2808:a97a). Mainline libfprint at 1.94.x lacks the focaltech_moc
|
|
||||||
# driver (and its 0xa97a id_table entry); OPR ships libfprint-git
|
|
||||||
# which carries both. Once upstream catches up, this branch is a
|
|
||||||
# no-op and `libfprint-git` provides=libfprint anyway. Detect via
|
|
||||||
# /sys to avoid depending on usbutils being installed first.
|
|
||||||
for v in /sys/bus/usb/devices/*/idVendor; do
|
|
||||||
[[ "$(cat "$v" 2>/dev/null)" == "2808" ]] || continue
|
|
||||||
[[ "$(cat "${v%idVendor}idProduct" 2>/dev/null)" == "a97a" ]] || continue
|
|
||||||
print_info "FocalTech FT9349 detected (B9406CAA) — using libfprint-git from OPR..."
|
|
||||||
# libfprint-git provides+conflicts libfprint; pacman -S --noconfirm
|
|
||||||
# defaults the conflict prompt to N and aborts. Pre-remove libfprint
|
|
||||||
# with -Rdd so the install goes silent. -Rdd (not omarchy-pkg-drop's
|
|
||||||
# -Rns) is required because fprintd requires libfprint; the dep is
|
|
||||||
# re-satisfied immediately by libfprint-git's provides=libfprint.
|
|
||||||
if omarchy-pkg-present libfprint; then
|
|
||||||
sudo pacman -Rdd --noconfirm libfprint
|
|
||||||
fi
|
|
||||||
omarchy-pkg-add libfprint-git
|
|
||||||
break
|
|
||||||
done
|
|
||||||
|
|
||||||
omarchy-pkg-add fprintd usbutils
|
|
||||||
|
|
||||||
if ! check_fingerprint_hardware; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configure PAM
|
|
||||||
setup_pam_config
|
|
||||||
|
|
||||||
# Add fingerprint icon to hyprlock placeholder text
|
|
||||||
add_hyprlock_fingerprint_icon
|
|
||||||
|
|
||||||
# Enroll first fingerprint
|
|
||||||
print_success "\nLet's setup your right index finger as the first fingerprint."
|
|
||||||
print_info "Keep moving the finger around on sensor until the process completes.\n"
|
|
||||||
|
|
||||||
if sudo fprintd-enroll "$USER"; then
|
|
||||||
print_success "\nFingerprint enrolled successfully!"
|
|
||||||
|
|
||||||
# Verify
|
|
||||||
print_info "\nNow let's verify that it's working correctly.\n"
|
|
||||||
if fprintd-verify; then
|
|
||||||
print_success "\nPerfect! Fingerprint authentication is now configured."
|
|
||||||
print_info "You can use your fingerprint for sudo, polkit, and lock screen (Super + Escape)."
|
|
||||||
else
|
|
||||||
print_error "\nVerification failed. You may want to try enrolling again."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
print_error "\nEnrollment failed. Please try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
Executable
+81
@@ -0,0 +1,81 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set up FIDO2 authentication for sudo and polkit
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
check_fido2_hardware() {
|
||||||
|
tokens=$(fido2-token -L 2>/dev/null)
|
||||||
|
if [[ -z $tokens ]]; then
|
||||||
|
echo -e "\e[31m\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well).\e[0m"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_pam_config() {
|
||||||
|
# Configure sudo
|
||||||
|
if ! grep -q pam_u2f.so /etc/pam.d/sudo; then
|
||||||
|
echo "Configuring sudo for FIDO2 authentication..."
|
||||||
|
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure polkit
|
||||||
|
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
||||||
|
echo "Configuring polkit for FIDO2 authentication..."
|
||||||
|
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
|
||||||
|
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
||||||
|
echo "Creating polkit configuration with FIDO2 authentication..."
|
||||||
|
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
||||||
|
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
|
||||||
|
auth required pam_unix.so
|
||||||
|
|
||||||
|
account required pam_unix.so
|
||||||
|
password required pam_unix.so
|
||||||
|
session required pam_unix.so
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\e[32mSetting up FIDO2 device for authentication.\n\e[0m"
|
||||||
|
|
||||||
|
# Install required packages
|
||||||
|
echo "Installing required packages..."
|
||||||
|
omarchy-pkg-add libfido2 pam-u2f
|
||||||
|
|
||||||
|
if ! check_fido2_hardware; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create the pamu2fcfg file
|
||||||
|
if [[ ! -f /etc/fido2/fido2 ]]; then
|
||||||
|
sudo mkdir -p /etc/fido2
|
||||||
|
echo -e "\e[32m\nLet's setup your device by confirming on the device now.\e[0m"
|
||||||
|
echo -e "Touch your FIDO2 key when it lights up...\n"
|
||||||
|
|
||||||
|
if pamu2fcfg >/tmp/fido2; then
|
||||||
|
sudo mv /tmp/fido2 /etc/fido2/fido2
|
||||||
|
echo -e "\e[32mFIDO2 device registered successfully!\e[0m"
|
||||||
|
else
|
||||||
|
echo -e "\e[31m\nFIDO2 registration failed. Please try again.\e[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "FIDO2 device already registered."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure PAM
|
||||||
|
setup_pam_config
|
||||||
|
|
||||||
|
# Test with sudo
|
||||||
|
echo -e "\nTesting FIDO2 authentication with sudo..."
|
||||||
|
echo -e "Touch your FIDO2 key when prompted.\n"
|
||||||
|
|
||||||
|
if sudo echo "FIDO2 authentication test successful"; then
|
||||||
|
echo -e "\e[32m\nPerfect! FIDO2 authentication is now configured.\e[0m"
|
||||||
|
echo "You can use your FIDO2 key for sudo and polkit authentication."
|
||||||
|
else
|
||||||
|
echo -e "\e[31m\nVerification failed. You may want to check your configuration.\e[0m"
|
||||||
|
fi
|
||||||
Executable
+95
@@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set up fingerprint authentication for sudo, polkit, and lock screen
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
check_fingerprint_hardware() {
|
||||||
|
# Get fingerprint devices for the user
|
||||||
|
devices=$(fprintd-list "$USER" 2>/dev/null)
|
||||||
|
|
||||||
|
# Exit if no devices found
|
||||||
|
if [[ -z $devices ]]; then
|
||||||
|
echo -e "\e[31m\nNo fingerprint sensor detected.\e[0m"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_pam_config() {
|
||||||
|
# Configure sudo
|
||||||
|
if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
||||||
|
echo "Configuring sudo for fingerprint authentication..."
|
||||||
|
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure polkit
|
||||||
|
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
||||||
|
echo "Configuring polkit for fingerprint authentication..."
|
||||||
|
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
|
||||||
|
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
||||||
|
echo "Creating polkit configuration with fingerprint authentication..."
|
||||||
|
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
||||||
|
auth sufficient pam_fprintd.so
|
||||||
|
auth required pam_unix.so
|
||||||
|
|
||||||
|
account required pam_unix.so
|
||||||
|
password required pam_unix.so
|
||||||
|
session required pam_unix.so
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_hyprlock_fingerprint_icon() {
|
||||||
|
echo "Adding fingerprint icon to hyprlock placeholder text..."
|
||||||
|
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password <\/span>/' ~/.config/hypr/hyprlock.conf
|
||||||
|
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = true/' ~/.config/hypr/hyprlock.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\e[32mSetting up fingerprint scanner for authentication.\n\e[0m"
|
||||||
|
|
||||||
|
# Install required packages
|
||||||
|
echo "Installing required packages..."
|
||||||
|
|
||||||
|
# libfprint-git provides+conflicts libfprint; pacman -S --noconfirm
|
||||||
|
# defaults the conflict prompt to N and aborts. Pre-remove libfprint
|
||||||
|
# with -Rdd so the install goes silent. -Rdd (not omarchy-pkg-drop's
|
||||||
|
# -Rns) is required because fprintd requires libfprint; the dep is
|
||||||
|
# re-satisfied immediately by libfprint-git's provides=libfprint.
|
||||||
|
if omarchy-pkg-present libfprint; then
|
||||||
|
sudo pacman -Rdd --noconfirm libfprint
|
||||||
|
fi
|
||||||
|
|
||||||
|
omarchy-pkg-add libfprint-git fprintd usbutils
|
||||||
|
|
||||||
|
if ! check_fingerprint_hardware; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure PAM
|
||||||
|
setup_pam_config
|
||||||
|
|
||||||
|
# Add fingerprint icon to hyprlock placeholder text
|
||||||
|
add_hyprlock_fingerprint_icon
|
||||||
|
|
||||||
|
# Enroll first fingerprint
|
||||||
|
echo -e "\e[32m\nLet's setup your right index finger as the first fingerprint.\e[0m"
|
||||||
|
echo -e "Keep moving the finger around on sensor until the process completes.\n"
|
||||||
|
|
||||||
|
if sudo fprintd-enroll "$USER"; then
|
||||||
|
echo -e "\e[32m\nFingerprint enrolled successfully!\e[0m"
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
echo -e "\nNow let's verify that it's working correctly.\n"
|
||||||
|
if fprintd-verify; then
|
||||||
|
echo -e "\e[32m\nPerfect! Fingerprint authentication is now configured.\e[0m"
|
||||||
|
echo "You can use your fingerprint for sudo, polkit, and lock screen (Super + Escape)."
|
||||||
|
else
|
||||||
|
echo -e "\e[31m\nVerification failed. You may want to try enrolling again.\e[0m"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "\e[31m\nEnrollment failed. Please try again.\e[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
# omarchy:summary=Manage persistent state files for Omarchy toggles and settings.
|
# omarchy:summary=Manage persistent state files for Omarchy toggles and settings.
|
||||||
# omarchy:args=<set|clear> <state-name-or-pattern>
|
# omarchy:args=<set|clear> <state-name-or-pattern>
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
STATE_DIR="$HOME/.local/state/omarchy"
|
STATE_DIR="$HOME/.local/state/omarchy"
|
||||||
mkdir -p "$STATE_DIR"
|
mkdir -p "$STATE_DIR"
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Display brightness level using SwayOSD on the current monitor.
|
# omarchy:summary=Display brightness level using SwayOSD on the current monitor.
|
||||||
# omarchy:args=<percent>
|
# omarchy:args=<0-100>
|
||||||
|
# omarchy:examples=omarchy swayosd brightness 0 | omarchy swayosd brightness 50 | omarchy swayosd brightness 100
|
||||||
|
|
||||||
percent="$1"
|
percent="$1"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Display keyboard brightness level using SwayOSD on the current monitor.
|
# omarchy:summary=Display keyboard brightness level using SwayOSD on the current monitor.
|
||||||
# omarchy:args=<percent>
|
# omarchy:args=<0-100>
|
||||||
|
# omarchy:examples=omarchy swayosd kbd brightness 0 | omarchy swayosd kbd brightness 50 | omarchy swayosd kbd brightness 100
|
||||||
|
|
||||||
percent="$1"
|
percent="$1"
|
||||||
|
|
||||||
|
|||||||
+16
-2
@@ -1,11 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Lock the screen
|
# omarchy:summary=Lock the computer and turn off the display
|
||||||
# omarchy:group=system
|
# omarchy:group=system
|
||||||
# omarchy:name=lock
|
# omarchy:name=lock
|
||||||
# omarchy:examples=omarchy system lock
|
# omarchy:examples=omarchy system lock
|
||||||
|
|
||||||
pidof hyprlock || hyprlock &
|
if ! pidof hyprlock >/dev/null; then
|
||||||
|
(
|
||||||
|
hyprlock
|
||||||
|
omarchy-system-wake
|
||||||
|
) &
|
||||||
|
fi
|
||||||
|
|
||||||
# Set keyboard layout to default (first layout)
|
# Set keyboard layout to default (first layout)
|
||||||
hyprctl switchxkblayout all 0 > /dev/null 2>&1
|
hyprctl switchxkblayout all 0 > /dev/null 2>&1
|
||||||
@@ -17,3 +22,12 @@ fi
|
|||||||
|
|
||||||
# Avoid running screensaver when locked
|
# Avoid running screensaver when locked
|
||||||
pkill -f org.omarchy.screensaver
|
pkill -f org.omarchy.screensaver
|
||||||
|
|
||||||
|
if [[ ${OMARCHY_LOCK_ONLY:-false} != "true" ]]; then
|
||||||
|
(
|
||||||
|
sleep 3
|
||||||
|
pidof hyprlock >/dev/null || exit 0
|
||||||
|
omarchy-brightness-keyboard off
|
||||||
|
omarchy-brightness-display off
|
||||||
|
) &
|
||||||
|
fi
|
||||||
|
|||||||
Executable
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Wake displays and restore brightness after idle
|
||||||
|
# omarchy:group=system
|
||||||
|
# omarchy:name=wake
|
||||||
|
# omarchy:examples=omarchy system wake
|
||||||
|
|
||||||
|
omarchy-brightness-display on
|
||||||
|
omarchy-brightness-keyboard restore
|
||||||
@@ -9,9 +9,14 @@ if [[ -z $1 ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BACKGROUND="$1"
|
BACKGROUND="$(realpath "$1")"
|
||||||
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
|
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
|
||||||
|
|
||||||
|
if [[ ! -f "$BACKGROUND" ]]; then
|
||||||
|
echo "File does not exist: $BACKGROUND" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Create symlink to the new background
|
# Create symlink to the new background
|
||||||
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"
|
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
# omarchy:summary=Generate a theme's colors.toml from its alacritty.toml palette
|
# omarchy:summary=Generate a theme's colors.toml from its alacritty.toml palette
|
||||||
# omarchy:args=<theme-dir>
|
# omarchy:args=<theme-dir>
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ omarchy-restart-mako
|
|||||||
omarchy-restart-helix
|
omarchy-restart-helix
|
||||||
|
|
||||||
# Change app-specific themes
|
# Change app-specific themes
|
||||||
|
omarchy-theme-set-foot
|
||||||
omarchy-theme-set-gnome
|
omarchy-theme-set-gnome
|
||||||
omarchy-theme-set-browser
|
omarchy-theme-set-browser
|
||||||
omarchy-theme-set-vscode
|
omarchy-theme-set-vscode
|
||||||
@@ -69,4 +70,4 @@ omarchy-theme-set-obsidian
|
|||||||
omarchy-theme-set-keyboard
|
omarchy-theme-set-keyboard
|
||||||
|
|
||||||
# Call hook on theme set
|
# Call hook on theme set
|
||||||
omarchy-hook theme-set "$THEME_NAME"
|
omarchy-hook theme-set "$THEME_NAME" >/dev/null
|
||||||
|
|||||||
@@ -1,30 +1,44 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Apply the current theme color to Chromium and Brave
|
# omarchy:summary=Apply the current theme color to Chromium, Chrome, Edge, and Brave
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
|
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
|
||||||
|
|
||||||
if omarchy-cmd-present chromium || omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then
|
if [[ -f $CHROMIUM_THEME ]]; then
|
||||||
if [[ -f $CHROMIUM_THEME ]]; then
|
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
||||||
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
|
||||||
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
|
else
|
||||||
else
|
# Use a default, neutral grey if theme doesn't have a color
|
||||||
# Use a default, neutral grey if theme doesn't have a color
|
THEME_HEX_COLOR="#1c2027"
|
||||||
THEME_RGB_COLOR="28,32,39"
|
|
||||||
THEME_HEX_COLOR="#1c2027"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if omarchy-cmd-present chromium; then
|
|
||||||
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
|
|
||||||
pgrep -x chromium >/dev/null && chromium --refresh-platform-policy --no-startup-window &>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Brave and Brave Origin Beta share /etc/brave/policies, so a single write covers both
|
|
||||||
if omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then
|
|
||||||
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null
|
|
||||||
if pgrep -x brave >/dev/null; then
|
|
||||||
omarchy-cmd-present brave && brave --refresh-platform-policy --no-startup-window &>/dev/null
|
|
||||||
omarchy-cmd-present brave-origin-beta && brave-origin-beta --refresh-platform-policy --no-startup-window &>/dev/null
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
set_browser_policy() {
|
||||||
|
local policy_dir="$1"
|
||||||
|
|
||||||
|
[[ -d $policy_dir ]] || return
|
||||||
|
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "$policy_dir/color.json" >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
refresh_running_browser() {
|
||||||
|
local process="$1"
|
||||||
|
local command="$2"
|
||||||
|
local pgrep_args="${3:--x}"
|
||||||
|
|
||||||
|
if omarchy-cmd-present "$command" && pgrep $pgrep_args "$process" >/dev/null; then
|
||||||
|
"$command" --refresh-platform-policy --no-startup-window &>/dev/null
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set_browser_policy /etc/chromium/policies/managed
|
||||||
|
refresh_running_browser chromium chromium
|
||||||
|
|
||||||
|
set_browser_policy /etc/opt/chrome/policies/managed
|
||||||
|
refresh_running_browser chrome google-chrome-stable || refresh_running_browser chrome google-chrome
|
||||||
|
|
||||||
|
set_browser_policy /etc/opt/edge/policies/managed
|
||||||
|
refresh_running_browser msedge microsoft-edge-stable
|
||||||
|
|
||||||
|
set_browser_policy /etc/brave/policies/managed
|
||||||
|
refresh_running_browser brave brave
|
||||||
|
refresh_running_browser brave-origin-beta brave-origin-beta -f
|
||||||
|
|||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Apply current Omarchy theme colors to running Foot terminals
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
|
foot_theme=~/.config/omarchy/current/theme/foot.ini
|
||||||
|
|
||||||
|
if [[ ! -f $foot_theme ]] || ! pgrep -x foot >/dev/null; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
foot_osc=$(awk -F= '
|
||||||
|
function color(value) { return "#" value }
|
||||||
|
/^foreground=/ { printf "\033]10;%s\007", color($2) }
|
||||||
|
/^background=/ { printf "\033]11;%s\007", color($2) }
|
||||||
|
/^cursor=/ { split($2, parts, " "); printf "\033]12;%s\007", color(parts[2]) }
|
||||||
|
/^selection-background=/ { printf "\033]17;%s\007", color($2) }
|
||||||
|
/^selection-foreground=/ { printf "\033]19;%s\007", color($2) }
|
||||||
|
/^regular[0-7]=/ { split($1, parts, "regular"); printf "\033]4;%d;%s\007", parts[2], color($2) }
|
||||||
|
/^bright[0-7]=/ { split($1, parts, "bright"); printf "\033]4;%d;%s\007", parts[2] + 8, color($2) }
|
||||||
|
' "$foot_theme")
|
||||||
|
|
||||||
|
for foot_pid in $(pgrep -x foot); do
|
||||||
|
for child_pid in $(pgrep -P "$foot_pid"); do
|
||||||
|
tty=$(readlink "/proc/$child_pid/fd/1" 2>/dev/null)
|
||||||
|
[[ $tty == /dev/pts/* ]] && printf '%b' "$foot_osc" >"$tty"
|
||||||
|
done
|
||||||
|
done
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Apply the current theme to GNOME color mode and icon settings
|
# omarchy:summary=Apply the current theme to GNOME color mode and icon settings
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
|
if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
|
||||||
gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
|
gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Apply the current theme keyboard color to supported keyboards
|
# omarchy:summary=Apply the current theme keyboard color to supported keyboards
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
omarchy-theme-set-keyboard-asus-rog
|
omarchy-theme-set-keyboard-asus-rog
|
||||||
omarchy-theme-set-keyboard-f16
|
omarchy-theme-set-keyboard-f16
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Apply the current theme keyboard color to ASUS ROG keyboards
|
# omarchy:summary=Apply the current theme keyboard color to ASUS ROG keyboards
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
ASUSCTL_THEME=~/.config/omarchy/current/theme/keyboard.rgb
|
ASUSCTL_THEME=~/.config/omarchy/current/theme/keyboard.rgb
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Apply the current theme keyboard color to Framework Laptop 16 keyboards
|
# omarchy:summary=Apply the current theme keyboard color to Framework Laptop 16 keyboards
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
FRAMEWORK16_THEME=~/.config/omarchy/current/theme/keyboard.rgb
|
FRAMEWORK16_THEME=~/.config/omarchy/current/theme/keyboard.rgb
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Sync Omarchy theme to all Obsidian vaults
|
# omarchy:summary=Sync Omarchy theme to all Obsidian vaults
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Generate themed config files from Omarchy templates
|
# omarchy:summary=Generate themed config files from Omarchy templates
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
TEMPLATES_DIR="$OMARCHY_PATH/default/themed"
|
TEMPLATES_DIR="$OMARCHY_PATH/default/themed"
|
||||||
USER_TEMPLATES_DIR="$HOME/.config/omarchy/themed"
|
USER_TEMPLATES_DIR="$HOME/.config/omarchy/themed"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Sync Omarchy theme to VS Code, VSCodium, and Cursor
|
# omarchy:summary=Sync Omarchy theme to VS Code, VSCodium, and Cursor
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
|
VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
|
||||||
|
|
||||||
|
|||||||
+15
-39
@@ -13,7 +13,7 @@ usage() {
|
|||||||
Usage:
|
Usage:
|
||||||
omarchy transcode [--path path] [input] [format] [resolution]
|
omarchy transcode [--path path] [input] [format] [resolution]
|
||||||
|
|
||||||
With no input, fuzzy-pick a picture or video from ~/Pictures and ~/Videos,
|
With no input, pick a picture or video with Walker from ~/Pictures and ~/Videos,
|
||||||
or only from --path when provided. Then pick the output format and resolution.
|
or only from --path when provided. Then pick the output format and resolution.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
@@ -29,30 +29,6 @@ Resolutions:
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
pick_file() {
|
|
||||||
local search_path="$1"
|
|
||||||
local paths=()
|
|
||||||
|
|
||||||
if [[ -n $search_path ]]; then
|
|
||||||
[[ -e $search_path ]] || { echo "Path not found: $search_path" >&2; return 1; }
|
|
||||||
paths=("$search_path")
|
|
||||||
else
|
|
||||||
paths=("$HOME/Pictures" "$HOME/Videos")
|
|
||||||
fi
|
|
||||||
|
|
||||||
find "${paths[@]}" -type f \
|
|
||||||
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' -o -iname '*.gif' -o -iname '*.heic' -o -iname '*.avif' \
|
|
||||||
-o -iname '*.mp4' -o -iname '*.mov' -o -iname '*.m4v' -o -iname '*.mkv' -o -iname '*.webm' -o -iname '*.avi' \) \
|
|
||||||
-printf '%T@\t%p\n' 2>/dev/null | sort -rn | cut -f2- | fzf --layout=reverse-list --prompt="Transcode file> "
|
|
||||||
}
|
|
||||||
|
|
||||||
pick_option() {
|
|
||||||
local prompt="$1"
|
|
||||||
shift
|
|
||||||
|
|
||||||
gum choose --header "$prompt" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
media_type() {
|
media_type() {
|
||||||
local mime
|
local mime
|
||||||
mime=$(file -b --mime-type "$1")
|
mime=$(file -b --mime-type "$1")
|
||||||
@@ -187,9 +163,10 @@ main() {
|
|||||||
input="${positional[0]:-}"
|
input="${positional[0]:-}"
|
||||||
format="${positional[1]:-}"
|
format="${positional[1]:-}"
|
||||||
resolution="${positional[2]:-}"
|
resolution="${positional[2]:-}"
|
||||||
|
search_path="${search_path:-$HOME/Pictures:$HOME/Videos}"
|
||||||
|
|
||||||
if [[ -z $input ]]; then
|
if [[ -z $input ]]; then
|
||||||
input=$(pick_file "$search_path")
|
input=$(omarchy-menu-file "Transcode picture or video" "$search_path" "jpg jpeg png webp gif heic avif mp4 mov m4v mkv webm avi")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[[ -n $input ]] || return 1
|
[[ -n $input ]] || return 1
|
||||||
@@ -199,33 +176,32 @@ main() {
|
|||||||
|
|
||||||
if [[ -z $format ]]; then
|
if [[ -z $format ]]; then
|
||||||
if [[ $type == "picture" ]]; then
|
if [[ $type == "picture" ]]; then
|
||||||
format=$(pick_option "Select format..." jpg png)
|
format=$(omarchy-menu-select "Select format" jpg png)
|
||||||
else
|
else
|
||||||
format=$(pick_option "Select format..." mp4 gif)
|
format=$(omarchy-menu-select "Select format" mp4 gif)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z $resolution ]]; then
|
if [[ -z $resolution ]]; then
|
||||||
if [[ $type == "picture" ]]; then
|
if [[ $type == "picture" ]]; then
|
||||||
resolution=$(pick_option "Select resolution..." high medium low)
|
resolution=$(omarchy-menu-select "Select resolution" high medium low)
|
||||||
else
|
else
|
||||||
resolution=$(pick_option "Select resolution..." 4k 1080p 720p)
|
resolution=$(omarchy-menu-select "Select resolution" 4k 1080p 720p)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
output=$(output_path "$input" "$format" "$resolution")
|
output=$(output_path "$input" "$format" "$resolution")
|
||||||
|
|
||||||
if [[ $type == "picture" ]]; then
|
if [[ $type == "video" ]]; then
|
||||||
transcode_picture "$input" "$format" "$resolution" "$output"
|
omarchy-notification-send "" "Transcoding video…" "$(basename -- "$input") to $format ($resolution)"
|
||||||
else
|
|
||||||
transcode_video "$input" "$format" "$resolution" "$output"
|
transcode_video "$input" "$format" "$resolution" "$output"
|
||||||
echo ""
|
copy_to_clipboard "$output"
|
||||||
|
omarchy-notification-send "" "Transcoded to $resolution $format" "Saved and copied to clipboard."
|
||||||
|
else
|
||||||
|
transcode_picture "$input" "$format" "$resolution" "$output"
|
||||||
|
copy_to_clipboard "$output"
|
||||||
|
omarchy-notification-send "" "Transcoded to $resolution $format" "Saved and copied to clipboard."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
copy_to_clipboard "$output"
|
|
||||||
echo "Your $type has been transcoded into $format as $resolution. It's on your clipboard."
|
|
||||||
echo ""
|
|
||||||
echo "It's also in $output"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Set the screensaver logo text from an SVG/PNG or the default
|
# omarchy:summary=Transcode an image into ASCII/Unicode art text
|
||||||
# omarchy:args=<default|path-to-logo.svg|png> [--width <columns>] [--height <rows>] [--mode <braille|block>] [--threshold <percent>] [--invert] [--stdout]
|
# omarchy:group=transcode
|
||||||
# omarchy:examples=omarchy screensaver set logo ~/logo.svg | omarchy screensaver set logo default | omarchy screensaver set logo ~/logo.png --width 80 --mode block --stdout
|
# omarchy:name=ascii
|
||||||
|
# omarchy:args=<input-image.svg|png> <output-path> [--width <columns>] [--height <rows>] [--mode <braille|block>] [--threshold <percent>] [--invert]
|
||||||
|
# omarchy:examples=omarchy transcode ascii ~/logo.svg /tmp/logo.txt | omarchy transcode ascii ~/logo.png ~/.config/omarchy/branding/screensaver.txt --width 80
|
||||||
|
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<'EOF'
|
cat <<'EOF'
|
||||||
Usage: omarchy-screensaver-set-logo <default|path-to-logo.svg|png> [options]
|
Usage: omarchy-transcode-ascii <input-image.svg|png> <output-path> [options]
|
||||||
|
|
||||||
Sets the screensaver logo text from an image.
|
Transcodes an image into ASCII/Unicode art text.
|
||||||
Pass "default" instead of an image path to restore the Omarchy default.
|
|
||||||
By default, writes to ~/.config/omarchy/branding/screensaver.txt.
|
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-w, --width <columns> Maximum output width in terminal columns (default: 80)
|
-w, --width <columns> Maximum output width in terminal columns (default: 80)
|
||||||
@@ -21,7 +21,6 @@ Options:
|
|||||||
-t, --threshold <percent> Pixel threshold from 0-100 (default: 50)
|
-t, --threshold <percent> Pixel threshold from 0-100 (default: 50)
|
||||||
--invert Treat light pixels as the logo instead of dark pixels
|
--invert Treat light pixels as the logo instead of dark pixels
|
||||||
--no-trim Preserve surrounding whitespace/background
|
--no-trim Preserve surrounding whitespace/background
|
||||||
--stdout Print converted text instead of writing the screensaver file
|
|
||||||
--help Show this help
|
--help Show this help
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@@ -32,9 +31,8 @@ mode=braille
|
|||||||
threshold=50
|
threshold=50
|
||||||
invert=false
|
invert=false
|
||||||
trim=true
|
trim=true
|
||||||
output_path="$HOME/.config/omarchy/branding/screensaver.txt"
|
|
||||||
image_path=""
|
image_path=""
|
||||||
reset_default=false
|
output_path=""
|
||||||
|
|
||||||
while (($# > 0)); do
|
while (($# > 0)); do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
@@ -98,9 +96,6 @@ while (($# > 0)); do
|
|||||||
--no-trim)
|
--no-trim)
|
||||||
trim=false
|
trim=false
|
||||||
;;
|
;;
|
||||||
--stdout)
|
|
||||||
output_path="-"
|
|
||||||
;;
|
|
||||||
--)
|
--)
|
||||||
shift
|
shift
|
||||||
break
|
break
|
||||||
@@ -111,10 +106,10 @@ while (($# > 0)); do
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if [[ $1 == "default" && -z $image_path ]]; then
|
if [[ -z $image_path ]]; then
|
||||||
reset_default=true
|
|
||||||
elif [[ -z $image_path ]]; then
|
|
||||||
image_path="$1"
|
image_path="$1"
|
||||||
|
elif [[ -z $output_path ]]; then
|
||||||
|
output_path="$1"
|
||||||
else
|
else
|
||||||
echo "Unexpected argument: $1" >&2
|
echo "Unexpected argument: $1" >&2
|
||||||
usage >&2
|
usage >&2
|
||||||
@@ -127,10 +122,10 @@ done
|
|||||||
|
|
||||||
if (($# > 0)); then
|
if (($# > 0)); then
|
||||||
while (($# > 0)); do
|
while (($# > 0)); do
|
||||||
if [[ $1 == "default" && -z $image_path ]]; then
|
if [[ -z $image_path ]]; then
|
||||||
reset_default=true
|
|
||||||
elif [[ -z $image_path ]]; then
|
|
||||||
image_path="$1"
|
image_path="$1"
|
||||||
|
elif [[ -z $output_path ]]; then
|
||||||
|
output_path="$1"
|
||||||
else
|
else
|
||||||
echo "Unexpected argument: $1" >&2
|
echo "Unexpected argument: $1" >&2
|
||||||
usage >&2
|
usage >&2
|
||||||
@@ -140,29 +135,7 @@ if (($# > 0)); then
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $reset_default == "true" ]]; then
|
if [[ -z $image_path || -z $output_path ]]; then
|
||||||
if [[ -n $image_path ]]; then
|
|
||||||
echo "default does not accept an image path" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
default_path="${OMARCHY_PATH:-$HOME/.local/share/omarchy}/logo.txt"
|
|
||||||
if [[ ! -f $default_path ]]; then
|
|
||||||
echo "Default screensaver logo text not found: $default_path" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $output_path == "-" ]]; then
|
|
||||||
cat "$default_path"
|
|
||||||
else
|
|
||||||
mkdir -p "$(dirname "$output_path")"
|
|
||||||
cp "$default_path" "$output_path"
|
|
||||||
echo "Restored default screensaver logo text to $output_path"
|
|
||||||
fi
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $image_path ]]; then
|
|
||||||
usage >&2
|
usage >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -375,10 +348,6 @@ if [[ ! -s $tmp_output ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $output_path == "-" ]]; then
|
mkdir -p "$(dirname "$output_path")"
|
||||||
cat "$tmp_output"
|
cp "$tmp_output" "$output_path"
|
||||||
else
|
echo "Wrote ASCII art to $output_path"
|
||||||
mkdir -p "$(dirname "$output_path")"
|
|
||||||
cp "$tmp_output" "$output_path"
|
|
||||||
echo "Wrote screensaver logo text to $output_path"
|
|
||||||
fi
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Ensure the Omarchy keyring package is installed and populated
|
# omarchy:summary=Ensure the Omarchy and Arch keyring packages are installed and populated
|
||||||
# omarchy:requires-sudo=true
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then
|
if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then
|
||||||
@@ -16,5 +16,7 @@ if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Ensure we have the latest archlinux-keyring, maintainer keys might have changed
|
# Ensure we have the latest archlinux-keyring, maintainer keys might have changed
|
||||||
|
# Always reinstall, as the keyring can be updated without a package version bump.
|
||||||
echo -e "\e[32m\nUpdate Arch signing keys\e[0m"
|
echo -e "\e[32m\nUpdate Arch signing keys\e[0m"
|
||||||
sudo pacman -Sy --noconfirm archlinux-keyring >/dev/null
|
sudo pacman -Sy --noconfirm archlinux-keyring >/dev/null 2> >(grep -vE '^warning: archlinux-keyring-[^ ]+ is up to date -- reinstalling$' >&2)
|
||||||
|
echo "Keys are correct"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=No-op now that omarchy-update-perform is responsible for idle management.
|
# omarchy:summary=No-op now that omarchy-update-perform is responsible for idle management.
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
# omarchy:summary=Upload logs to 0x0.st
|
# omarchy:summary=Upload logs to 0x0.st
|
||||||
# omarchy:args=<log-file>
|
# omarchy:args=<log-file>
|
||||||
|
# omarchy:hidden=true
|
||||||
|
|
||||||
LOG_TYPE="${1:-install}"
|
LOG_TYPE="${1:-install}"
|
||||||
TEMP_LOG="/tmp/upload-log.txt"
|
TEMP_LOG="/tmp/upload-log.txt"
|
||||||
|
|||||||
@@ -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" "Press Super + Ctrl + X to toggle dictation.\nEdit ~/.config/voxtype/config.toml for options." -t 10000
|
notify-send " Voxtype Dictation Ready" "Hold F9 to dictate (or toggle with Super + Ctrl + X)." -t 10000
|
||||||
fi
|
fi
|
||||||
|
|||||||
Executable
+36
@@ -0,0 +1,36 @@
|
|||||||
|
#!/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"
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/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^}
|
||||||
|
temperature=${temperature#+}
|
||||||
|
|
||||||
|
echo "$(omarchy-weather-icon) $place · Temp $temperature · Wind $wind"
|
||||||
@@ -1 +0,0 @@
|
|||||||
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
brave-flags.conf
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
--ozone-platform=wayland
|
--ozone-platform=wayland
|
||||||
--ozone-platform-hint=wayland
|
--ozone-platform-hint=wayland
|
||||||
--enable-features=TouchpadOverscrollHistoryNavigation,VaapiVideoDecodeLinuxGL,VaapiVideoEncoder
|
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||||
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
[main]
|
||||||
|
include=~/.config/omarchy/current/theme/foot.ini
|
||||||
|
term=xterm-256color
|
||||||
|
font=JetBrainsMono Nerd Font:size=9
|
||||||
|
pad=14x14
|
||||||
|
initial-window-mode=windowed
|
||||||
|
workers=0
|
||||||
|
|
||||||
|
[scrollback]
|
||||||
|
lines=10000
|
||||||
|
|
||||||
|
[cursor]
|
||||||
|
style=block
|
||||||
|
blink=no
|
||||||
|
|
||||||
|
[key-bindings]
|
||||||
|
clipboard-copy=Control+Insert
|
||||||
|
primary-paste=none
|
||||||
|
clipboard-paste=Shift+Insert
|
||||||
@@ -1,28 +1,19 @@
|
|||||||
general {
|
general {
|
||||||
lock_cmd = omarchy-system-lock # lock screen and 1password
|
lock_cmd = omarchy-system-lock # lock screen and 1password
|
||||||
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
before_sleep_cmd = OMARCHY_LOCK_ONLY=true omarchy-system-lock # lock before suspend without scheduling display off.
|
||||||
after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # delay for PAM readiness, then turn on display.
|
after_sleep_cmd = sleep 1 && omarchy-system-wake # delay for PAM readiness, then turn on display.
|
||||||
inhibit_sleep = 3 # wait until screen is locked
|
inhibit_sleep = 3 # wait until screen is locked
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Start screensaver after 2.5 minutes
|
||||||
listener {
|
listener {
|
||||||
timeout = 150 # 2.5min
|
timeout = 150
|
||||||
on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already)
|
on-timeout = pidof hyprlock || omarchy-launch-screensaver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Lock system after 5 minutes (screensaver resets idle timer, so have to just do half + 2s margin)
|
||||||
listener {
|
listener {
|
||||||
timeout = 151 # 5min
|
timeout = 152
|
||||||
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
on-timeout = omarchy-system-lock
|
||||||
}
|
on-resume = omarchy-system-wake
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 330 # 5.5min
|
|
||||||
on-timeout = brightnessctl -sd '*::kbd_backlight' set 0 # save state and turn off keyboard backlight
|
|
||||||
on-resume = brightnessctl -rd '*::kbd_backlight' # restore keyboard backlight
|
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 330 # 5.5min
|
|
||||||
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
|
|
||||||
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ input {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Scroll nicely in the terminal
|
# Scroll nicely in the terminal
|
||||||
windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5
|
windowrule = match:class (Alacritty|kitty|foot), scroll_touchpad 1.5
|
||||||
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
|
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
|
||||||
|
|
||||||
# Enable touchpad gestures for changing workspaces
|
# Enable touchpad gestures for changing workspaces
|
||||||
|
|||||||
@@ -32,3 +32,9 @@ layout {
|
|||||||
# Avoid overly wide single-window layouts on wide screens
|
# Avoid overly wide single-window layouts on wide screens
|
||||||
# single_window_aspect_ratio = 1 1
|
# single_window_aspect_ratio = 1 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/
|
||||||
|
scrolling {
|
||||||
|
# See only one column per screen instead of two
|
||||||
|
# column_width = 0.97
|
||||||
|
}
|
||||||
|
|||||||
+1
-1
@@ -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 the name.
|
# notification is sent. To put it into use, remove .sample from this file name.
|
||||||
|
|
||||||
SOUND_FILE="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga"
|
SOUND_FILE="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga"
|
||||||
|
|
||||||
+2
-2
@@ -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 the name.
|
# To put it into use, remove .sample from this file name.
|
||||||
|
|
||||||
# Example: Show the name of the theme that was just set.
|
# Example: Show the name of the font 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"
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Show the weather status notification after Omarchy has started.
|
||||||
|
# To put it into use, remove .sample from this file name.
|
||||||
|
|
||||||
|
weather=$(omarchy-weather-status 2>/dev/null) || true
|
||||||
|
|
||||||
|
if [[ -n $weather && $weather != "Weather unavailable" ]]; then
|
||||||
|
notify-send -u low "$weather"
|
||||||
|
fi
|
||||||
+1
-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 the name.
|
# To put it into use, remove .sample from this file 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
-1
@@ -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 the name.
|
# To put it into use, remove .sample from this file 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"
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=SwayOSD server
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/swayosd-server
|
||||||
|
Restart=always
|
||||||
|
RestartSec=2
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
@@ -70,6 +70,9 @@ set -g set-clipboard on
|
|||||||
set -g allow-passthrough on
|
set -g allow-passthrough on
|
||||||
setw -g aggressive-resize on
|
setw -g aggressive-resize on
|
||||||
set -g detach-on-destroy off
|
set -g detach-on-destroy off
|
||||||
|
set -g extended-keys on
|
||||||
|
set -g extended-keys-format csi-u
|
||||||
|
set -sg escape-time 10
|
||||||
|
|
||||||
# Status bar
|
# Status bar
|
||||||
set -g status-position top
|
set -g status-position top
|
||||||
|
|||||||
@@ -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/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
"modules-center": ["clock", "custom/weather", "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,6 +66,13 @@
|
|||||||
"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": 60,
|
||||||
|
"tooltip": false,
|
||||||
|
"on-click": "notify-send -u low \"$(omarchy-weather-status)\""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"format-icons": ["", "", "", "", ""],
|
"format-icons": ["", "", "", "", ""],
|
||||||
"format": "{icon}",
|
"format": "{icon}",
|
||||||
|
|||||||
@@ -67,6 +67,17 @@ 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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,17 @@ _omarchy_complete() {
|
|||||||
candidates+=("--all" "--json" "--markdown" "--check")
|
candidates+=("--all" "--json" "--markdown" "--check")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if (( ${#candidates[@]} == 0 )) && [[ -x $bin_dir/$prefix ]]; then
|
||||||
|
local args enum
|
||||||
|
args=$(grep -m 1 '^# omarchy:args=<' "$bin_dir/$prefix" 2>/dev/null)
|
||||||
|
enum="${args#*<}"
|
||||||
|
enum="${enum%%>*}"
|
||||||
|
|
||||||
|
if [[ $enum == *"|"* && $enum != *" "* ]]; then
|
||||||
|
read -r -a candidates <<<"${enum//|/ }"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if (( ${#candidates[@]} > 0 )); then
|
if (( ${#candidates[@]} > 0 )); then
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
COMPREPLY=($(compgen -W "${candidates[*]}" -- "$cur"))
|
COMPREPLY=($(compgen -W "${candidates[*]}" -- "$cur"))
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"policies": {
|
||||||
|
"Preferences": {
|
||||||
|
"apz.overscroll.enabled": {
|
||||||
|
"Value": true,
|
||||||
|
"Status": "default"
|
||||||
|
},
|
||||||
|
"media.ffmpeg.vaapi.enabled": {
|
||||||
|
"Value": true,
|
||||||
|
"Status": "default"
|
||||||
|
},
|
||||||
|
"media.hardware-video-decoding.force-enabled": {
|
||||||
|
"Value": true,
|
||||||
|
"Status": "default"
|
||||||
|
},
|
||||||
|
"widget.disable-swipe-tracker": {
|
||||||
|
"Value": false,
|
||||||
|
"Status": "default"
|
||||||
|
},
|
||||||
|
"widget.wayland.fractional-scale.enabled": {
|
||||||
|
"Value": true,
|
||||||
|
"Status": "default"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
TryExec=foot
|
||||||
|
Exec=foot
|
||||||
|
Icon=foot
|
||||||
|
Terminal=false
|
||||||
|
Categories=System;TerminalEmulator;
|
||||||
|
Name=Foot
|
||||||
|
GenericName=Terminal
|
||||||
|
Comment=A fast, lightweight and minimalistic Wayland terminal emulator
|
||||||
|
StartupNotify=true
|
||||||
|
StartupWMClass=foot
|
||||||
|
Actions=New;
|
||||||
|
X-TerminalArgExec=-e
|
||||||
|
X-TerminalArgAppId=--app-id=
|
||||||
|
X-TerminalArgTitle=--title=
|
||||||
|
X-TerminalArgDir=--working-directory=
|
||||||
|
|
||||||
|
[Desktop Action New]
|
||||||
|
Name=New Terminal
|
||||||
|
Exec=foot
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[main]
|
||||||
|
font=JetBrainsMono Nerd Font:size=18
|
||||||
|
pad=0x0
|
||||||
|
|
||||||
|
[colors-dark]
|
||||||
|
background=000000
|
||||||
|
foreground=ffffff
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user