# Maintainer: Ryan Hughes <ryan@omarchy.org>
pkgname='omarchy-dev'
pkgver=4.0.0.r847.g4de185b
pkgrel=1
_pkgver_base=4.0.0
_pkgver_base_tag=v3.8.2
pkgdesc='Beautiful, modern, and opinionated Arch Linux by DHH (quattro branch tip)'
arch=('any')
url='https://github.com/basecamp/omarchy'
license=('MIT')
provides=('omarchy')
conflicts=('omarchy')
# Hard depends: only packages whose removal would brick the desktop. The ISO
# pacstraps the full default install set from install/omarchy-base.packages.
depends=(
  # Omarchy meta
  'omarchy-keyring'
  'omarchy-settings-dev'

  # Bootloader stack. Lives here rather than on omarchy-settings because
  # omarchy-settings is also installed into the live ISO env (for plymouth
  # / /etc/skel seeding), where the limine-mkinitcpio-hook would fail with
  # 'Cannot detect an ESP path' inside the chroot. The omarchy-settings
  # config drop-ins under /etc/mkinitcpio.conf.d/, /etc/limine-entry-tool.d/,
  # and /etc/snapper/config-templates/ only do anything when these are
  # installed alongside.
  'limine'
  'limine-mkinitcpio-hook'
  'limine-snapper-sync'
  'snapper'

  # Wayland / Hyprland core
  'hyprland'
  'quickshell'
  'uwsm'
  'sddm'
  'xdg-desktop-portal-hyprland'

  # Audio / auth / portal essentials
  'wireplumber'
  'pipewire'
  'gnome-keyring'

  # Required by omarchy-* scripts and omarchy-shell
  'gum'
  'jq'
  'git'
  'perl' # /usr/bin/omarchy-shell invokes perl directly

  # Update availability checks (checkupdates from pacman-contrib uses fakeroot)
  'fakeroot'
  'pacman-contrib'

  # System font (UI assumes it)
  'ttf-jetbrains-mono-nerd-basic'
)

makedepends=(
  'git'
)

# Source: quattro branch tip by default; set OMARCHY_SRC=/path/to/checkout
# to build from a local source tree instead (mirrors omarchy-zsh/omarchy-fish DX).
if [[ -n "${OMARCHY_SRC:-}" ]]; then
  source=()
  sha256sums=()
else
  source=("omarchy::git+https://github.com/basecamp/omarchy.git#branch=quattro")
  sha256sums=('SKIP')
fi

pkgver() {
  cd "$srcdir/omarchy"

  local commit_count commit_hash
  if git rev-parse --verify "${_pkgver_base_tag}^{commit}" >/dev/null 2>&1; then
    commit_count=$(git rev-list --count "${_pkgver_base_tag}..HEAD")
  else
    commit_count=$(git rev-list --count HEAD)
  fi
  commit_hash=$(git rev-parse --short=7 HEAD)

  printf "%s.r%s.g%s" "$_pkgver_base" "$commit_count" "$commit_hash"
}

prepare() {
  if [[ -n "${OMARCHY_SRC:-}" ]]; then
    rm -rf "$srcdir/omarchy"
    mkdir -p "$srcdir/omarchy"
    cp -a "${OMARCHY_SRC}/." "$srcdir/omarchy/"
  fi
}

package() {
  cd "$srcdir/omarchy"

  # Runtime binaries — ship everything in bin/ except the debug helpers
  # that ship from omarchy-settings (needed before omarchy is installed,
  # e.g. on the ISO live env).
  install -d "$pkgdir/usr/bin" "$pkgdir/usr/share/omarchy/bin"
  for bin in bin/*; do
    [[ -f $bin ]] || continue
    local base
    base=$(basename "$bin")
    case "$base" in
      omarchy-debug|omarchy-debug-idle|omarchy-upload-log)
        continue
        ;;
    esac
    install -Dm755 "$bin" "$pkgdir/usr/bin/$base"
    ln -s "/usr/bin/$base" "$pkgdir/usr/share/omarchy/bin/$base"
  done

  install -d "$pkgdir/usr/share/omarchy"

  # Guard direct pacman upgrades from bypassing the Omarchy update pipeline,
  # and pause Hyprland live config reloads while settings files are replaced.
  # Ship hooks with their Exec targets so package skew cannot leave a broken
  # hook pointing at a missing binary.
  install -Dm644 default/libalpm/hooks/00-omarchy-update-guard.hook "$pkgdir/usr/share/libalpm/hooks/00-omarchy-update-guard.hook"
  install -Dm644 default/libalpm/hooks/10-omarchy-hyprland-reload-pause.hook "$pkgdir/usr/share/libalpm/hooks/10-omarchy-hyprland-reload-pause.hook"
  install -Dm644 default/libalpm/hooks/90-omarchy-hyprland-reload-resume.hook "$pkgdir/usr/share/libalpm/hooks/90-omarchy-hyprland-reload-resume.hook"

  # Target-side setup scripts and package lists used by ISO finalization,
  # first login, future users, migrations, and reinstall/reset commands.
  cp -a install "$pkgdir/usr/share/omarchy/"

  # Theme bundles for theme switching.
  cp -a themes "$pkgdir/usr/share/omarchy/"

  # Versioned migrations runner reads from this tree.
  cp -a migrations "$pkgdir/usr/share/omarchy/"

  # Fresh users created after install are already on the package layout in this
  # build, so seed migration markers through /etc/skel. Existing users keep
  # their own state and still run pending migrations on update.
  if compgen -G 'migrations/*.sh' >/dev/null; then
    install -d "$pkgdir/etc/skel/.local/state/omarchy/migrations"
    for migration in migrations/*.sh; do
      touch "$pkgdir/etc/skel/.local/state/omarchy/migrations/$(basename "$migration")"
    done
  fi
  # Quickshell desktop shell tree.
  cp -a shell "$pkgdir/usr/share/omarchy/"

  # Runtime version file.
  install -Dm644 version "$pkgdir/usr/share/omarchy/version"
}
