Files
pkgmgr/scripts/nix
Kevin Veen-Birkenbach 2761e829cb
Some checks failed
Mark stable commit / test-unit (push) Has been cancelled
Mark stable commit / test-integration (push) Has been cancelled
Mark stable commit / test-env-virtual (push) Has been cancelled
Mark stable commit / test-env-nix (push) Has been cancelled
Mark stable commit / test-e2e (push) Has been cancelled
Mark stable commit / test-virgin-user (push) Has been cancelled
Mark stable commit / test-virgin-root (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
ci: add GHCR container publish pipeline with semantic tags
Introduce a dedicated publish-containers workflow triggered after stable releases.
Unify container build and publish logic via scripts, add buildx-based multi-tag publishing,
default base image resolution, and Arch alias tags for latest/version/stable.

https://chatgpt.com/share/693c836b-0b00-800f-9536-9e273abd0fb5
2025-12-12 22:04:39 +01:00
..

Nix Bootstrap (package-manager)

This directory contains the Nix initialization and bootstrap logic used by package-manager to ensure the nix command is available on supported systems (host machines and CI containers).

It is invoked during package installation (Arch/Debian/Fedora scriptlets) and can also be called manually.


Entry Point

  • scripts/nix/init.sh
    Main bootstrap script. It:
    • checks whether nix is already available
    • adjusts PATH for common Nix locations
    • installs Nix when missing (daemon install on systemd hosts, single-user in containers)
    • ensures predictable nix availability via symlinks (without overwriting distro-managed paths)
    • validates that nix is usable at the end (CI-safe)

Library Layout

The entry point sources small, focused modules from scripts/nix/lib/:

  • config.sh — configuration defaults (installer URL, retry timing)
  • detect.sh — container detection helpers
  • path.sh — PATH adjustments and nix binary resolution helpers
  • symlinks.sh — user/global symlink helpers for stable nix discovery
  • users.sh — build group/users and container ownership/perms helpers
  • install.sh — installer download + retry logic and execution helpers

Each library file includes a simple guard to prevent double-sourcing.


When It Runs

This bootstrap is typically executed automatically:

  • Arch: post-install / post-upgrade hook
  • Debian: postinst
  • Fedora/RPM: %post

Notes / Design Goals

  • Cross-distro compatibility: supports common Linux layouts (including Arch placing nix in /usr/sbin).
  • Non-destructive behavior: avoids overwriting distro-managed nix binaries.
  • CI robustness: retry logic for downloads and a final nix availability check.
  • Container-safe defaults: single-user install as a dedicated nix user when running as root in containers.