#!/bin/bash

# omarchy:summary=Succeed when Docker needs sudo, fail when it can be used directly
# omarchy:args=[--configured]
# omarchy:examples=omarchy-sudo-docker && echo "needs sudo" | omarchy-sudo-docker --configured
# omarchy:hidden=true

# The docker group is root-equivalent, so Omarchy leaves users out of it by
# default and reaches the daemon through a prompt instead. Everything that has
# to make that choice asks here rather than testing group membership itself.
#
# Two questions, because they have different answers between toggling sudoless
# Docker and the reboot that applies it (group membership is fixed when the
# session is created):
#
#   (default)      Does Docker need sudo *right now*? Answered by whether this
#                  process can actually reach the socket, which is what decides
#                  if a command must elevate. Still true in the window after
#                  sudoless Docker is enabled but before the reboot.
#   --configured   Will it need sudo once the account's groups take effect?
#                  Answered from the account's configured groups, so the menu
#                  offers the toggle that can actually change state.
#
# Succeeds (exit 0) when sudo is needed, so it reads as `if omarchy-sudo-docker`.

DOCKER_SOCKET="${OMARCHY_DOCKER_SOCKET:-/var/run/docker.sock}"

case "${1:-}" in
--configured)
  # An account in the docker group will not need sudo after the next login.
  id -nG "$USER" 2>/dev/null | grep -qw docker && exit 1
  exit 0
  ;;
"")
  # A socket we can write is a daemon we can drive without elevating. A missing
  # socket counts as needing sudo: reaching it means starting it as root anyway.
  [[ -w $DOCKER_SOCKET ]] && exit 1
  exit 0
  ;;
*)
  echo "Usage: omarchy-sudo-docker [--configured]" >&2
  exit 2
  ;;
esac
