--- - name: Copy Fedora dotfiles tags: [dotfiles, dotfiles:common] ansible.builtin.copy: src: "{{ playbook_dir }}/../dotfiles/fedora/{{ item.src }}" dest: "{{ effective_user_home }}/{{ item.dest }}" owner: "{{ effective_username }}" group: "{{ effective_user_group }}" mode: "{{ item.mode }}" loop: "{{ fedora_dotfiles | default([]) }}" loop_control: label: "{{ item.dest }}" - name: Configure Docker repository on Fedora tags: [packages] ansible.builtin.yum_repository: name: docker-ce-stable description: Docker CE Stable - $basearch baseurl: "https://download.docker.com/linux/fedora/$releasever/$basearch/stable" enabled: true gpgcheck: true gpgkey: https://download.docker.com/linux/fedora/gpg state: present when: - "'workstation_dev_fedora' in group_names" - fedora_manage_docker_repo | default(false) - name: Install COPR support on Fedora WSL tags: [packages, mise] ansible.builtin.dnf: name: dnf-plugins-core state: present when: "'workstation_dev_wsl' in group_names" - name: Configure Mise COPR repository on Fedora WSL tags: [packages, mise] community.general.copr: name: jdxcode/mise state: enabled when: "'workstation_dev_wsl' in group_names" - name: Refresh dnf package metadata tags: [packages] ansible.builtin.dnf: update_cache: true - name: Install packages on Fedora tags: [packages] ansible.builtin.dnf: name: >- {{ ( (common_packages | default([])) + (fedora_packages_base | default([])) + ( (fedora_docker_packages | default([])) if 'workstation_dev_fedora' in group_names else [] ) + (profile_packages | default([])) + ( (fedora_desktop_packages | default([])) if 'graphical_desktop' in group_names else [] ) + ( (fedora_emacs_packages | default([])) if ( emacs_enabled | default(false) | bool ) else [] ) + ( (fedora_dev_packages | default([])) if 'workstation_dev_fedora' in group_names else [] ) + ( (workstation_dev_wsl_packages | default([])) if 'workstation_dev_wsl' in group_names else [] ) + (host_packages | default([])) ) | difference(fedora_excluded_packages | default([])) | unique }} state: present - name: Remove excluded Fedora packages tags: [packages] ansible.builtin.dnf: name: "{{ fedora_removed_packages | default([]) }}" state: absent when: (fedora_removed_packages | default([])) | length > 0 - name: Add user to docker group tags: [packages] ansible.builtin.user: name: "{{ effective_username }}" groups: docker append: true when: - "'workstation_dev_fedora' in group_names" - (fedora_docker_packages | default([])) | length > 0 - name: Install shared AI coding agents on Fedora tags: [packages, npm, ai_agents] community.general.npm: name: "{{ item.value.npm_package }}" global: true state: latest loop: "{{ ai_agents | dict2items | selectattr('value.npm_package', 'defined') | list }}" when: - item.value.install_enabled | bool - "'workstation_dev_fedora' not in group_names" loop_control: label: "{{ item.key }}" - name: Uninstall shared AI coding agents on Fedora tags: [packages, npm, ai_agents] community.general.npm: name: "{{ item.value.npm_package }}" global: true state: absent loop: "{{ ai_agents | dict2items | selectattr('value.npm_package', 'defined') | list }}" when: - item.value.uninstall_enabled | bool - "'workstation_dev_fedora' not in group_names" loop_control: label: "{{ item.key }}" - name: Define Fedora Flatpak applications tags: [packages] ansible.builtin.set_fact: packages_fedora_flatpak_packages: >- {{ ( (fedora_flatpak_packages | default([])) + (host_flatpak_packages | default([])) ) | unique }} - name: Ensure Flathub remote is configured on Fedora tags: [packages] community.general.flatpak_remote: name: "{{ fedora_flatpak_remote_name | default('flathub') }}" state: present flatpakrepo_url: "{{ fedora_flatpak_remote_url | default('https://dl.flathub.org/repo/flathub.flatpakrepo') }}" when: (packages_fedora_flatpak_packages | default([])) | length > 0 - name: Install Fedora Flatpak applications tags: [packages] community.general.flatpak: name: "{{ packages_fedora_flatpak_packages }}" state: present remote: "{{ fedora_flatpak_remote_name | default('flathub') }}" method: system when: (packages_fedora_flatpak_packages | default([])) | length > 0 - name: Ensure Fedora Nerd Fonts base directory exists tags: [packages, fonts] ansible.builtin.file: path: /usr/local/share/fonts/nerd-fonts state: directory owner: root group: root mode: "0755" when: (fedora_nerd_fonts | default([])) | length > 0 - name: Ensure Fedora per-font Nerd Fonts directories exist tags: [packages, fonts] ansible.builtin.file: path: "/usr/local/share/fonts/nerd-fonts/{{ item }}" state: directory owner: root group: root mode: "0755" loop: "{{ fedora_nerd_fonts | default([]) }}" - name: Download Fedora Nerd Font archives tags: [packages, fonts] ansible.builtin.get_url: url: "https://github.com/ryanoasis/nerd-fonts/releases/download/{{ fedora_nerd_fonts_version }}/{{ item }}.zip" dest: "/usr/local/share/fonts/nerd-fonts/{{ item }}.zip" owner: root group: root mode: "0644" loop: "{{ fedora_nerd_fonts | default([]) }}" loop_control: label: "{{ item }}" - name: Extract Fedora Nerd Font archives tags: [packages, fonts] ansible.builtin.unarchive: src: "/usr/local/share/fonts/nerd-fonts/{{ item }}.zip" dest: "/usr/local/share/fonts/nerd-fonts/{{ item }}" remote_src: true owner: root group: root loop: "{{ fedora_nerd_fonts | default([]) }}" loop_control: label: "{{ item }}" register: fedora_nerd_fonts_extract - name: Refresh system font cache after installing Fedora Nerd Fonts tags: [packages, fonts] ansible.builtin.command: fc-cache -f changed_when: false when: fedora_nerd_fonts_extract is changed