/ de-omarchy / bin / omarchy-update-lock
swadhinbiswas Initial de-omarchy: Omarchy UI layer for Arch-based distros · 8/22/2026
9f393b2
48 lines · 1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash

# omarchy:summary=Run a command while holding the Omarchy update lock
# omarchy:args=<held|run> [command] [args...]
# omarchy:hidden=true

set -e

lock_dir="${XDG_RUNTIME_DIR:-/tmp}"
lock_path="$lock_dir/omarchy-update.lock"

lock_is_held() {
  local lock_fd_path=""

  [[ -n ${OMARCHY_UPDATE_LOCK_FD:-} && -e /proc/$$/fd/$OMARCHY_UPDATE_LOCK_FD ]] || return 1

  lock_fd_path=$(readlink -f "/proc/$$/fd/$OMARCHY_UPDATE_LOCK_FD" 2>/dev/null || true)
  [[ $lock_fd_path == "$(readlink -m "$lock_path")" ]] &&
    flock -n "$OMARCHY_UPDATE_LOCK_FD"
}

case "${1:-}" in
  held)
    lock_is_held
    ;;
  run)
    shift
    if (( $# == 0 )); then
      echo "Usage: omarchy-update-lock run <command> [args...]" >&2
      exit 2
    fi

    mkdir -p "$lock_dir" 2>/dev/null || true
    exec {OMARCHY_UPDATE_LOCK_FD}>"$lock_path"
    if ! flock -n "$OMARCHY_UPDATE_LOCK_FD"; then
      echo "An Omarchy update is already running."
      exit 1
    fi

    export OMARCHY_UPDATE_LOCK_FD
    exec "$@"
    ;;
  *)
    echo "Usage: omarchy-update-lock <held|run> [command] [args...]" >&2
    exit 2
    ;;
esac