#!/usr/bin/env bash set -euo pipefail export NIX_CONFIG="${NIX_CONFIG:-} experimental-features = nix-command flakes accept-flake-config = false warn-dirty = false " ensure_nix_profile() { if [ -f /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh ]; then . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh elif [ -f "$HOME/.nix-profile/etc/profile.d/nix.sh" ]; then . "$HOME/.nix-profile/etc/profile.d/nix.sh" fi } install_nix_if_missing() { if command -v nix >/dev/null 2>&1; then return fi echo "Nix not found. Installing Nix..." if [ "$(id -u)" -eq 0 ]; then echo "Running as root; preparing nixbld users for container/Codex environment..." if ! getent group nixbld >/dev/null; then groupadd -r nixbld fi for i in $(seq 1 10); do if ! id "nixbld$i" >/dev/null 2>&1; then useradd \ -r \ -g nixbld \ -G nixbld \ -d /var/empty \ -s /usr/sbin/nologin \ "nixbld$i" || true fi done mkdir -p /etc/nix cat > /etc/nix/nix.conf <<'EOF' experimental-features = nix-command flakes accept-flake-config = false warn-dirty = false build-users-group = nixbld EOF sh <(curl -L https://nixos.org/nix/install) --no-daemon else sh <(curl -L https://nixos.org/nix/install) --no-daemon fi ensure_nix_profile } install_nix_if_missing ensure_nix_profile mkdir -p "$HOME/.config/nix" cat > "$HOME/.config/nix/nix.conf" <<'EOF' experimental-features = nix-command flakes accept-flake-config = false warn-dirty = false EOF echo "Nix version:" nix --version echo "Installing jq if unavailable..." if ! command -v jq >/dev/null 2>&1; then nix profile install nixpkgs#jq fi echo "Available NixOS hosts:" hosts="$(nix eval --json --no-use-registries --no-accept-flake-config .#nixosConfigurations --apply builtins.attrNames | jq -r '.[]')" echo "$hosts" echo "Evaluating all host toplevel derivations..." for host in $hosts; do echo "==> Evaluating $host" nix eval --raw --no-use-registries --no-accept-flake-config ".#nixosConfigurations.${host}.config.system.build.toplevel.drvPath" done echo "Codex setup complete."