--- # Non-Arch installer logic: # Download the official Nix installer and its SHA256 from releases.nixos.org # and run the daemon (multi-user) installer. # 1) Fetch the official SHA256 from releases.nixos.org on the control node - name: โฌ‡๏ธ Fetch official Nix installer SHA256 uri_retry: url: "{{ dev_nix_installer_sha256_url }}" return_content: true register: dev_nix_official_sha_response delegate_to: localhost run_once: true become: false - name: ๐Ÿ”ง Set expected installer checksum from official SHA256 ansible.builtin.set_fact: dev_nix_installer_sha256: >- {{ dev_nix_official_sha_response.content.split()[0] | trim }} run_once: true - name: โฌ‡๏ธ Download Nix installer script from official releases get_url_retry: url: "{{ dev_nix_installer_url }}" dest: "{{ dev_nix_installer_dest }}" mode: "0755" timeout: "{{ lookup('timeout', 30) | int }}" checksum: "sha256:{{ dev_nix_installer_sha256 }}" register: dev_nix_installer_download_result become: true - name: ๐Ÿ” Probe common nix binary paths before installation ansible.builtin.stat: path: "{{ item }}" loop: "{{ dev_nix_binary_candidates }}" register: dev_nix_binary_probe_before become: true - name: ๐Ÿ”ง Set nix binary path detected before installation ansible.builtin.set_fact: dev_nix_binary_path_before: >- {{ ( dev_nix_binary_probe_before.results | selectattr("stat.exists") | map(attribute="item") | list | first ) | default("", true) }} - name: ๐Ÿ“ฆ Install Nix via official installer when no Nix binary is present ansible.builtin.include_tasks: 02_install_official.yml when: dev_nix_binary_path_before | length == 0 - name: ๐Ÿ” Probe common nix binary paths after installation ansible.builtin.stat: path: "{{ item }}" loop: "{{ dev_nix_binary_candidates }}" register: dev_nix_binary_probe_after become: true - name: ๐Ÿ”ง Set nix binary path for systemd usage ansible.builtin.set_fact: dev_nix_binary_path: >- {{ ( dev_nix_binary_probe_after.results | selectattr("stat.exists") | map(attribute="item") | list | first ) | default("", true) }} - name: ๐Ÿ›‘ Fail if nix binary is missing after installation ansible.builtin.fail: msg: >- Nix binary could not be found after installation. Checked: {{ dev_nix_binary_candidates | join(', ') }} when: dev_nix_binary_path | length == 0 - name: โœ… Ensure nix is reachable in PATH for systemd services ansible.builtin.file: src: "{{ dev_nix_binary_path }}" dest: /usr/local/bin/nix state: link become: true when: dev_nix_binary_path != "/usr/local/bin/nix" - name: ๐Ÿ—‘๏ธ Optionally drop shell snippet for Nix ansible.builtin.script: cmd: >- {{ role_path }}/files/shell/write_nix_shell_snippet.sh {{ dev_nix_shell_snippet_path | quote }} register: dev_nix_shell_snippet_result changed_when: > dev_nix_shell_snippet_result.stdout is search('\\[CHANGED\\]') failed_when: > dev_nix_shell_snippet_result.rc != 0 or dev_nix_shell_snippet_result.stdout is search('\\[FAIL\\]') when: dev_nix_enable_shell_snippet | bool become: true - name: ๐Ÿงน Aggressively prune Nix data (GC + optimise) become: true ansible.builtin.script: > shell/aggressive_prune_nix.sh {{ dev_nix_binary_path | quote }} changed_when: true when: - MODE_CLEANUP | bool - DOCKER_IN_CONTAINER | bool