Files
pkgmgr/scripts/nix
Kevin Veen-Birkenbach fb68b325d6
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 / codesniffer-shellcheck (push) Has been cancelled
Mark stable commit / codesniffer-ruff (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
Fix ShellCheck warnings and harden shell scripts
- Quote Docker volume names to avoid word splitting
- Add missing shebangs for proper shell detection
- Annotate sourced scripts for ShellCheck resolution
- Remove unused variables
- Explicitly disable SC2016 where literal RC strings are intended
- Improve robustness of cleanup logic

https://chatgpt.com/share/693d6557-a080-800f-8915-c57476569232
2025-12-13 14:08:35 +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/:

  • bootstrap_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.