mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-03 04:37:48 +02:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
089d2cef9b | ||
|
|
13b7aaae1d |
@@ -6,15 +6,10 @@
|
||||
- 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`)
|
||||
- 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
|
||||
|
||||
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:
|
||||
All commands start with `omarchy-`. Prefixes indicate purpose:
|
||||
|
||||
- `cmd-` - check if commands exist, misc utility commands
|
||||
- `capture-` - screenshots, screen recordings, and other capture tools
|
||||
@@ -29,52 +24,6 @@ Common prefixes include:
|
||||
- `theme-` - theme management
|
||||
- `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
|
||||
|
||||
Use these instead of raw shell commands:
|
||||
@@ -84,8 +33,6 @@ Use these instead of raw shell commands:
|
||||
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
|
||||
- `omarchy-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/` - default configs copied to `~/.config/`
|
||||
@@ -106,16 +53,10 @@ This copies `~/.local/share/omarchy/config/hypr/hyprlock.conf` to `~/.config/hyp
|
||||
|
||||
To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit.
|
||||
|
||||
New migration format:
|
||||
- File permissions must be `0644` (`-rw-r--r--`); migrations are sourced, not executed directly
|
||||
Migration format:
|
||||
- No shebang line
|
||||
- Start with an `echo` describing what the migration does
|
||||
- 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:
|
||||
```bash
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Hidden=true
|
||||
@@ -1,2 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Hidden=true
|
||||
+23
-54
@@ -17,7 +17,6 @@ declare -A COMMAND_USAGE
|
||||
declare -A COMMAND_ARGS
|
||||
declare -A COMMAND_EXAMPLES
|
||||
declare -A COMMAND_REQUIRES_SUDO
|
||||
declare -A COMMAND_HIDDEN
|
||||
declare -A COMMAND_ALIASES
|
||||
declare -A COMMAND_HAS_SUMMARY
|
||||
declare -A COMMAND_METADATA_ERRORS
|
||||
@@ -35,7 +34,6 @@ GROUP_DESCRIPTIONS[channel]="Omarchy release channel management"
|
||||
GROUP_DESCRIPTIONS[cmd]="Command and shortcut helpers"
|
||||
GROUP_DESCRIPTIONS[config]="System configuration helpers"
|
||||
GROUP_DESCRIPTIONS[debug]="Diagnostics and support logs"
|
||||
GROUP_DESCRIPTIONS[default]="Default application selection"
|
||||
GROUP_DESCRIPTIONS[dev]="Omarchy development tools"
|
||||
GROUP_DESCRIPTIONS[drive]="Drive selection and encryption"
|
||||
GROUP_DESCRIPTIONS[font]="Font management"
|
||||
@@ -59,6 +57,7 @@ GROUP_DESCRIPTIONS[restart]="Restart Omarchy components"
|
||||
GROUP_DESCRIPTIONS[setup]="Interactive setup wizards"
|
||||
GROUP_DESCRIPTIONS[screensaver]="Screensaver branding and animation"
|
||||
GROUP_DESCRIPTIONS[snapshot]="System snapshots"
|
||||
GROUP_DESCRIPTIONS[state]="Persistent Omarchy state"
|
||||
GROUP_DESCRIPTIONS[sudo]="Sudo configuration helpers"
|
||||
GROUP_DESCRIPTIONS[swayosd]="SwayOSD status display helpers"
|
||||
GROUP_DESCRIPTIONS[system]="Reboot, shutdown, logout, and lock"
|
||||
@@ -68,9 +67,9 @@ GROUP_DESCRIPTIONS[transcode]="Image and video transcoding"
|
||||
GROUP_DESCRIPTIONS[tui]="Terminal UI launchers"
|
||||
GROUP_DESCRIPTIONS[tz]="Timezone selection"
|
||||
GROUP_DESCRIPTIONS[update]="Omarchy and system updates"
|
||||
GROUP_DESCRIPTIONS[upload]="Upload helpers"
|
||||
GROUP_DESCRIPTIONS[version]="Version and channel information"
|
||||
GROUP_DESCRIPTIONS[voxtype]="Voxtype dictation"
|
||||
GROUP_DESCRIPTIONS[weather]="Weather status"
|
||||
GROUP_DESCRIPTIONS[webapp]="Web app launchers"
|
||||
GROUP_DESCRIPTIONS[wifi]="Wi-Fi helpers"
|
||||
GROUP_DESCRIPTIONS[windows]="Windows VM management"
|
||||
@@ -132,7 +131,6 @@ register_command() {
|
||||
local examples=""
|
||||
local aliases=""
|
||||
local requires_sudo=""
|
||||
local hidden=""
|
||||
local line=""
|
||||
local metadata_key=""
|
||||
local metadata_value=""
|
||||
@@ -188,10 +186,6 @@ register_command() {
|
||||
requires_sudo="$metadata_value"
|
||||
[[ $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
|
||||
@@ -235,7 +229,6 @@ register_command() {
|
||||
fi
|
||||
|
||||
[[ $requires_sudo == "true" ]] || requires_sudo="false"
|
||||
[[ $hidden == "true" ]] || hidden="false"
|
||||
|
||||
local key="$file_binary"
|
||||
COMMAND_KEYS+=("$key")
|
||||
@@ -249,7 +242,6 @@ register_command() {
|
||||
COMMAND_ARGS["$key"]="$args"
|
||||
COMMAND_EXAMPLES["$key"]="$examples"
|
||||
COMMAND_REQUIRES_SUDO["$key"]="$requires_sudo"
|
||||
COMMAND_HIDDEN["$key"]="$hidden"
|
||||
COMMAND_HAS_SUMMARY["$key"]="$has_summary"
|
||||
COMMAND_METADATA_ERRORS["$key"]="$metadata_errors"
|
||||
|
||||
@@ -329,6 +321,16 @@ command_requires_args() {
|
||||
[[ -n $required ]]
|
||||
}
|
||||
|
||||
load_group_extra_commands() {
|
||||
local group="$1"
|
||||
|
||||
case "$group" in
|
||||
install)
|
||||
load_command_by_binary omarchy-pkg-add
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
load_group_commands() {
|
||||
local group="$1"
|
||||
local file=""
|
||||
@@ -342,6 +344,7 @@ load_group_commands() {
|
||||
register_command "$file"
|
||||
done
|
||||
|
||||
load_group_extra_commands "$group"
|
||||
}
|
||||
|
||||
resolve_direct_route() {
|
||||
@@ -374,9 +377,6 @@ sorted_keys() {
|
||||
local key=""
|
||||
|
||||
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"
|
||||
done | sort -u | cut -f2-
|
||||
}
|
||||
@@ -420,10 +420,6 @@ sorted_group_keys() {
|
||||
local route=""
|
||||
|
||||
for key in "${COMMAND_KEYS[@]}"; do
|
||||
if [[ $include_all != "true" && ${COMMAND_HIDDEN[$key]} == "true" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
fallback_group=$(fallback_group_for_key "$key")
|
||||
if [[ ${COMMAND_GROUP[$key]} != "$group" && $fallback_group != "$group" ]]; then
|
||||
continue
|
||||
@@ -501,6 +497,8 @@ Discovery:
|
||||
omarchy commands --all Include commands explicitly marked hidden
|
||||
omarchy commands --json Machine-readable command list
|
||||
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
|
||||
}
|
||||
|
||||
@@ -512,7 +510,7 @@ Usage:
|
||||
List commands known to the Omarchy command center.
|
||||
|
||||
Options:
|
||||
--all Include commands explicitly marked hidden
|
||||
--all Accepted for compatibility
|
||||
--json Emit machine-readable JSON
|
||||
--markdown Emit a Markdown command table
|
||||
--check Validate command metadata and route collisions
|
||||
@@ -564,9 +562,6 @@ show_commands() {
|
||||
|
||||
for route in "${!ROUTE_IS_ALIAS[@]}"; do
|
||||
key="${ROUTE_TO_KEY[$route]}"
|
||||
if [[ $include_all != "true" && ${COMMAND_HIDDEN[$key]} == "true" ]]; then
|
||||
continue
|
||||
fi
|
||||
alias_rows+="$route"$'\t'"${COMMAND_ROUTE[$key]}"$'\n'
|
||||
done
|
||||
|
||||
@@ -605,14 +600,13 @@ emit_command_records() {
|
||||
|
||||
while IFS= read -r key; do
|
||||
[[ -n $key ]] || continue
|
||||
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
|
||||
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
|
||||
"${COMMAND_ROUTE[$key]}" \
|
||||
"${COMMAND_BINARY[$key]}" \
|
||||
"${COMMAND_GROUP[$key]}" \
|
||||
"${COMMAND_NAME[$key]}" \
|
||||
"${COMMAND_SUMMARY[$key]}" \
|
||||
"${COMMAND_REQUIRES_SUDO[$key]}" \
|
||||
"${COMMAND_HIDDEN[$key]}" \
|
||||
"${COMMAND_ARGS[$key]}" \
|
||||
"${COMMAND_EXAMPLES[$key]}" \
|
||||
"${COMMAND_ALIASES[$key]}" \
|
||||
@@ -630,12 +624,11 @@ commands_json_filter() {
|
||||
name: .[3],
|
||||
summary: .[4],
|
||||
requires_sudo: (.[5] == "true"),
|
||||
hidden: (.[6] == "true"),
|
||||
args: .[7],
|
||||
examples: (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
|
||||
aliases: (.[9] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
|
||||
filename_route: .[10],
|
||||
routes: ([.[0], .[10]] + (.[9] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))) | unique)
|
||||
args: .[6],
|
||||
examples: (.[7] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
|
||||
aliases: (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))),
|
||||
filename_route: .[9],
|
||||
routes: ([.[0], .[9]] + (.[8] | split("|") | map(gsub("^ +| +$"; "")) | map(select(length > 0))) | unique)
|
||||
}] | {ok: true, commands: .}
|
||||
EOF
|
||||
}
|
||||
@@ -689,14 +682,13 @@ show_command_json() {
|
||||
local key="$1"
|
||||
|
||||
printf '%s\n' "$key" | while IFS= read -r key; do
|
||||
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
|
||||
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
|
||||
"${COMMAND_ROUTE[$key]}" \
|
||||
"${COMMAND_BINARY[$key]}" \
|
||||
"${COMMAND_GROUP[$key]}" \
|
||||
"${COMMAND_NAME[$key]}" \
|
||||
"${COMMAND_SUMMARY[$key]}" \
|
||||
"${COMMAND_REQUIRES_SUDO[$key]}" \
|
||||
"${COMMAND_HIDDEN[$key]}" \
|
||||
"${COMMAND_ARGS[$key]}" \
|
||||
"${COMMAND_EXAMPLES[$key]}" \
|
||||
"${COMMAND_ALIASES[$key]}" \
|
||||
@@ -789,25 +781,6 @@ show_group_help() {
|
||||
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() {
|
||||
local key="$1"
|
||||
local group="${COMMAND_GROUP[$key]}"
|
||||
@@ -1025,10 +998,6 @@ dispatch_or_help() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
if show_prefix_help "omarchy ${args[*]}"; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "Unknown Omarchy command: omarchy ${args[*]}" >&2
|
||||
suggestion=$(suggest_command "${args[0]}")
|
||||
if [[ -n $suggestion ]]; then
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Designed to be run by systemd timer every 30 seconds and alerts if battery is low
|
||||
# omarchy:hidden=true
|
||||
|
||||
BATTERY_THRESHOLD=10
|
||||
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Adjust brightness on the most likely display device.
|
||||
# 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
|
||||
# omarchy:args=<step>
|
||||
|
||||
step="${1:-+5%}"
|
||||
|
||||
if omarchy-hyprland-monitor-focused-apple; then
|
||||
omarchy-brightness-display-apple "$step"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Start with the first possible output, then refine to the most likely given an order heuristic.
|
||||
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
|
||||
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
||||
@@ -15,19 +19,6 @@ for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
||||
fi
|
||||
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=$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 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
|
||||
echo "Adjust Apple Display brightness by passing +5%, 5%-, or 100%"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Adjust keyboard backlight brightness using available steps.
|
||||
# omarchy:args=<up|down|cycle|off|restore>
|
||||
# omarchy:args=<up|down|cycle>
|
||||
|
||||
direction="${1:-up}"
|
||||
|
||||
@@ -19,14 +19,6 @@ if [[ -z $device ]]; then
|
||||
exit 1
|
||||
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.
|
||||
max_brightness="$(brightnessctl -d "$device" max)"
|
||||
current_brightness="$(brightnessctl -d "$device" get)"
|
||||
|
||||
@@ -18,7 +18,7 @@ SELECTION=$(slurp 2>/dev/null)
|
||||
|
||||
[[ -z $SELECTION ]] && exit 0
|
||||
|
||||
TEXT=$(grim -g "$SELECTION" - | tesseract stdin stdout --oem 1 --psm 6 -l "${OMARCHY_OCR_LANGS:-eng}" --dpi 300 -c preserve_interword_spaces=1 2>/dev/null) || exit 1
|
||||
TEXT=$(grim -g "$SELECTION" - | tesseract stdin stdout --oem 1 --psm 6 -l eng --dpi 300 -c preserve_interword_spaces=1 2>/dev/null) || exit 1
|
||||
|
||||
[[ -z $TEXT ]] && exit 1
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Print the current working directory of the active terminal window
|
||||
# omarchy:hidden=true
|
||||
|
||||
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
|
||||
shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Set the default browser for Omarchy and XDG handlers
|
||||
# omarchy:args=[chromium|chrome|brave|brave-origin|edge|firefox|zen]
|
||||
# omarchy:examples=omarchy default browser firefox | omarchy default browser brave
|
||||
|
||||
if (($# == 0)); then
|
||||
case "$(xdg-settings get default-web-browser)" in
|
||||
chromium.desktop) echo "chromium" ;;
|
||||
google-chrome.desktop) echo "chrome" ;;
|
||||
brave-browser.desktop) echo "brave" ;;
|
||||
brave-origin-beta.desktop) echo "brave-origin" ;;
|
||||
microsoft-edge.desktop) echo "edge" ;;
|
||||
firefox.desktop) echo "firefox" ;;
|
||||
zen.desktop) echo "zen" ;;
|
||||
*) xdg-settings get default-web-browser ;;
|
||||
esac
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
chromium) desktop_id="chromium.desktop"; name="Chromium"; glyph="" ;;
|
||||
chrome) desktop_id="google-chrome.desktop"; name="Chrome"; glyph="" ;;
|
||||
brave) desktop_id="brave-browser.desktop"; name="Brave"; glyph="" ;;
|
||||
brave-origin) desktop_id="brave-origin-beta.desktop"; name="Brave Origin"; glyph="" ;;
|
||||
edge) desktop_id="microsoft-edge.desktop"; name="Edge"; glyph="" ;;
|
||||
firefox) desktop_id="firefox.desktop"; name="Firefox"; glyph="" ;;
|
||||
zen) desktop_id="zen.desktop"; name="Zen"; glyph="" ;;
|
||||
*)
|
||||
echo "Usage: omarchy-default-browser <chromium|chrome|brave|brave-origin|edge|firefox|zen>"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
xdg-settings set default-web-browser "$desktop_id"
|
||||
xdg-mime default "$desktop_id" x-scheme-handler/http
|
||||
xdg-mime default "$desktop_id" x-scheme-handler/https
|
||||
xdg-mime default "$desktop_id" text/html
|
||||
|
||||
notify-send -u low "$glyph $name is now the default browser"
|
||||
@@ -1,30 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Set the default editor for $EDITOR
|
||||
# omarchy:args=[code|cursor|zed|sublime_text|helix|vim|emacs|nvim]
|
||||
# omarchy:examples=omarchy default editor | omarchy default editor code | omarchy default editor helix
|
||||
|
||||
if (($# == 0)); then
|
||||
sed -n 's/^export EDITOR=//p' ~/.config/uwsm/default | head -n 1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
code) editor="code"; name="VSCode"; glyph="" ;;
|
||||
cursor) editor="cursor"; name="Cursor"; glyph="" ;;
|
||||
zed) editor="zed"; name="Zed"; glyph="" ;;
|
||||
sublime_text) editor="sublime_text"; name="Sublime Text"; glyph="" ;;
|
||||
helix) editor="helix"; name="Helix"; glyph="" ;;
|
||||
vim) editor="vim"; name="Vim"; glyph="" ;;
|
||||
emacs) editor="emacs"; name="Emacs"; glyph="" ;;
|
||||
nvim) editor="nvim"; name="Neovim"; glyph="" ;;
|
||||
*)
|
||||
echo "Usage: omarchy-default-editor <code|cursor|zed|sublime_text|helix|vim|emacs|nvim>"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
sed -i "s/^export EDITOR=.*/export EDITOR=$editor/" ~/.config/uwsm/default
|
||||
|
||||
export EDITOR="$editor"
|
||||
notify-send -u low "$glyph $name is now the default editor" " Effective after logging out"
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Set the default terminal used by xdg-terminal-exec
|
||||
# omarchy:args=[alacritty|foot|ghostty|kitty]
|
||||
# omarchy:examples=omarchy default terminal ghostty | omarchy default terminal kitty
|
||||
|
||||
if (($# == 0)); then
|
||||
desktop_id=$(grep -vE '^($|#)' ~/.config/xdg-terminals.list 2>/dev/null | head -n 1)
|
||||
case "$desktop_id" in
|
||||
Alacritty.desktop) echo "alacritty" ;;
|
||||
foot.desktop) echo "foot" ;;
|
||||
com.mitchellh.ghostty.desktop) echo "ghostty" ;;
|
||||
kitty.desktop) echo "kitty" ;;
|
||||
*) echo "$desktop_id" ;;
|
||||
esac
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
alacritty) desktop_id="Alacritty.desktop"; name="Alacritty"; glyph="" ;;
|
||||
foot) desktop_id="foot.desktop"; name="Foot"; glyph="" ;;
|
||||
ghostty) desktop_id="com.mitchellh.ghostty.desktop"; name="Ghostty"; glyph="" ;;
|
||||
kitty) desktop_id="kitty.desktop"; name="Kitty"; glyph="" ;;
|
||||
*)
|
||||
echo "Usage: omarchy-default-terminal <alacritty|foot|ghostty|kitty>"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
cat >~/.config/xdg-terminals.list <<EOF
|
||||
# Terminal emulator preference order for xdg-terminal-exec
|
||||
# The first found and valid terminal will be used
|
||||
$desktop_id
|
||||
EOF
|
||||
|
||||
notify-send -u low "$glyph $name is now the default terminal"
|
||||
@@ -22,8 +22,7 @@ show_json() {
|
||||
{name: "args", required: false, type: "string", note: "Only set when the command accepts arguments."},
|
||||
{name: "examples", required: false, type: "string", note: "Pipe-separated examples."},
|
||||
{name: "aliases", required: false, type: "string", note: "Pipe-separated alternate routes, e.g. omarchy screenshot."},
|
||||
{name: "requires-sudo", required: false, type: "true", default: false, note: "Only include when true."},
|
||||
{name: "hidden", required: false, type: "true", default: false, note: "Hide from default command listings; visible with --all."}
|
||||
{name: "requires-sudo", required: false, type: "true", default: false, note: "Only include when true."}
|
||||
]
|
||||
}'
|
||||
}
|
||||
@@ -44,7 +43,6 @@ Inferred defaults:
|
||||
route omarchy <group> <name>
|
||||
binary filename
|
||||
requires-sudo false
|
||||
hidden false
|
||||
|
||||
Optional fields:
|
||||
# omarchy:group=<group> route override only
|
||||
@@ -53,7 +51,6 @@ Optional fields:
|
||||
# omarchy:examples=<cmd> | <cmd> pipe-separated examples
|
||||
# omarchy:aliases=<route> | <route> pipe-separated alternate routes
|
||||
# omarchy:requires-sudo=true only when true
|
||||
# omarchy:hidden=true hide from default command listings
|
||||
|
||||
Do not define:
|
||||
binary inferred from filename
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Select a drive from a list with info that includes space and brand. Used by omarchy-drive-password.
|
||||
# omarchy:summary=Select a drive from a list with info that includes space and brand. Used by omarchy-drive-set-password.
|
||||
|
||||
if (($# == 0)); then
|
||||
drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)')
|
||||
|
||||
@@ -18,7 +18,6 @@ if [[ -f $FIRST_RUN_MODE ]]; then
|
||||
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
||||
bash "$OMARCHY_PATH/install/first-run/gtk-primary-paste.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
|
||||
|
||||
bash "$OMARCHY_PATH/install/first-run/welcome.sh"
|
||||
|
||||
@@ -22,10 +22,6 @@ if [[ -n $font_name ]]; then
|
||||
pkill -SIGUSR2 ghostty
|
||||
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/waybar/style.css
|
||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
|
||||
@@ -41,10 +37,6 @@ if [[ -n $font_name ]]; then
|
||||
notify-send -u low " You must restart Ghostty to see font change"
|
||||
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"
|
||||
else
|
||||
echo "Font '$font_name' not found."
|
||||
|
||||
+2
-11
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Run a named hook from ~/.config/omarchy/hooks/<name> and ~/.config/omarchy/hooks/<name>.d/.
|
||||
# omarchy:summary=Run a named hook, like post-update (available in ~/.config/omarchy/hooks/post-update).
|
||||
# omarchy:args=[name] [args...]
|
||||
|
||||
set -e
|
||||
@@ -12,17 +12,8 @@ fi
|
||||
|
||||
HOOK=$1
|
||||
HOOK_PATH="$HOME/.config/omarchy/hooks/$1"
|
||||
HOOK_DIR="$HOOK_PATH.d"
|
||||
shift
|
||||
|
||||
if [[ -f $HOOK_PATH ]]; then
|
||||
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
|
||||
bash "$HOOK_PATH" "$@"
|
||||
fi
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Install a hook into ~/.config/omarchy/hooks/<type>.d/
|
||||
# omarchy:group=hook
|
||||
# omarchy:name=install
|
||||
# omarchy:args=<type> <file>
|
||||
# omarchy:examples=omarchy hook install post-update ~/my-hook
|
||||
|
||||
set -e
|
||||
|
||||
if (( $# != 2 )); then
|
||||
echo "Usage: omarchy-hook-install <type> <file>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOOK_TYPE=$1
|
||||
HOOK_FILE=$2
|
||||
HOOK_DIR="$HOME/.config/omarchy/hooks/$HOOK_TYPE.d"
|
||||
HOOK_NAME=$(basename "$HOOK_FILE")
|
||||
HOOK_PATH="$HOOK_DIR/$HOOK_NAME"
|
||||
|
||||
if [[ ! -f $HOOK_FILE ]]; then
|
||||
echo "Hook file not found: $HOOK_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$HOOK_DIR"
|
||||
cp "$HOOK_FILE" "$HOOK_PATH"
|
||||
chmod 755 "$HOOK_PATH"
|
||||
|
||||
echo "Installed $HOOK_TYPE hook: $HOOK_PATH"
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Detect ASUS Zenbook UX5406AA series laptops on Intel Panther Lake.
|
||||
|
||||
omarchy-hw-match "ux5406aa" && omarchy-hw-intel-ptl
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
# omarchy:summary=Return success if the focused Hyprland monitor is an Apple display.
|
||||
|
||||
hyprctl monitors -j | jq -e '.[] | select(.focused == true) | select(.make == "Apple Computer Inc" and (.model | test("StudioDisplay|ProDisplayXDR|Studio XDR")))' >/dev/null
|
||||
hyprctl monitors -j | jq -e '.[] | select(.focused == true) | select(.make == "Apple Computer Inc" and (.model | test("StudioDisplay|ProDisplayXDR")))' >/dev/null
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Cycle focused Hyprland monitor scaling through 1x, 1.25x, 1.6x, 2x, and 3x
|
||||
# omarchy:summary=Cycle scaling for the focused Hyprland monitor
|
||||
|
||||
MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)')
|
||||
ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name')
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Install a supported browser
|
||||
# omarchy:args=<chrome|brave|brave-origin|edge|firefox|zen>
|
||||
# omarchy:examples=omarchy install browser firefox | omarchy install browser brave
|
||||
|
||||
setup_policy_directory() {
|
||||
sudo mkdir -p "$1"
|
||||
sudo chmod a+rw "$1"
|
||||
}
|
||||
|
||||
announce_browser_installed() {
|
||||
echo ""
|
||||
echo "$1 browser installed. Make it the default via Setup > Defaults > Browser."
|
||||
}
|
||||
|
||||
copy_chromium_flags() {
|
||||
mkdir -p ~/.config
|
||||
cp -f "${OMARCHY_PATH:-$HOME/.local/share/omarchy}/config/chromium-flags.conf" "$1"
|
||||
}
|
||||
|
||||
setup_firefox_preferences() {
|
||||
local distribution_dir="$1"
|
||||
|
||||
setup_policy_directory "$distribution_dir"
|
||||
sudo cp -f "$OMARCHY_PATH/default/firefox/policies.json" "$distribution_dir/policies.json"
|
||||
}
|
||||
|
||||
setup_firefox_wayland() {
|
||||
mkdir -p ~/.config/environment.d
|
||||
echo "MOZ_ENABLE_WAYLAND=1" > ~/.config/environment.d/omarchy-firefox-wayland.conf
|
||||
}
|
||||
|
||||
case $1 in
|
||||
chrome)
|
||||
echo "Installing Chrome..."
|
||||
omarchy-pkg-aur-add google-chrome || exit 1
|
||||
|
||||
setup_policy_directory /etc/opt/chrome/policies/managed
|
||||
copy_chromium_flags ~/.config/chrome-flags.conf
|
||||
omarchy-theme-set-browser
|
||||
announce_browser_installed "Chrome"
|
||||
;;
|
||||
edge)
|
||||
echo "Installing Edge..."
|
||||
omarchy-pkg-aur-add microsoft-edge-stable-bin || exit 1
|
||||
|
||||
setup_policy_directory /etc/opt/edge/policies/managed
|
||||
copy_chromium_flags ~/.config/microsoft-edge-stable-flags.conf
|
||||
omarchy-theme-set-browser
|
||||
announce_browser_installed "Edge"
|
||||
;;
|
||||
brave)
|
||||
echo "Installing Brave..."
|
||||
omarchy-pkg-aur-add brave-bin || exit 1
|
||||
|
||||
setup_policy_directory /etc/brave/policies/managed
|
||||
copy_chromium_flags ~/.config/brave-flags.conf
|
||||
omarchy-theme-set-browser
|
||||
announce_browser_installed "Brave"
|
||||
;;
|
||||
brave-origin)
|
||||
echo "Installing Brave Origin..."
|
||||
omarchy-pkg-aur-add brave-origin-beta-bin || exit 1
|
||||
|
||||
setup_policy_directory /etc/brave/policies/managed
|
||||
mkdir -p ~/.config
|
||||
# FIXME: Use normal chromium flags when Brave Origin wrapper has been fixed
|
||||
echo "--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url" > ~/.config/brave-origin-beta-flags.conf
|
||||
omarchy-theme-set-browser
|
||||
announce_browser_installed "Brave Origin"
|
||||
;;
|
||||
firefox)
|
||||
echo "Installing Firefox..."
|
||||
omarchy-pkg-add firefox || exit 1
|
||||
|
||||
setup_firefox_preferences /usr/lib/firefox/distribution
|
||||
setup_firefox_wayland
|
||||
announce_browser_installed "Firefox"
|
||||
;;
|
||||
zen)
|
||||
echo "Installing Zen..."
|
||||
omarchy-pkg-aur-add zen-browser-bin || exit 1
|
||||
|
||||
setup_firefox_preferences /opt/zen-browser/distribution
|
||||
setup_firefox_wayland
|
||||
announce_browser_installed "Zen"
|
||||
;;
|
||||
*)
|
||||
echo "Usage: omarchy-install-browser <chrome|brave|brave-origin|edge|firefox|zen>"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -21,7 +21,7 @@ omarchy-pkg-add \
|
||||
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
|
||||
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
|
||||
libretro-yabause \
|
||||
libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
|
||||
libretro-fbneo-git \
|
||||
libretro-database-git \
|
||||
retroarch-joypad-autoconfig-git
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc).
|
||||
# omarchy:args=<alacritty|foot|ghostty|kitty>
|
||||
# omarchy:args=<alacritty|ghostty|kitty>
|
||||
# omarchy:requires-sudo=true
|
||||
|
||||
if (($# == 0)); then
|
||||
echo "Usage: omarchy-install-terminal [alacritty|foot|ghostty|kitty]"
|
||||
echo "Usage: omarchy-install-terminal [alacritty|ghostty|kitty]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -14,7 +14,6 @@ package="$1"
|
||||
# Map package name to desktop entry ID
|
||||
case "$package" in
|
||||
alacritty) desktop_id="Alacritty.desktop" ;;
|
||||
foot) desktop_id="foot.desktop" ;;
|
||||
ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;;
|
||||
kitty) desktop_id="kitty.desktop" ;;
|
||||
*)
|
||||
@@ -27,18 +26,10 @@ echo "Installing $package..."
|
||||
|
||||
# Install package
|
||||
if omarchy-pkg-add $package; then
|
||||
# Copy custom desktop entries with X-TerminalArg* keys
|
||||
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
||||
if [[ $package == "alacritty" ]]; then
|
||||
mkdir -p ~/.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/
|
||||
cp $OMARCHY_PATH/applications/Alacritty.desktop ~/.local/share/applications/
|
||||
fi
|
||||
|
||||
# Update xdg-terminals.list to prioritize the proper terminal
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Install Zed Editor and configure it with the current Omarchy theme
|
||||
|
||||
echo "Installing Zed Editor..."
|
||||
omarchy-pkg-add zed omazed
|
||||
|
||||
# Apply Omarchy theme to Zed
|
||||
omazed setup
|
||||
|
||||
setsid gtk-launch dev.zed.Zed
|
||||
@@ -37,12 +37,6 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
||||
--font-size=18 \
|
||||
-e omarchy-screensaver
|
||||
;;
|
||||
*foot*)
|
||||
hyprctl dispatch exec -- \
|
||||
foot --app-id=org.omarchy.screensaver \
|
||||
--config="$OMARCHY_PATH/default/foot/screensaver.ini" \
|
||||
-e omarchy-screensaver
|
||||
;;
|
||||
*kitty*)
|
||||
hyprctl dispatch exec -- \
|
||||
kitty --class=org.omarchy.screensaver \
|
||||
@@ -51,7 +45,7 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
||||
-e omarchy-screensaver
|
||||
;;
|
||||
*)
|
||||
notify-send -u low "✋ Screensaver only runs in Alacritty, Foot, Ghostty, or Kitty"
|
||||
notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
+25
-149
@@ -93,11 +93,12 @@ show_learn_menu() {
|
||||
}
|
||||
|
||||
show_trigger_menu() {
|
||||
case $(menu "Trigger" " Capture\n Transcode\n Share\n Toggle\n Hardware") in
|
||||
case $(menu "Trigger" " Capture\n Transcode\n Share\n Toggle\n Workspace\n Hardware") in
|
||||
*Capture*) show_capture_menu ;;
|
||||
*Transcode*) show_transcode_menu ;;
|
||||
*Share*) show_share_menu ;;
|
||||
*Toggle*) show_toggle_menu ;;
|
||||
*Workspace*) show_workspace_menu ;;
|
||||
*Hardware*) show_hardware_menu ;;
|
||||
*) show_main_menu ;;
|
||||
esac
|
||||
@@ -175,6 +176,14 @@ show_transcode_menu() {
|
||||
esac
|
||||
}
|
||||
|
||||
show_workspace_menu() {
|
||||
case $(menu "Workspace" " Restore\n Save") in
|
||||
*Restore*) omarchy-workspace-restore ;;
|
||||
*Save*) omarchy-workspace-save ;;
|
||||
*) back_to show_trigger_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_toggle_menu() {
|
||||
local options=" Screensaver\n Nightlight\n Idle Lock\n Notifications\n Top Bar\n Workspace Layout\n Window Gaps\n 1-Window Ratio\n Monitor Scaling\n Direct Boot\n Passwordless Sudo"
|
||||
|
||||
@@ -233,11 +242,11 @@ show_style_menu() {
|
||||
}
|
||||
|
||||
show_screensaver_menu() {
|
||||
case $(menu "Screensaver" " Edit Text\n Set From Image\n Preview\n Restore Default") in
|
||||
*Text*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
|
||||
case $(menu "Screensaver" " Set From Image\n Restore Default\n Edit Text\n Preview") in
|
||||
*Image*) set_screensaver_from_image ;;
|
||||
*Default*) terminal bash -lc 'omarchy-screensaver-set-logo default; echo; read -n 1 -s -r -p "Press any key to close..."' ;;
|
||||
*Text*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
|
||||
*Preview*) omarchy-launch-screensaver force ;;
|
||||
*Default*) terminal bash -lc 'omarchy-screensaver-logo default; echo; read -n 1 -s -r -p "Press any key to close..."' ;;
|
||||
*) show_style_menu ;;
|
||||
esac
|
||||
}
|
||||
@@ -246,7 +255,7 @@ set_screensaver_from_image() {
|
||||
terminal bash -lc '
|
||||
image=$(fd --type file --ignore-case --extension svg --extension png . "$HOME" 2>/dev/null | fzf --prompt "Logo image> ")
|
||||
if [[ -n $image ]]; then
|
||||
if omarchy-screensaver-logo "$image"; then
|
||||
if omarchy-screensaver-set-logo "$image"; then
|
||||
echo
|
||||
echo "Preview with: omarchy-launch-screensaver force"
|
||||
fi
|
||||
@@ -277,7 +286,7 @@ show_setup_menu() {
|
||||
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/input.conf ]] && options="$options\n Input"
|
||||
options="$options\n Defaults\n DNS\n Security\n Config"
|
||||
options="$options\n DNS\n Security\n Config"
|
||||
|
||||
case $(menu "Setup" "$options") in
|
||||
*Audio*) omarchy-launch-audio ;;
|
||||
@@ -288,7 +297,6 @@ show_setup_menu() {
|
||||
*Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;;
|
||||
*Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;;
|
||||
*Input*) open_in_editor ~/.config/hypr/input.conf ;;
|
||||
*Defaults*) show_setup_default_menu ;;
|
||||
*DNS*) present_terminal omarchy-setup-dns ;;
|
||||
*Security*) show_setup_security_menu ;;
|
||||
*Config*) show_setup_config_menu ;;
|
||||
@@ -314,114 +322,9 @@ show_setup_security_menu() {
|
||||
esac
|
||||
}
|
||||
|
||||
show_setup_default_menu() {
|
||||
case $(menu "Default" " Browser\n Terminal\n Editor") in
|
||||
*Browser*) show_setup_default_browser_menu ;;
|
||||
*Terminal*) show_setup_default_terminal_menu ;;
|
||||
*Editor*) show_setup_default_editor_menu ;;
|
||||
*) show_setup_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
browser_desktop_exists() {
|
||||
[[ -f ~/.local/share/applications/$1 || -f ~/.nix-profile/share/applications/$1 || -f /usr/share/applications/$1 ]]
|
||||
}
|
||||
|
||||
show_setup_default_browser_menu() {
|
||||
local options=""
|
||||
browser_desktop_exists chromium.desktop && options="$options Chromium"
|
||||
browser_desktop_exists google-chrome.desktop && options="${options:+$options\n} Chrome"
|
||||
browser_desktop_exists brave-browser.desktop && options="${options:+$options\n} Brave"
|
||||
browser_desktop_exists brave-origin-beta.desktop && options="${options:+$options\n} Brave Origin"
|
||||
browser_desktop_exists microsoft-edge.desktop && options="${options:+$options\n} Edge"
|
||||
browser_desktop_exists firefox.desktop && options="${options:+$options\n} Firefox"
|
||||
browser_desktop_exists zen.desktop && options="${options:+$options\n} Zen"
|
||||
|
||||
local current=""
|
||||
case "$(omarchy-default-browser)" in
|
||||
chromium) current=" Chromium" ;;
|
||||
chrome) current=" Chrome" ;;
|
||||
brave) current=" Brave" ;;
|
||||
brave-origin) current=" Brave Origin" ;;
|
||||
edge) current=" Edge" ;;
|
||||
firefox) current=" Firefox" ;;
|
||||
zen) current=" Zen" ;;
|
||||
esac
|
||||
|
||||
case $(menu "Default Browser" "$options" "" "$current") in
|
||||
*Chromium*) omarchy-default-browser chromium ;;
|
||||
*Chrome*) omarchy-default-browser chrome ;;
|
||||
*"Brave Origin"*) omarchy-default-browser brave-origin ;;
|
||||
*Brave*) omarchy-default-browser brave ;;
|
||||
*Edge*) omarchy-default-browser edge ;;
|
||||
*Firefox*) omarchy-default-browser firefox ;;
|
||||
*Zen*) omarchy-default-browser zen ;;
|
||||
*) show_setup_default_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_setup_default_terminal_menu() {
|
||||
local options=""
|
||||
omarchy-cmd-present alacritty && options="$options Alacritty"
|
||||
omarchy-cmd-present foot && options="${options:+$options\n} Foot"
|
||||
omarchy-cmd-present ghostty && options="${options:+$options\n} Ghostty"
|
||||
omarchy-cmd-present kitty && options="${options:+$options\n} Kitty"
|
||||
|
||||
local current=""
|
||||
case "$(omarchy-default-terminal)" in
|
||||
alacritty) current=" Alacritty" ;;
|
||||
foot) current=" Foot" ;;
|
||||
ghostty) current=" Ghostty" ;;
|
||||
kitty) current=" Kitty" ;;
|
||||
esac
|
||||
|
||||
case $(menu "Default Terminal" "$options" "" "$current") in
|
||||
*Alacritty*) omarchy-default-terminal alacritty ;;
|
||||
*Foot*) omarchy-default-terminal foot ;;
|
||||
*Ghostty*) omarchy-default-terminal ghostty ;;
|
||||
*Kitty*) omarchy-default-terminal kitty ;;
|
||||
*) show_setup_default_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_setup_default_editor_menu() {
|
||||
local options=""
|
||||
omarchy-cmd-present nvim && options="$options Neovim"
|
||||
omarchy-cmd-present code && options="${options:+$options\n} VSCode"
|
||||
omarchy-cmd-present cursor && options="${options:+$options\n} Cursor"
|
||||
omarchy-cmd-present zed && options="${options:+$options\n} Zed"
|
||||
omarchy-cmd-present sublime_text && options="${options:+$options\n} Sublime Text"
|
||||
omarchy-cmd-present helix && options="${options:+$options\n} Helix"
|
||||
omarchy-cmd-present vim && options="${options:+$options\n} Vim"
|
||||
omarchy-cmd-present emacs && options="${options:+$options\n} Emacs"
|
||||
|
||||
local current=""
|
||||
case "$(omarchy-default-editor)" in
|
||||
nvim) current=" Neovim" ;;
|
||||
code) current=" VSCode" ;;
|
||||
cursor) current=" Cursor" ;;
|
||||
zed) current=" Zed" ;;
|
||||
sublime_text) current=" Sublime Text" ;;
|
||||
helix) current=" Helix" ;;
|
||||
vim) current=" Vim" ;;
|
||||
emacs) current=" Emacs" ;;
|
||||
esac
|
||||
|
||||
case $(menu "Default Editor" "$options" "" "$current") in
|
||||
*Neovim*) omarchy-default-editor nvim ;;
|
||||
*VSCode*) omarchy-default-editor code ;;
|
||||
*Cursor*) omarchy-default-editor cursor ;;
|
||||
*Zed*) omarchy-default-editor zed ;;
|
||||
*Sublime*) omarchy-default-editor sublime_text ;;
|
||||
*Helix*) omarchy-default-editor helix ;;
|
||||
*Vim*) omarchy-default-editor vim ;;
|
||||
*Emacs*) omarchy-default-editor emacs ;;
|
||||
*) show_setup_default_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_setup_config_menu() {
|
||||
case $(menu "Setup" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n Walker\n Waybar\n XCompose") in
|
||||
case $(menu "Setup" " Defaults\n Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n Walker\n Waybar\n XCompose") in
|
||||
*Defaults*) open_in_editor ~/.config/uwsm/default ;;
|
||||
*Hyprland*) open_in_editor ~/.config/hypr/hyprland.conf ;;
|
||||
*Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && omarchy-restart-hypridle ;;
|
||||
*Hyprlock*) open_in_editor ~/.config/hypr/hyprlock.conf ;;
|
||||
@@ -458,7 +361,7 @@ show_setup_system_menu() {
|
||||
}
|
||||
|
||||
show_install_menu() {
|
||||
case $(menu "Install" " Package\n AUR\n Web App\n TUI\n Service\n Style\n Development\n Editor\n Terminal\n Browser\n AI\n Gaming\n Windows") in
|
||||
case $(menu "Install" " Package\n AUR\n Web App\n TUI\n Service\n Style\n Development\n Editor\n Terminal\n AI\n Windows\n Gaming") in
|
||||
*Package*) terminal omarchy-pkg-install ;;
|
||||
*AUR*) terminal omarchy-pkg-aur-install ;;
|
||||
*Web*) present_terminal omarchy-webapp-install ;;
|
||||
@@ -468,26 +371,13 @@ show_install_menu() {
|
||||
*Development*) show_install_development_menu ;;
|
||||
*Editor*) show_install_editor_menu ;;
|
||||
*Terminal*) show_install_terminal_menu ;;
|
||||
*Browser*) show_install_browser_menu ;;
|
||||
*Gaming*) show_install_gaming_menu ;;
|
||||
*AI*) show_install_ai_menu ;;
|
||||
*Windows*) present_terminal "omarchy-windows-vm install" ;;
|
||||
*Gaming*) show_install_gaming_menu ;;
|
||||
*) show_main_menu ;;
|
||||
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() {
|
||||
case $(menu "Install" " Dropbox\n Tailscale\n NordVPN [AUR]\n ONCE\n Bitwarden\n Chromium Account") in
|
||||
*Dropbox*) present_terminal omarchy-install-dropbox ;;
|
||||
@@ -501,22 +391,20 @@ show_install_service_menu() {
|
||||
}
|
||||
|
||||
show_install_editor_menu() {
|
||||
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Vim\n Emacs") in
|
||||
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
|
||||
*VSCode*) present_terminal omarchy-install-vscode ;;
|
||||
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
||||
*Zed*) present_terminal omarchy-install-zed ;;
|
||||
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
|
||||
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
||||
*Helix*) present_terminal omarchy-install-helix ;;
|
||||
*Vim*) install "Vim" "vim" ;;
|
||||
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
||||
*) show_install_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_install_terminal_menu() {
|
||||
case $(menu "Install" " Alacritty\n Foot\n Ghostty\n Kitty") in
|
||||
case $(menu "Install" " Alacritty\n Ghostty\n Kitty") in
|
||||
*Alacritty*) install_terminal "alacritty" ;;
|
||||
*Foot*) install_terminal "foot" ;;
|
||||
*Ghostty*) install_terminal "ghostty" ;;
|
||||
*Kitty*) install_terminal "kitty" ;;
|
||||
*) show_install_menu ;;
|
||||
@@ -622,9 +510,8 @@ show_install_elixir_menu() {
|
||||
}
|
||||
|
||||
show_remove_menu() {
|
||||
case $(menu "Remove" " Package\n Browser\n Web App\n TUI\n Development\n Gaming\n Preinstalls\n Dictation\n Theme\n Windows\n Fingerprint\n Fido2") in
|
||||
case $(menu "Remove" " Package\n Web App\n TUI\n Development\n Gaming\n Preinstalls\n Dictation\n Theme\n Windows\n Fingerprint\n Fido2") in
|
||||
*Package*) terminal omarchy-pkg-remove ;;
|
||||
*Browser*) show_remove_browser_menu ;;
|
||||
*Web*) present_terminal omarchy-webapp-remove ;;
|
||||
*TUI*) present_terminal omarchy-tui-remove ;;
|
||||
*Development*) show_remove_development_menu ;;
|
||||
@@ -639,18 +526,6 @@ 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() {
|
||||
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 ;;
|
||||
@@ -775,7 +650,7 @@ show_update_hardware_menu() {
|
||||
|
||||
show_update_password_menu() {
|
||||
case $(menu "Update Password" " Drive Encryption\n User") in
|
||||
*Drive*) present_terminal omarchy-drive-password ;;
|
||||
*Drive*) present_terminal omarchy-drive-set-password ;;
|
||||
*User*) present_terminal passwd ;;
|
||||
*) show_update_menu ;;
|
||||
esac
|
||||
@@ -814,6 +689,7 @@ go_to_menu() {
|
||||
*trigger*) show_trigger_menu ;;
|
||||
*toggle*) show_toggle_menu ;;
|
||||
*hardware*) show_hardware_menu ;;
|
||||
*workspace*) show_workspace_menu ;;
|
||||
*share*) show_share_menu ;;
|
||||
*transcode*) show_transcode_menu ;;
|
||||
*background*) show_background_menu ;;
|
||||
|
||||
+3
-1
@@ -1,8 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Install Arch packages if they are missing
|
||||
# omarchy:group=install
|
||||
# omarchy:name=package
|
||||
# omarchy:args=<packages...>
|
||||
# omarchy:examples=omarchy pkg add jq ripgrep
|
||||
# omarchy:examples=omarchy install package jq ripgrep
|
||||
# omarchy:requires-sudo=true
|
||||
|
||||
if omarchy-pkg-missing "$@"; then
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
# 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: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
|
||||
# theme assets (recolored with the given text color) onto the background.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
# omarchy:summary=Set the Plymouth boot theme colors and logo
|
||||
# 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
|
||||
|
||||
# Configure the Plymouth boot theme with a custom background color, text color, and logo.
|
||||
@@ -68,16 +67,10 @@ sddm_dir="/usr/share/sddm/themes/omarchy"
|
||||
sddm_template="$HOME/.local/share/omarchy/default/sddm/omarchy/Main.qml"
|
||||
|
||||
sed \
|
||||
-e "s/#1a1b26/#$bg_hex/g" \
|
||||
-e "s/#000000/#$bg_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
|
||||
|
||||
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"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Ensure all default .desktop, web apps, TUIs, and npx wrappers are installed.
|
||||
# omarchy:summary=Ensure all default .desktop, web apps, and TUIs are installed.
|
||||
|
||||
mkdir -p ~/.local/share/icons/hicolor/48x48/apps/
|
||||
cp ~/.local/share/omarchy/applications/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/
|
||||
@@ -11,14 +11,9 @@ mkdir -p ~/.local/share/applications
|
||||
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
|
||||
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
|
||||
|
||||
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
|
||||
# Refresh the webapps and TUIs
|
||||
bash $OMARCHY_PATH/install/packaging/icons.sh
|
||||
bash $OMARCHY_PATH/install/packaging/webapps.sh
|
||||
bash $OMARCHY_PATH/install/packaging/tuis.sh
|
||||
bash $OMARCHY_PATH/install/packaging/npx.sh
|
||||
|
||||
update-desktop-database ~/.local/share/applications
|
||||
|
||||
@@ -5,4 +5,5 @@
|
||||
|
||||
omarchy-refresh-config waybar/config.jsonc
|
||||
omarchy-refresh-config waybar/style.css
|
||||
echo "top" >"$HOME/.config/waybar/.style"
|
||||
omarchy-restart-waybar
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Remove a supported browser and clean up Omarchy browser defaults
|
||||
# omarchy:args=<chrome|brave|brave-origin|edge|firefox|zen>
|
||||
# omarchy:examples=omarchy remove browser firefox | omarchy remove browser brave
|
||||
# omarchy:requires-sudo=true
|
||||
|
||||
set_fallback_default_browser() {
|
||||
local current_browser
|
||||
current_browser=$(xdg-settings get default-web-browser)
|
||||
|
||||
if [[ $current_browser != "$1" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if omarchy-cmd-present chromium; then
|
||||
xdg-settings set default-web-browser chromium.desktop
|
||||
xdg-mime default chromium.desktop x-scheme-handler/http
|
||||
xdg-mime default chromium.desktop x-scheme-handler/https
|
||||
xdg-mime default chromium.desktop text/html
|
||||
fi
|
||||
}
|
||||
|
||||
case $1 in
|
||||
chrome)
|
||||
echo "Removing Chrome..."
|
||||
set_fallback_default_browser google-chrome.desktop
|
||||
omarchy-pkg-drop google-chrome
|
||||
rm -f ~/.config/chrome-flags.conf
|
||||
sudo rm -f /etc/opt/chrome/policies/managed/color.json
|
||||
;;
|
||||
edge)
|
||||
echo "Removing Edge..."
|
||||
set_fallback_default_browser microsoft-edge.desktop
|
||||
omarchy-pkg-drop microsoft-edge-stable-bin
|
||||
rm -f ~/.config/microsoft-edge-stable-flags.conf
|
||||
sudo rm -f /etc/opt/edge/policies/managed/color.json
|
||||
;;
|
||||
brave)
|
||||
echo "Removing Brave..."
|
||||
set_fallback_default_browser brave-browser.desktop
|
||||
omarchy-pkg-drop brave-bin
|
||||
rm -f ~/.config/brave-flags.conf
|
||||
|
||||
if omarchy-pkg-missing brave-origin-beta-bin; then
|
||||
sudo rm -rf /etc/brave
|
||||
fi
|
||||
;;
|
||||
brave-origin)
|
||||
echo "Removing Brave Origin..."
|
||||
set_fallback_default_browser brave-origin-beta.desktop
|
||||
omarchy-pkg-drop brave-origin-beta-bin
|
||||
rm -f ~/.config/brave-origin-beta-flags.conf
|
||||
|
||||
if omarchy-pkg-missing brave-bin; then
|
||||
sudo rm -rf /etc/brave
|
||||
fi
|
||||
;;
|
||||
firefox)
|
||||
echo "Removing Firefox..."
|
||||
set_fallback_default_browser firefox.desktop
|
||||
omarchy-pkg-drop firefox
|
||||
;;
|
||||
zen)
|
||||
echo "Removing Zen..."
|
||||
set_fallback_default_browser zen.desktop
|
||||
omarchy-pkg-drop zen-browser-bin
|
||||
;;
|
||||
*)
|
||||
echo "Usage: omarchy-remove-browser <chrome|brave|brave-origin|edge|firefox|zen>"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -21,7 +21,7 @@ omarchy-pkg-drop \
|
||||
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
|
||||
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
|
||||
libretro-yabause \
|
||||
libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
|
||||
libretro-fbneo-git \
|
||||
retroarch-joypad-autoconfig-git
|
||||
|
||||
rm -rf \
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
# omarchy:summary=Set the screensaver logo text from an SVG/PNG or the default
|
||||
# omarchy:args=<default|path-to-logo.svg|png> [--width <columns>] [--height <rows>] [--mode <braille|block>] [--threshold <percent>] [--invert] [--stdout]
|
||||
# omarchy:examples=omarchy screensaver logo ~/logo.svg | omarchy screensaver logo default | omarchy screensaver logo ~/logo.png --width 80 --mode block --stdout
|
||||
# omarchy:examples=omarchy screensaver set logo ~/logo.svg | omarchy screensaver set logo default | omarchy screensaver set logo ~/logo.png --width 80 --mode block --stdout
|
||||
|
||||
set -o pipefail
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage: omarchy-screensaver-logo <default|path-to-logo.svg|png> [options]
|
||||
Usage: omarchy-screensaver-set-logo <default|path-to-logo.svg|png> [options]
|
||||
|
||||
Sets the screensaver logo text from an image.
|
||||
Pass "default" instead of an image path to restore the Omarchy default.
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
# omarchy:summary=Manage persistent state files for Omarchy toggles and settings.
|
||||
# omarchy:args=<set|clear> <state-name-or-pattern>
|
||||
# omarchy:hidden=true
|
||||
|
||||
STATE_DIR="$HOME/.local/state/omarchy"
|
||||
mkdir -p "$STATE_DIR"
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Display brightness level using SwayOSD on the current monitor.
|
||||
# omarchy:args=<0-100>
|
||||
# omarchy:examples=omarchy swayosd brightness 0 | omarchy swayosd brightness 50 | omarchy swayosd brightness 100
|
||||
# omarchy:args=<percent>
|
||||
|
||||
percent="$1"
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Display keyboard brightness level using SwayOSD on the current monitor.
|
||||
# omarchy:args=<0-100>
|
||||
# omarchy:examples=omarchy swayosd kbd brightness 0 | omarchy swayosd kbd brightness 50 | omarchy swayosd kbd brightness 100
|
||||
# omarchy:args=<percent>
|
||||
|
||||
percent="$1"
|
||||
|
||||
|
||||
+2
-16
@@ -1,16 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Lock the computer and turn off the display
|
||||
# omarchy:summary=Lock the screen
|
||||
# omarchy:group=system
|
||||
# omarchy:name=lock
|
||||
# omarchy:examples=omarchy system lock
|
||||
|
||||
if ! pidof hyprlock >/dev/null; then
|
||||
(
|
||||
hyprlock
|
||||
omarchy-system-wake
|
||||
) &
|
||||
fi
|
||||
pidof hyprlock || hyprlock &
|
||||
|
||||
# Set keyboard layout to default (first layout)
|
||||
hyprctl switchxkblayout all 0 > /dev/null 2>&1
|
||||
@@ -22,12 +17,3 @@ fi
|
||||
|
||||
# Avoid running screensaver when locked
|
||||
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
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Wake displays and restore brightness after idle
|
||||
# omarchy:group=system
|
||||
# omarchy:name=wake
|
||||
# omarchy:examples=omarchy system wake
|
||||
|
||||
omarchy-brightness-display on
|
||||
omarchy-brightness-keyboard restore
|
||||
@@ -9,14 +9,9 @@ if [[ -z $1 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BACKGROUND="$(realpath "$1")"
|
||||
BACKGROUND="$1"
|
||||
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
|
||||
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
# omarchy:summary=Generate a theme's colors.toml from its alacritty.toml palette
|
||||
# omarchy:args=<theme-dir>
|
||||
# omarchy:hidden=true
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
@@ -62,7 +62,6 @@ omarchy-restart-mako
|
||||
omarchy-restart-helix
|
||||
|
||||
# Change app-specific themes
|
||||
omarchy-theme-set-foot
|
||||
omarchy-theme-set-gnome
|
||||
omarchy-theme-set-browser
|
||||
omarchy-theme-set-vscode
|
||||
@@ -70,4 +69,4 @@ omarchy-theme-set-obsidian
|
||||
omarchy-theme-set-keyboard
|
||||
|
||||
# Call hook on theme set
|
||||
omarchy-hook theme-set "$THEME_NAME" >/dev/null
|
||||
omarchy-hook theme-set "$THEME_NAME"
|
||||
|
||||
@@ -1,44 +1,30 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme color to Chromium, Chrome, Edge, and Brave
|
||||
# omarchy:hidden=true
|
||||
# omarchy:summary=Apply the current theme color to Chromium and Brave
|
||||
|
||||
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
|
||||
|
||||
if [[ -f $CHROMIUM_THEME ]]; then
|
||||
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
||||
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
|
||||
else
|
||||
# Use a default, neutral grey if theme doesn't have a color
|
||||
THEME_HEX_COLOR="#1c2027"
|
||||
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
|
||||
if omarchy-cmd-present chromium || omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then
|
||||
if [[ -f $CHROMIUM_THEME ]]; then
|
||||
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
||||
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
|
||||
else
|
||||
# Use a default, neutral grey if theme doesn't have a color
|
||||
THEME_RGB_COLOR="28,32,39"
|
||||
THEME_HEX_COLOR="#1c2027"
|
||||
fi
|
||||
}
|
||||
|
||||
set_browser_policy /etc/chromium/policies/managed
|
||||
refresh_running_browser chromium chromium
|
||||
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
|
||||
|
||||
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
|
||||
# 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
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply current Omarchy theme colors to running Foot terminals
|
||||
# omarchy:hidden=true
|
||||
|
||||
foot_theme=~/.config/omarchy/current/theme/foot.ini
|
||||
|
||||
if [[ ! -f $foot_theme ]] || ! pgrep -x foot >/dev/null; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
foot_osc=$(awk -F= '
|
||||
function color(value) { return "#" value }
|
||||
/^foreground=/ { printf "\033]10;%s\007", color($2) }
|
||||
/^background=/ { printf "\033]11;%s\007", color($2) }
|
||||
/^cursor=/ { split($2, parts, " "); printf "\033]12;%s\007", color(parts[2]) }
|
||||
/^selection-background=/ { printf "\033]17;%s\007", color($2) }
|
||||
/^selection-foreground=/ { printf "\033]19;%s\007", color($2) }
|
||||
/^regular[0-7]=/ { split($1, parts, "regular"); printf "\033]4;%d;%s\007", parts[2], color($2) }
|
||||
/^bright[0-7]=/ { split($1, parts, "bright"); printf "\033]4;%d;%s\007", parts[2] + 8, color($2) }
|
||||
' "$foot_theme")
|
||||
|
||||
for foot_pid in $(pgrep -x foot); do
|
||||
for child_pid in $(pgrep -P "$foot_pid"); do
|
||||
tty=$(readlink "/proc/$child_pid/fd/1" 2>/dev/null)
|
||||
[[ $tty == /dev/pts/* ]] && printf '%b' "$foot_osc" >"$tty"
|
||||
done
|
||||
done
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 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
|
||||
gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme keyboard color to supported keyboards
|
||||
# omarchy:hidden=true
|
||||
|
||||
omarchy-theme-set-keyboard-asus-rog
|
||||
omarchy-theme-set-keyboard-f16
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme keyboard color to ASUS ROG keyboards
|
||||
# omarchy:hidden=true
|
||||
|
||||
ASUSCTL_THEME=~/.config/omarchy/current/theme/keyboard.rgb
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme keyboard color to Framework Laptop 16 keyboards
|
||||
# omarchy:hidden=true
|
||||
|
||||
FRAMEWORK16_THEME=~/.config/omarchy/current/theme/keyboard.rgb
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Sync Omarchy theme to all Obsidian vaults
|
||||
# omarchy:hidden=true
|
||||
|
||||
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Generate themed config files from Omarchy templates
|
||||
# omarchy:hidden=true
|
||||
|
||||
TEMPLATES_DIR="$OMARCHY_PATH/default/themed"
|
||||
USER_TEMPLATES_DIR="$HOME/.config/omarchy/themed"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Sync Omarchy theme to VS Code, VSCodium, and Cursor
|
||||
# omarchy:hidden=true
|
||||
|
||||
VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=No-op now that omarchy-update-perform is responsible for idle management.
|
||||
# omarchy:hidden=true
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
# omarchy:summary=Upload logs to 0x0.st
|
||||
# omarchy:args=<log-file>
|
||||
# omarchy:hidden=true
|
||||
|
||||
LOG_TYPE="${1:-install}"
|
||||
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
|
||||
|
||||
omarchy-restart-waybar
|
||||
notify-send " Voxtype Dictation Ready" "Hold F9 to dictate (or toggle with Super + Ctrl + X)." -t 10000
|
||||
notify-send " Voxtype Dictation Ready" "Press Super + Ctrl + X to toggle dictation.\nEdit ~/.config/voxtype/config.toml for options." -t 10000
|
||||
fi
|
||||
|
||||
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Set Waybar style
|
||||
# omarchy:args=<top|pill|float|toggle|list>
|
||||
# omarchy:examples=omarchy waybar set pill | omarchy waybar set float | omarchy waybar set toggle
|
||||
|
||||
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
||||
STYLE_DIR="$OMARCHY_PATH/config/waybar/styles"
|
||||
CONFIG_DIR="$OMARCHY_PATH/config/waybar/configs"
|
||||
CURRENT_STYLE_FILE="$HOME/.config/waybar/.style"
|
||||
STYLE=${1:-toggle}
|
||||
|
||||
list_styles() {
|
||||
for style in "$STYLE_DIR"/*.css; do
|
||||
[[ -e $style ]] || continue
|
||||
basename "$style" .css
|
||||
done
|
||||
}
|
||||
|
||||
current_style() {
|
||||
if [[ -f $CURRENT_STYLE_FILE ]]; then
|
||||
read -r current <"$CURRENT_STYLE_FILE"
|
||||
[[ -n $current ]] && printf '%s\n' "$current" && return
|
||||
fi
|
||||
|
||||
echo "top"
|
||||
}
|
||||
|
||||
if [[ $STYLE == "list" ]]; then
|
||||
list_styles
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ $STYLE == "default" ]]; then
|
||||
STYLE="top"
|
||||
fi
|
||||
|
||||
if [[ $STYLE == "toggle" ]]; then
|
||||
if [[ $(current_style) == "pill" ]]; then
|
||||
STYLE="top"
|
||||
else
|
||||
STYLE="pill"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ ! -f $STYLE_DIR/$STYLE.css || ! -f $CONFIG_DIR/$STYLE.jsonc ]]; then
|
||||
echo "Unknown Waybar style '$STYLE'"
|
||||
echo "Available styles:"
|
||||
list_styles
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$HOME/.config/waybar"
|
||||
cp "$CONFIG_DIR/$STYLE.jsonc" "$HOME/.config/waybar/config.jsonc"
|
||||
cp "$STYLE_DIR/$STYLE.css" "$HOME/.config/waybar/style.css"
|
||||
echo "$STYLE" >"$CURRENT_STYLE_FILE"
|
||||
|
||||
omarchy-restart-waybar
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Returns a weather condition icon, adjusted for live sunrise and sunset.
|
||||
|
||||
weather_data=$(curl -fsS --max-time 3 "https://wttr.in?format=j1" 2>/dev/null | jq -er '[.current_condition[0].weatherCode, .weather[0].astronomy[0].sunrise, .weather[0].astronomy[0].sunset] | select(all(. != null and . != "")) | @tsv' 2>/dev/null) || exit 1
|
||||
|
||||
IFS=$'\t' read -r weather_code sunrise sunset <<< "$weather_data"
|
||||
if [[ ! $weather_code =~ ^[0-9]+$ || ! $sunrise =~ ^[0-9]{1,2}:[0-9]{2}\ [AP]M$ || ! $sunset =~ ^[0-9]{1,2}:[0-9]{2}\ [AP]M$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
now_epoch=$(date +%s)
|
||||
sunrise_epoch=$(date -d "today $sunrise" +%s 2>/dev/null || echo 0)
|
||||
sunset_epoch=$(date -d "today $sunset" +%s 2>/dev/null || echo 0)
|
||||
|
||||
if (( sunrise_epoch > 0 && sunset_epoch > 0 && (now_epoch < sunrise_epoch || now_epoch >= sunset_epoch) )); then
|
||||
night=true
|
||||
else
|
||||
night=false
|
||||
fi
|
||||
|
||||
case $weather_code in
|
||||
113) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||
116) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||
119|122) icon="" ;;
|
||||
143|248|260) icon="" ;;
|
||||
176|263|266|293|296|353) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||
179|227|230|323|326|368) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||
182|185|281|284|311|314|317|320|350|362|365|374|377) icon="" ;;
|
||||
200|386|389|392|395) icon="" ;;
|
||||
299|302|305|308|356|359) icon="" ;;
|
||||
329|332|335|338|371) icon="" ;;
|
||||
*) icon="" ;;
|
||||
esac
|
||||
|
||||
printf '%s\n' "$icon"
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Returns a formatted weather status string with temperature and wind speed.
|
||||
|
||||
weather=$(curl -fsS --max-time 4 "https://wttr.in?format=%l|%t|%w" 2>/dev/null | tr -d '\n')
|
||||
|
||||
if [[ -z $weather ]]; then
|
||||
echo "Weather unavailable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IFS='|' read -r place temperature wind <<< "$weather"
|
||||
place=${place%%,*}
|
||||
place=${place^}
|
||||
format_temperature() {
|
||||
local celsius=${1#+}
|
||||
celsius=${celsius//°/}
|
||||
celsius=${celsius%C}
|
||||
|
||||
echo "${celsius}°c / $((celsius * 9 / 5 + 32))°f"
|
||||
}
|
||||
|
||||
temperature=$(format_temperature "$temperature")
|
||||
wind=${wind//km\// km/}
|
||||
|
||||
echo "$(omarchy-weather-icon) $place · Temperature $temperature · Wind $wind"
|
||||
Executable
+395
@@ -0,0 +1,395 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Restore the saved layout for the current Hyprland workspace
|
||||
# omarchy:args=
|
||||
# omarchy:examples=omarchy workspace restore
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
monitor=$(omarchy-hyprland-monitor-focused)
|
||||
workspace=$(hyprctl monitors -j | jq -r --arg monitor "$monitor" '.[] | select(.name == $monitor) | .activeWorkspace.id')
|
||||
file="$HOME/.config/hypr/workspaces/$monitor-$workspace.tsv"
|
||||
|
||||
if [[ ! -f $file ]]; then
|
||||
notify-send -u low " No saved workspace $workspace for $monitor" "$file" -t 3000
|
||||
exit 1
|
||||
fi
|
||||
|
||||
restore_data=$(grep -v '^#' "$file" || true)
|
||||
|
||||
if [[ -z $restore_data ]]; then
|
||||
notify-send -u low " No windows saved for workspace $workspace" "$file" -t 3000
|
||||
exit 1
|
||||
fi
|
||||
|
||||
restore_map=$(mktemp)
|
||||
assigned_addresses=$(mktemp)
|
||||
trap 'rm -f "$restore_map" "$assigned_addresses"' EXIT
|
||||
|
||||
declare -a classes commands xs ys ws hs focuseds addresses launched
|
||||
count=0
|
||||
|
||||
while IFS=$'\t' read -r _ saved_workspace mode class command x y w h focused; do
|
||||
[[ -n $class ]] || continue
|
||||
|
||||
workspace=$saved_workspace
|
||||
classes[count]=$class
|
||||
commands[count]=$command
|
||||
xs[count]=$x
|
||||
ys[count]=$y
|
||||
ws[count]=$w
|
||||
hs[count]=$h
|
||||
focuseds[count]=${focused:-false}
|
||||
addresses[count]=""
|
||||
launched[count]=false
|
||||
(( count += 1 ))
|
||||
done <<< "$restore_data"
|
||||
|
||||
hyprctl dispatch workspace "$workspace" >/dev/null
|
||||
|
||||
for (( i = 0; i < count; i++ )); do
|
||||
class=${classes[i]}
|
||||
hyprctl keyword windowrulev2 "workspace $workspace silent,class:^($class)$" >/dev/null
|
||||
|
||||
if [[ ${mode:-tiled} == "floating" ]]; then
|
||||
hyprctl keyword windowrulev2 "float,class:^($class)$" >/dev/null
|
||||
else
|
||||
hyprctl keyword windowrulev2 "tile,class:^($class)$" >/dev/null
|
||||
fi
|
||||
done
|
||||
|
||||
existing_unassigned_json() {
|
||||
local class=$1
|
||||
|
||||
{
|
||||
hyprctl clients -j | jq -r --arg class "$class" '.[] | select(.class == $class or .initialClass == $class) | .address' |
|
||||
grep -Fvx -f "$assigned_addresses" || true
|
||||
} | jq -R -s -c 'split("\n")[:-1]'
|
||||
}
|
||||
|
||||
wait_for_address() {
|
||||
local class=$1
|
||||
local existing=${2:-[]}
|
||||
local tries=0
|
||||
local address=""
|
||||
|
||||
while [[ -z $address ]]; do
|
||||
address=$(hyprctl clients -j | jq -r --arg class "$class" --argjson existing "$existing" \
|
||||
'.[] | select((.class == $class or .initialClass == $class) and (.address as $address | $existing | index($address) | not)) | .address' | head -n1)
|
||||
|
||||
if [[ -n $address ]]; then
|
||||
printf '%s\n' "$address"
|
||||
return 0
|
||||
fi
|
||||
|
||||
sleep 0.2
|
||||
(( tries += 1 ))
|
||||
|
||||
# Single-instance apps may focus/reuse an existing window instead of creating a new one.
|
||||
if (( tries >= 25 )) && [[ $existing != "[]" ]]; then
|
||||
jq -r '.[0]' <<< "$existing"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if (( tries >= 75 )); then
|
||||
echo "Timed out waiting for $class" >&2
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
ensure_window() {
|
||||
local id=$1
|
||||
local class=${classes[id]}
|
||||
local command=${commands[id]}
|
||||
local existing address
|
||||
|
||||
if [[ ${launched[id]} == "true" ]]; then
|
||||
last_address=${addresses[id]}
|
||||
return 0
|
||||
fi
|
||||
|
||||
existing=$(existing_unassigned_json "$class")
|
||||
|
||||
if [[ $existing != "[]" && ( $class == chrome-* || $class == chromium* ) ]]; then
|
||||
address=$(jq -r '.[0]' <<< "$existing")
|
||||
else
|
||||
hyprctl dispatch exec "[workspace $workspace silent] $command" >/dev/null
|
||||
address=$(wait_for_address "$class" "$existing") || return 1
|
||||
fi
|
||||
|
||||
hyprctl dispatch movetoworkspacesilent "$workspace,address:$address" >/dev/null || true
|
||||
|
||||
if [[ ${mode:-tiled} == "floating" ]]; then
|
||||
hyprctl dispatch setfloating "address:$address" >/dev/null || true
|
||||
hyprctl dispatch resizewindowpixel exact "${ws[id]}" "${hs[id]}",address:"$address" >/dev/null || true
|
||||
hyprctl dispatch movewindowpixel exact "${xs[id]}" "${ys[id]}",address:"$address" >/dev/null || true
|
||||
else
|
||||
hyprctl dispatch settiled "address:$address" >/dev/null || true
|
||||
hyprctl dispatch focuswindow "address:$address" >/dev/null || true
|
||||
fi
|
||||
|
||||
addresses[id]=$address
|
||||
launched[id]=true
|
||||
printf '%s\n' "$address" >>"$assigned_addresses"
|
||||
printf '%s\t%s\t%s\t%s\t%s\t%s\n' "$address" "$id" "${xs[id]}" "${ys[id]}" "${ws[id]}" "${hs[id]}" >>"$restore_map"
|
||||
|
||||
if [[ ${focuseds[id]} == "true" ]]; then
|
||||
focused_address=$address
|
||||
fi
|
||||
|
||||
sleep 0.4
|
||||
last_address=$address
|
||||
}
|
||||
|
||||
choose_rep() {
|
||||
local best=""
|
||||
local best_area=-1
|
||||
local id area
|
||||
|
||||
for id in "$@"; do
|
||||
area=$(( ws[id] * hs[id] ))
|
||||
if (( area > best_area )); then
|
||||
best=$id
|
||||
best_area=$area
|
||||
fi
|
||||
done
|
||||
|
||||
printf '%s\n' "$best"
|
||||
}
|
||||
|
||||
find_launched_address() {
|
||||
local id
|
||||
|
||||
for id in "$@"; do
|
||||
if [[ ${launched[id]} == "true" ]]; then
|
||||
printf '%s\n' "${addresses[id]}"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
opposite_direction() {
|
||||
case $1 in
|
||||
l) echo r ;;
|
||||
r) echo l ;;
|
||||
u) echo d ;;
|
||||
d) echo u ;;
|
||||
esac
|
||||
}
|
||||
|
||||
abs() {
|
||||
local value=$1
|
||||
if (( value < 0 )); then
|
||||
echo $(( -value ))
|
||||
else
|
||||
echo "$value"
|
||||
fi
|
||||
}
|
||||
|
||||
find_partition() {
|
||||
local ids=("$@")
|
||||
local best_score=9223372036854775807
|
||||
local best_a=""
|
||||
local best_b=""
|
||||
local best_dir=""
|
||||
local orientation i j id edge start cut gap right bottom area_a area_b score valid a b
|
||||
|
||||
for orientation in v h; do
|
||||
for i in "${ids[@]}"; do
|
||||
for j in "${ids[@]}"; do
|
||||
if [[ $orientation == "v" ]]; then
|
||||
edge=$(( xs[i] + ws[i] ))
|
||||
start=${xs[j]}
|
||||
[[ $edge -lt $start ]] || continue
|
||||
else
|
||||
edge=$(( ys[i] + hs[i] ))
|
||||
start=${ys[j]}
|
||||
[[ $edge -lt $start ]] || continue
|
||||
fi
|
||||
|
||||
cut=$(( (edge + start) / 2 ))
|
||||
gap=$(( start - edge ))
|
||||
valid=true
|
||||
a=""
|
||||
b=""
|
||||
area_a=0
|
||||
area_b=0
|
||||
|
||||
for id in "${ids[@]}"; do
|
||||
if [[ $orientation == "v" ]]; then
|
||||
right=$(( xs[id] + ws[id] ))
|
||||
if (( right <= cut )); then
|
||||
a="$a $id"
|
||||
area_a=$(( area_a + ws[id] * hs[id] ))
|
||||
elif (( xs[id] >= cut )); then
|
||||
b="$b $id"
|
||||
area_b=$(( area_b + ws[id] * hs[id] ))
|
||||
else
|
||||
valid=false
|
||||
break
|
||||
fi
|
||||
else
|
||||
bottom=$(( ys[id] + hs[id] ))
|
||||
if (( bottom <= cut )); then
|
||||
a="$a $id"
|
||||
area_a=$(( area_a + ws[id] * hs[id] ))
|
||||
elif (( ys[id] >= cut )); then
|
||||
b="$b $id"
|
||||
area_b=$(( area_b + ws[id] * hs[id] ))
|
||||
else
|
||||
valid=false
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
[[ $valid == "true" && -n $a && -n $b ]] || continue
|
||||
|
||||
score=$(abs $(( area_a - area_b )))
|
||||
score=$(( score * 1000 - gap ))
|
||||
|
||||
if (( score < best_score )); then
|
||||
best_score=$score
|
||||
best_a=${a# }
|
||||
best_b=${b# }
|
||||
if [[ $orientation == "v" ]]; then
|
||||
best_dir=r
|
||||
else
|
||||
best_dir=d
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
if [[ -z $best_a || -z $best_b ]]; then
|
||||
fallback_partition "${ids[@]}"
|
||||
return
|
||||
fi
|
||||
|
||||
read -r -a part_a <<< "$best_a"
|
||||
read -r -a part_b <<< "$best_b"
|
||||
part_dir=$best_dir
|
||||
}
|
||||
|
||||
fallback_partition() {
|
||||
local ids=("$@")
|
||||
local sorted=()
|
||||
local line id bbox_min_x=999999 bbox_min_y=999999 bbox_max_x=0 bbox_max_y=0 bbox_w bbox_h key index
|
||||
|
||||
for id in "${ids[@]}"; do
|
||||
(( xs[id] < bbox_min_x )) && bbox_min_x=${xs[id]}
|
||||
(( ys[id] < bbox_min_y )) && bbox_min_y=${ys[id]}
|
||||
(( xs[id] + ws[id] > bbox_max_x )) && bbox_max_x=$(( xs[id] + ws[id] ))
|
||||
(( ys[id] + hs[id] > bbox_max_y )) && bbox_max_y=$(( ys[id] + hs[id] ))
|
||||
done
|
||||
|
||||
bbox_w=$(( bbox_max_x - bbox_min_x ))
|
||||
bbox_h=$(( bbox_max_y - bbox_min_y ))
|
||||
|
||||
while read -r line; do
|
||||
sorted+=("${line#* }")
|
||||
done < <(
|
||||
for id in "${ids[@]}"; do
|
||||
if (( bbox_w >= bbox_h )); then
|
||||
key=${xs[id]}
|
||||
else
|
||||
key=${ys[id]}
|
||||
fi
|
||||
printf '%s %s\n' "$key" "$id"
|
||||
done | sort -n
|
||||
)
|
||||
|
||||
part_a=()
|
||||
part_b=()
|
||||
for index in "${!sorted[@]}"; do
|
||||
if (( index < ${#sorted[@]} / 2 )); then
|
||||
part_a+=("${sorted[index]}")
|
||||
else
|
||||
part_b+=("${sorted[index]}")
|
||||
fi
|
||||
done
|
||||
|
||||
if (( bbox_w >= bbox_h )); then
|
||||
part_dir=r
|
||||
else
|
||||
part_dir=d
|
||||
fi
|
||||
}
|
||||
|
||||
materialize_group() {
|
||||
local ids=("$@")
|
||||
local rep_a rep_b addr_a addr_b dir opposite
|
||||
|
||||
if (( ${#ids[@]} == 0 )); then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if (( ${#ids[@]} == 1 )); then
|
||||
ensure_window "${ids[0]}" >/dev/null || true
|
||||
return 0
|
||||
fi
|
||||
|
||||
find_partition "${ids[@]}"
|
||||
dir=$part_dir
|
||||
opposite=$(opposite_direction "$dir")
|
||||
|
||||
addr_a=$(find_launched_address "${part_a[@]}" || true)
|
||||
addr_b=$(find_launched_address "${part_b[@]}" || true)
|
||||
|
||||
if [[ -z $addr_a && -z $addr_b ]]; then
|
||||
rep_a=$(choose_rep "${part_a[@]}")
|
||||
ensure_window "$rep_a" || return 0
|
||||
addr_a=$last_address
|
||||
hyprctl dispatch focuswindow "address:$addr_a" >/dev/null || true
|
||||
hyprctl dispatch layoutmsg preselect "$dir" >/dev/null || true
|
||||
rep_b=$(choose_rep "${part_b[@]}")
|
||||
ensure_window "$rep_b" || true
|
||||
addr_b=${last_address:-}
|
||||
elif [[ -n $addr_a && -z $addr_b ]]; then
|
||||
hyprctl dispatch focuswindow "address:$addr_a" >/dev/null || true
|
||||
hyprctl dispatch layoutmsg preselect "$dir" >/dev/null || true
|
||||
rep_b=$(choose_rep "${part_b[@]}")
|
||||
ensure_window "$rep_b" || true
|
||||
addr_b=${last_address:-}
|
||||
elif [[ -z $addr_a && -n $addr_b ]]; then
|
||||
hyprctl dispatch focuswindow "address:$addr_b" >/dev/null || true
|
||||
hyprctl dispatch layoutmsg preselect "$opposite" >/dev/null || true
|
||||
rep_a=$(choose_rep "${part_a[@]}")
|
||||
ensure_window "$rep_a" || true
|
||||
addr_a=${last_address:-}
|
||||
fi
|
||||
|
||||
materialize_group "${part_a[@]}"
|
||||
materialize_group "${part_b[@]}"
|
||||
}
|
||||
|
||||
ids=()
|
||||
for (( i = 0; i < count; i++ )); do
|
||||
ids+=("$i")
|
||||
done
|
||||
|
||||
if [[ ${mode:-tiled} == "floating" ]]; then
|
||||
for id in "${ids[@]}"; do
|
||||
ensure_window "$id" >/dev/null || true
|
||||
done
|
||||
else
|
||||
materialize_group "${ids[@]}"
|
||||
|
||||
for _ in 1 2 3 4; do
|
||||
while IFS=$'\t' read -r address _ _ _ w h; do
|
||||
hyprctl dispatch resizewindowpixel exact "$w" "$h",address:"$address" >/dev/null || true
|
||||
done < <(sort -t $'\t' -k3,3n -k4,4n "$restore_map")
|
||||
sleep 0.1
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -n ${focused_address:-} ]]; then
|
||||
hyprctl dispatch focuswindow "address:$focused_address" >/dev/null || true
|
||||
fi
|
||||
|
||||
notify-send -u low " Restored workspace $workspace for $monitor" -t 3000
|
||||
hyprctl dispatch workspace "$workspace" >/dev/null
|
||||
Executable
+74
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Save the current Hyprland workspace app layout to ~/.config/hypr/workspaces/<monitor-name>-<workspace-id>.tsv
|
||||
# omarchy:args=
|
||||
# omarchy:examples=omarchy workspace save
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
monitor=$(omarchy-hyprland-monitor-focused)
|
||||
workspace=$(hyprctl monitors -j | jq -r --arg monitor "$monitor" '.[] | select(.name == $monitor) | .activeWorkspace.id')
|
||||
|
||||
mkdir -p ~/.config/hypr/workspaces
|
||||
file="$HOME/.config/hypr/workspaces/$monitor-$workspace.tsv"
|
||||
clients=$(hyprctl clients -j)
|
||||
active_address=$(hyprctl activewindow -j | jq -r '.address // ""')
|
||||
|
||||
webapp_command() {
|
||||
local class=$1
|
||||
local initial_title=$2
|
||||
local encoded host path
|
||||
|
||||
[[ $class == chrome-* ]] || return 1
|
||||
|
||||
if [[ $initial_title == http://* || $initial_title == https://* ]]; then
|
||||
printf 'omarchy-launch-webapp %s\n' "${initial_title//_/\/}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
encoded=${class#chrome-}
|
||||
encoded=${encoded%-Default}
|
||||
|
||||
if [[ $encoded == *__* ]]; then
|
||||
host=${encoded%%__*}
|
||||
path=${encoded#*__}
|
||||
printf 'omarchy-launch-webapp https://%s/%s\n' "$host" "${path//_/\/}"
|
||||
else
|
||||
printf 'omarchy-launch-webapp https://%s\n' "${encoded//_/\/}"
|
||||
fi
|
||||
}
|
||||
|
||||
launch_command() {
|
||||
local class=$1
|
||||
local initial_title=$2
|
||||
local pid=$3
|
||||
|
||||
if webapp_command "$class" "$initial_title"; then
|
||||
return 0
|
||||
elif [[ -r /proc/$pid/cmdline ]]; then
|
||||
tr '\0' ' ' <"/proc/$pid/cmdline" | sed 's/[[:space:]]*$//'
|
||||
else
|
||||
echo "$class"
|
||||
fi
|
||||
}
|
||||
|
||||
{
|
||||
printf '# monitor\tworkspace\tmode\tclass\tcommand\tx\ty\tw\th\tfocused\n'
|
||||
|
||||
jq -r --argjson workspace "$workspace" '
|
||||
[.[] | select(.workspace.id == $workspace)]
|
||||
| sort_by(.at[0], .at[1])
|
||||
| .[]
|
||||
| [(.initialClass // .class), .initialTitle, .pid, .at[0], .at[1], .size[0], .size[1], .address]
|
||||
| @tsv
|
||||
' <<< "$clients" | while IFS=$'\t' read -r class initial_title pid x y w h address; do
|
||||
command=$(launch_command "$class" "$initial_title" "$pid")
|
||||
focused=false
|
||||
if [[ $address == "$active_address" ]]; then
|
||||
focused=true
|
||||
fi
|
||||
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$monitor" "$workspace" "tiled" "$class" "$command" "$x" "$y" "$w" "$h" "$focused"
|
||||
done
|
||||
} >"$file"
|
||||
|
||||
notify-send -u low " Saved workspace $workspace for $monitor" -t 3000
|
||||
@@ -0,0 +1 @@
|
||||
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
||||
+1
@@ -0,0 +1 @@
|
||||
brave-flags.conf
|
||||
@@ -1,19 +0,0 @@
|
||||
[main]
|
||||
include=~/.config/omarchy/current/theme/foot.ini
|
||||
term=xterm-256color
|
||||
font=JetBrainsMono Nerd Font:size=9
|
||||
pad=14x14
|
||||
initial-window-mode=windowed
|
||||
workers=0
|
||||
|
||||
[scrollback]
|
||||
lines=10000
|
||||
|
||||
[cursor]
|
||||
style=block
|
||||
blink=no
|
||||
|
||||
[key-bindings]
|
||||
clipboard-copy=Control+Insert
|
||||
primary-paste=none
|
||||
clipboard-paste=Shift+Insert
|
||||
@@ -1,19 +1,28 @@
|
||||
general {
|
||||
lock_cmd = omarchy-system-lock # lock screen and 1password
|
||||
before_sleep_cmd = OMARCHY_LOCK_ONLY=true omarchy-system-lock # lock before suspend without scheduling display off.
|
||||
after_sleep_cmd = sleep 1 && omarchy-system-wake # delay for PAM readiness, then turn on display.
|
||||
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||
after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # delay for PAM readiness, then turn on display.
|
||||
inhibit_sleep = 3 # wait until screen is locked
|
||||
}
|
||||
|
||||
# Start screensaver after 2.5 minutes
|
||||
listener {
|
||||
timeout = 150
|
||||
on-timeout = pidof hyprlock || omarchy-launch-screensaver
|
||||
timeout = 150 # 2.5min
|
||||
on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already)
|
||||
}
|
||||
|
||||
# Lock system after 5 minutes
|
||||
listener {
|
||||
timeout = 152
|
||||
on-timeout = omarchy-system-lock
|
||||
on-resume = omarchy-system-wake
|
||||
timeout = 151 # 5min
|
||||
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||
}
|
||||
|
||||
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
|
||||
windowrule = match:class (Alacritty|kitty|foot), scroll_touchpad 1.5
|
||||
windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5
|
||||
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
|
||||
|
||||
# Enable touchpad gestures for changing workspaces
|
||||
|
||||
@@ -32,9 +32,3 @@ layout {
|
||||
# Avoid overly wide single-window layouts on wide screens
|
||||
# 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
|
||||
|
||||
# This hook is called with the current battery percentage when the low battery
|
||||
# notification is sent. To put it into use, remove .sample from this file name.
|
||||
# notification is sent. To put it into use, remove .sample from the name.
|
||||
|
||||
SOUND_FILE="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga"
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This hook is called with the snake-cased name of the font that has just been set.
|
||||
# To put it into use, remove .sample from this file name.
|
||||
# To put it into use, remove .sample from the name.
|
||||
|
||||
# Example: Show the name of the font that was just set.
|
||||
# Example: Show the name of the theme that was just set.
|
||||
# notify-send -u low "New font" "Your new font is $1"
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This hook is called after an Omarchy system update has been performed.
|
||||
# To put it into use, remove .sample from this file name.
|
||||
# To put it into use, remove .sample from the name.
|
||||
|
||||
# Example: Show notification after the system has been updated.
|
||||
# notify-send -u low "Update Performed" "Your system is now up to date"
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This hook is called with the snake-cased name of the theme that has just been set.
|
||||
# To put it into use, remove .sample from this file name.
|
||||
# To put it into use, remove .sample from the name.
|
||||
|
||||
# Example: Show the name of the theme that was just set.
|
||||
# notify-send -u low "New theme" "Your new theme is $1"
|
||||
@@ -70,9 +70,6 @@ set -g set-clipboard on
|
||||
set -g allow-passthrough on
|
||||
setw -g aggressive-resize on
|
||||
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
|
||||
set -g status-position top
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"spacing": 0,
|
||||
"height": 26,
|
||||
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
|
||||
"modules-center": ["clock", "custom/weather", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-right": [
|
||||
"group/tray-expander",
|
||||
"bluetooth",
|
||||
@@ -66,13 +66,6 @@
|
||||
"tooltip": false,
|
||||
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||
},
|
||||
"custom/weather": {
|
||||
"exec": "$OMARCHY_PATH/default/waybar/weather.sh",
|
||||
"return-type": "json",
|
||||
"interval": 600,
|
||||
"tooltip": false,
|
||||
"on-click": "notify-send -u low \"$(omarchy-weather-status)\""
|
||||
},
|
||||
"network": {
|
||||
"format-icons": ["", "", "", "", ""],
|
||||
"format": "{icon}",
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
{
|
||||
"reload_style_on_change": true,
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"spacing": 0,
|
||||
"height": 26,
|
||||
"margin-top": 10,
|
||||
"margin-left": 10,
|
||||
"margin-right": 10,
|
||||
"modules-left": ["custom/omarchy", "hyprland/workspaces", "hyprland/window"],
|
||||
"modules-center": ["clock", "custom/update", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-right": [
|
||||
"mpris",
|
||||
"group/tray-expander",
|
||||
"backlight",
|
||||
"network",
|
||||
"bluetooth",
|
||||
"pulseaudio",
|
||||
"cpu",
|
||||
"battery"
|
||||
],
|
||||
"hyprland/workspaces": {
|
||||
"on-click": "activate",
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"4": "4",
|
||||
"5": "5",
|
||||
"6": "6",
|
||||
"7": "7",
|
||||
"8": "8",
|
||||
"9": "9",
|
||||
"10": "0",
|
||||
"active": ""
|
||||
},
|
||||
"persistent-workspaces": {
|
||||
"1": [],
|
||||
"2": [],
|
||||
"3": [],
|
||||
"4": [],
|
||||
"5": []
|
||||
}
|
||||
},
|
||||
"custom/omarchy": {
|
||||
"format": "<span font='omarchy'>\ue900</span>",
|
||||
"on-click": "omarchy-menu",
|
||||
"on-click-right": "xdg-terminal-exec",
|
||||
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||
},
|
||||
"custom/update": {
|
||||
"format": "",
|
||||
"exec": "omarchy-update-available",
|
||||
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
||||
"tooltip-format": "Omarchy update available",
|
||||
"signal": 7,
|
||||
"interval": 21600
|
||||
},
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"format": "",
|
||||
"on-click": "omarchy-launch-or-focus-tui btop",
|
||||
"on-click-right": "alacritty"
|
||||
},
|
||||
"clock": {
|
||||
"format": "{:%I:%M %p}",
|
||||
"format-alt": "{:%A %d/%m/%Y}",
|
||||
"tooltip-format": "<span>{calendar}</span>",
|
||||
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||
},
|
||||
"network": {
|
||||
"format-icons": ["", "", "", "", ""],
|
||||
"format": "{icon} {essid}",
|
||||
"format-wifi": "{icon} {essid}",
|
||||
"format-ethernet": "",
|
||||
"format-disconnected": "",
|
||||
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||
"tooltip-format-disconnected": "Disconnected",
|
||||
"interval": 3,
|
||||
"spacing": 1,
|
||||
"on-click": "omarchy-launch-wifi"
|
||||
},
|
||||
"battery": {
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-discharging": "{icon}",
|
||||
"format-charging": "{icon}",
|
||||
"format-plugged": "",
|
||||
"format-icons": {
|
||||
"charging": ["", "", "", "", "", "", "", "", "", ""],
|
||||
"default": ["", "", "", "", "", "", "", "", "", ""]
|
||||
},
|
||||
"format-full": "",
|
||||
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
|
||||
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
|
||||
"interval": 5,
|
||||
"on-click": "omarchy-menu power",
|
||||
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
|
||||
"states": {
|
||||
"warning": 20,
|
||||
"critical": 10
|
||||
}
|
||||
},
|
||||
"bluetooth": {
|
||||
"format": "",
|
||||
"format-off": "",
|
||||
"format-disabled": "",
|
||||
"format-connected": "",
|
||||
"format-no-controller": "",
|
||||
"tooltip-format": "Devices connected: {num_connections}",
|
||||
"on-click": "omarchy-launch-bluetooth"
|
||||
},
|
||||
"pulseaudio": {
|
||||
"format": "{icon}",
|
||||
"on-click": "omarchy-launch-audio",
|
||||
"on-click-right": "pamixer -t",
|
||||
"tooltip-format": "Playing at {volume}%",
|
||||
"scroll-step": 5,
|
||||
"format-muted": "",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"headset": "",
|
||||
"default": ["", "", ""]
|
||||
}
|
||||
},
|
||||
"group/tray-expander": {
|
||||
"orientation": "inherit",
|
||||
"drawer": {
|
||||
"transition-duration": 600,
|
||||
"children-class": "tray-group-item"
|
||||
},
|
||||
"modules": ["custom/expand-icon", "tray", "memory", "custom/weather"]
|
||||
},
|
||||
"custom/expand-icon": {
|
||||
"format": " ",
|
||||
"tooltip": false
|
||||
},
|
||||
"custom/screenrecording-indicator": {
|
||||
"on-click": "omarchy-capture-screenrecording",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||
"signal": 8,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/idle-indicator": {
|
||||
"on-click": "omarchy-toggle-idle",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
|
||||
"signal": 9,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/notification-silencing-indicator": {
|
||||
"on-click": "omarchy-toggle-notification-silencing",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh",
|
||||
"signal": 10,
|
||||
"return-type": "json"
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 12,
|
||||
"spacing": 12
|
||||
},
|
||||
"backlight": {
|
||||
"format": "{percent}% {icon}",
|
||||
"format-icons": ["🌑", "🌘", "🌗", "🌖", "🌕"]
|
||||
},
|
||||
"memory": {
|
||||
"format": " {used:0.1f}gb",
|
||||
"interval": 2,
|
||||
"on-click": "omarchy-launch-or-focus-tui btop"
|
||||
},
|
||||
"custom/weather": {
|
||||
"format": "{}°",
|
||||
"tooltip": true,
|
||||
"interval": 600,
|
||||
"exec": "omarchy-cmd-present wttrbar && wttrbar || true",
|
||||
"return-type": "json"
|
||||
},
|
||||
"mpris": {
|
||||
"format": "{player_icon} {artist} - {title}",
|
||||
"format-paused": "{status_icon} <i>{artist} - {title}</i>",
|
||||
"player-icons": {
|
||||
"default": "🎵",
|
||||
"mpv": "🎵"
|
||||
},
|
||||
"status-icons": {
|
||||
"paused": "⏸"
|
||||
},
|
||||
"max-length": 50
|
||||
},
|
||||
"hyprland/window": {
|
||||
"format": "{}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,189 @@
|
||||
{
|
||||
"reload_style_on_change": true,
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"spacing": 0,
|
||||
"height": 26,
|
||||
"modules-left": ["custom/omarchy", "hyprland/workspaces", "hyprland/window"],
|
||||
"modules-center": ["clock", "custom/update", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-right": [
|
||||
"mpris",
|
||||
"group/tray-expander",
|
||||
"backlight",
|
||||
"network",
|
||||
"bluetooth",
|
||||
"pulseaudio",
|
||||
"cpu",
|
||||
"battery"
|
||||
],
|
||||
"hyprland/workspaces": {
|
||||
"on-click": "activate",
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": "",
|
||||
"7": "",
|
||||
"8": "",
|
||||
"9": "",
|
||||
"10": "",
|
||||
"active": ""
|
||||
},
|
||||
"persistent-workspaces": {
|
||||
"1": [],
|
||||
"2": [],
|
||||
"3": [],
|
||||
"4": [],
|
||||
"5": []
|
||||
}
|
||||
},
|
||||
"custom/omarchy": {
|
||||
"format": "<span font='omarchy'>\ue900</span>",
|
||||
"on-click": "omarchy-menu",
|
||||
"on-click-right": "xdg-terminal-exec",
|
||||
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||
},
|
||||
"custom/update": {
|
||||
"format": "",
|
||||
"exec": "omarchy-update-available",
|
||||
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
||||
"tooltip-format": "Omarchy update available",
|
||||
"signal": 7,
|
||||
"interval": 21600
|
||||
},
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"format": "",
|
||||
"on-click": "omarchy-launch-or-focus-tui btop",
|
||||
"on-click-right": "alacritty"
|
||||
},
|
||||
"clock": {
|
||||
"format": "{:%I:%M %p}",
|
||||
"format-alt": "{:%A %d/%m/%Y}",
|
||||
"tooltip-format": "<span>{calendar}</span>",
|
||||
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||
},
|
||||
"network": {
|
||||
"format-icons": ["", "", "", "", ""],
|
||||
"format": "{icon} {essid}",
|
||||
"format-wifi": "{icon} {essid}",
|
||||
"format-ethernet": "",
|
||||
"format-disconnected": "",
|
||||
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||
"tooltip-format-disconnected": "Disconnected",
|
||||
"interval": 3,
|
||||
"spacing": 1,
|
||||
"on-click": "omarchy-launch-wifi"
|
||||
},
|
||||
"battery": {
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-discharging": "{capacity}% {icon}",
|
||||
"format-charging": "{capacity}% {icon}",
|
||||
"format-plugged": "",
|
||||
"format-icons": {
|
||||
"charging": ["", "", "", "", "", "", "", "", "", ""],
|
||||
"default": ["", "", "", "", "", "", "", "", "", ""]
|
||||
},
|
||||
"format-full": "",
|
||||
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
|
||||
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
|
||||
"interval": 5,
|
||||
"on-click": "omarchy-menu power",
|
||||
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
|
||||
"states": {
|
||||
"warning": 20,
|
||||
"critical": 10
|
||||
}
|
||||
},
|
||||
"bluetooth": {
|
||||
"format": "",
|
||||
"format-off": "",
|
||||
"format-disabled": "",
|
||||
"format-connected": "",
|
||||
"format-no-controller": "",
|
||||
"tooltip-format": "Devices connected: {num_connections}",
|
||||
"on-click": "omarchy-launch-bluetooth"
|
||||
},
|
||||
"pulseaudio": {
|
||||
"format": "{icon}",
|
||||
"on-click": "omarchy-launch-audio",
|
||||
"on-click-right": "pamixer -t",
|
||||
"tooltip-format": "Playing at {volume}%",
|
||||
"scroll-step": 5,
|
||||
"format-muted": "",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"headset": "",
|
||||
"default": ["", "", ""]
|
||||
}
|
||||
},
|
||||
"group/tray-expander": {
|
||||
"orientation": "inherit",
|
||||
"drawer": {
|
||||
"transition-duration": 600,
|
||||
"children-class": "tray-group-item"
|
||||
},
|
||||
"modules": ["custom/expand-icon", "tray", "memory", "custom/weather"]
|
||||
},
|
||||
"custom/expand-icon": {
|
||||
"format": " ",
|
||||
"tooltip": false
|
||||
},
|
||||
"custom/screenrecording-indicator": {
|
||||
"on-click": "omarchy-capture-screenrecording",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||
"signal": 8,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/idle-indicator": {
|
||||
"on-click": "omarchy-toggle-idle",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
|
||||
"signal": 9,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/notification-silencing-indicator": {
|
||||
"on-click": "omarchy-toggle-notification-silencing",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh",
|
||||
"signal": 10,
|
||||
"return-type": "json"
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 12,
|
||||
"spacing": 12
|
||||
},
|
||||
"backlight": {
|
||||
"format": "{percent}% {icon}",
|
||||
"format-icons": ["🌑", "🌘", "🌗", "🌖", "🌕"]
|
||||
},
|
||||
"memory": {
|
||||
"format": " {used:0.1f}gb",
|
||||
"interval": 2,
|
||||
"on-click": "omarchy-launch-or-focus-tui btop"
|
||||
},
|
||||
"custom/weather": {
|
||||
"format": "{}°",
|
||||
"tooltip": true,
|
||||
"interval": 600,
|
||||
"exec": "omarchy-cmd-present wttrbar && wttrbar || true",
|
||||
"return-type": "json"
|
||||
},
|
||||
"mpris": {
|
||||
"format": "{player_icon} {artist} - {title}",
|
||||
"format-paused": "{status_icon} <i>{artist} - {title}</i>",
|
||||
"player-icons": {
|
||||
"default": "🎵",
|
||||
"mpv": "🎵"
|
||||
},
|
||||
"status-icons": {
|
||||
"paused": "⏸"
|
||||
}
|
||||
},
|
||||
"hyprland/window": {
|
||||
"format": "{}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"reload_style_on_change": true,
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"spacing": 0,
|
||||
"height": 26,
|
||||
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
|
||||
"modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-right": [
|
||||
"group/tray-expander",
|
||||
"bluetooth",
|
||||
"network",
|
||||
"pulseaudio",
|
||||
"cpu",
|
||||
"battery"
|
||||
],
|
||||
"hyprland/workspaces": {
|
||||
"on-click": "activate",
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"4": "4",
|
||||
"5": "5",
|
||||
"6": "6",
|
||||
"7": "7",
|
||||
"8": "8",
|
||||
"9": "9",
|
||||
"10": "0",
|
||||
"active": ""
|
||||
},
|
||||
"persistent-workspaces": {
|
||||
"1": [],
|
||||
"2": [],
|
||||
"3": [],
|
||||
"4": [],
|
||||
"5": []
|
||||
}
|
||||
},
|
||||
"custom/omarchy": {
|
||||
"format": "<span font='omarchy'>\ue900</span>",
|
||||
"on-click": "omarchy-menu",
|
||||
"on-click-right": "xdg-terminal-exec",
|
||||
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||
},
|
||||
"custom/update": {
|
||||
"format": "",
|
||||
"exec": "omarchy-update-available",
|
||||
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
||||
"tooltip-format": "Omarchy update available",
|
||||
"signal": 7,
|
||||
"interval": 21600
|
||||
},
|
||||
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"format": "",
|
||||
"on-click": "omarchy-launch-or-focus-tui btop",
|
||||
"on-click-right": "alacritty"
|
||||
},
|
||||
"clock": {
|
||||
"format": "{:L%A %H:%M}",
|
||||
"format-alt": "{:L%d %B W%V %Y}",
|
||||
"tooltip": false,
|
||||
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||
},
|
||||
"network": {
|
||||
"format-icons": ["", "", "", "", ""],
|
||||
"format": "{icon}",
|
||||
"format-wifi": "{icon}",
|
||||
"format-ethernet": "",
|
||||
"format-disconnected": "",
|
||||
"tooltip-format-wifi": "{essid} ({frequency} GHz)",
|
||||
"tooltip-format-ethernet": "Connected",
|
||||
"tooltip-format-disconnected": "Disconnected",
|
||||
"interval": 3,
|
||||
"spacing": 1,
|
||||
"on-click": "omarchy-launch-wifi"
|
||||
},
|
||||
"battery": {
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-discharging": "{icon}",
|
||||
"format-charging": "{icon}",
|
||||
"format-plugged": "",
|
||||
"format-icons": {
|
||||
"charging": ["", "", "", "", "", "", "", "", "", ""],
|
||||
"default": ["", "", "", "", "", "", "", "", "", ""]
|
||||
},
|
||||
"format-full": "",
|
||||
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
|
||||
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
|
||||
"interval": 5,
|
||||
"on-click": "omarchy-menu power",
|
||||
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
|
||||
"states": {
|
||||
"warning": 20,
|
||||
"critical": 10
|
||||
}
|
||||
},
|
||||
"bluetooth": {
|
||||
"format": "",
|
||||
"format-off": "",
|
||||
"format-disabled": "",
|
||||
"format-connected": "",
|
||||
"format-no-controller": "",
|
||||
"tooltip-format": "Devices connected: {num_connections}",
|
||||
"on-click": "omarchy-launch-bluetooth"
|
||||
},
|
||||
"pulseaudio": {
|
||||
"format": "{icon}",
|
||||
"on-click": "omarchy-launch-audio",
|
||||
"on-click-right": "pamixer -t",
|
||||
"tooltip-format": "Playing at {volume}%",
|
||||
"scroll-step": 5,
|
||||
"format-muted": "",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"headset": "",
|
||||
"default": ["", "", ""]
|
||||
}
|
||||
},
|
||||
"group/tray-expander": {
|
||||
"orientation": "inherit",
|
||||
"drawer": {
|
||||
"transition-duration": 600,
|
||||
"children-class": "tray-group-item"
|
||||
},
|
||||
"modules": ["custom/expand-icon", "tray"]
|
||||
},
|
||||
"custom/expand-icon": {
|
||||
"format": "",
|
||||
"tooltip": false,
|
||||
"on-scroll-up": "",
|
||||
"on-scroll-down": "",
|
||||
"on-scroll-left": "",
|
||||
"on-scroll-right": ""
|
||||
},
|
||||
"custom/screenrecording-indicator": {
|
||||
"on-click": "omarchy-capture-screenrecording",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||
"signal": 8,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/idle-indicator": {
|
||||
"on-click": "omarchy-toggle-idle",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
|
||||
"signal": 9,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/notification-silencing-indicator": {
|
||||
"on-click": "omarchy-toggle-notification-silencing",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh",
|
||||
"signal": 10,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/voxtype": {
|
||||
"exec": "omarchy-voxtype-status",
|
||||
"return-type": "json",
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"idle": "",
|
||||
"recording": "",
|
||||
"transcribing": ""
|
||||
},
|
||||
"tooltip": true,
|
||||
"on-click-right": "omarchy-voxtype-config",
|
||||
"on-click": "omarchy-voxtype-model"
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 12,
|
||||
"spacing": 17
|
||||
}
|
||||
}
|
||||
@@ -67,17 +67,6 @@ tooltip {
|
||||
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 {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
@import "../omarchy/current/theme/waybar.css";
|
||||
|
||||
* {
|
||||
background-color: @background;
|
||||
color: @foreground;
|
||||
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
padding: 2px 2px;
|
||||
min-height: 0;
|
||||
font-family: 'JetBrainsMono Nerd Font';
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.modules-left {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.modules-right {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
all: initial;
|
||||
padding: 0 6px;
|
||||
margin: 0 1.5px;
|
||||
min-width: 9px;
|
||||
}
|
||||
|
||||
#workspaces button.empty {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#backlight,
|
||||
#custom-weather,
|
||||
#memory,
|
||||
#mpris,
|
||||
#window,
|
||||
#tray,
|
||||
#cpu,
|
||||
#battery,
|
||||
#network,
|
||||
#bluetooth,
|
||||
#pulseaudio,
|
||||
#custom-omarchy,
|
||||
#custom-screenrecording-indicator,
|
||||
#custom-idle-indicator,
|
||||
#custom-notification-silencing-indicator,
|
||||
#custom-update {
|
||||
min-width: 12px;
|
||||
margin: 0 7.5px;
|
||||
}
|
||||
|
||||
#custom-expand-icon {
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
padding: 2px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#custom-update,
|
||||
#custom-screenrecording-indicator,
|
||||
#custom-idle-indicator,
|
||||
#custom-notification-silencing-indicator {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator.active,
|
||||
#custom-idle-indicator.active,
|
||||
#custom-notification-silencing-indicator.active {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
#bluetooth {
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
#mpris {
|
||||
margin-right: 10px;
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
@import "../omarchy/current/theme/waybar.css";
|
||||
|
||||
* {
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
min-height: 0;
|
||||
font-family: 'JetBrainsMono Nerd Font';
|
||||
font-size: 14px;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
.modules-left {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.modules-right {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background: @background;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
window#waybar.empty #window {
|
||||
background: transparent;
|
||||
color: transparent;
|
||||
padding: 0;
|
||||
margin-left: 5px;
|
||||
transition: .5s;
|
||||
}
|
||||
|
||||
mpris.empty {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
all: initial;
|
||||
padding: 3px 10px 3px 5px;
|
||||
margin: 0 5px;
|
||||
min-width: 9px;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
background: @foreground;
|
||||
color: @background;
|
||||
border-radius: 30px;
|
||||
padding: 3px 10px 3px 5px;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: alpha(@foreground, .3);
|
||||
border-radius: 30px;
|
||||
padding: 3px 10px 3px 5px;
|
||||
transition: .7s;
|
||||
}
|
||||
|
||||
#workspaces button.active:hover {
|
||||
background: @foreground;
|
||||
color: @background;
|
||||
border-radius: 30px;
|
||||
padding: 3px 10px 3px 5px;
|
||||
}
|
||||
|
||||
#workspaces button.empty {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
#custom-weather,
|
||||
#memory,
|
||||
#mpris,
|
||||
#window,
|
||||
#tray-expander,
|
||||
#workspaces,
|
||||
#clock,
|
||||
#cpu,
|
||||
#battery,
|
||||
#network,
|
||||
#bluetooth,
|
||||
#pulseaudio,
|
||||
#custom-screenrecording-indicator,
|
||||
#custom-idle-indicator,
|
||||
#custom-notification-silencing-indicator,
|
||||
#custom-update {
|
||||
background-color: alpha(@foreground, .1);
|
||||
padding: 5px 10px;
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
#mpris:hover,
|
||||
#window:hover,
|
||||
#clock:hover,
|
||||
#backlight:hover,
|
||||
#cpu:hover,
|
||||
#network:hover,
|
||||
#bluetooth:hover,
|
||||
#pulseaudio:hover,
|
||||
#custom-screenrecording-indicator:hover,
|
||||
#custom-idle-indicator:hover,
|
||||
#custom-notification-silencing-indicator:hover,
|
||||
#custom-update:hover {
|
||||
background-color: alpha(@foreground, .2);
|
||||
transition: .7s;
|
||||
}
|
||||
|
||||
#custom-expand-icon {
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
#tray,
|
||||
#memory,
|
||||
#custom-weather {
|
||||
background-color: transparent;
|
||||
margin: 5px;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
#custom-update,
|
||||
#custom-screenrecording-indicator,
|
||||
#custom-idle-indicator,
|
||||
#custom-notification-silencing-indicator {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
#clock {
|
||||
border-radius: 10px;
|
||||
padding: 0 10px;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator,
|
||||
#custom-idle-indicator,
|
||||
#custom-notification-silencing-indicator {
|
||||
border-radius: 10px;
|
||||
min-width: 12px;
|
||||
padding: 0 11px 0 10px;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator.active,
|
||||
#custom-idle-indicator.active,
|
||||
#custom-notification-silencing-indicator.active {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
#custom-omarchy,
|
||||
#battery {
|
||||
background-color: @foreground;
|
||||
color: @background;
|
||||
min-width: 10px;
|
||||
border-radius: 10px;
|
||||
padding: 0 10px;
|
||||
margin: 5px 0 5px 5px;
|
||||
}
|
||||
|
||||
#workspaces,
|
||||
#mpris {
|
||||
margin: 5px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#window,
|
||||
#mpris {
|
||||
border-radius: 10px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
#tray-expander {
|
||||
padding: 0 0 0 10px;
|
||||
margin-left: 1px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#backlight {
|
||||
background-color: alpha(@foreground, .1);
|
||||
border-radius: 10px;
|
||||
padding: 5px 10px;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
#network {
|
||||
border-radius: 10px 0 0 10px;
|
||||
}
|
||||
|
||||
#cpu {
|
||||
padding: 0 15px 0 10px;
|
||||
border-radius: 0 10px 10px 0;
|
||||
margin-right: 1px;
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
padding: 0 15px 0 10px;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
border-radius: 10px;
|
||||
background: @background;
|
||||
border: 3px solid alpha(@foreground, .5);
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
@import "../omarchy/current/theme/waybar.css";
|
||||
|
||||
* {
|
||||
background-color: @background;
|
||||
color: @foreground;
|
||||
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
min-height: 0;
|
||||
font-family: 'JetBrainsMono Nerd Font';
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.modules-left {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.modules-right {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
all: initial;
|
||||
padding: 0 6px;
|
||||
margin: 0 1.5px;
|
||||
min-width: 9px;
|
||||
}
|
||||
|
||||
#workspaces button.empty {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#cpu,
|
||||
#battery,
|
||||
#pulseaudio,
|
||||
#custom-omarchy,
|
||||
#custom-update {
|
||||
min-width: 12px;
|
||||
margin: 0 7.5px;
|
||||
}
|
||||
|
||||
#tray {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
#bluetooth {
|
||||
margin-right: 17px;
|
||||
}
|
||||
|
||||
#network {
|
||||
margin-right: 13px;
|
||||
}
|
||||
|
||||
#custom-expand-icon {
|
||||
margin-right: 18px;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
#custom-update {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
#clock {
|
||||
margin-left: 8.75px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator,
|
||||
#custom-idle-indicator,
|
||||
#custom-notification-silencing-indicator {
|
||||
min-width: 12px;
|
||||
margin-left: 5px;
|
||||
margin-right: 0;
|
||||
font-size: 10px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator.active {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
#custom-idle-indicator.active,
|
||||
#custom-notification-silencing-indicator.active {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
#custom-voxtype {
|
||||
min-width: 12px;
|
||||
margin: 0 0 0 7.5px;
|
||||
}
|
||||
|
||||
#custom-voxtype.recording {
|
||||
color: #a55555;
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"policies": {
|
||||
"Preferences": {
|
||||
"apz.overscroll.enabled": {
|
||||
"Value": true,
|
||||
"Status": "default"
|
||||
},
|
||||
"media.ffmpeg.vaapi.enabled": {
|
||||
"Value": true,
|
||||
"Status": "default"
|
||||
},
|
||||
"media.hardware-video-decoding.force-enabled": {
|
||||
"Value": true,
|
||||
"Status": "default"
|
||||
},
|
||||
"widget.disable-swipe-tracker": {
|
||||
"Value": false,
|
||||
"Status": "default"
|
||||
},
|
||||
"widget.wayland.fractional-scale.enabled": {
|
||||
"Value": true,
|
||||
"Status": "default"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
TryExec=foot
|
||||
Exec=foot
|
||||
Icon=foot
|
||||
Terminal=false
|
||||
Categories=System;TerminalEmulator;
|
||||
Name=Foot
|
||||
GenericName=Terminal
|
||||
Comment=A fast, lightweight and minimalistic Wayland terminal emulator
|
||||
StartupNotify=true
|
||||
StartupWMClass=foot
|
||||
Actions=New;
|
||||
X-TerminalArgExec=-e
|
||||
X-TerminalArgAppId=--app-id=
|
||||
X-TerminalArgTitle=--title=
|
||||
X-TerminalArgDir=--working-directory=
|
||||
|
||||
[Desktop Action New]
|
||||
Name=New Terminal
|
||||
Exec=foot
|
||||
@@ -1,7 +0,0 @@
|
||||
[main]
|
||||
font=JetBrainsMono Nerd Font:size=18
|
||||
pad=0x0
|
||||
|
||||
[colors-dark]
|
||||
background=000000
|
||||
foreground=ffffff
|
||||
@@ -3,7 +3,7 @@ windowrule = float on, match:tag floating-window
|
||||
windowrule = center on, match:tag floating-window
|
||||
windowrule = size 875 600, match:tag floating-window
|
||||
|
||||
windowrule = tag +floating-window, match:class (org.omarchy.bluetui|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.btop|org.omarchy.terminal|org.omarchy.bash|org.codeberg.dnkl.foot|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Omarchy|About|TUI.float|imv|mpv)
|
||||
windowrule = tag +floating-window, match:class (org.omarchy.bluetui|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.btop|org.omarchy.terminal|org.omarchy.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Omarchy|About|TUI.float|imv|mpv)
|
||||
windowrule = tag +floating-window, match:class (xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), match:title ^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)
|
||||
windowrule = float on, match:class org.gnome.Calculator
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Define terminal tag to style them uniformly
|
||||
windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty|foot)
|
||||
windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty)
|
||||
windowrule = tag -default-opacity, match:tag terminal
|
||||
windowrule = opacity 0.97 0.9, match:tag terminal
|
||||
|
||||
@@ -15,7 +15,7 @@ bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
||||
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar
|
||||
bindd = SUPER CTRL, SPACE, Theme background menu, exec, omarchy-menu background
|
||||
bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, omarchy-menu theme
|
||||
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, omarchy-hyprland-window-transparency-toggle
|
||||
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, omarchy-hyprland-active-window-transparency-toggle
|
||||
bindd = SUPER SHIFT, BACKSPACE, Toggle window gaps, exec, omarchy-hyprland-window-gaps-toggle
|
||||
bindd = SUPER CTRL, BACKSPACE, Toggle single-window square aspect, exec, omarchy-hyprland-window-single-square-aspect-toggle
|
||||
|
||||
@@ -46,10 +46,13 @@ bindd = SUPER CTRL, S, Share, exec, omarchy-menu share
|
||||
# Transcoding
|
||||
bindd = SUPER CTRL, R, Transcode, exec, omarchy-menu transcode
|
||||
|
||||
# Workspace layouts
|
||||
bindd = SUPER CTRL, HOME, Restore workspace layout, exec, omarchy-workspace-restore
|
||||
bindd = SUPER CTRL ALT, HOME, Save workspace layout, exec, omarchy-workspace-save
|
||||
|
||||
# Waybar-less information
|
||||
bindd = SUPER CTRL ALT, T, Show time, exec, notify-send -u low " $(date +"%A %H:%M · %d %B %Y · Week %V")"
|
||||
bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send -u low "$(omarchy-battery-status)"
|
||||
bindd = SUPER CTRL ALT, W, Show weather, exec, notify-send -u low "$(omarchy-weather-status)"
|
||||
|
||||
# Control panels
|
||||
bindd = SUPER CTRL, A, Audio controls, exec, omarchy-launch-audio
|
||||
|
||||
@@ -113,10 +113,6 @@ dwindle {
|
||||
force_split = 2 # Always split on the right
|
||||
}
|
||||
|
||||
scrolling {
|
||||
column_width = 0.49
|
||||
}
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more
|
||||
master {
|
||||
new_status = master
|
||||
|
||||
@@ -29,9 +29,6 @@ on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy
|
||||
[summary~="Learn Keybindings"]
|
||||
on-button-left=exec sh -c 'omarchy-notification-dismiss "Learn Keybindings"; omarchy-menu-keybindings'
|
||||
|
||||
[summary~="Install Dictation with Voxtype"]
|
||||
on-button-left=exec sh -c 'omarchy-notification-dismiss "Install Dictation with Voxtype"; omarchy-launch-floating-terminal-with-presentation omarchy-voxtype-install'
|
||||
|
||||
[summary~="Screenshot copied & saved"]
|
||||
max-icon-size=80
|
||||
format=<b>%s</b>\n%b
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
import shlex
|
||||
import shutil
|
||||
|
||||
from gi import require_version
|
||||
|
||||
require_version("Nautilus", "4.1")
|
||||
|
||||
from gi.repository import GObject, Gio, Nautilus
|
||||
|
||||
|
||||
SUPPORTED_MIME_PREFIXES = ("image/", "video/")
|
||||
SUPPORTED_EXTENSIONS = {
|
||||
".jpg", ".jpeg", ".png", ".webp", ".gif", ".heic", ".avif",
|
||||
".mp4", ".mov", ".m4v", ".mkv", ".webm", ".avi",
|
||||
}
|
||||
|
||||
|
||||
class TranscodeAction(GObject.GObject, Nautilus.MenuProvider):
|
||||
def _launch_transcode(self, paths):
|
||||
wrapper = shutil.which("omarchy-launch-floating-terminal-with-presentation")
|
||||
binary = shutil.which("omarchy-transcode")
|
||||
if not wrapper or not binary:
|
||||
return
|
||||
|
||||
if len(paths) == 1:
|
||||
cmd = shlex.join([binary, paths[0]])
|
||||
else:
|
||||
cmd = "; ".join(
|
||||
f"echo {shlex.quote(f'Transcoding {path}')} && "
|
||||
f"{shlex.join([binary, path])} || true"
|
||||
for path in paths
|
||||
)
|
||||
|
||||
Gio.Subprocess.new([wrapper, cmd], Gio.SubprocessFlags.NONE)
|
||||
|
||||
def _is_supported(self, file):
|
||||
mime = file.get_mime_type() or ""
|
||||
if mime.startswith(SUPPORTED_MIME_PREFIXES):
|
||||
return True
|
||||
|
||||
location = file.get_location()
|
||||
if not location:
|
||||
return False
|
||||
path = location.get_path() or ""
|
||||
lower = path.lower()
|
||||
return any(lower.endswith(ext) for ext in SUPPORTED_EXTENSIONS)
|
||||
|
||||
def _selected_paths(self, files):
|
||||
paths = []
|
||||
seen = set()
|
||||
|
||||
for file in files:
|
||||
if file.is_directory():
|
||||
continue
|
||||
if not self._is_supported(file):
|
||||
continue
|
||||
location = file.get_location()
|
||||
if not location:
|
||||
continue
|
||||
path = location.get_path()
|
||||
if path and path not in seen:
|
||||
seen.add(path)
|
||||
paths.append(path)
|
||||
return paths
|
||||
|
||||
def _make_item(self, paths):
|
||||
label = "Transcode" if len(paths) == 1 else f"Transcode {len(paths)} items"
|
||||
item = Nautilus.MenuItem(
|
||||
name="OmarchyTranscodeNautilus::transcode",
|
||||
label=label,
|
||||
icon="media-playback-start",
|
||||
)
|
||||
item.connect("activate", self._on_activate, paths)
|
||||
return item
|
||||
|
||||
def _on_activate(self, _menu, paths):
|
||||
self._launch_transcode(paths)
|
||||
|
||||
def _tools_available(self):
|
||||
return bool(
|
||||
shutil.which("omarchy-launch-floating-terminal-with-presentation")
|
||||
and shutil.which("omarchy-transcode")
|
||||
)
|
||||
|
||||
def get_file_items(self, *args):
|
||||
files = args[0] if len(args) == 1 else args[1]
|
||||
if not self._tools_available():
|
||||
return []
|
||||
|
||||
paths = self._selected_paths(files)
|
||||
if not paths:
|
||||
return []
|
||||
|
||||
return [self._make_item(paths)]
|
||||
@@ -3,7 +3,7 @@ name: omarchy
|
||||
description: >
|
||||
REQUIRED for end-user customization of Linux desktop, window manager, or system config.
|
||||
Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/,
|
||||
~/.config/alacritty/, ~/.config/foot/, ~/.config/kitty/, ~/.config/ghostty/, ~/.config/mako/,
|
||||
~/.config/alacritty/, ~/.config/kitty/, ~/.config/ghostty/, ~/.config/mako/,
|
||||
or ~/.config/omarchy/. Triggers: Hyprland, window rules, animations, keybindings,
|
||||
monitors, gaps, borders, blur, opacity, waybar, walker, terminal config, themes,
|
||||
wallpaper, night light, idle, lock screen, screenshots, layer rules, workspace
|
||||
@@ -24,7 +24,7 @@ It is not for contributing to Omarchy source code.
|
||||
|
||||
- Editing ANY file in `~/.config/hypr/` (window rules, animations, keybindings, monitors, etc.)
|
||||
- Editing ANY file in `~/.config/waybar/`, `~/.config/walker/`, `~/.config/mako/`
|
||||
- Editing terminal configs (alacritty, foot, kitty, ghostty)
|
||||
- Editing terminal configs (alacritty, kitty, ghostty)
|
||||
- Editing ANY file in `~/.config/omarchy/`
|
||||
- Window behavior, animations, opacity, blur, gaps, borders
|
||||
- Layer rules, workspace settings, display/monitor configuration
|
||||
@@ -78,7 +78,7 @@ Omarchy is built on:
|
||||
| **Hyprland** | Wayland compositor/WM | `~/.config/hypr/` |
|
||||
| **Waybar** | Status bar | `~/.config/waybar/` |
|
||||
| **Walker** | App launcher | `~/.config/walker/` |
|
||||
| **Alacritty/Foot/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` |
|
||||
| **Alacritty/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` |
|
||||
| **Mako** | Notifications | `~/.config/mako/` |
|
||||
| **SwayOSD** | On-screen display | `~/.config/swayosd/` |
|
||||
|
||||
@@ -163,7 +163,6 @@ Run `omarchy --help` for the full list. The most common groups:
|
||||
|
||||
```
|
||||
~/.config/alacritty/alacritty.toml
|
||||
~/.config/foot/foot.ini
|
||||
~/.config/kitty/kitty.conf
|
||||
~/.config/ghostty/config
|
||||
```
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/**
|
||||
* Syncs pi's light/dark theme with the active Omarchy theme.
|
||||
*
|
||||
* Omarchy light themes include:
|
||||
* ~/.config/omarchy/current/theme/light.mode
|
||||
*/
|
||||
|
||||
import { existsSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
||||
|
||||
const home = process.env.HOME ?? "";
|
||||
const lightModePath = join(home, ".config/omarchy/current/theme/light.mode");
|
||||
|
||||
function omarchyPiTheme(): "light" | "dark" {
|
||||
return existsSync(lightModePath) ? "light" : "dark";
|
||||
}
|
||||
|
||||
export default function (pi: ExtensionAPI) {
|
||||
let intervalId: ReturnType<typeof setInterval> | null = null;
|
||||
|
||||
pi.on("session_start", (_event, ctx) => {
|
||||
let currentTheme = omarchyPiTheme();
|
||||
ctx.ui.setTheme(currentTheme);
|
||||
|
||||
intervalId = setInterval(() => {
|
||||
const nextTheme = omarchyPiTheme();
|
||||
if (nextTheme !== currentTheme) {
|
||||
currentTheme = nextTheme;
|
||||
ctx.ui.setTheme(currentTheme);
|
||||
}
|
||||
}, 2000);
|
||||
});
|
||||
|
||||
pi.on("session_shutdown", () => {
|
||||
if (intervalId) {
|
||||
clearInterval(intervalId);
|
||||
intervalId = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
# Minimal Hyprland config for the SDDM Wayland greeter.
|
||||
# SDDM starts the greeter itself after the compositor is ready.
|
||||
misc {
|
||||
disable_hyprland_logo = true
|
||||
disable_splash_rendering = true
|
||||
force_default_wallpaper = 0
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = false
|
||||
}
|
||||
@@ -2,115 +2,98 @@ import QtQuick 2.0
|
||||
import SddmComponents 2.0
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
width: 640
|
||||
height: 480
|
||||
color: "#1a1b26"
|
||||
id: root
|
||||
width: 640
|
||||
height: 480
|
||||
color: "#000000"
|
||||
|
||||
property string currentUser: userModel.lastUser
|
||||
property bool loginFailed: false
|
||||
property int sessionIndex: {
|
||||
for (var i = 0; i < sessionModel.rowCount(); i++) {
|
||||
var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString()
|
||||
if (name.indexOf("uwsm") !== -1)
|
||||
return i
|
||||
}
|
||||
return sessionModel.lastIndex
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: sddm
|
||||
function onLoginFailed() {
|
||||
root.loginFailed = true
|
||||
password.text = ""
|
||||
password.focus = true
|
||||
}
|
||||
function onLoginSucceeded() {
|
||||
root.loginFailed = false
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 40
|
||||
|
||||
Image {
|
||||
id: logo
|
||||
source: "logo.png"
|
||||
width: Math.min(sourceSize.width, root.width * 0.8)
|
||||
height: sourceSize.width > 0 ? Math.round(width * sourceSize.height / sourceSize.width) : 0
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
property string currentUser: userModel.lastUser
|
||||
property int sessionIndex: {
|
||||
for (var i = 0; i < sessionModel.rowCount(); i++) {
|
||||
var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString()
|
||||
if (name.indexOf("uwsm") !== -1)
|
||||
return i
|
||||
}
|
||||
return sessionModel.lastIndex
|
||||
}
|
||||
|
||||
Row {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
spacing: 15
|
||||
Connections {
|
||||
target: sddm
|
||||
function onLoginFailed() {
|
||||
errorMessage.text = "Login failed"
|
||||
password.text = ""
|
||||
password.focus = true
|
||||
}
|
||||
function onLoginSucceeded() {
|
||||
errorMessage.text = ""
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
source: root.loginFailed ? "lock-failed.png" : "lock.png"
|
||||
width: 34
|
||||
height: 38
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Item {
|
||||
width: entry.width
|
||||
height: entry.height
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: root.height * 0.04
|
||||
width: parent.width
|
||||
|
||||
Image {
|
||||
id: entry
|
||||
source: root.loginFailed ? "entry-failed.png" : "entry.png"
|
||||
anchors.centerIn: parent
|
||||
source: "logo.svg"
|
||||
width: root.width * 0.35
|
||||
height: Math.round(width * sourceSize.height / sourceSize.width)
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
|
||||
Row {
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 20
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 5
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
spacing: root.width * 0.007
|
||||
|
||||
Repeater {
|
||||
model: Math.min(password.text.length, 21)
|
||||
|
||||
Image {
|
||||
source: "bullet.png"
|
||||
width: 7
|
||||
height: 7
|
||||
Text {
|
||||
text: "\uf023"
|
||||
color: "#ffffff"
|
||||
font.family: "JetBrainsMono Nerd Font"
|
||||
font.pixelSize: root.height * 0.025
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: root.width * 0.17
|
||||
height: root.height * 0.04
|
||||
color: "#000000"
|
||||
border.color: "#ffffff"
|
||||
border.width: 1
|
||||
clip: true
|
||||
|
||||
TextInput {
|
||||
id: password
|
||||
anchors.fill: parent
|
||||
anchors.margins: root.height * 0.008
|
||||
verticalAlignment: TextInput.AlignVCenter
|
||||
echoMode: TextInput.Password
|
||||
font.family: "JetBrainsMono Nerd Font"
|
||||
font.pixelSize: root.height * 0.02
|
||||
font.letterSpacing: root.height * 0.004
|
||||
passwordCharacter: "\u2022"
|
||||
color: "#ffffff"
|
||||
focus: true
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
||||
sddm.login(root.currentUser, password.text, root.sessionIndex)
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TextInput {
|
||||
id: password
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 20
|
||||
anchors.rightMargin: 20
|
||||
verticalAlignment: TextInput.AlignVCenter
|
||||
echoMode: TextInput.Password
|
||||
font.family: "JetBrainsMono Nerd Font"
|
||||
font.pixelSize: 24
|
||||
font.letterSpacing: 5
|
||||
passwordCharacter: "\u2022"
|
||||
color: "transparent"
|
||||
selectionColor: "transparent"
|
||||
selectedTextColor: "transparent"
|
||||
focus: true
|
||||
|
||||
onTextChanged: root.loginFailed = false
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
||||
sddm.login(root.currentUser, password.text, root.sessionIndex)
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
Text {
|
||||
id: errorMessage
|
||||
text: ""
|
||||
color: "#f7768e"
|
||||
font.family: "JetBrainsMono Nerd Font"
|
||||
font.pixelSize: root.height * 0.018
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Component.onCompleted: password.forceActiveFocus()
|
||||
Component.onCompleted: password.forceActiveFocus()
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 293 B |
Binary file not shown.
|
Before Width: | Height: | Size: 419 B |
Binary file not shown.
|
Before Width: | Height: | Size: 694 B |
Binary file not shown.
|
Before Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user