Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions data/tweaks/nix/disable.yml
Original file line number Diff line number Diff line change
@@ -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
64 changes: 64 additions & 0 deletions data/tweaks/nix/enable.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
# 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 }}"
autmount: true
- 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
11 changes: 11 additions & 0 deletions data/tweaks/nix/metadata.yml
Original file line number Diff line number Diff line change
@@ -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.