You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Determinate Nix on aaron creates ongoing darwin/Linux divergence that
compounds with every new piece of system tooling:
nix.enable = false is required because Determinate manages the daemon.
nix.settings is ignored; custom settings must go in /etc/nix/nix.custom.conf (see aaron/configuration.nix:32).
Determinate owns post-build-hook at /nix/var/determinate/post-build-hook.sh, blocking simple post-build-hook
use (e.g., Phase 2 of the cachix-push effort — cachix-push-from-aaron.md).
Known unresolved hang bug on macOS: DeterminateSystems/nix-installer#1500.
Lazy trees (faster + less disk for some workloads).
Native Linux builder on macOS via Apple Virtualization framework.
determinate-nixd-managed automatic GC and Keychain integration.
Build-time flake inputs.
None are load-bearing for this setup: aaron rarely builds Linux derivations
(tower/leod + CI cover that), and GC/auth can be replicated with nix-darwin
options. Parallel eval and lazy trees are real perf wins but aren't in any
non-Determinate distribution today, so any migration loses them.
Approach
Replace Determinate Nix on aaron with Lix (community fork, drop-in for
upstream Nix from a config-semantics standpoint). Flatten aaron/configuration.nix to use the same nix.settings interface as the
Linux hosts.
Why Lix specifically
nix-darwin upstream recommends Lix on macOS specifically because it
ships a clean uninstaller — vanilla nixos.org Nix does not, and manual
uninstall on macOS is notoriously painful. Keeping the ability to migrate
again later matters.
Standard nix.conf semantics — no nix.custom.conf, no owned post-build-hook, no nix.enable = false. The exact same nix-darwin /
NixOS option interface works across aaron, tower, and leod.
DetSys installer with --no-determinate was deprecated 2026-01-01
(nix-installer#1622). That path is no longer supported.
Trade-off: Lix is still a fork. But it tracks upstream more closely than
Determinate, and you can switch tower/leod to Lix later with nix.package = pkgs.lix if you ever want full uniformity.
Step-by-step
1. Pre-flight (do these locally before touching aaron)
Confirm no Determinate-only feature is actively used:
Run nix config show on aaron; note anything Determinate-specific.
Check whether the native Linux builder is enabled — if it is, decide
whether to re-enable it post-migration via nix.linux-builder (Lix
supports this via nix-darwin too).
Snapshot the current /nix size for comparison: du -sh /nix/store.
Don't merge until the machine-side migration (Step 3) is ready, or vice
versa — these two changes must land together to avoid a broken aaron.
3. Machine-side migration (aaron only)
Uninstall Determinate (wipes /nix, removes the daemon):
/nix/nix-installer uninstall
Reboot (or launchctl unload any lingering Determinate daemons — the
uninstaller should handle this).
Install Lix:
curl -sSf -L https://install.lix.systems/lix | sh -s -- install
Apply the new config:
nix run nix-darwin -- switch --flake ~/setup
4. Verification
nix config show — no nix.custom.conf mention, trusted-users shows root @admin.
nix --version — reports a Lix version.
nix flake check on the setup repo from aaron — clean.
darwin-rebuild switch --flake . — succeeds without "Determinate Nix
manages the daemon" warnings.
launchctl list | grep determinate — empty.
Build a small package: nix build nixpkgs#hello — succeeds.
Touch ID for sudo still works (that's security.pam.services.sudo_local,
unaffected by the migration).
5. Follow-ups (separate work, not part of this plan)
Unblock cachix-push-from-aaron.md — Step 2 (SSE subscriber) can be
dropped entirely because post-build-hook is now free; the simple post-build-hook recipe from cachix docs works directly.
Re-enable nix-darwin linux-builder module if you want Linux builds on
aaron.
Consider migrating tower/leod to Lix too (nix.package = pkgs.lix in base.nix) for full uniformity — only if you actually want it; today's
upstream Nix on Linux is fine.
Open questions
Does the existing /nix store survive uninstall? No — the Determinate
uninstaller wipes it. Plan for a full rebuild of aaron's closure. With PR feat(cachix): auto-push tower/leod builds to soft-nix cache #150 shipped, most paths pull from soft-nix.cachix.org instead of
recompiling.
Anything bound to determinate-nixd.socket? Confirmed nothing in this
repo binds to it — the only references are inside this plan and cachix-push-from-aaron.md. Safe.
Plan: Migrate aaron off Determinate Nix to Lix
Why
Determinate Nix on aaron creates ongoing darwin/Linux divergence that
compounds with every new piece of system tooling:
nix.enable = falseis required because Determinate manages the daemon.nix.settingsis ignored; custom settings must go in/etc/nix/nix.custom.conf(seeaaron/configuration.nix:32).post-build-hookat/nix/var/determinate/post-build-hook.sh, blocking simplepost-build-hookuse (e.g., Phase 2 of the cachix-push effort —
cachix-push-from-aaron.md).DeterminateSystems/nix-installer#1500.What we give up by leaving Determinate:
nix flake check, evals).determinate-nixd-managed automatic GC and Keychain integration.None are load-bearing for this setup: aaron rarely builds Linux derivations
(tower/leod + CI cover that), and GC/auth can be replicated with nix-darwin
options. Parallel eval and lazy trees are real perf wins but aren't in any
non-Determinate distribution today, so any migration loses them.
Approach
Replace Determinate Nix on aaron with Lix (community fork, drop-in for
upstream Nix from a config-semantics standpoint). Flatten
aaron/configuration.nixto use the samenix.settingsinterface as theLinux hosts.
Why Lix specifically
ships a clean uninstaller — vanilla nixos.org Nix does not, and manual
uninstall on macOS is notoriously painful. Keeping the ability to migrate
again later matters.
nix.confsemantics — nonix.custom.conf, no ownedpost-build-hook, nonix.enable = false. The exact same nix-darwin /NixOS option interface works across aaron, tower, and leod.
--no-determinatewas deprecated 2026-01-01(nix-installer#1622). That path is no longer supported.
Trade-off: Lix is still a fork. But it tracks upstream more closely than
Determinate, and you can switch tower/leod to Lix later with
nix.package = pkgs.lixif you ever want full uniformity.Step-by-step
1. Pre-flight (do these locally before touching aaron)
nix config showon aaron; note anything Determinate-specific.whether to re-enable it post-migration via
nix.linux-builder(Lixsupports this via nix-darwin too).
du -sh /nix/store.is gone, aaron's first rebuild pulls from soft-nix instead of compiling
from scratch.
2. Code changes (separate PR)
Edit
modules/hosts/aaron/configuration.nix:nix.enable = false;(configuration.nix:27).environment.etc."nix/nix.custom.conf".textblock(
configuration.nix:30-34).nix.settingsblock (matches what tower/leod use viabase.nix):Don't merge until the machine-side migration (Step 3) is ready, or vice
versa — these two changes must land together to avoid a broken aaron.
3. Machine-side migration (aaron only)
/nix, removes the daemon):launchctl unloadany lingering Determinate daemons — theuninstaller should handle this).
curl -sSf -L https://install.lix.systems/lix | sh -s -- installnix run nix-darwin -- switch --flake ~/setup4. Verification
nix config show— nonix.custom.confmention,trusted-usersshowsroot @admin.nix --version— reports a Lix version.nix flake checkon the setup repo from aaron — clean.darwin-rebuild switch --flake .— succeeds without "Determinate Nixmanages the daemon" warnings.
launchctl list | grep determinate— empty.nix build nixpkgs#hello— succeeds.security.pam.services.sudo_local,unaffected by the migration).
5. Follow-ups (separate work, not part of this plan)
cachix-push-from-aaron.md— Step 2 (SSE subscriber) can bedropped entirely because
post-build-hookis now free; the simplepost-build-hookrecipe from cachix docs works directly.linux-buildermodule if you want Linux builds onaaron.
nix.package = pkgs.lixinbase.nix) for full uniformity — only if you actually want it; today'supstream Nix on Linux is fine.
Open questions
uninstaller wipes it. Plan for a full rebuild of aaron's closure. With PR
feat(cachix): auto-push tower/leod builds to soft-nix cache #150 shipped, most paths pull from soft-nix.cachix.org instead of
recompiling.
determinate-nixd.socket? Confirmed nothing in thisrepo binds to it — the only references are inside this plan and
cachix-push-from-aaron.md. Safe.References
https://docs.determinate.systems/determinate-nix/
nix builds hang on post-build-hook DeterminateSystems/nix-installer#1500
Vanilla nix on MacOS is not replaced by Determinate Nix DeterminateSystems/nix-installer#1622
https://github.com/nix-darwin/nix-darwin
cachix-push-from-aaron.mdfix(aaron): workaround compiler-rt 18 darwin build via overlay #147