--- - name: Install fish, neovim, modern CLI tools and set fish as default shell hosts: proxmox_vms gather_facts: true become: true vars: target_user: vrubel packages: - fish - neovim - lsd - bat - grc - zoxide - curl - git tasks: - name: Install packages ansible.builtin.package: name: "{{ packages }}" state: present - name: Symlink batcat -> bat (Debian workaround) ansible.builtin.file: src: /usr/bin/batcat dest: /usr/local/bin/bat state: link when: ansible_facts["os_family"] == "Debian" ignore_errors: true - name: Create ~/.config/fish directory ansible.builtin.file: path: "/home/{{ target_user }}/.config/fish" state: directory mode: "0755" owner: "{{ target_user }}" group: "{{ target_user }}" - name: Deploy fish config ansible.builtin.copy: src: ../files/config.fish dest: "/home/{{ target_user }}/.config/fish/config.fish" owner: "{{ target_user }}" group: "{{ target_user }}" mode: "0644" - name: Deploy fish_plugins ansible.builtin.copy: src: ../files/fish_plugins dest: "/home/{{ target_user }}/.config/fish/fish_plugins" owner: "{{ target_user }}" group: "{{ target_user }}" mode: "0644" - name: Install fisher become_user: "{{ target_user }}" ansible.builtin.shell: cmd: > curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher executable: /usr/bin/fish creates: "/home/{{ target_user }}/.config/fish/functions/fisher.fish" - name: Run fisher update to install plugins become_user: "{{ target_user }}" ansible.builtin.shell: cmd: fisher update executable: /usr/bin/fish changed_when: true - name: Remove old nvim config ansible.builtin.file: path: "/home/{{ target_user }}/.config/nvim" state: absent - name: Clone LazyVim starter become_user: "{{ target_user }}" ansible.builtin.git: repo: https://github.com/LazyVim/starter dest: "/home/{{ target_user }}/.config/nvim" - name: Remove .git from nvim config ansible.builtin.file: path: "/home/{{ target_user }}/.config/nvim/.git" state: absent - name: Check if Docker is already installed ansible.builtin.shell: docker --version 2>/dev/null && docker compose version 2>/dev/null register: docker_check failed_when: false changed_when: false - name: Install Docker on Debian ansible.builtin.apt: name: - docker.io - docker-compose-v2 state: present when: - ansible_facts["os_family"] == "Debian" - docker_check.rc != 0 - name: Install Docker on Fedora block: - name: Remove moby-engine if present ansible.builtin.dnf: name: moby-engine state: absent failed_when: false - name: Add Docker CE repo ansible.builtin.get_url: url: https://download.docker.com/linux/fedora/docker-ce.repo dest: /etc/yum.repos.d/docker-ce.repo mode: "0644" - name: Install Docker CE ansible.builtin.dnf: name: - docker-ce - docker-ce-cli - containerd.io - docker-compose-plugin state: present when: - ansible_facts["os_family"] == "RedHat" - docker_check.rc != 0 - name: Ensure Docker service is running ansible.builtin.systemd: name: docker state: started enabled: true - name: Add user to docker group ansible.builtin.user: name: "{{ target_user }}" groups: docker append: true - name: Reset SSH connection for group membership ansible.builtin.meta: reset_connection - name: Set fish as default shell ansible.builtin.user: name: "{{ target_user }}" shell: /usr/bin/fish