From afac310f21134cec532a670de1f078acdd8c042c Mon Sep 17 00:00:00 2001
From: Marty Oehme <contact@martyoeh.me>
Date: Sun, 2 Mar 2025 18:08:14 +0100
Subject: [PATCH] ref(roles): All roles use desired package state

By setting the `desired_package_state` variable we can change if ansible
should only ensure that the packages exist on the system (`present`) or
that they are also updated to their latest version (`latest`).
---
 roles/backup/tasks/restic.yaml        |  2 +-
 roles/backup/tasks/snapper.yaml       |  2 +-
 roles/base/tasks/main.yaml            | 12 ++++++------
 roles/bluetooth/tasks/main.yaml       |  2 +-
 roles/display_manager/tasks/main.yaml |  4 ++--
 roles/fonts/tasks/main.yaml           |  2 +-
 roles/gnupg/tasks/main.yaml           |  4 ++--
 roles/host/tasks/main.yaml            |  2 +-
 roles/keyd/tasks/main.yaml            |  2 +-
 roles/network/tasks/wireless.yaml     |  2 +-
 roles/packages/tasks/main.yaml        |  2 +-
 roles/pipewire/tasks/main.yaml        |  6 +++---
 roles/power/tasks/main.yaml           |  2 +-
 roles/user/defaults/main.yaml         |  1 -
 roles/user/tasks/main.yaml            |  2 +-
 roles/wayland/tasks/main.yaml         |  8 ++++----
 16 files changed, 27 insertions(+), 28 deletions(-)

diff --git a/roles/backup/tasks/restic.yaml b/roles/backup/tasks/restic.yaml
index 20cbad4..9bf91d9 100644
--- a/roles/backup/tasks/restic.yaml
+++ b/roles/backup/tasks/restic.yaml
@@ -2,7 +2,7 @@
   community.general.xbps:
     name:
       - restic
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags: packages
 
 - name: Ensure restic configuration directory exists
diff --git a/roles/backup/tasks/snapper.yaml b/roles/backup/tasks/snapper.yaml
index d551e3f..d6b6cd3 100644
--- a/roles/backup/tasks/snapper.yaml
+++ b/roles/backup/tasks/snapper.yaml
@@ -2,7 +2,7 @@
   community.general.xbps:
     name:
       - snapper
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
 
 # https://wiki.archlinux.org/title/Snapper#updatedb
 - name: Disable updatedb indexing for snapshot directories
diff --git a/roles/base/tasks/main.yaml b/roles/base/tasks/main.yaml
index b175181..7aabc47 100644
--- a/roles/base/tasks/main.yaml
+++ b/roles/base/tasks/main.yaml
@@ -3,7 +3,7 @@
   ansible.builtin.lineinfile:
     path: /etc/xbps.d/ignore-dracut.conf
     line: ignorepkg=dracut
-    state: present
+    state: "present"
     create: true # create file if absent
   tags:
     - packages
@@ -24,7 +24,7 @@
   community.general.xbps:
     name:
       - base-system
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags:
     - packages
 
@@ -39,7 +39,7 @@
 - name: Install booster
   community.general.xbps:
     name: booster
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   notify: installed-booster
   tags:
     - packages
@@ -71,7 +71,7 @@
       path: /etc/default/libc-locales
       regexp: "^{{ item }}"
       line: "{{ item }}"
-      state: present
+      state: "present"
       create: true
     loop: "{{ locales_enabled }}"
     when: libc_locales_file.stat.exists
@@ -81,7 +81,7 @@
   community.general.xbps:
     name:
       - chrony
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags: chrony
 
 - name: Activate chronyd service
@@ -107,7 +107,7 @@
       community.general.xbps:
         name:
           - snooze
-        state: present
+        state: "{{ desired_package_state | default('present') }}"
 
     - name: Activate snooze cron services
       ansible.builtin.file:
diff --git a/roles/bluetooth/tasks/main.yaml b/roles/bluetooth/tasks/main.yaml
index eb3e94e..f88f9fe 100644
--- a/roles/bluetooth/tasks/main.yaml
+++ b/roles/bluetooth/tasks/main.yaml
@@ -2,7 +2,7 @@
   community.general.xbps:
     name:
       - bluez
-    state: "{{ desired_package_state }}"
+    state: "{{ desired_package_state | default('present') }}"
   tags: packages
 
 - name: Activate bluetooth service
diff --git a/roles/display_manager/tasks/main.yaml b/roles/display_manager/tasks/main.yaml
index 5ca7090..952c6a8 100644
--- a/roles/display_manager/tasks/main.yaml
+++ b/roles/display_manager/tasks/main.yaml
@@ -2,14 +2,14 @@
 - name: Ensure user group for greeter exists
   ansible.builtin.group:
     name: "{{ greeter_user }}"
-    state: present
+    state: "present"
 
 - name: Install greetd and tuigreet
   community.general.xbps:
     name:
       - greetd
       - tuigreet
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags:
     - packages
 
diff --git a/roles/fonts/tasks/main.yaml b/roles/fonts/tasks/main.yaml
index c436b5c..02f7cef 100644
--- a/roles/fonts/tasks/main.yaml
+++ b/roles/fonts/tasks/main.yaml
@@ -2,7 +2,7 @@
 - name: Install many fonts
   community.general.xbps:
     name: "{{ fonts }}"
-    state: "{{ desired_package_state }}"
+    state: "{{ desired_package_state | default('present') }}"
   notify: installed-fonts
   when: fonts
 
diff --git a/roles/gnupg/tasks/main.yaml b/roles/gnupg/tasks/main.yaml
index 84c172e..cb5a088 100644
--- a/roles/gnupg/tasks/main.yaml
+++ b/roles/gnupg/tasks/main.yaml
@@ -3,13 +3,13 @@
     name:
       - gnupg
       - gnupg2-scdaemon
-    state: "{{ desired_package_state }}"
+    state: "{{ desired_package_state | default('present') }}"
   tags: packages
 
 - name: Ensure user group plugdev exist
   ansible.builtin.group:
     name: plugdev
-    state: present
+    state: "present"
 
 - name: Put user in plugdev group
   ansible.builtin.user:
diff --git a/roles/host/tasks/main.yaml b/roles/host/tasks/main.yaml
index ac6391c..9675f63 100644
--- a/roles/host/tasks/main.yaml
+++ b/roles/host/tasks/main.yaml
@@ -10,7 +10,7 @@
 #   tasks:
 #     - name: Create @voidroot subvool under root
 #       community.general.btrfs_subvolume:
-#         state: present
+#         state: "{{ desired_package_state | default('present') }}"
 #         name: "/@"
  #         filesystem_uuid: "{{ btrfs_root_uuid }}"
  #     # - name: Mount /boot part into voidroot mount
diff --git a/roles/keyd/tasks/main.yaml b/roles/keyd/tasks/main.yaml
index 5d5624a..e4638d1 100644
--- a/roles/keyd/tasks/main.yaml
+++ b/roles/keyd/tasks/main.yaml
@@ -3,7 +3,7 @@
   community.general.xbps:
     name:
       - keyd
-    state: "{{ desired_package_state }}"
+    state: "{{ desired_package_state | default('present') }}"
   tags:
     - packages
 
diff --git a/roles/network/tasks/wireless.yaml b/roles/network/tasks/wireless.yaml
index f66cd64..ec2ecaa 100644
--- a/roles/network/tasks/wireless.yaml
+++ b/roles/network/tasks/wireless.yaml
@@ -3,7 +3,7 @@
   community.general.xbps:
     name:
       - iwd
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
 
 - name: Activate wireless networking service
   ansible.builtin.file:
diff --git a/roles/packages/tasks/main.yaml b/roles/packages/tasks/main.yaml
index a4c942b..d74b51e 100644
--- a/roles/packages/tasks/main.yaml
+++ b/roles/packages/tasks/main.yaml
@@ -1,4 +1,4 @@
 - name: Install all my used void packages
   community.general.xbps:
     name: "{{ lookup('community.general.merge_variables', '^packages_.*') }}"
-    state: "{{ desired_package_state }}"
+    state: "{{ desired_package_state | default('present') }}"
diff --git a/roles/pipewire/tasks/main.yaml b/roles/pipewire/tasks/main.yaml
index eacdf4b..e525adc 100644
--- a/roles/pipewire/tasks/main.yaml
+++ b/roles/pipewire/tasks/main.yaml
@@ -1,7 +1,7 @@
 - name: Ensure user group for audio/video exists
   ansible.builtin.group:
     name: "{{ item }}"
-    state: present
+    state: "present"
   loop: "{{ audio_groups }}"
 
 - name: Put user in audio group
@@ -14,14 +14,14 @@
   community.general.xbps:
     name:
       - pipewire
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags: packages
 
 - name: Install pipewire bluetooth
   community.general.xbps:
     name:
       - libspa-bluetooth
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags:
     - packages
     - bluetooth
diff --git a/roles/power/tasks/main.yaml b/roles/power/tasks/main.yaml
index ae80b33..d55f4a5 100644
--- a/roles/power/tasks/main.yaml
+++ b/roles/power/tasks/main.yaml
@@ -2,7 +2,7 @@
 - name: Ensure user group "power" exists
   ansible.builtin.group:
     name: power
-    state: present
+    state: "present"
 
 - name: Put user in power group
   ansible.builtin.user:
diff --git a/roles/user/defaults/main.yaml b/roles/user/defaults/main.yaml
index 839c855..b354bfa 100644
--- a/roles/user/defaults/main.yaml
+++ b/roles/user/defaults/main.yaml
@@ -10,7 +10,6 @@ user_groups:
   - input
   - kvm
   - lp
-  - plugdev
   - scanner
   - storage
   - usbmon
diff --git a/roles/user/tasks/main.yaml b/roles/user/tasks/main.yaml
index 1de769a..bcba9bb 100644
--- a/roles/user/tasks/main.yaml
+++ b/roles/user/tasks/main.yaml
@@ -11,7 +11,7 @@
 - name: Ensure all desired user groups exist
   ansible.builtin.group:
     name: "{{ item }}"
-    state: present
+    state: "present"
   loop: "{{ user_groups }}"
 
 - name: Add primary user
diff --git a/roles/wayland/tasks/main.yaml b/roles/wayland/tasks/main.yaml
index 86f5615..843d44f 100644
--- a/roles/wayland/tasks/main.yaml
+++ b/roles/wayland/tasks/main.yaml
@@ -2,7 +2,7 @@
   community.general.xbps:
     name:
       - mesa-dri
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags:
     - intel
     - drivers
@@ -14,7 +14,7 @@
       - dbus
       - seatd
       - turnstile
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags:
     - packages
 
@@ -37,7 +37,7 @@
     name:
       - xdg-desktop-portal
       - xdg-desktop-portal-wlr
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags:
     - packages
     - desktop-portal
@@ -48,7 +48,7 @@
     name:
       - qt5-wayland
       - qt6-wayland
-    state: present
+    state: "{{ desired_package_state | default('present') }}"
   tags:
     - packages
     - qt