Remove obsolete desktop profiles

This commit is contained in:
Fabio Scotto di Santolo
2026-08-19 13:52:15 +02:00
parent 66575e6d80
commit 6e27569dc3
34 changed files with 38 additions and 1658 deletions

View File

@@ -2,11 +2,6 @@
# Optional inventory overlay for VM tests. It is not loaded by ansible.cfg.
all:
children:
platform_mint:
hosts:
minttest:
ansible_connection: local
platform_freebsd:
hosts:
freebsdtest:
@@ -14,21 +9,8 @@ all:
graphical_desktop:
hosts:
minttest:
freebsdtest:
role_personal_workstation:
hosts:
minttest:
role_lab:
hosts:
freebsdtest:
desktop_cinnamon:
hosts:
minttest:
desktop_hyprland:
desktop_niri:
hosts:
freebsdtest:

View File

@@ -1,11 +1,5 @@
---
desktop_environment: minimal
desktop_allow_display_manager_switch: false
desktop_display_manager_by_environment:
minimal: emptty
xfce: lightdm
kde: sddm
desktop_sessions_enabled:
- sway
@@ -261,30 +255,6 @@ desktop_niri_dotfiles:
dest: .config/niri/
mode: preserve
desktop_xfce_dotfiles:
- name: XFCE configuration
src: .config/xfce4/
dest: .config/xfce4/
mode: preserve
- name: XFCE Thunar custom actions
src: .config/Thunar/uca.xfce.xml
dest: .config/Thunar/uca.xml
mode: "0644"
- name: XFCE dark desktop background
src: .local/share/backgrounds/xfce-dark.svg
dest: .local/share/backgrounds/xfce-dark.svg
mode: "0644"
desktop_xfce_managed_paths:
- .config/xfce4
- .local/share/backgrounds/xfce-dark.svg
xfce_theme_gtk: Yaru-blue-dark
xfce_theme_icons: Papirus-Dark
xfce_theme_wm: Greybird-dark
xfce_font_ui: Liberation Sans 10
xfce_font_monospace: Liberation Mono 11
desktop_flatpak_packages:
- be.alexandervanhee.gradia
- ch.protonmail.protonmail-bridge

View File

@@ -1,29 +0,0 @@
---
desktop_profile: cinnamon
desktop_default_session: cinnamon
cinnamon_theme_gtk: Mint-Y-Dark-Aqua
cinnamon_theme_icons: Mint-Y-Aqua
cinnamon_font_ui: Sans 10
cinnamon_font_monospace: Monospace 10
# WM-agnostic desktop dotfiles from desktop_common_dotfiles that do NOT apply to
# Cinnamon: the autostart entry is the (removed) Protonmail mail bridge, and the
# GTK theme script conflicts with Cinnamon's own dconf-managed theming.
cinnamon_desktop_dotfiles_exclude:
- XDG autostart entries
- GTK theme setup script
cinnamon_dconf_settings:
- key: /org/cinnamon/desktop/interface/gtk-theme
value: "'{{ cinnamon_theme_gtk }}'"
- key: /org/cinnamon/desktop/interface/icon-theme
value: "'{{ cinnamon_theme_icons }}'"
- key: /org/cinnamon/desktop/interface/font-name
value: "'{{ cinnamon_font_ui }}'"
- key: /org/cinnamon/desktop/interface/monospace-font-name
value: "'{{ cinnamon_font_monospace }}'"
- key: /org/cinnamon/desktop/interface/clock-use-24h
value: "true"
- key: /org/cinnamon/desktop/wm/preferences/button-layout
value: "'menu:minimize,maximize,close'"

View File

@@ -102,13 +102,6 @@ freebsd_niri_packages:
- wl-clipboard
- xdg-desktop-portal-gtk
freebsd_lab_packages:
- lldb
- llvm
- podman
- qemu
- smartmontools
freebsd_rc_conf:
- name: dbus_enable
value: "YES"

View File

@@ -1,107 +0,0 @@
---
platform_profile: mint
platform_family: debian
platform_package_manager: apt
platform_service_manager: systemd
# syncthing runs per-user via the packaged system unit template
# (Debian/Mint ship syncthing@.service, parametrised by username).
enabled_services:
- "syncthing@{{ username }}.service"
mint_manage_flatpak: true
mint_flatpak_remote_name: flathub
mint_flatpak_remote_url: https://dl.flathub.org/repo/flathub.flatpakrepo
mint_packages_base:
- ca-certificates
- curl
- flatpak
- gpg
- htop
- make
- python3-pip
- ripgrep
- rsync
- shellcheck
mint_development_packages:
- build-essential
- clang
- clang-format
- clang-tools
- cmake
- gdb
- libasan8
- libubsan1
- golang
- nodejs
- npm
- pkg-config
- python3-venv
- valgrind
mint_desktop_common_packages:
- croc
- dconf-cli
- deja-dup
- firefox
- fonts-liberation
- fonts-noto-color-emoji
- git-delta
- gnome-keyring
- libsecret-tools
- mpv
- pinentry-gnome3
- pinentry-gtk2
- rclone
- syncthing
- thunderbird
- tmux
- xdg-user-dirs
- yt-dlp
mint_emacs_packages:
- autoconf
- automake
- emacs
- hunspell
- hunspell-it
- libfreetype-dev
- libpoppler-glib-dev
- libpoppler-private-dev
- libtool-bin
- libvterm-dev
- libx11-dev
mint_cinnamon_packages:
- cinnamon
- cinnamon-control-center
- cinnamon-screensaver
- lightdm
- slick-greeter
- xdg-desktop-portal
- xdg-desktop-portal-gtk
mint_personal_workstation_packages:
- libreoffice
- meld
- pdfarranger
- vim
mint_flatpak_packages:
- ch.protonmail.protonmail-bridge
- com.calibre_ebook.calibre
- com.spotify.Client
- org.telegram.desktop
# Nerd Fonts referenced by the desktop configs deployed on Mint. Debian has no
# equivalent of Void's nerd-fonts-ttf package, so they are fetched from the
# upstream ryanoasis/nerd-fonts release.
mint_nerd_fonts_version: v3.3.0
mint_nerd_fonts:
- Hack
- JetBrainsMono
- Iosevka
- UbuntuSans
- NerdFontsSymbolsOnly

View File

@@ -1,11 +0,0 @@
---
machine_role: lab
role_profile: lab
role_stability: experimental
experimental_profile: true
lab_workspace_directories:
- path: "{{ user_home }}/Lab"
mode: "0755"
- path: "{{ user_home }}/Scratch"
mode: "0755"

View File

@@ -141,45 +141,6 @@ desktop_minimal_packages:
- 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_xfce_packages:
- blueman
- gnome-keyring
- greybird-themes
- gvfs
- gvfs-cdda
- gvfs-mtp
- gvfs-smb
- lightdm
- lightdm-gtk-greeter
- network-manager-applet
- papirus-icon-theme
- seahorse
- thunar-archive-plugin
- xarchiver
- xdg-desktop-portal-gtk
- xfce4
- xfce4-clipman-plugin
- xfce4-pulseaudio-plugin
- xfce4-screenshooter
- xfce4-whiskermenu-plugin
- xorg
desktop_sway_packages:
- cliphist
- dunst
@@ -238,12 +199,6 @@ desktop_niri_packages:
- xdg-desktop-portal-gtk
- xorg-server-xwayland
void_lab_packages:
- llvm
- podman
- qemu
- smartmontools
profile_packages:
- bash-language-server
- bluez

View File

@@ -11,9 +11,6 @@ all:
nymph:
ansible_connection: local
platform_mint:
hosts: {}
platform_freebsd:
hosts: {}
@@ -41,9 +38,6 @@ all:
ikaros:
ansible_connection: local
role_lab:
hosts: {}
desktop_sway:
hosts: {}
@@ -60,9 +54,6 @@ all:
nymph:
ansible_connection: local
desktop_cinnamon:
hosts: {}
ubuntu:
children:
workstation_dev_wsl:

View File

@@ -22,11 +22,6 @@
if 'desktop_niri' in group_names
else []
)
+ (
(freebsd_lab_packages | default([]))
if 'role_lab' in group_names
else []
)
+ (host_packages | default([]))
)
| unique

View File

@@ -1,88 +0,0 @@
---
- name: Refresh apt package cache on Linux Mint
tags: [packages]
ansible.builtin.apt:
update_cache: true
cache_valid_time: 3600
- name: Install packages on Linux Mint
tags: [packages]
ansible.builtin.apt:
name: >-
{{
(
(common_packages | default([]))
+ (mint_packages_base | default([]))
+ (mint_development_packages | default([]))
+ (
(mint_desktop_common_packages | default([]))
if 'graphical_desktop' in group_names
else []
)
+ (
(mint_emacs_packages | default([]))
if (
'graphical_desktop' in group_names
and (emacs_enabled | default(false) | bool)
)
else []
)
+ (
(mint_cinnamon_packages | default([]))
if 'desktop_cinnamon' in group_names
else []
)
+ (
(mint_personal_workstation_packages | default([]))
if 'role_personal_workstation' in group_names
else []
)
+ (host_packages | default([]))
)
| unique
}}
state: present
- name: Ensure Flathub remote is configured on Linux Mint
tags: [packages]
community.general.flatpak_remote:
name: "{{ mint_flatpak_remote_name | default('flathub') }}"
state: present
flatpakrepo_url: "{{ mint_flatpak_remote_url | default('https://dl.flathub.org/repo/flathub.flatpakrepo') }}"
when:
- mint_manage_flatpak | default(true)
- >-
(
(mint_flatpak_packages | default([]))
+ (personal_workstation_flatpak_packages | default([]))
) | length > 0
- name: Install Linux Mint Flatpak applications
tags: [packages]
community.general.flatpak:
name: >-
{{
(
(mint_flatpak_packages | default([]))
+ (
(personal_workstation_flatpak_packages | default([]))
if 'role_personal_workstation' in group_names
else []
)
)
| unique
}}
state: present
remote: "{{ mint_flatpak_remote_name | default('flathub') }}"
method: system
when:
- mint_manage_flatpak | default(true)
- >-
(
(mint_flatpak_packages | default([]))
+ (
(personal_workstation_flatpak_packages | default([]))
if 'role_personal_workstation' in group_names
else []
)
) | length > 0

View File

@@ -51,15 +51,7 @@
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_minimal_packages | default([]))
+ (
(desktop_sway_packages | default([]))
if (
@@ -97,12 +89,10 @@
+ (desktop_sway_packages | default([]))
+ (desktop_hyprland_packages | default([]))
+ (desktop_niri_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)
| difference(['emptty'])
}}
- name: Install packages on Void Linux
@@ -118,7 +108,6 @@
+ (desktop_common_packages | default([]))
+ ((desktop_emacs_packages | default([])) if (emacs_enabled | default(false) | bool) else [])
+ (packages_void_selected_desktop_packages | default([]))
+ ((void_lab_packages | default([])) if 'role_lab' in group_names else [])
+ (host_packages | default([]))
)
| unique
@@ -129,7 +118,7 @@
- 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')] }}"
path: /var/service/emptty
register: packages_void_selected_display_manager
- name: Remove packages managed by the inactive desktop environment
@@ -140,9 +129,7 @@
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))
- packages_void_selected_display_manager.stat.exists
- name: Remove host-absent packages on Void Linux
tags: [packages]

View File

@@ -1,231 +0,0 @@
---
- name: Ensure Cinnamon user config directories exist
tags: [dotfiles, dotfiles:desktop, cinnamon]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
loop:
- "{{ user_home }}/.config"
- "{{ user_home }}/.local"
- "{{ user_home }}/.local/share"
- "{{ user_home }}/.local/bin"
- "{{ user_home }}/.local/state"
- "{{ user_home }}/.bashrc.d"
- "{{ user_home }}/.tmux"
- "{{ user_home }}/.tmux/bin"
- "{{ user_home }}/.tmux/plugins"
- name: Apply Cinnamon dconf settings
tags: [cinnamon]
community.general.dconf:
key: "{{ item.key }}"
value: "{{ item.value }}"
state: present
become: true
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
loop: "{{ cinnamon_dconf_settings | default([]) }}"
loop_control:
label: "{{ item.key }}"
- name: Ensure Emacs config directory exists
tags: [dotfiles, dotfiles:desktop, emacs]
ansible.builtin.file:
path: "{{ user_home }}/.emacs.d"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
when: emacs_enabled | default(false) | bool
- name: Ensure GnuPG directory exists
tags: [dotfiles, dotfiles:desktop, git]
ansible.builtin.file:
path: "{{ user_home }}/.gnupg"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0700"
- name: Ensure private user directories exist
tags: [dotfiles, dotfiles:desktop]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0700"
loop:
- "{{ user_home }}/.ssh"
- "{{ user_home }}/.local/state/ssh/sockets"
- name: Copy Emacs desktop dotfiles
tags: [dotfiles, dotfiles:desktop, emacs]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_emacs_dotfiles | default([]) }}"
when: emacs_enabled | default(false) | bool
loop_control:
label: "{{ item.dest }}"
- name: Copy WM-agnostic common desktop dotfiles
tags: [dotfiles, dotfiles:desktop]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: >-
{{
desktop_common_dotfiles
| default([])
| rejectattr('name', 'in', cinnamon_desktop_dotfiles_exclude | default([]))
| list
}}
loop_control:
label: "{{ item.dest }}"
- name: Copy gpg-agent configuration
tags: [dotfiles, dotfiles:desktop, git]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/.gnupg/gpg-agent.conf"
dest: "{{ user_home }}/.gnupg/gpg-agent.conf"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0600"
- name: Render git configuration with private values
tags: [dotfiles, dotfiles:desktop, git]
ansible.builtin.template:
src: desktop/.gitconfig.j2
dest: "{{ user_home }}/.gitconfig"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0644"
- name: Bootstrap tmux plugin manager checkout
tags: [dotfiles, dotfiles:desktop, tmux]
ansible.builtin.git:
repo: https://github.com/tmux-plugins/tpm
dest: "{{ user_home }}/.tmux/plugins/tpm"
version: master
update: true
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
- name: Install tmux plugins through TPM
tags: [dotfiles, dotfiles:desktop, tmux]
ansible.builtin.shell: |
set -e
tmux start-server \; set-environment -g TMUX_PLUGIN_MANAGER_PATH "{{ user_home }}/.tmux/plugins/"
"{{ user_home }}/.tmux/plugins/tpm/bin/install_plugins"
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
register: cinnamon_tmux_plugin_install
changed_when: >-
(cinnamon_tmux_plugin_install.stdout | default('')) is search('download success') or
(cinnamon_tmux_plugin_install.stderr | default('')) is search('download success')
- name: Install desktop npm packages
tags: [packages, npm]
community.general.npm:
name: "{{ item.name }}"
global: true
state: "{{ item.state | default('present') }}"
become: true
loop: "{{ desktop_npm_packages | default([]) }}"
when: desktop_npm_packages | length > 0
loop_control:
label: "{{ item.name }}"
- name: Ensure /usr/src is writable for source builds
tags: [packages]
ansible.builtin.file:
path: /usr/src
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
- name: Build and install the gf debugger frontend from source
tags: [packages]
ansible.builtin.include_tasks:
file: "{{ role_path }}/../profile_desktop_common/tasks/source_tool.yml"
apply:
tags: [packages]
loop: >-
{{
desktop_source_tools
| default([])
| selectattr('name', 'equalto', 'gf')
| list
}}
loop_control:
loop_var: source_tool
label: "{{ source_tool.name }}"
- name: Ensure 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"
become: true
- name: Ensure 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"
become: true
loop: "{{ mint_nerd_fonts | default([]) }}"
- name: Download Nerd Font archives
tags: [packages, fonts]
ansible.builtin.get_url:
url: "https://github.com/ryanoasis/nerd-fonts/releases/download/{{ mint_nerd_fonts_version }}/{{ item }}.zip"
dest: "/usr/local/share/fonts/nerd-fonts/{{ item }}.zip"
owner: root
group: root
mode: "0644"
become: true
loop: "{{ mint_nerd_fonts | default([]) }}"
loop_control:
label: "{{ item }}"
- name: Extract 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
become: true
loop: "{{ mint_nerd_fonts | default([]) }}"
loop_control:
label: "{{ item }}"
register: cinnamon_nerd_fonts_extract
- name: Refresh system font cache after installing Nerd Fonts
tags: [packages, fonts]
ansible.builtin.command: fc-cache -f
become: true
changed_when: false
when: cinnamon_nerd_fonts_extract is changed

View File

@@ -3,18 +3,12 @@
tags: [always]
ansible.builtin.assert:
that:
- (desktop_environment | default('minimal')) in ['minimal', 'xfce', 'kde']
- >-
(desktop_environment | default('minimal')) != 'minimal'
or (desktop_sessions_enabled | default([]) | length > 0)
- >-
(desktop_environment | default('minimal')) != 'minimal'
or (desktop_sessions_enabled | default([]) | difference(['sway', 'hyprland', 'niri']) | length == 0)
- >-
(desktop_environment | default('minimal')) != 'minimal'
or desktop_default_session in (desktop_sessions_enabled | default([]))
- (desktop_environment | default('minimal')) == 'minimal'
- (desktop_sessions_enabled | default([]) | length > 0)
- (desktop_sessions_enabled | default([]) | difference(['sway', 'hyprland', 'niri']) | length == 0)
- desktop_default_session in (desktop_sessions_enabled | default([]))
fail_msg: >-
desktop_environment must be minimal, xfce, or kde. Minimal desktops also require
desktop_environment must be minimal. Minimal desktops also require
desktop_default_session to be included in desktop_sessions_enabled.
- name: Configure elogind to suspend on lid close
@@ -466,14 +460,7 @@
owner: root
group: root
mode: "0644"
when: (desktop_environment | default('minimal')) in ['minimal', 'xfce']
- 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'
when: (desktop_environment | default('minimal')) == 'minimal'
- name: Ensure flathub remote is configured
tags: [packages]

View File

@@ -1,60 +0,0 @@
---
- 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([]))
+ (desktop_xfce_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
- /etc/xdg/xdg-desktop-portal/xfce-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
- /etc/lightdm/lightdm.conf.d/50-xfce.conf
- /usr/local/bin/start-hyprland-session
- /usr/local/bin/start-sway
when:
- (desktop_environment | default('minimal')) == 'kde'
- profile_desktop_kde_sddm_service.stat.exists

View File

@@ -1,223 +0,0 @@
---
- name: Inspect configured desktop display manager for XFCE cleanup gates
tags: [always, packages, services, xfce, display-manager]
ansible.builtin.stat:
path: "/var/service/{{ desktop_display_manager_by_environment[desktop_environment | default('minimal')] }}"
register: profile_desktop_xfce_selected_display_manager
- name: Ensure XFCE user configuration directories exist
tags: [dotfiles, dotfiles:desktop, xfce]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
loop:
- "{{ user_home }}/.config/xfce4"
- "{{ user_home }}/.config/xfce4/terminal"
- "{{ user_home }}/.config/xfce4/xfconf"
- "{{ user_home }}/.config/xfce4/xfconf/xfce-perchannel-xml"
- "{{ user_home }}/.config/Thunar"
- "{{ user_home }}/.local/share/backgrounds"
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Copy XFCE desktop dotfiles
tags: [dotfiles, dotfiles:desktop, xfce]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_xfce_dotfiles | default([]) }}"
loop_control:
label: "{{ item.dest }}"
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Render XFCE themed configuration
tags: [dotfiles, dotfiles:desktop, xfce]
ansible.builtin.template:
src: "{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0644"
loop:
- src: xsettings.xml.j2
dest: .config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
- src: xfwm4.xml.j2
dest: .config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml
- src: xfce4-desktop.xml.j2
dest: .config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
- src: terminalrc.j2
dest: .config/xfce4/terminal/terminalrc
loop_control:
label: "{{ item.dest }}"
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Copy XFCE MIME application defaults
tags: [dotfiles, dotfiles:desktop, xfce]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/.config/mimeapps.list"
dest: "{{ user_home }}/.config/mimeapps.list"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0644"
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Make Thunderbird the XFCE mail handler
tags: [dotfiles, dotfiles:desktop, xfce]
community.general.ini_file:
path: "{{ user_home }}/.config/mimeapps.list"
section: "{{ item.section }}"
option: x-scheme-handler/mailto
value: "{{ item.value }}"
no_extra_spaces: true
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0644"
loop:
- section: Default Applications
value: org.mozilla.Thunderbird.desktop
- section: Added Associations
value: org.mozilla.Thunderbird.desktop;
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Ensure LightDM configuration directories exist
tags: [packages, services, xfce, display-manager]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: "0755"
loop:
- /etc/lightdm
- /etc/lightdm/lightdm.conf.d
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Configure LightDM for the XFCE session
tags: [packages, services, xfce, display-manager]
ansible.builtin.template:
src: lightdm-xfce.conf.j2
dest: /etc/lightdm/lightdm.conf.d/50-xfce.conf
owner: root
group: root
mode: "0644"
register: profile_desktop_xfce_lightdm_config
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Configure the LightDM GTK greeter
tags: [packages, services, xfce, display-manager]
ansible.builtin.template:
src: lightdm-gtk-greeter.conf.j2
dest: /etc/lightdm/lightdm-gtk-greeter.conf
owner: root
group: root
mode: "0644"
register: profile_desktop_xfce_lightdm_greeter_config
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Report deferred LightDM configuration activation
tags: [packages, services, xfce, display-manager]
ansible.builtin.debug:
msg: >-
LightDM configuration changed. Apply the display-manager switch or restart
LightDM from a TTY or SSH session; it is not restarted automatically.
when:
- (desktop_environment | default('minimal')) == 'xfce'
- >-
profile_desktop_xfce_lightdm_config is changed
or profile_desktop_xfce_lightdm_greeter_config is changed
- name: Manage gnome-keyring auth hook for LightDM
tags: [packages, services, xfce]
ansible.builtin.lineinfile:
path: /etc/pam.d/lightdm
insertafter: EOF
line: "auth optional pam_gnome_keyring.so"
state: present
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Manage gnome-keyring session hook for LightDM
tags: [packages, services, xfce]
ansible.builtin.lineinfile:
path: /etc/pam.d/lightdm
insertafter: EOF
line: "session optional pam_gnome_keyring.so auto_start"
state: present
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Ensure XFCE portal configuration directory exists
tags: [packages, services, xfce, portal]
ansible.builtin.file:
path: /etc/xdg/xdg-desktop-portal
state: directory
owner: root
group: root
mode: "0755"
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Configure xdg-desktop-portal preferences for XFCE
tags: [packages, services, xfce, portal]
ansible.builtin.copy:
dest: /etc/xdg/xdg-desktop-portal/xfce-portals.conf
content: |
[preferred]
default=gtk
owner: root
group: root
mode: "0644"
when: (desktop_environment | default('minimal')) == 'xfce'
- name: Remove minimal desktop user configuration after switching to XFCE
tags: [dotfiles, dotfiles:desktop, xfce]
ansible.builtin.file:
path: "{{ user_home }}/{{ item }}"
state: absent
loop: "{{ desktop_minimal_managed_paths | default([]) | difference(['.config/Thunar']) }}"
loop_control:
label: "{{ item }}"
when:
- (desktop_environment | default('minimal')) == 'xfce'
- profile_desktop_xfce_selected_display_manager.stat.exists
- name: Remove minimal portal preferences and session launchers after switching to XFCE
tags: [packages, services, xfce, portal, display-manager]
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- /etc/xdg/xdg-desktop-portal/hyprland-portals.conf
- /etc/xdg/xdg-desktop-portal/sway-portals.conf
- /etc/emptty
- /usr/local/bin/start-hyprland-session
- /usr/local/bin/start-sway
when:
- (desktop_environment | default('minimal')) == 'xfce'
- profile_desktop_xfce_selected_display_manager.stat.exists
- name: Remove XFCE user configuration after switching to another profile
tags: [dotfiles, dotfiles:desktop, xfce]
ansible.builtin.file:
path: "{{ user_home }}/{{ item }}"
state: absent
loop: "{{ desktop_xfce_managed_paths | default([]) }}"
loop_control:
label: "{{ item }}"
when:
- (desktop_environment | default('minimal')) != 'xfce'
- profile_desktop_xfce_selected_display_manager.stat.exists
- name: Remove inactive XFCE portal and LightDM profile configuration
tags: [packages, services, xfce, portal, display-manager]
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- /etc/xdg/xdg-desktop-portal/xfce-portals.conf
- /etc/lightdm/lightdm.conf.d/50-xfce.conf
when:
- (desktop_environment | default('minimal')) != 'xfce'
- profile_desktop_xfce_selected_display_manager.stat.exists

View File

@@ -1,7 +0,0 @@
[greeter]
theme-name={{ xfce_theme_gtk }}
icon-theme-name={{ xfce_theme_icons }}
font-name={{ xfce_font_ui }}
background=#050505
clock-format=%a %d %b, %H:%M
indicators=~host;~spacer;~clock;~spacer;~session;~power

View File

@@ -1,3 +0,0 @@
[Seat:*]
greeter-session=lightdm-gtk-greeter
user-session=xfce

View File

@@ -1,15 +0,0 @@
[Configuration]
FontName={{ xfce_font_monospace }}
MiscUseSystemFont=FALSE
MiscMenubarDefault=FALSE
MiscToolbarDefault=FALSE
MiscBordersDefault=TRUE
ScrollingLines=10000
BackgroundMode=TERMINAL_BACKGROUND_SOLID
ColorForeground=#d8d8d8
ColorBackground=#050505
ColorCursor=#d8d8d8
ColorSelection=#d8d8d8
ColorSelectionUseDefault=FALSE
ColorSelectionBackground=#3a5f7f
ColorPalette=#050505;#8f3f3f;#5f7f5f;#8f7f3f;#3a5f7f;#6f4f7f;#3f7f7f;#d8d8d8;#777777;#bf5f5f;#7f9f7f;#af9f5f;#5f7f9f;#8f6f9f;#5f9f9f;#ffffff

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfce4-desktop" version="1.0">
<property name="backdrop" type="empty">
<property name="screen0" type="empty">
<property name="monitor0" type="empty">
<property name="workspace0" type="empty">
<property name="color-style" type="int" value="0"/>
<property name="image-style" type="int" value="5"/>
<property name="last-image" type="string" value="{{ user_home }}/.local/share/backgrounds/xfce-dark.svg"/>
</property>
</property>
</property>
</property>
<property name="desktop-icons" type="empty">
<property name="style" type="int" value="0"/>
</property>
</channel>

View File

@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfwm4" version="1.0">
<property name="general" type="empty">
<property name="theme" type="string" value="{{ xfce_theme_wm }}"/>
<property name="title_font" type="string" value="{{ xfce_font_ui }}"/>
<property name="workspace_count" type="int" value="6"/>
<property name="workspace_names" type="array">
<value type="string" value="term"/>
<value type="string" value="web"/>
<value type="string" value="code"/>
<value type="string" value="mail"/>
<value type="string" value="ops"/>
<value type="string" value="misc"/>
</property>
<property name="use_compositing" type="bool" value="false"/>
<property name="click_to_focus" type="bool" value="true"/>
<property name="focus_delay" type="int" value="250"/>
<property name="raise_delay" type="int" value="250"/>
</property>
</channel>

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xsettings" version="1.0">
<property name="Net" type="empty">
<property name="ThemeName" type="string" value="{{ xfce_theme_gtk }}"/>
<property name="IconThemeName" type="string" value="{{ xfce_theme_icons }}"/>
</property>
<property name="Gtk" type="empty">
<property name="FontName" type="string" value="{{ xfce_font_ui }}"/>
<property name="MonospaceFontName" type="string" value="{{ xfce_font_monospace }}"/>
<property name="CursorThemeName" type="string" value="Yaru"/>
<property name="DecorationLayout" type="string" value="menu:minimize,maximize,close"/>
</property>
<property name="Xft" type="empty">
<property name="Antialias" type="int" value="1"/>
<property name="Hinting" type="int" value="1"/>
<property name="HintStyle" type="string" value="hintslight"/>
<property name="RGBA" type="string" value="rgb"/>
</property>
</channel>

View File

@@ -1,12 +0,0 @@
---
- name: Ensure lab workspace directories exist
tags: [dotfiles]
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ lab_workspace_directories | default([]) }}"
loop_control:
label: "{{ item.path }}"

View File

@@ -15,104 +15,10 @@
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
- name: Enable emptty display manager for Void desktops
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 }}"
src: /etc/sv/emptty
dest: /var/service/emptty
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))
when: "'desktop' in group_names"

View File

@@ -39,39 +39,8 @@
- profile_desktop_sway
- profile_desktop_hyprland
- profile_desktop_niri
- profile_desktop_kde
- profile_desktop_xfce
- profile_desktop_host
- name: Configure lab role on Void
hosts: platform_void:&role_lab
become: true
roles:
- profile_lab
- name: Configure Linux Mint platform
hosts: platform_mint
become: true
roles:
- packages_mint
- services_systemd
- name: Configure personal workstation role on Linux Mint
hosts: platform_mint:&role_personal_workstation
become: true
roles:
- profile_personal_workstation
- name: Configure Cinnamon desktop on Linux Mint
hosts: platform_mint:&desktop_cinnamon
become: true
roles:
- profile_desktop_cinnamon
- name: Configure FreeBSD platform
hosts: platform_freebsd
become: true
@@ -80,13 +49,6 @@
- packages_freebsd
- services_freebsd
- name: Configure lab role on FreeBSD
hosts: platform_freebsd:&role_lab
become: true
roles:
- profile_lab
- name: Configure Niri desktop on FreeBSD
hosts: platform_freebsd:&desktop_niri
become: true