diff --git a/modules/rosenthal/services/games.scm b/modules/rosenthal/services/games.scm new file mode 100644 index 0000000..157c6b4 --- /dev/null +++ b/modules/rosenthal/services/games.scm @@ -0,0 +1,62 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2026 Hilton Chain + +(define-module (rosenthal services games) + ;; Utilities + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix records) + #:use-module (rosenthal utils file) + ;; Guix System + #:use-module (gnu system accounts) + #:use-module (gnu system shadow) + ;; Guix System - services + #:use-module (gnu services) + #:use-module (gnu services configuration) + #:use-module (gnu services dbus) + ;; Guix packages + #:use-module (gnu packages linux) + #:export (gamemode-service-type + gamemode-configuration)) + +(define-maybe gexp) + +(define-configuration/no-serialization gamemode-configuration + (gamemode + (file-like gamemode) + "@code{gamemode} package to use.") + (config + maybe-gexp + "")) + +(define (gamemode-account-service config) + (list (user-group + (system? #t) + (name "gamemode")))) + +(define gamemode-etc-service + (match-record-lambda + (gamemode config) + `(("gamemode.ini" + ,(if (maybe-value-set? config) + (ini-file "gamemode.ini" config) + (file-append (package-source gamemode) "/example/gamemode.ini"))) + ("security/limits.d/10-gamemode.conf" + ,(file-append gamemode "/etc/security/limits.d/10-gamemode.conf"))))) + +(define gamemode-service-type + (service-type + (name 'gamemode) + (extensions + (list (service-extension profile-service-type + (compose list gamemode-configuration-gamemode)) + (service-extension account-service-type + gamemode-account-service) + (service-extension etc-service-type + gamemode-etc-service) + (service-extension dbus-root-service-type + (compose list gamemode-configuration-gamemode)) + (service-extension polkit-service-type + (compose list gamemode-configuration-gamemode)))) + (default-value (gamemode-configuration)) + (description "Set up Guix System environment for gamemode.")))