From 090c2c62f0a4d81060c68f69354a9c61e9bc1912 Mon Sep 17 00:00:00 2001 From: Riley Loo Date: Tue, 25 Nov 2025 04:08:00 -0500 Subject: [PATCH 1/3] tweaks: add nix installer Signed-off-by: Riley Loo --- data/tweaks/nix/disable.yml | 50 ++++++++++++++++++++++++++++ data/tweaks/nix/enable.yml | 63 ++++++++++++++++++++++++++++++++++++ data/tweaks/nix/metadata.yml | 11 +++++++ 3 files changed, 124 insertions(+) create mode 100644 data/tweaks/nix/disable.yml create mode 100644 data/tweaks/nix/enable.yml create mode 100644 data/tweaks/nix/metadata.yml diff --git a/data/tweaks/nix/disable.yml b/data/tweaks/nix/disable.yml new file mode 100644 index 0000000..2754ed5 --- /dev/null +++ b/data/tweaks/nix/disable.yml @@ -0,0 +1,50 @@ +--- +# ansible playbook to uninstall Nix + +- name: Execute the Determinate Systems Nix uninstaller + hosts: localhost + connection: local + become: true + gather_facts: true + tasks: + - name: Ensure path in /tmp for storing installer + ansible.builtin.file: + path: /tmp/nix-installer-tweak/ + state: directory + owner: root + group: root + - name: Get Determinate Systems Nix installer + ansible.builtin.get_url: + dest: /tmp/nix-installer-tweak/ + url: https://install.determinate.systems/nix + mode: 0755 + - name: Execute Uninstaller + ansible.builtin.shell: + cmd: /tmp/nix-installer-tweak/nix-installer.sh uninstall --no-confirm + - name: Unmount /nix and remove /nix from /etc/fstab + ansible.posix.mount: + path: /nix + state: absent + - name: Get device name for the root filesystem + ansible.builtin.shell: + cmd: df -P / | tail -n1 | awk '{print $1}' + register: root_device + changed_when: false + - name: Get UUID of the btrfs root filesystem + ansible.builtin.shell: + cmd: blkid -s UUID -o value "{{ root_device.stdout }}" + register: btrfs_uuid + changed_when: false + - name: Remove Nix btrfs subvolume + community.general.btrfs_subvolume: + name: /nix + filesystem_device: "{{ root_device.stdout }}" + state: absent + - name: Delete /nix + ansible.builtin.file: + name: /nix + state: absent + - name: Cleanup + ansible.builtin.file: + name: /tmp/nix-installer-tweak + state: absent diff --git a/data/tweaks/nix/enable.yml b/data/tweaks/nix/enable.yml new file mode 100644 index 0000000..f6005cc --- /dev/null +++ b/data/tweaks/nix/enable.yml @@ -0,0 +1,63 @@ +--- +# ansible playbook to install Nix + +- name: Execute the Determinate Systems Nix installer + hosts: localhost + connection: local + become: true + gather_facts: true + tasks: + - name: Get device name of the root filesystem + ansible.builtin.shell: + cmd: df -P / | tail -n1 | awk '{print $1}' + register: root_device + changed_when: false + - name: Get UUID + ansible.builtin.shell: + cmd: blkid -s UUID -o value "{{ root_device.stdout }}" + register: btrfs_uuid + changed_when: false + - name: Create Nix btrfs subvolume + community.general.btrfs_subvolume: + name: /nix + filesystem_device: "{{ root_device.stdout }}" + - name: Ensure /nix exists for subvol mount path + ansible.builtin.file: + path: /nix + state: directory + owner: root + group: root + # We mount ephemerally first to make sure we fail if this doesn't work + # instead of cursing /etc/fstab to a failed state + - name: Mount /nix + ansible.builtin.shell: + cmd: mount -o "subvol=nix,noatime,compress=zstd:7" UUID={{ btrfs_uuid.stdout }} /nix + # In a just world, state: mounted in the below task would do the above task. + # Our world is not just. Our world is not kind. ansible.posix.mount + # does not have any idea what a subvol is and will try (and fail) + # to unmount root. + - name: Add Nix subvolume to /etc/fstab + ansible.posix.mount: + src: "UUID={{ btrfs_uuid.stdout }}" + path: /nix + fstype: btrfs + opts: subvol=nix,noatime,compress=zstd:7 + state: present + - name: Ensure path in /tmp for storing installer + ansible.builtin.file: + path: /tmp/nix-installer-tweak/ + state: directory + owner: root + group: root + - name: Get Determinate Systems Nix installer + ansible.builtin.get_url: + dest: /tmp/nix-installer-tweak/ + url: https://install.determinate.systems/nix + mode: 0755 + - name: Execute Installer + ansible.builtin.shell: + cmd: /tmp/nix-installer-tweak/nix-installer.sh install --no-confirm + - name: Cleanup + ansible.builtin.file: + name: /tmp/nix-installer-tweak + state: absent diff --git a/data/tweaks/nix/metadata.yml b/data/tweaks/nix/metadata.yml new file mode 100644 index 0000000..1c7cf2f --- /dev/null +++ b/data/tweaks/nix/metadata.yml @@ -0,0 +1,11 @@ +description: "Install the Nix package manager" +type: toggle +stability: alpha + +warning: |- + This enables the Nix package manager by executing the Determinate Systems + Nix Installer silently. Stability is alpha as it does mess with your root + btrfs (It creates a subvol with higher compression, thanks to Nix's large + storage requirements). Nix allows for ephemeral shells as well as + reproducable development and execution environments without the need for + a container runtime or virtualization. \ No newline at end of file From bd3954ecf7733bea2c55e0803550de0ef26549af Mon Sep 17 00:00:00 2001 From: Riley Loo Date: Mon, 1 Dec 2025 18:47:21 -0500 Subject: [PATCH 2/3] nix: add btrfs automount option for it to actually work Signed-off-by: Riley Loo --- data/tweaks/nix/enable.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/data/tweaks/nix/enable.yml b/data/tweaks/nix/enable.yml index f6005cc..379fa3e 100644 --- a/data/tweaks/nix/enable.yml +++ b/data/tweaks/nix/enable.yml @@ -21,6 +21,7 @@ community.general.btrfs_subvolume: name: /nix filesystem_device: "{{ root_device.stdout }}" + autmount: true - name: Ensure /nix exists for subvol mount path ansible.builtin.file: path: /nix From f47085a8818dfc4fb480f3b57079a2759a8333f4 Mon Sep 17 00:00:00 2001 From: Riley Loo Date: Mon, 1 Dec 2025 18:48:30 -0500 Subject: [PATCH 3/3] nix: edit description Signed-off-by: Riley Loo --- data/tweaks/nix/metadata.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/tweaks/nix/metadata.yml b/data/tweaks/nix/metadata.yml index 1c7cf2f..1b4aee8 100644 --- a/data/tweaks/nix/metadata.yml +++ b/data/tweaks/nix/metadata.yml @@ -5,7 +5,7 @@ stability: alpha warning: |- This enables the Nix package manager by executing the Determinate Systems Nix Installer silently. Stability is alpha as it does mess with your root - btrfs (It creates a subvol with higher compression, thanks to Nix's large + btrfs (it creates a subvol with higher compression, thanks to Nix's large storage requirements). Nix allows for ephemeral shells as well as reproducable development and execution environments without the need for a container runtime or virtualization. \ No newline at end of file