--- - name: Ensure XBPS extra repositories directory exists tags: [packages] ansible.builtin.file: path: /etc/xbps.d state: directory mode: "0755" when: (void_xbps_repositories | default([]) + host_xbps_repositories | default([])) | length > 0 - name: Configure Void XBPS repositories tags: [packages] ansible.builtin.copy: dest: "/etc/xbps.d/{{ item.name }}.conf" content: | repository={{ item.url }} owner: root group: root mode: "0644" loop: "{{ void_xbps_repositories | default([]) + host_xbps_repositories | default([]) }}" loop_control: label: "{{ item.name }}" register: packages_void_xbps_repository_configs when: (void_xbps_repositories | default([]) + host_xbps_repositories | default([])) | length > 0 - name: Install Void nonfree repository if needed tags: [packages] community.general.xbps: name: void-repo-nonfree state: present update_cache: false register: packages_void_nonfree_repository when: "'void-repo-nonfree' in (host_packages | default([]) + void_packages_base | default([]))" - name: Refresh XBPS cache after configuring repositories tags: [packages] community.general.xbps: update_cache: true accept_pubkey: true when: >- (void_xbps_repositories | default([]) + host_xbps_repositories | default([])) | length > 0 or (packages_void_nonfree_repository is defined and packages_void_nonfree_repository is changed) - name: Synchronize and upgrade Void Linux packages tags: [packages] community.general.xbps: update_cache: false upgrade: true - name: Select packages for the configured desktop environment tags: [packages] ansible.builtin.set_fact: packages_void_selected_desktop_packages: >- {{ ( (desktop_minimal_packages | default([])) if (desktop_environment | default('minimal')) == 'minimal' else ( (desktop_xfce_packages | default([])) if (desktop_environment | default('minimal')) == 'xfce' else (desktop_kde_packages | default([])) ) ) + ( (desktop_sway_packages | default([])) if ( (desktop_environment | default('minimal')) == 'minimal' and 'sway' in (desktop_sessions_enabled | default([])) ) else [] ) + ( (desktop_hyprland_packages | default([])) if ( (desktop_environment | default('minimal')) == 'minimal' and 'hyprland' in (desktop_sessions_enabled | default([])) ) else [] ) | unique }} - name: Calculate packages owned only by inactive desktop environments tags: [packages] ansible.builtin.set_fact: packages_void_inactive_desktop_packages: >- {{ ( (desktop_minimal_packages | default([])) + (desktop_sway_packages | default([])) + (desktop_hyprland_packages | default([])) + (desktop_xfce_packages | default([])) + (desktop_kde_packages | default([])) ) | unique | difference(packages_void_selected_desktop_packages) | difference(desktop_display_manager_by_environment.values() | list) }} - name: Install packages on Void Linux tags: [packages] community.general.xbps: name: >- {{ ( (common_packages | default([])) + (void_packages_base | default([])) + (profile_packages | default([])) + ((profile_emacs_packages | default([])) if (emacs_enabled | default(false) | bool) else []) + (desktop_common_packages | default([])) + ((desktop_emacs_packages | default([])) if (emacs_enabled | default(false) | bool) else []) + (packages_void_selected_desktop_packages | default([])) + (host_packages | default([])) ) | unique }} state: present update_cache: false - name: Check whether the selected display manager is active tags: [packages, display-manager] ansible.builtin.stat: path: "/var/service/{{ desktop_display_manager_by_environment[desktop_environment | default('minimal')] }}" register: packages_void_selected_display_manager - name: Remove packages managed by the inactive desktop environment tags: [packages] community.general.xbps: name: "{{ packages_void_inactive_desktop_packages }}" state: absent update_cache: false when: - (packages_void_inactive_desktop_packages | default([])) | length > 0 - >- packages_void_selected_display_manager.stat.exists or (desktop_allow_display_manager_switch | default(false)) - name: Remove host-absent packages on Void Linux tags: [packages] community.general.xbps: name: "{{ host_packages_absent | default([]) }}" state: absent when: (host_packages_absent | default([])) | length > 0