From d4e84b0e41d92db0343d4c6b481ab0066c1a1090 Mon Sep 17 00:00:00 2001 From: randogoth Date: Mon, 22 Dec 2025 21:13:22 +0200 Subject: [PATCH] daemonix approach --- files/scripts/install-nix.sh | 13 +++++++++++ files/system/etc/modules-load.d/overlay.conf | 1 + files/system/usr/bin/mount-nix-overlay.sh | 13 +++++++++++ files/system/usr/bin/nix-toolbox-ensure | 22 ------------------- .../lib/systemd/system/nix-overlay.service | 14 ++++++++++++ .../systemd/user/nix-toolbox-create.service | 14 ------------ recipes/recipe.yml | 9 ++++++-- 7 files changed, 48 insertions(+), 38 deletions(-) create mode 100755 files/scripts/install-nix.sh create mode 100644 files/system/etc/modules-load.d/overlay.conf create mode 100755 files/system/usr/bin/mount-nix-overlay.sh delete mode 100755 files/system/usr/bin/nix-toolbox-ensure create mode 100644 files/system/usr/lib/systemd/system/nix-overlay.service delete mode 100644 files/system/usr/lib/systemd/user/nix-toolbox-create.service diff --git a/files/scripts/install-nix.sh b/files/scripts/install-nix.sh new file mode 100755 index 0000000..39a0332 --- /dev/null +++ b/files/scripts/install-nix.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -euo pipefail + +rpm_url="https://nix-community.github.io/nix-installers/nix/x86_64/nix-multi-user-2.24.10.rpm" + +install -d /usr/share/nix-store /var/lib/nix-store /var/cache/nix-store /nix + +dnf install -y "$rpm_url" + +# Move the pre-populated store out of /nix so it can serve as the immutable lowerdir. +if compgen -G "/nix/*" >/dev/null; then + mv /nix/* /usr/share/nix-store/ +fi diff --git a/files/system/etc/modules-load.d/overlay.conf b/files/system/etc/modules-load.d/overlay.conf new file mode 100644 index 0000000..08047cf --- /dev/null +++ b/files/system/etc/modules-load.d/overlay.conf @@ -0,0 +1 @@ +overlay diff --git a/files/system/usr/bin/mount-nix-overlay.sh b/files/system/usr/bin/mount-nix-overlay.sh new file mode 100755 index 0000000..22ad012 --- /dev/null +++ b/files/system/usr/bin/mount-nix-overlay.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -euo pipefail + +mkdir -p /usr/share/nix-store /var/lib/nix-store /var/cache/nix-store /nix + +# Skip if already mounted to avoid errors on reload. +if mountpoint -q /nix; then + exit 0 +fi + +mount -t overlay overlay \ + -o lowerdir=/usr/share/nix-store,upperdir=/var/lib/nix-store,workdir=/var/cache/nix-store \ + /nix diff --git a/files/system/usr/bin/nix-toolbox-ensure b/files/system/usr/bin/nix-toolbox-ensure deleted file mode 100755 index 690afc4..0000000 --- a/files/system/usr/bin/nix-toolbox-ensure +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -image_ref="${NIX_TOOLBOX_IMAGE:-ghcr.io/thrix/nix-toolbox:42}" -container_name="${NIX_TOOLBOX_CONTAINER:-nix-toolbox-42}" - -if ! command -v toolbox >/dev/null 2>&1; then - echo "toolbox not installed; skipping nix-toolbox setup" >&2 - exit 0 -fi - -if ! command -v podman >/dev/null 2>&1; then - echo "podman not installed; skipping nix-toolbox setup" >&2 - exit 0 -fi - -if podman container exists "$container_name"; then - exit 0 -fi - -echo "Creating $container_name from $image_ref" -distrobox create --name "$container_name" --image "$image_ref" diff --git a/files/system/usr/lib/systemd/system/nix-overlay.service b/files/system/usr/lib/systemd/system/nix-overlay.service new file mode 100644 index 0000000..df9b154 --- /dev/null +++ b/files/system/usr/lib/systemd/system/nix-overlay.service @@ -0,0 +1,14 @@ +[Unit] +Description=Mount OverlayFS for /nix +DefaultDependencies=no +After=local-fs.target +Before=nix-daemon.service +ConditionPathExists=/usr/bin/mount-nix-overlay.sh + +[Service] +Type=oneshot +ExecStart=/usr/bin/mount-nix-overlay.sh +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/files/system/usr/lib/systemd/user/nix-toolbox-create.service b/files/system/usr/lib/systemd/user/nix-toolbox-create.service deleted file mode 100644 index 686483a..0000000 --- a/files/system/usr/lib/systemd/user/nix-toolbox-create.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Ensure nix-toolbox container is available for this user -After=network-online.target -Wants=network-online.target - -[Service] -Type=oneshot -ExecStart=/usr/bin/nix-toolbox-ensure -RemainAfterExit=yes -Restart=on-failure -RestartSec=10 - -[Install] -WantedBy=default.target diff --git a/recipes/recipe.yml b/recipes/recipe.yml index b9356c8..b208b11 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -18,10 +18,15 @@ modules: - source: system destination: / # copies files/system/* (* means everything inside it) into your image's root folder / + - type: script + scripts: + - files/scripts/install-nix.sh + - type: systemd - user: + system: enabled: - - nix-toolbox-create.service + - nix-overlay.service + - nix-daemon.service - type: dnf install: