--- - name: Find home dotfiles (excluding templates) ansible.builtin.find: paths: - "{{ playbook_dir }}/dotfiles/common/home" - "{{ playbook_dir }}/dotfiles/{{ group_names[0] }}/home" recurse: true file_type: file hidden: true excludes: "*.j2" delegate_to: localhost register: dotfiles_home_files run_once: true ignore_errors: true - name: Find root dotfiles (excluding templates) ansible.builtin.find: paths: - "{{ playbook_dir }}/dotfiles/common/root" - "{{ playbook_dir }}/dotfiles/{{ group_names[0] }}/root" recurse: true file_type: file hidden: true excludes: "*.j2" delegate_to: localhost register: dotfiles_root_files run_once: true ignore_errors: true - name: Find home template files ansible.builtin.find: paths: - "{{ playbook_dir }}/dotfiles/common/home" - "{{ playbook_dir }}/dotfiles/{{ group_names[0] }}/home" recurse: true file_type: file hidden: true patterns: "*.j2" delegate_to: localhost register: dotfiles_home_templates run_once: true ignore_errors: true - name: Find root template files ansible.builtin.find: paths: - "{{ playbook_dir }}/dotfiles/common/root" - "{{ playbook_dir }}/dotfiles/{{ group_names[0] }}/root" recurse: true file_type: file hidden: true patterns: "*.j2" delegate_to: localhost register: dotfiles_root_templates run_once: true ignore_errors: true - name: Symlink home dotfiles (local) ansible.builtin.file: src: "{{ item.path }}" dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/home/', '') }}" state: link force: true loop: "{{ dotfiles_home_files.files }}" when: ansible_connection in ['local', 'localhost'] - name: Symlink root dotfiles (local) ansible.builtin.file: src: "{{ item.path }}" dest: "/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/root/', '') }}" state: link force: true loop: "{{ dotfiles_root_files.files }}" when: ansible_connection in ['local', 'localhost'] become: true - name: Deploy home dotfiles (remote) ansible.builtin.copy: src: "{{ item.path }}" dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/home/', '') }}" mode: preserve loop: "{{ dotfiles_home_files.files }}" when: ansible_connection not in ['local', 'localhost'] - name: Deploy root dotfiles (remote) ansible.builtin.copy: src: "{{ item.path }}" dest: "/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/root/', '') }}" mode: preserve loop: "{{ dotfiles_root_files.files }}" when: ansible_connection not in ['local', 'localhost'] become: true - name: Template home dotfiles ansible.builtin.template: src: "{{ item.path }}" dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/home/', '') | replace('.j2', '') }}" mode: '0600' loop: "{{ dotfiles_home_templates.files }}" - name: Template root dotfiles ansible.builtin.template: src: "{{ item.path }}" dest: "/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/root/', '') | replace('.j2', '') }}" mode: '0600' loop: "{{ dotfiles_root_templates.files }}" become: true - name: Deploy symlinks ansible.builtin.file: src: "{{ item.src }}" dest: "{{ item.dest }}" state: link force: true loop: "{{ symlinks | default([]) }}"