| 
					
				 | 
			
			
				@@ -0,0 +1,104 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+--- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Fail if not running Nix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.raw: grep Nix /etc/os-release 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  changed_when: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Install Python3 if needed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.raw: bash -c "which python3 || nix-env -iA nixos.python3" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Gather facts now that Python is installed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.setup: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Set Devices 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.set_fact: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    devices: "{{ ansible_devices | dict2items }}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Find correct device 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.set_fact: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    device: "{{ item }}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  when: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    - item.value.host is defined 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    - item.value.host != "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    - item.value.removable|int == 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  with_items: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    - "{{ devices }}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  loop_control: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    label: "{{ item.key }}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Wipe /dev/{{ device.key }} and label GPT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.shell: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmd: sgdisk -og /dev/{{ device.key }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Create boot partition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.shell: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmd: sgdisk -n 1::+500M -t 1:ef00 /dev/{{ device.key }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Create root partition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.shell: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmd: sgdisk -n 2::0 -t 2:8300 /dev/{{ device.key }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Rescan disk 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  community.general.parted: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    device: /dev/{{ device.key }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  register: device 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Build prefix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.set_fact: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    device_prefix: "{{ device.disk.dev }}{% if 'nvme' in device.disk.dev %}p{% endif %}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Format boot partition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  community.general.filesystem: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    device: "{{ device_prefix }}1" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fstype: vfat 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Format root partition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  community.general.filesystem: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    device: "{{ device_prefix }}2" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fstype: xfs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Mount root partition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.shell: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmd: mount {{ device_prefix }}2 /mnt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Create /mnt/boot 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.file: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    path: /mnt/boot 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    state: directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Mount boot partition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.shell: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmd: mount {{ device_prefix }}1 /mnt/boot 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Generate nix hardware config 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.shell: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmd: nixos-generate-config --root /mnt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Copy configuration.nix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.template: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    src: "{{ role_path }}/../nix-kodi/templates/configuration.nix.j2" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    dest: /mnt/etc/nixos/configuration.nix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    owner: root 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    group: root 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    mode: '0644' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Install Nix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.shell: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmd: nixos-install --no-root-password 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Reboot asynchronously 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.shell: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmd: "sleep 5 && /run/current-system/sw/bin/systemctl reboot" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  async: 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  poll: 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- name: Wait for the reboot and reconnect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ansible.builtin.wait_for: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    port: 22 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    host: '{{ inventory_hostname }}' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    search_regex: OpenSSH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    delay: 15 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    timeout: 60 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  delegate_to: localhost 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  become: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- meta: end_host 
			 |