mirror of
https://github.com/fscotto/infra.git
synced 2026-07-29 16:20:01 +00:00
Add optional KDE desktop profile
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
---
|
||||
desktop_protonmail_bridge_cert_path: ~/.var/app/ch.protonmail.protonmail-bridge/config/protonmail/bridge-v3/cert.pem
|
||||
|
||||
desktop_environment: minimal
|
||||
desktop_allow_display_manager_switch: false
|
||||
|
||||
desktop_sessions_enabled:
|
||||
- sway
|
||||
- hyprland
|
||||
@@ -60,22 +63,6 @@ desktop_common_dotfiles:
|
||||
src: .local/bin/setup-gtk-theme
|
||||
dest: .local/bin/setup-gtk-theme
|
||||
mode: "0755"
|
||||
- name: MIME application defaults
|
||||
src: .config/mimeapps.list
|
||||
dest: .config/mimeapps.list
|
||||
mode: "0644"
|
||||
- name: Thunar config
|
||||
src: .config/Thunar/
|
||||
dest: .config/Thunar/
|
||||
mode: preserve
|
||||
- name: Udiskie config
|
||||
src: .config/udiskie/
|
||||
dest: .config/udiskie/
|
||||
mode: preserve
|
||||
- name: Udiskie password helper
|
||||
src: .local/bin/udiskie-password
|
||||
dest: .local/bin/udiskie-password
|
||||
mode: "0755"
|
||||
- name: WirePlumber config
|
||||
src: .config/wireplumber/
|
||||
dest: .config/wireplumber/
|
||||
@@ -145,6 +132,40 @@ desktop_common_dotfiles:
|
||||
dest: .ssh/config
|
||||
mode: "0600"
|
||||
|
||||
desktop_minimal_dotfiles:
|
||||
- name: Minimal desktop MIME defaults
|
||||
src: .config/mimeapps.list
|
||||
dest: .config/mimeapps.list
|
||||
mode: "0644"
|
||||
- name: Thunar config
|
||||
src: .config/Thunar/
|
||||
dest: .config/Thunar/
|
||||
mode: preserve
|
||||
- name: Udiskie config
|
||||
src: .config/udiskie/
|
||||
dest: .config/udiskie/
|
||||
mode: preserve
|
||||
- name: Udiskie password helper
|
||||
src: .local/bin/udiskie-password
|
||||
dest: .local/bin/udiskie-password
|
||||
mode: "0755"
|
||||
|
||||
desktop_minimal_managed_paths:
|
||||
- .config/Thunar
|
||||
- .config/alacritty
|
||||
- .config/dunst
|
||||
- .config/flameshot
|
||||
- .config/foot
|
||||
- .config/gtklock
|
||||
- .config/hypr
|
||||
- .config/kanshi
|
||||
- .config/rofi
|
||||
- .config/sway
|
||||
- .config/udiskie
|
||||
- .config/waybar
|
||||
- .config/wlogout
|
||||
- .local/bin/udiskie-password
|
||||
|
||||
desktop_emacs_dotfiles:
|
||||
- name: Emacs config
|
||||
src: .emacs.d/
|
||||
|
||||
@@ -64,7 +64,6 @@ enabled_services:
|
||||
- cupsd
|
||||
- dbus
|
||||
- elogind
|
||||
- emptty
|
||||
- libvirtd
|
||||
- nanoklogd
|
||||
- socklog-unix
|
||||
@@ -99,32 +98,64 @@ desktop_void_dotfiles:
|
||||
mode: "0755"
|
||||
|
||||
desktop_common_packages:
|
||||
- blueman
|
||||
- brightnessctl
|
||||
- cups
|
||||
- cups-filters
|
||||
- cups-pk-helper
|
||||
- dex
|
||||
- emptty
|
||||
- flatpak
|
||||
- gnome-keyring
|
||||
- gvfs
|
||||
- libsecret
|
||||
- network-manager-applet
|
||||
- pavucontrol
|
||||
- pinentry-emacs
|
||||
- pinentry-gtk
|
||||
- sane
|
||||
- sane-airscan
|
||||
- turnstile
|
||||
- xdg-desktop-portal
|
||||
- xdg-user-dirs
|
||||
|
||||
desktop_minimal_packages:
|
||||
- alacritty
|
||||
- blueman
|
||||
- brightnessctl
|
||||
- dex
|
||||
- emptty
|
||||
- exo
|
||||
- ffmpegthumbnailer
|
||||
- gnome-keyring
|
||||
- gvfs
|
||||
- gvfs-cdda
|
||||
- gvfs-mtp
|
||||
- gvfs-smb
|
||||
- network-manager-applet
|
||||
- pavucontrol
|
||||
- pinentry-gtk
|
||||
- ristretto
|
||||
- seahorse
|
||||
- shotwell
|
||||
- simple-scan
|
||||
- system-config-printer
|
||||
- turnstile
|
||||
- Thunar
|
||||
- thunar-archive-plugin
|
||||
- thunar-volman
|
||||
- tumbler
|
||||
- udiskie
|
||||
- xdg-desktop-portal
|
||||
- xarchiver
|
||||
- xdg-desktop-portal-gtk
|
||||
- xdg-user-dirs
|
||||
- xfce-polkit
|
||||
- xournalpp
|
||||
|
||||
desktop_kde_packages:
|
||||
- ark
|
||||
- dolphin
|
||||
- ffmpegthumbs
|
||||
- gwenview
|
||||
- kate
|
||||
- kde-plasma
|
||||
- kleopatra
|
||||
- konsole
|
||||
- okular
|
||||
- polkit-kde-agent
|
||||
- print-manager
|
||||
- sddm
|
||||
- skanpage
|
||||
- spectacle
|
||||
|
||||
desktop_sway_packages:
|
||||
- cliphist
|
||||
@@ -169,7 +200,6 @@ desktop_hyprland_packages:
|
||||
- xorg-server-xwayland
|
||||
|
||||
profile_packages:
|
||||
- alacritty
|
||||
- bash-language-server
|
||||
- bluez
|
||||
- bridge-utils
|
||||
@@ -181,12 +211,8 @@ profile_packages:
|
||||
- emacs-pgtk
|
||||
- poppler-glib
|
||||
- poppler-utils
|
||||
- exo
|
||||
- fontconfig-devel
|
||||
- freetype-devel
|
||||
- gvfs-cdda
|
||||
- gvfs-mtp
|
||||
- gvfs-smb
|
||||
- gufw
|
||||
- golangci-lint
|
||||
- gopls
|
||||
@@ -211,25 +237,16 @@ profile_packages:
|
||||
- remmina
|
||||
- ripgrep
|
||||
- rustup
|
||||
- ristretto
|
||||
- rsync
|
||||
- shotwell
|
||||
- shfmt
|
||||
- ruff
|
||||
- terminus-font
|
||||
- texlive
|
||||
- ty
|
||||
- tumbler
|
||||
- uv
|
||||
- Thunar
|
||||
- thunar-archive-plugin
|
||||
- thunar-volman
|
||||
- ffmpegthumbnailer
|
||||
- virt-manager
|
||||
- virt-manager-tools
|
||||
- wireplumber
|
||||
- xarchiver
|
||||
- xournalpp
|
||||
- yaru
|
||||
- yaru-plus
|
||||
- zstd
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
loop: "{{ void_xbps_repositories | default([]) + host_xbps_repositories | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.name }}"
|
||||
register: void_xbps_repository_configs
|
||||
register: packages_void_xbps_repository_configs
|
||||
when: (void_xbps_repositories | default([]) + host_xbps_repositories | default([])) | length > 0
|
||||
|
||||
- name: Install Void nonfree repository if needed
|
||||
@@ -28,7 +28,7 @@
|
||||
name: void-repo-nonfree
|
||||
state: present
|
||||
update_cache: false
|
||||
register: void_nonfree_repository
|
||||
register: packages_void_nonfree_repository
|
||||
when: "'void-repo-nonfree' in (host_packages | default([]) + void_packages_base | default([]))"
|
||||
|
||||
- name: Refresh XBPS cache after configuring repositories
|
||||
@@ -38,7 +38,7 @@
|
||||
accept_pubkey: true
|
||||
when: >-
|
||||
(void_xbps_repositories | default([]) + host_xbps_repositories | default([])) | length > 0
|
||||
or (void_nonfree_repository is defined and void_nonfree_repository is changed)
|
||||
or (packages_void_nonfree_repository is defined and packages_void_nonfree_repository is changed)
|
||||
|
||||
- name: Synchronize and upgrade Void Linux packages
|
||||
tags: [packages]
|
||||
@@ -56,14 +56,25 @@
|
||||
+ (void_packages_base | default([]))
|
||||
+ (profile_packages | default([]))
|
||||
+ (desktop_common_packages | default([]))
|
||||
+ (
|
||||
(desktop_minimal_packages | default([]))
|
||||
if (desktop_environment | default('minimal')) == 'minimal'
|
||||
else (desktop_kde_packages | default([]))
|
||||
)
|
||||
+ (
|
||||
(desktop_sway_packages | default([]))
|
||||
if 'sway' in (desktop_sessions_enabled | default([]))
|
||||
if (
|
||||
(desktop_environment | default('minimal')) == 'minimal'
|
||||
and 'sway' in (desktop_sessions_enabled | default([]))
|
||||
)
|
||||
else []
|
||||
)
|
||||
+ (
|
||||
(desktop_hyprland_packages | default([]))
|
||||
if 'hyprland' in (desktop_sessions_enabled | default([]))
|
||||
if (
|
||||
(desktop_environment | default('minimal')) == 'minimal'
|
||||
and 'hyprland' in (desktop_sessions_enabled | default([]))
|
||||
)
|
||||
else []
|
||||
)
|
||||
+ (host_packages | default([]))
|
||||
@@ -73,6 +84,40 @@
|
||||
state: present
|
||||
update_cache: false
|
||||
|
||||
- name: Check whether the selected display manager is active
|
||||
tags: [packages, display-manager]
|
||||
ansible.builtin.stat:
|
||||
path: >-
|
||||
/var/service/{{ 'sddm' if (desktop_environment | default('minimal')) == 'kde' else 'emptty' }}
|
||||
register: packages_void_selected_display_manager
|
||||
|
||||
- name: Remove packages managed by the inactive desktop environment
|
||||
tags: [packages]
|
||||
community.general.xbps:
|
||||
name: >-
|
||||
{{
|
||||
(
|
||||
(
|
||||
(desktop_minimal_packages | default([]))
|
||||
| reject('equalto', 'emptty')
|
||||
| list
|
||||
)
|
||||
+ (desktop_sway_packages | default([]))
|
||||
+ (desktop_hyprland_packages | default([]))
|
||||
)
|
||||
if (desktop_environment | default('minimal')) == 'kde'
|
||||
else (
|
||||
(desktop_kde_packages | default([]))
|
||||
| reject('equalto', 'sddm')
|
||||
| list
|
||||
)
|
||||
}}
|
||||
state: absent
|
||||
update_cache: false
|
||||
when: >-
|
||||
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:
|
||||
|
||||
@@ -1,4 +1,22 @@
|
||||
---
|
||||
- name: Validate desktop environment selection
|
||||
tags: [always]
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- (desktop_environment | default('minimal')) in ['minimal', 'kde']
|
||||
- >-
|
||||
(desktop_environment | default('minimal')) == 'kde'
|
||||
or (desktop_sessions_enabled | default([]) | length > 0)
|
||||
- >-
|
||||
(desktop_environment | default('minimal')) == 'kde'
|
||||
or (desktop_sessions_enabled | default([]) | difference(['sway', 'hyprland']) | length == 0)
|
||||
- >-
|
||||
(desktop_environment | default('minimal')) == 'kde'
|
||||
or desktop_default_session in (desktop_sessions_enabled | default([]))
|
||||
fail_msg: >-
|
||||
desktop_environment must be minimal or kde. Minimal desktops also require
|
||||
desktop_default_session to be included in desktop_sessions_enabled.
|
||||
|
||||
- name: Configure elogind to suspend on lid close
|
||||
tags: [packages]
|
||||
ansible.builtin.lineinfile:
|
||||
@@ -34,32 +52,33 @@
|
||||
group: "{{ user_group }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Enable gnome-keyring PAM auth hook
|
||||
- name: Manage gnome-keyring PAM auth hook
|
||||
tags: [packages, gnome]
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/pam.d/login
|
||||
insertafter: '^auth\s+include\s+system-local-login$'
|
||||
line: "auth optional pam_gnome_keyring.so"
|
||||
state: present
|
||||
state: "{{ 'present' if (desktop_environment | default('minimal')) == 'minimal' else 'absent' }}"
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Enable gnome-keyring PAM session hook
|
||||
- name: Manage gnome-keyring PAM session hook
|
||||
tags: [packages, gnome]
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/pam.d/login
|
||||
insertafter: '^session\s+include\s+system-local-login$'
|
||||
line: "session optional pam_gnome_keyring.so auto_start"
|
||||
state: present
|
||||
state: "{{ 'present' if (desktop_environment | default('minimal')) == 'minimal' else 'absent' }}"
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Enable gnome-keyring PAM password hook
|
||||
- name: Manage gnome-keyring PAM password hook
|
||||
tags: [packages, gnome]
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/pam.d/login
|
||||
insertafter: '^password\s+include\s+system-local-login$'
|
||||
line: "password optional pam_gnome_keyring.so use_authtok"
|
||||
state: present
|
||||
when: "'void' in group_names"
|
||||
state: "{{ 'present' if (desktop_environment | default('minimal')) == 'minimal' else 'absent' }}"
|
||||
when:
|
||||
- "'void' in group_names"
|
||||
|
||||
- name: Check whether SSH host ed25519 key exists
|
||||
tags: [services]
|
||||
@@ -234,7 +253,9 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: "'void' in group_names"
|
||||
when:
|
||||
- "'void' in group_names"
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
|
||||
- name: Ensure emptty session directories exist
|
||||
tags: [packages, services, emptty]
|
||||
@@ -247,7 +268,9 @@
|
||||
loop:
|
||||
- /etc/emptty/xsessions
|
||||
- /etc/emptty/wayland-sessions
|
||||
when: "'void' in group_names"
|
||||
when:
|
||||
- "'void' in group_names"
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
|
||||
- name: Configure emptty
|
||||
tags: [packages, services, emptty]
|
||||
@@ -258,7 +281,9 @@
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: Restart emptty
|
||||
when: "'void' in group_names"
|
||||
when:
|
||||
- "'void' in group_names"
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
|
||||
- name: Copy common desktop dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop]
|
||||
@@ -271,6 +296,11 @@
|
||||
loop: >-
|
||||
{{
|
||||
(desktop_common_dotfiles | default([]))
|
||||
+ (
|
||||
(desktop_minimal_dotfiles | default([]))
|
||||
if (desktop_environment | default('minimal')) == 'minimal'
|
||||
else []
|
||||
)
|
||||
+ ((desktop_void_dotfiles | default([])) if 'void' in group_names else [])
|
||||
}}
|
||||
loop_control:
|
||||
@@ -445,6 +475,14 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: (desktop_environment | default('minimal')) == 'minimal'
|
||||
|
||||
- name: Remove minimal Qt theme override for KDE
|
||||
tags: [theme]
|
||||
ansible.builtin.file:
|
||||
path: /etc/profile.d/10-qt-theme.sh
|
||||
state: absent
|
||||
when: (desktop_environment | default('minimal')) == 'kde'
|
||||
|
||||
- name: Ensure flathub remote is configured
|
||||
tags: [packages]
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
- (host_sway_dotfiles | default([])) | length > 0
|
||||
|
||||
@@ -32,5 +33,6 @@
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
- (host_hyprland_dotfiles | default([])) | length > 0
|
||||
|
||||
@@ -15,7 +15,9 @@
|
||||
- "{{ user_home }}/.config/hypr"
|
||||
- "{{ user_home }}/.config/rofi"
|
||||
- "{{ user_home }}/.config/waybar"
|
||||
when: "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Install allowed emptty Hyprland Wayland session
|
||||
tags: [packages, services, emptty, hyprland]
|
||||
@@ -25,14 +27,18 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Remove legacy Hyprland session launcher shadowing package binary
|
||||
tags: [packages, services, hyprland]
|
||||
ansible.builtin.file:
|
||||
path: /usr/local/bin/start-hyprland
|
||||
state: absent
|
||||
when: "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Install Hyprland session launcher in /usr/local/bin
|
||||
tags: [packages, services, hyprland]
|
||||
@@ -42,7 +48,9 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Ensure /etc/xdg/xdg-desktop-portal exists for Hyprland
|
||||
tags: [packages, services, hyprland, portal]
|
||||
@@ -52,7 +60,9 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Configure xdg-desktop-portal backend preferences for Hyprland
|
||||
tags: [packages, services, hyprland, portal]
|
||||
@@ -62,7 +72,9 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Copy Hyprland desktop dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop, hyprland]
|
||||
@@ -75,4 +87,6 @@
|
||||
loop: "{{ desktop_hyprland_dotfiles | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
when: "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'hyprland' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
54
ansible/roles/profile_desktop_kde/tasks/main.yml
Normal file
54
ansible/roles/profile_desktop_kde/tasks/main.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
- name: Check whether SDDM is the active runit display manager
|
||||
tags: [packages, services, kde, display-manager]
|
||||
ansible.builtin.stat:
|
||||
path: /var/service/sddm
|
||||
register: profile_desktop_kde_sddm_service
|
||||
when: (desktop_environment | default('minimal')) == 'kde'
|
||||
|
||||
- name: Copy KDE MIME application defaults
|
||||
tags: [dotfiles, dotfiles:desktop, kde]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../dotfiles/desktop/.config/mimeapps.kde.list"
|
||||
dest: "{{ user_home }}/.config/mimeapps.list"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
when: (desktop_environment | default('minimal')) == 'kde'
|
||||
|
||||
- name: Remove minimal desktop user configuration managed by Ansible
|
||||
tags: [dotfiles, dotfiles:desktop, kde]
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_home }}/{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ desktop_minimal_managed_paths | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item }}"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'kde'
|
||||
- profile_desktop_kde_sddm_service.stat.exists
|
||||
|
||||
- name: Remove minimal desktop portal preferences
|
||||
tags: [packages, services, kde, portal]
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- /etc/xdg/xdg-desktop-portal/hyprland-portals.conf
|
||||
- /etc/xdg/xdg-desktop-portal/sway-portals.conf
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'kde'
|
||||
- profile_desktop_kde_sddm_service.stat.exists
|
||||
|
||||
- name: Remove inactive emptty and minimal session launchers
|
||||
tags: [packages, services, kde, display-manager]
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- /etc/emptty
|
||||
- /usr/local/bin/start-hyprland-session
|
||||
- /usr/local/bin/start-sway
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'kde'
|
||||
- profile_desktop_kde_sddm_service.stat.exists
|
||||
@@ -15,7 +15,9 @@
|
||||
- "{{ user_home }}/.config/sway"
|
||||
- "{{ user_home }}/.config/waybar"
|
||||
- "{{ user_home }}/.config/wlogout"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Install allowed emptty Wayland sessions
|
||||
tags: [packages, services, emptty, sway]
|
||||
@@ -25,7 +27,9 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Install Sway session launcher in /usr/local/bin
|
||||
tags: [packages, services, sway]
|
||||
@@ -35,7 +39,9 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Ensure /etc/xdg/xdg-desktop-portal exists
|
||||
tags: [packages, services, sway, portal]
|
||||
@@ -45,7 +51,9 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Configure xdg-desktop-portal backend preferences for sway
|
||||
tags: [packages, services, sway, portal]
|
||||
@@ -55,7 +63,9 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Copy sway desktop dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop, sway]
|
||||
@@ -68,4 +78,6 @@
|
||||
loop: "{{ desktop_sway_dotfiles | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
when:
|
||||
- (desktop_environment | default('minimal')) == 'minimal'
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
@@ -14,3 +14,79 @@
|
||||
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: >-
|
||||
{{ 'sddm' if (desktop_environment | default('minimal')) == 'kde' else 'emptty' }}
|
||||
services_runit_inactive_display_manager_service: >-
|
||||
{{ 'emptty' if (desktop_environment | default('minimal')) == 'kde' else 'sddm' }}
|
||||
when: "'desktop' in group_names"
|
||||
|
||||
- name: Inspect desktop display manager services
|
||||
tags: [services, packages, display-manager]
|
||||
ansible.builtin.stat:
|
||||
path: "/var/service/{{ item }}"
|
||||
loop:
|
||||
- "{{ services_runit_desktop_display_manager_service }}"
|
||||
- "{{ services_runit_inactive_display_manager_service }}"
|
||||
loop_control:
|
||||
label: "{{ item }}"
|
||||
register: services_runit_display_manager_links
|
||||
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_inactive_display_manager_service }}
|
||||
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_display_manager_links.results[1].stat.exists
|
||||
- not (services_runit_display_manager_links.results[0].stat.exists)
|
||||
- not (desktop_allow_display_manager_switch | default(false))
|
||||
|
||||
- name: Disable inactive desktop display manager
|
||||
tags: [services, packages, display-manager]
|
||||
ansible.builtin.file:
|
||||
path: "/var/service/{{ services_runit_inactive_display_manager_service }}"
|
||||
state: absent
|
||||
register: services_runit_display_manager_disabled
|
||||
when:
|
||||
- "'desktop' in group_names"
|
||||
- services_runit_display_manager_links.results[1].stat.exists
|
||||
- not (services_runit_display_manager_links.results[0].stat.exists)
|
||||
- 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_display_manager_links.results[0].stat.exists)
|
||||
- >-
|
||||
not (services_runit_display_manager_links.results[1].stat.exists)
|
||||
or (desktop_allow_display_manager_switch | default(false))
|
||||
|
||||
- name: Remove inactive desktop display manager package after switching
|
||||
tags: [services, packages, display-manager]
|
||||
community.general.xbps:
|
||||
name: "{{ services_runit_inactive_display_manager_service }}"
|
||||
state: absent
|
||||
update_cache: false
|
||||
when:
|
||||
- "'desktop' in group_names"
|
||||
- >-
|
||||
services_runit_display_manager_links.results[0].stat.exists
|
||||
or (services_runit_display_manager_enabled is defined and services_runit_display_manager_enabled is changed)
|
||||
- >-
|
||||
not (services_runit_display_manager_links.results[1].stat.exists)
|
||||
or (services_runit_display_manager_disabled is defined and services_runit_display_manager_disabled is changed)
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
- profile_desktop_common
|
||||
- profile_desktop_sway
|
||||
- profile_desktop_hyprland
|
||||
- profile_desktop_kde
|
||||
- profile_desktop_host
|
||||
|
||||
- hosts: workstation_dev_fedora
|
||||
|
||||
Reference in New Issue
Block a user