From 7a9e31f66dd37f21fe2b00269cbb3f2bc2cc9d0d Mon Sep 17 00:00:00 2001 From: randogoth Date: Thu, 1 Jan 2026 17:47:03 +0200 Subject: [PATCH 01/12] removed razer --- recipes/recipe.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/recipes/recipe.yml b/recipes/recipe.yml index b13c119..364fab8 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -33,26 +33,14 @@ modules: files: add: - https://repo.vscodium.dev/vscodium.repo - - https://openrazer.github.io/hardware:razer.repo install: packages: - repo: vscodium packages: - codium - - repo: hardware_razer - packages: - - openrazer-daemon - - openrazer-kernel-modules-dkms - - openrazer-meta - - python3-openrazer - - dkms - - python3-numpy - - python3-setproctitle - - python3-daemonize - syncthing - uv - waydroid - - xautomation remove: packages: - android-tools @@ -70,8 +58,6 @@ modules: - docker-ce-rootless-extras - docker-compose-plugin - docker-model-plugin - - kmod-openrazer - - openrazer-kmod-common - type: justfiles include: From fb7a13908d232bc64c38b9afecd62f05f70f7b43 Mon Sep 17 00:00:00 2001 From: randogoth Date: Sat, 3 Jan 2026 16:50:35 +0200 Subject: [PATCH 02/12] nix daemon fix --- files/system/usr/lib/systemd/system/nix-overlay.service | 5 +++-- recipes/recipe.yml | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/files/system/usr/lib/systemd/system/nix-overlay.service b/files/system/usr/lib/systemd/system/nix-overlay.service index df9b154..fca9a70 100644 --- a/files/system/usr/lib/systemd/system/nix-overlay.service +++ b/files/system/usr/lib/systemd/system/nix-overlay.service @@ -2,13 +2,14 @@ Description=Mount OverlayFS for /nix DefaultDependencies=no After=local-fs.target -Before=nix-daemon.service +Before=systemd-tmpfiles-setup.service nix-daemon.service nix-daemon.socket ConditionPathExists=/usr/bin/mount-nix-overlay.sh [Service] Type=oneshot ExecStart=/usr/bin/mount-nix-overlay.sh +ExecStartPost=/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nix-daemon.conf RemainAfterExit=yes [Install] -WantedBy=multi-user.target +WantedBy=sysinit.target diff --git a/recipes/recipe.yml b/recipes/recipe.yml index 364fab8..82f2645 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -27,6 +27,7 @@ modules: enabled: - nix-overlay.service - nix-daemon.service + - nix-daemon.socket - type: dnf repos: From f194d54d2dcab42829d1aeae9c264c7a4b61f44a Mon Sep 17 00:00:00 2001 From: randogoth Date: Sat, 3 Jan 2026 17:57:27 +0200 Subject: [PATCH 03/12] script fix --- files/system/usr/libexec/deinonyxus/curator.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/files/system/usr/libexec/deinonyxus/curator.sh b/files/system/usr/libexec/deinonyxus/curator.sh index 4fc2b1c..f7cbe77 100755 --- a/files/system/usr/libexec/deinonyxus/curator.sh +++ b/files/system/usr/libexec/deinonyxus/curator.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash set -oue pipefail -curator_git="--from git+https://codeberg.org/randogoth/curator/" +curator_pkg="git+https://codeberg.org/randogoth/curator/" -uvx $curator_git curator init -uvx $curator_git curator add nix:mc nix:micro nix:devbox -uvx $curator_git curator switch -uv tool install $curator_git curator \ No newline at end of file +uvx --from "$curator_pkg" curator init +uvx --from "$curator_pkg" curator add nix:mc nix:micro nix:devbox +uvx --from "$curator_pkg" curator switch +uv tool install "$curator_pkg" From e216813d5673b8a5a6bd88f5f97e9a066b52d1f6 Mon Sep 17 00:00:00 2001 From: randogoth Date: Sat, 3 Jan 2026 18:11:14 +0200 Subject: [PATCH 04/12] added os release info --- recipes/recipe.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/recipes/recipe.yml b/recipes/recipe.yml index 82f2645..5ddc001 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -13,6 +13,16 @@ image-version: latest # latest is also supported if you want new updates ASAP # you can include multiple instances of the same module modules: + - type: os-release + properties: + ID: deinonyxus + NAME: Deinonyxus + PRETTY_NAME: Deinonyxus (Bluefin DX) + DEFAULT_HOSTNAME: deinonyxus + HOME_URL: https://codeberg.org/randogoth/deinonyxus + SUPPORT_URL: https://codeberg.org/randogoth/deinonyxus/issues + BUG_REPORT_URL: https://codeberg.org/randogoth/deinonyxus/issues + - type: files files: - source: system From febe1ed1c01995b648fe1fc7ba9afa098dd5b154 Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 7 Jan 2026 18:23:52 +0200 Subject: [PATCH 05/12] openrazer --- files/scripts/ensure-plugdev-defaults.sh | 15 +++++++++++++++ files/system/usr/lib/sysusers.d/10-openrazer.conf | 2 ++ recipes/recipe.yml | 9 ++------- 3 files changed, 19 insertions(+), 7 deletions(-) create mode 100755 files/scripts/ensure-plugdev-defaults.sh create mode 100644 files/system/usr/lib/sysusers.d/10-openrazer.conf diff --git a/files/scripts/ensure-plugdev-defaults.sh b/files/scripts/ensure-plugdev-defaults.sh new file mode 100755 index 0000000..d554a26 --- /dev/null +++ b/files/scripts/ensure-plugdev-defaults.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Ensure new users are added to plugdev by default so OpenRazer udev rules work. +useradd_defaults=/etc/default/useradd +plugdev_group=plugdev + +touch "$useradd_defaults" + +if ! grep -q "^GROUPS=" "$useradd_defaults"; then + printf 'GROUPS=%s\n' "$plugdev_group" >>"$useradd_defaults" +elif ! grep -Eq "^GROUPS=.*\\b${plugdev_group}\\b" "$useradd_defaults"; then + # Append plugdev to any existing GROUPS setting. + sed -i "s/^GROUPS=\\(.*\\)/GROUPS=\\1 ${plugdev_group}/" "$useradd_defaults" +fi diff --git a/files/system/usr/lib/sysusers.d/10-openrazer.conf b/files/system/usr/lib/sysusers.d/10-openrazer.conf new file mode 100644 index 0000000..e9fc454 --- /dev/null +++ b/files/system/usr/lib/sysusers.d/10-openrazer.conf @@ -0,0 +1,2 @@ +# Ensure plugdev exists for OpenRazer udev permissions +g plugdev - - diff --git a/recipes/recipe.yml b/recipes/recipe.yml index 7165271..2168780 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -21,6 +21,7 @@ modules: - type: script scripts: - install-lix.sh + - ensure-plugdev-defaults.sh - type: systemd system: @@ -40,13 +41,7 @@ modules: - repo: vscodium packages: - codium - - repo: hardware_razer - packages: - - openrazer-daemon - - python3-openrazer - - python3-numpy - - python3-setproctitle - - python3-daemonize + - openrazer-daemon - syncthing - uv - waydroid From 1e7553948e3f0e80065477f44916ff49ceb7fedf Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 7 Jan 2026 18:29:37 +0200 Subject: [PATCH 06/12] polychromatic --- recipes/recipe.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/recipes/recipe.yml b/recipes/recipe.yml index 2168780..9a5317a 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -76,6 +76,7 @@ modules: install: # system flatpaks we want all users to have and not remove - app.zen_browser.zen - org.telegram.desktop + - app.polychromatic.controller remove: # replace default Firefox with Waterfox - org.mozilla.firefox - scope: user # Also add Flathub user repo, but no user packages From 29beb6408fc2deba2f0498a01a3669c238aa59cb Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 7 Jan 2026 18:56:06 +0200 Subject: [PATCH 07/12] kmod --- recipes/recipe.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recipes/recipe.yml b/recipes/recipe.yml index 9a5317a..af25d09 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -41,13 +41,17 @@ modules: - repo: vscodium packages: - codium + - dkms - openrazer-daemon + - openrazer-kernel-modules-dkms - syncthing - uv - waydroid - xautomation remove: packages: + - kmod-openrazer + - openrazer-kmod-common - android-tools - cockpit-bridge - cockpit-machines From c2eb4e0bf6b04eb2b93019ab800249c426e82f19 Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 14 Jan 2026 18:19:46 +0200 Subject: [PATCH 08/12] bind-mount attempt --- README.md | 2 +- files/scripts/install-lix.sh | 7 ++-- files/system/etc/modules-load.d/overlay.conf | 1 - files/system/usr/bin/mount-nix-overlay.sh | 13 -------- files/system/usr/bin/mount-nix.sh | 32 +++++++++++++++++++ .../lib/systemd/system/nix-overlay.service | 10 +++--- recipes/recipe.yml | 10 +----- 7 files changed, 43 insertions(+), 32 deletions(-) delete mode 100644 files/system/etc/modules-load.d/overlay.conf delete mode 100755 files/system/usr/bin/mount-nix-overlay.sh create mode 100755 files/system/usr/bin/mount-nix.sh diff --git a/README.md b/README.md index c1b0fdf..3299ba9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Deinonyxus* is a personal spin of the UBlue Bluefin DX image with the 🍦[Lix](https://lix.systems/) flavored Nix package manager baked in and a first-login bootstrap for simple declarative package management using [curator](https://codeberg.org/randogoth/curator). -The overlay mount approach was directly borrowed from the [Daemonix](https://github.com/DXC-0/daemonix/) Silverblue/Nix image. +The Nix store is seeded into `/usr/share/nix-store` in the image and bind-mounted from `/var/lib/nix-store` to `/nix` on boot to avoid overlay stacking limits on composefs/ostree. ## What’s inside - Base: `ghcr.io/ublue-os/bluefin-dx:latest` without Cockpit, Docker, Firefox, VS Code diff --git a/files/scripts/install-lix.sh b/files/scripts/install-lix.sh index 59ba7dc..08d3cba 100755 --- a/files/scripts/install-lix.sh +++ b/files/scripts/install-lix.sh @@ -5,7 +5,7 @@ set -euo pipefail rpm_url="https://nix-community.github.io/nix-installers/lix/x86_64/lix-multi-user-2.91.1.rpm" -install -d /usr/share/nix-store /var/lib/nix-store /var/cache/nix-store /nix /etc/nix +install -d /usr/share/nix-store /var/lib/nix-store /nix /etc/nix # Avoid systemd calls during RPM %post in the image build environment. export SYSTEMD_OFFLINE=1 @@ -40,8 +40,9 @@ ensure_list_value() { ensure_list_value "substituters" "$lix_cache_url" ensure_list_value "trusted-public-keys" "$lix_cache_key" -# === MOVE INITIAL NIX STORE TO LOWERDIR === +# === SEED STORE FOR FIRST BOOT (copied into /var on boot) === if compgen -G "/nix/*" >/dev/null; then - mv /nix/* /usr/share/nix-store/ + rsync -aH --delete /nix/ /usr/share/nix-store/ + rm -rf /nix/* fi diff --git a/files/system/etc/modules-load.d/overlay.conf b/files/system/etc/modules-load.d/overlay.conf deleted file mode 100644 index 08047cf..0000000 --- a/files/system/etc/modules-load.d/overlay.conf +++ /dev/null @@ -1 +0,0 @@ -overlay diff --git a/files/system/usr/bin/mount-nix-overlay.sh b/files/system/usr/bin/mount-nix-overlay.sh deleted file mode 100755 index 22ad012..0000000 --- a/files/system/usr/bin/mount-nix-overlay.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/mount-nix.sh b/files/system/usr/bin/mount-nix.sh new file mode 100755 index 0000000..5e45edf --- /dev/null +++ b/files/system/usr/bin/mount-nix.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Bind-mount /var/lib/nix-store to /nix. +# If /var/lib/nix-store is empty, seed it from the baked store in /usr/share/nix-store. + +mkdir -p /usr/share/nix-store /var/lib/nix-store /nix + +copy_seed_store() { + if command -v rsync >/dev/null 2>&1; then + rsync -aH --delete /usr/share/nix-store/ /var/lib/nix-store/ + else + cp -a /usr/share/nix-store/. /var/lib/nix-store/ + fi +} + +if ! mountpoint -q /nix; then + if [ -z "$(ls -A /var/lib/nix-store 2>/dev/null)" ] && compgen -G "/usr/share/nix-store/*" >/dev/null; then + copy_seed_store + fi + + mount --bind /var/lib/nix-store /nix + mount -o remount,bind,exec /nix + + # Ensure daemon paths exist and labels are sane. + if command -v systemd-tmpfiles >/dev/null 2>&1; then + systemd-tmpfiles --create /usr/lib/tmpfiles.d/nix-daemon.conf + fi + if command -v restorecon >/dev/null 2>&1; then + restorecon -RF /var/lib/nix-store /nix || true + fi +fi diff --git a/files/system/usr/lib/systemd/system/nix-overlay.service b/files/system/usr/lib/systemd/system/nix-overlay.service index fca9a70..e0b8c8e 100644 --- a/files/system/usr/lib/systemd/system/nix-overlay.service +++ b/files/system/usr/lib/systemd/system/nix-overlay.service @@ -1,14 +1,14 @@ [Unit] -Description=Mount OverlayFS for /nix +Description=Bind-mount /var/lib/nix-store to /nix DefaultDependencies=no After=local-fs.target -Before=systemd-tmpfiles-setup.service nix-daemon.service nix-daemon.socket -ConditionPathExists=/usr/bin/mount-nix-overlay.sh +RequiresMountsFor=/var /var/lib/nix-store +Before=nix-daemon.service nix-daemon.socket +ConditionPathExists=/usr/bin/mount-nix.sh [Service] Type=oneshot -ExecStart=/usr/bin/mount-nix-overlay.sh -ExecStartPost=/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nix-daemon.conf +ExecStart=/usr/bin/mount-nix.sh RemainAfterExit=yes [Install] diff --git a/recipes/recipe.yml b/recipes/recipe.yml index af25d09..258e836 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -35,23 +35,16 @@ modules: files: add: - https://repo.vscodium.dev/vscodium.repo - - https://openrazer.github.io/hardware:razer.repo install: packages: - repo: vscodium packages: - codium - - dkms - - openrazer-daemon - - openrazer-kernel-modules-dkms - syncthing - uv - waydroid - - xautomation remove: packages: - - kmod-openrazer - - openrazer-kmod-common - android-tools - cockpit-bridge - cockpit-machines @@ -78,9 +71,8 @@ modules: scope: system # If no repo information is specified, Flathub will be used by default install: # system flatpaks we want all users to have and not remove - - app.zen_browser.zen + - net.waterfox.waterfox - org.telegram.desktop - - app.polychromatic.controller remove: # replace default Firefox with Waterfox - org.mozilla.firefox - scope: user # Also add Flathub user repo, but no user packages From 8e33e4fa3f67e6ddf6926e9bcae425f2ef617011 Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 14 Jan 2026 18:46:55 +0200 Subject: [PATCH 09/12] fixed missing system profile --- files/system/usr/bin/mount-nix.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/files/system/usr/bin/mount-nix.sh b/files/system/usr/bin/mount-nix.sh index 5e45edf..2dc3a43 100755 --- a/files/system/usr/bin/mount-nix.sh +++ b/files/system/usr/bin/mount-nix.sh @@ -14,11 +14,25 @@ copy_seed_store() { fi } +ensure_system_profile() { + local seed_profile="/usr/share/nix-store/var/nix/profiles/system" + local target_profile="/var/lib/nix-store/var/nix/profiles/system" + + mkdir -p /var/lib/nix-store/var/nix/profiles + + if { [ ! -e "$target_profile" ] || [ -L "$target_profile" ] && [ ! -e "$(readlink -f "$target_profile")" ]; } \ + && [ -e "$seed_profile" ]; then + cp -a "$seed_profile" "$target_profile" + fi +} + if ! mountpoint -q /nix; then if [ -z "$(ls -A /var/lib/nix-store 2>/dev/null)" ] && compgen -G "/usr/share/nix-store/*" >/dev/null; then copy_seed_store fi + ensure_system_profile + mount --bind /var/lib/nix-store /nix mount -o remount,bind,exec /nix From f65c6846f7c6bbcc9f4b0bf171d3a44bc282ae40 Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 14 Jan 2026 19:45:46 +0200 Subject: [PATCH 10/12] selinux fix --- .../targeted/contexts/files/file_contexts.local | 2 ++ .../system/nix-daemon.service.d/selinux.conf | 5 +++++ files/system/usr/bin/mount-nix.sh | 16 ++++++++++++++-- files/system/usr/bin/nix-daemon-wrapper.sh | 2 ++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 files/system/etc/selinux/targeted/contexts/files/file_contexts.local create mode 100644 files/system/etc/systemd/system/nix-daemon.service.d/selinux.conf create mode 100644 files/system/usr/bin/nix-daemon-wrapper.sh diff --git a/files/system/etc/selinux/targeted/contexts/files/file_contexts.local b/files/system/etc/selinux/targeted/contexts/files/file_contexts.local new file mode 100644 index 0000000..541fc38 --- /dev/null +++ b/files/system/etc/selinux/targeted/contexts/files/file_contexts.local @@ -0,0 +1,2 @@ +/nix(/.*)? system_u:object_r:bin_t:s0 +/var/lib/nix-store(/.*)? system_u:object_r:bin_t:s0 diff --git a/files/system/etc/systemd/system/nix-daemon.service.d/selinux.conf b/files/system/etc/systemd/system/nix-daemon.service.d/selinux.conf new file mode 100644 index 0000000..1b14e8b --- /dev/null +++ b/files/system/etc/systemd/system/nix-daemon.service.d/selinux.conf @@ -0,0 +1,5 @@ +[Service] +# Run the daemon unconfined to avoid SELinux denials on the Nix store binaries. +SELinuxContext=system_u:system_r:unconfined_service_t:s0 +ExecStart= +ExecStart=/usr/bin/nix-daemon-wrapper.sh --daemon diff --git a/files/system/usr/bin/mount-nix.sh b/files/system/usr/bin/mount-nix.sh index 2dc3a43..b580557 100755 --- a/files/system/usr/bin/mount-nix.sh +++ b/files/system/usr/bin/mount-nix.sh @@ -14,6 +14,13 @@ copy_seed_store() { fi } +sync_missing_store() { + # Ensure any baked store paths exist in /var without clobbering user additions. + if command -v rsync >/dev/null 2>&1; then + rsync -aH --ignore-existing /usr/share/nix-store/store/ /var/lib/nix-store/store/ + fi +} + ensure_system_profile() { local seed_profile="/usr/share/nix-store/var/nix/profiles/system" local target_profile="/var/lib/nix-store/var/nix/profiles/system" @@ -21,7 +28,7 @@ ensure_system_profile() { mkdir -p /var/lib/nix-store/var/nix/profiles if { [ ! -e "$target_profile" ] || [ -L "$target_profile" ] && [ ! -e "$(readlink -f "$target_profile")" ]; } \ - && [ -e "$seed_profile" ]; then + && { [ -e "$seed_profile" ] || [ -L "$seed_profile" ]; }; then cp -a "$seed_profile" "$target_profile" fi } @@ -32,9 +39,14 @@ if ! mountpoint -q /nix; then fi ensure_system_profile + sync_missing_store mount --bind /var/lib/nix-store /nix - mount -o remount,bind,exec /nix + # Force an executable SELinux context on the bind mount so systemd can exec nix-daemon. + # Use a permissive fallback if the label option is rejected. + if ! mount -o remount,bind,exec,context=system_u:object_r:bin_t:s0 /nix 2>/dev/null; then + mount -o remount,bind,exec /nix + fi # Ensure daemon paths exist and labels are sane. if command -v systemd-tmpfiles >/dev/null 2>&1; then diff --git a/files/system/usr/bin/nix-daemon-wrapper.sh b/files/system/usr/bin/nix-daemon-wrapper.sh new file mode 100644 index 0000000..bf2cf58 --- /dev/null +++ b/files/system/usr/bin/nix-daemon-wrapper.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +exec /nix/var/nix/profiles/system/bin/nix-daemon "$@" From f6b7be239ddda47dda1442df4f8d9ba503e533a2 Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 14 Jan 2026 20:28:01 +0200 Subject: [PATCH 11/12] removed curator --- README.md | 13 ++----------- files/scripts/ensure-plugdev-defaults.sh | 15 --------------- .../deinonyxus-curator-init.service | 1 - .../systemd/user/deinonyxus-curator-init.service | 13 ------------- files/system/usr/lib/sysusers.d/10-openrazer.conf | 2 -- files/system/usr/libexec/deinonyxus/curator.sh | 9 --------- recipes/recipe.yml | 1 - 7 files changed, 2 insertions(+), 52 deletions(-) delete mode 100755 files/scripts/ensure-plugdev-defaults.sh delete mode 120000 files/system/usr/lib/systemd/user/default.target.wants/deinonyxus-curator-init.service delete mode 100644 files/system/usr/lib/systemd/user/deinonyxus-curator-init.service delete mode 100644 files/system/usr/lib/sysusers.d/10-openrazer.conf delete mode 100755 files/system/usr/libexec/deinonyxus/curator.sh diff --git a/README.md b/README.md index 3299ba9..315f19f 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,11 @@ # Deinonyxus   [![bluebuild build badge](https://github.com/randogoth/deinonyxus/actions/workflows/build.yml/badge.svg)](https://github.com/randogoth/deinonyxus/actions/workflows/build.yml) -*Deinonyxus* is a personal spin of the UBlue Bluefin DX image with the 🍦[Lix](https://lix.systems/) flavored Nix package manager baked in and a first-login bootstrap for simple declarative package management using [curator](https://codeberg.org/randogoth/curator). - -The Nix store is seeded into `/usr/share/nix-store` in the image and bind-mounted from `/var/lib/nix-store` to `/nix` on boot to avoid overlay stacking limits on composefs/ostree. +*Deinonyxus* is a personal spin of the UBlue Bluefin DX image with the 🍦[Lix](https://lix.systems/) flavored Nix package manager baked in. ## What’s inside - Base: `ghcr.io/ublue-os/bluefin-dx:latest` without Cockpit, Docker, Firefox, VS Code -- Lix: multi-user install baked in with persistence at `/var/home/nix`; `nix-daemon.service` enabled. -(D) - First-login bootstrap: installs Lix/nix packages `devbox`, `mc`, and `micro` via `curator` - System packages added: `syncthing`, `uv`, `vscodium`, `waydroid`; -- System flatpaks added: Telegram Desktop, Zen Browser - -## First login -- Triggers for each non-root user on their first session. -- Writes state to `~/.local/state/deinonyxus/curator-init.done`; delete it to rerun. -- Bootstraps `~/.config/curator/inventory.toml` and runs `curator switch` with the packages set above. +- System flatpaks added: Telegram Desktop, Waterfox browser ## Just Recipes - `upgrade-nix`: upgrades to the latest version of Lix via the user profile. Replaces `nix upgrade-nix` which does not work with an immutable lowerdir `/nix/store` folder diff --git a/files/scripts/ensure-plugdev-defaults.sh b/files/scripts/ensure-plugdev-defaults.sh deleted file mode 100755 index d554a26..0000000 --- a/files/scripts/ensure-plugdev-defaults.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Ensure new users are added to plugdev by default so OpenRazer udev rules work. -useradd_defaults=/etc/default/useradd -plugdev_group=plugdev - -touch "$useradd_defaults" - -if ! grep -q "^GROUPS=" "$useradd_defaults"; then - printf 'GROUPS=%s\n' "$plugdev_group" >>"$useradd_defaults" -elif ! grep -Eq "^GROUPS=.*\\b${plugdev_group}\\b" "$useradd_defaults"; then - # Append plugdev to any existing GROUPS setting. - sed -i "s/^GROUPS=\\(.*\\)/GROUPS=\\1 ${plugdev_group}/" "$useradd_defaults" -fi diff --git a/files/system/usr/lib/systemd/user/default.target.wants/deinonyxus-curator-init.service b/files/system/usr/lib/systemd/user/default.target.wants/deinonyxus-curator-init.service deleted file mode 120000 index e7af513..0000000 --- a/files/system/usr/lib/systemd/user/default.target.wants/deinonyxus-curator-init.service +++ /dev/null @@ -1 +0,0 @@ -/var/home/randogoth/Projects/code/randofin-os/files/system/usr/lib/systemd/user/deinonyxus-curator-init.service \ No newline at end of file diff --git a/files/system/usr/lib/systemd/user/deinonyxus-curator-init.service b/files/system/usr/lib/systemd/user/deinonyxus-curator-init.service deleted file mode 100644 index 9963d06..0000000 --- a/files/system/usr/lib/systemd/user/deinonyxus-curator-init.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=Install Nix Home Manager and packages on first login -ConditionUser=!root -ConditionPathExists=!%h/.local/state/deinonyxus/curator-init.done - -[Service] -Type=oneshot -ExecStart=/usr/libexec/deinonyxus/curator.sh -ExecStartPost=/usr/bin/mkdir -p %h/.local/state/deinonyxus -ExecStartPost=/usr/bin/touch %h/.local/state/deinonyxus/curator-init.done - -[Install] -WantedBy=default.target diff --git a/files/system/usr/lib/sysusers.d/10-openrazer.conf b/files/system/usr/lib/sysusers.d/10-openrazer.conf deleted file mode 100644 index e9fc454..0000000 --- a/files/system/usr/lib/sysusers.d/10-openrazer.conf +++ /dev/null @@ -1,2 +0,0 @@ -# Ensure plugdev exists for OpenRazer udev permissions -g plugdev - - diff --git a/files/system/usr/libexec/deinonyxus/curator.sh b/files/system/usr/libexec/deinonyxus/curator.sh deleted file mode 100755 index 4fc2b1c..0000000 --- a/files/system/usr/libexec/deinonyxus/curator.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -set -oue pipefail - -curator_git="--from git+https://codeberg.org/randogoth/curator/" - -uvx $curator_git curator init -uvx $curator_git curator add nix:mc nix:micro nix:devbox -uvx $curator_git curator switch -uv tool install $curator_git curator \ No newline at end of file diff --git a/recipes/recipe.yml b/recipes/recipe.yml index 258e836..39d2d9b 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -21,7 +21,6 @@ modules: - type: script scripts: - install-lix.sh - - ensure-plugdev-defaults.sh - type: systemd system: From 205d5ee584a9df597de13becf35ddff8d8313faa Mon Sep 17 00:00:00 2001 From: randogoth Date: Thu, 10 Sep 2026 09:56:35 +0200 Subject: [PATCH 12/12] Add migration notice --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 315f19f..572ffa8 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +> **Migrated to [code.randogoth.com/randogoth/deinonyxus](https://code.randogoth.com/randogoth/deinonyxus)** + # Deinonyxus   [![bluebuild build badge](https://github.com/randogoth/deinonyxus/actions/workflows/build.yml/badge.svg)](https://github.com/randogoth/deinonyxus/actions/workflows/build.yml) *Deinonyxus* is a personal spin of the UBlue Bluefin DX image with the 🍦[Lix](https://lix.systems/) flavored Nix package manager baked in.