From f19ac8bce8fafa1cdab90f68a01b5c36c1c57478 Mon Sep 17 00:00:00 2001
From: Marty Oehme <contact@martyoeh.me>
Date: Tue, 25 Feb 2025 20:49:42 +0100
Subject: [PATCH] feat(power): Allow user to manage system power states

User is put into the 'power' group, and everyone in the group can
interact with system power events (hibernate, suspend, reboot, shutdown,
halt, etc).
---
 books/void_wayland.yaml | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/books/void_wayland.yaml b/books/void_wayland.yaml
index f7b02bc..de3d4ba 100644
--- a/books/void_wayland.yaml
+++ b/books/void_wayland.yaml
@@ -99,3 +99,30 @@
       ## TODO: Enable its start in river init script
       #
       # TODO: Find way to install and enable pipewire-roc-sink module (and enable ~/.config/pipewire/pipewire.conf.d/roc-sink.conf)
+
+
+- name: Allow user to manage system power
+  hosts: target_system
+  become: true
+  tags:
+    - power
+  tasks:
+    - name: Ensure user group "power" exists
+      ansible.builtin.group:
+        name: power
+        state: present
+
+    - name: Put user in power group
+      ansible.builtin.user:
+        name: "{{ user_name }}"
+        groups: [power]
+        append: true
+
+    - name: Enable power management for power group
+      ansible.builtin.copy:
+        content: "%power ALL=(ALL) NOPASSWD: /usr/bin/halt, /usr/bin/poweroff, /usr/bin/reboot, /usr/bin/shutdown, /usr/bin/zzz, /usr/bin/ZZZ"
+        dest: "/etc/sudoers.d/20-wheel"
+        owner: root
+        group: root
+        mode: 0644
+        force: true