--- - name: Enable base runit services tags: [services, packages] ansible.builtin.file: src: "/etc/sv/{{ item }}" dest: "/var/service/{{ item }}" state: link loop: "{{ enabled_services | default([]) }}" - name: Enable host runit services tags: [services, packages] ansible.builtin.file: src: "/etc/sv/{{ item }}" dest: "/var/service/{{ item }}" state: link loop: "{{ host_enabled_services | default([]) }}" - name: Define desktop display manager services tags: [services, packages, display-manager] ansible.builtin.set_fact: services_runit_desktop_display_manager_service: >- {{ desktop_display_manager_by_environment[desktop_environment | default('minimal')] }} services_runit_inactive_display_manager_services: >- {{ desktop_display_manager_by_environment.values() | list | difference([desktop_display_manager_by_environment[desktop_environment | default('minimal')]]) }} when: "'desktop' in group_names" - name: Inspect selected desktop display manager service tags: [services, packages, display-manager] ansible.builtin.stat: path: "/var/service/{{ services_runit_desktop_display_manager_service }}" register: services_runit_selected_display_manager_link when: "'desktop' in group_names" - name: Inspect inactive desktop display manager services tags: [services, packages, display-manager] ansible.builtin.stat: path: "/var/service/{{ item }}" loop: "{{ services_runit_inactive_display_manager_services }}" loop_control: label: "{{ item }}" register: services_runit_inactive_display_manager_links when: "'desktop' in group_names" - name: Record active inactive desktop display managers tags: [services, packages, display-manager] ansible.builtin.set_fact: services_runit_active_inactive_display_managers: >- {{ services_runit_inactive_display_manager_links.results | selectattr('stat.exists') | map(attribute='item') | list }} when: "'desktop' in group_names" - name: Report deferred desktop display manager switch tags: [services, packages, display-manager] ansible.builtin.debug: msg: >- {{ desktop_environment }} is configured, but {{ services_runit_active_inactive_display_managers | join(', ') }} is still active. Re-run from a TTY or SSH session with -e desktop_allow_display_manager_switch=true to switch safely to {{ services_runit_desktop_display_manager_service }}. when: - "'desktop' in group_names" - (services_runit_active_inactive_display_managers | length) > 0 - not (desktop_allow_display_manager_switch | default(false)) - name: Disable inactive desktop display managers tags: [services, packages, display-manager] ansible.builtin.file: path: "/var/service/{{ item }}" state: absent loop: "{{ services_runit_active_inactive_display_managers }}" loop_control: label: "{{ item }}" register: services_runit_display_manager_disabled when: - "'desktop' in group_names" - (services_runit_active_inactive_display_managers | length) > 0 - desktop_allow_display_manager_switch | default(false) - name: Enable selected desktop display manager tags: [services, packages, display-manager] ansible.builtin.file: src: "/etc/sv/{{ services_runit_desktop_display_manager_service }}" dest: "/var/service/{{ services_runit_desktop_display_manager_service }}" state: link register: services_runit_display_manager_enabled when: - "'desktop' in group_names" - not services_runit_selected_display_manager_link.stat.exists - >- (services_runit_active_inactive_display_managers | length) == 0 or (desktop_allow_display_manager_switch | default(false)) - name: Remove inactive desktop display manager packages after switching tags: [services, packages, display-manager] community.general.xbps: name: "{{ item }}" state: absent update_cache: false loop: "{{ services_runit_inactive_display_manager_services }}" loop_control: label: "{{ item }}" when: - "'desktop' in group_names" - >- services_runit_selected_display_manager_link.stat.exists or (services_runit_display_manager_enabled is defined and services_runit_display_manager_enabled is changed) - >- (services_runit_active_inactive_display_managers | length) == 0 or (desktop_allow_display_manager_switch | default(false))