The indicators widget broadcast a refresh every 2s, fanning out to four status subprocesses (nightlight, idle, reminder, screen-recording), and NightLight/StayAwake each ran an additional 5s poll. On an idle desktop this was the dominant source of process churn (~33 of ~53 forks/sec in a VM). The state-changing commands already push `omarchy.indicators refresh` over IPC, so the polling was redundant. Drop the 2s broadcast and the two 5s timers; indicators now refresh at startup and on the IPC push. Also fix three callers that pushed to the wrong target `Indicators` instead of `omarchy.indicators` (screen recording, notification silencing, and the omarchy-shell help example) — those pushes silently failed and only appeared to work because the poll masked them. Idle fork rate drops ~53/s to ~20/s. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
70 lines
2.1 KiB
Bash
Executable File
70 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Send an IPC call to the running Omarchy shell
|
|
# omarchy:args=[-q] <target> <method> [args...]
|
|
# omarchy:examples=omarchy shell shell ping | omarchy-shell shell toggle omarchy.menu '{"menu":"root"}'
|
|
|
|
QUIET=0
|
|
if [[ ${1:-} == "-q" ]]; then
|
|
QUIET=1
|
|
shift
|
|
fi
|
|
|
|
fail() {
|
|
(( QUIET )) && exit 0
|
|
echo "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
if (( $# == 0 )) || [[ $1 == "-h" || $1 == "--help" ]]; then
|
|
cat <<USAGE
|
|
Usage: omarchy-shell [-q] <target> <method> [args...]
|
|
|
|
Forwards an IPC call to the running Omarchy shell. The shell is expected
|
|
to already be running; this command does not start it.
|
|
|
|
Options:
|
|
-q Quiet best-effort mode. Suppress output and return success even when
|
|
the shell, target, method, or arguments are unavailable.
|
|
|
|
Examples:
|
|
omarchy-shell shell ping
|
|
omarchy-shell -q omarchy.indicators refresh
|
|
omarchy-shell shell listPlugins
|
|
omarchy-shell shell toggle omarchy.menu '{"menu":"root"}'
|
|
USAGE
|
|
exit 0
|
|
fi
|
|
|
|
(( $# >= 2 )) || fail "Usage: omarchy-shell <target> <method> [args...]"
|
|
[[ -n ${OMARCHY_PATH:-} ]] || fail "OMARCHY_PATH is not set"
|
|
[[ -f $OMARCHY_PATH/shell/shell.qml ]] || fail "omarchy-shell config not found: $OMARCHY_PATH/shell/shell.qml"
|
|
|
|
if [[ $1 == "shell" && ( $2 == "summon" || $2 == "toggle" ) ]] && (( $# == 3 )); then
|
|
set -- "$1" "$2" "$3" "{}"
|
|
fi
|
|
|
|
# The -- keeps function names that shadow qs subcommands (e.g. show) as
|
|
# positionals. qs reports connection failures with a nonzero exit, but IPC-level
|
|
# failures (unknown target/function, bad arguments) go to stdout with exit 0.
|
|
ipc_timeout=${OMARCHY_SHELL_IPC_TIMEOUT:-2s}
|
|
output=$(timeout --kill-after=1s "$ipc_timeout" qs -p "$OMARCHY_PATH/shell" ipc call -- "$@" 2>/dev/null)
|
|
ipc_status=$?
|
|
|
|
if (( ipc_status == 124 || ipc_status == 137 )); then
|
|
fail "omarchy-shell is not responding"
|
|
elif (( ipc_status != 0 )); then
|
|
fail "omarchy-shell is not running"
|
|
fi
|
|
|
|
case $output in
|
|
"Target not found." | "Function not found." | "Too few arguments provided"* | "Too many arguments provided"*)
|
|
fail "$output"
|
|
;;
|
|
esac
|
|
|
|
if (( !QUIET )) && [[ -n $output ]]; then
|
|
echo "$output"
|
|
fi
|
|
exit 0
|