aboutsummaryrefslogtreecommitdiff
path: root/gnu/services/games.scm
blob: 6c2af44b49cdc28ad5f65d87f60a8b575b6c72c5 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu services games)
  #:use-module (gnu services)
  #:use-module (gnu services shepherd)
  #:use-module (gnu packages admin)
  #:use-module (gnu packages games)
  #:use-module (gnu system shadow)
  #:use-module ((gnu system file-systems) #:select (file-system-mapping))
  #:use-module (gnu build linux-container)
  #:autoload   (guix least-authority) (least-authority-wrapper)
  #:use-module (guix gexp)
  #:use-module (guix modules)
  #:use-module (guix records)
  #:use-module (ice-9 match)
  #:export (wesnothd-configuration
            wesnothd-configuration?
            wesnothd-service-type))

;;;
;;; The Battle for Wesnoth server
;;;

(define-record-type* <wesnothd-configuration>
  wesnothd-configuration make-wesnothd-configuration wesnothd-configuration?
  (package wesnothd-configuration-package
           (default wesnoth-server))
  (port wesnothd-configuration-port
        (default 15000)))

(define %wesnothd-accounts
  (list (user-account
         (name "wesnothd")
         (group "wesnothd")
         (system? #t)
         (comment "Wesnoth daemon user")
         (home-directory "/var/empty")
         (shell (file-append shadow "/sbin/nologin")))
        (user-group
         (name "wesnothd")
         (system? #t))))

(define wesnothd-shepherd-service
  (match-lambda
    (($ <wesnothd-configuration> package port)
     (let ((wesnothd (least-authority-wrapper
                      (file-append package "/bin/wesnothd")
                      #:name "wesnothd"
                      #:mappings (list (file-system-mapping
                                        (source "/var/run/wesnothd")
                                        (target source)
                                        (writable? #t)))
                      #:namespaces (delq 'net %namespaces))))
       (shepherd-service
        (documentation "The Battle for Wesnoth server")
        (provision '(wesnoth-daemon))
        (requirement '(networking))
        (start #~(make-forkexec-constructor
                  (list #$wesnothd "-p" #$(number->string port))
                  #:user "wesnothd" #:group "wesnothd"))
        (stop #~(make-kill-destructor)))))))

(define wesnothd-activation
  (with-imported-modules '((guix build utils))
    #~(begin
        (use-modules (guix build utils))

        (let* ((user (getpw "wesnothd"))
               (directory "/var/run/wesnothd"))
          ;; wesnothd creates a Unix-domain socket in DIRECTORY.
          (mkdir-p directory)
          (chown directory (passwd:uid user) (passwd:gid user))))))

(define wesnothd-service-type
  (service-type
   (name 'wesnothd)
   (description
    "Run The Battle for Wesnoth server @command{wesnothd}.")
   (extensions
    (list (service-extension account-service-type
                             (const %wesnothd-accounts))
          (service-extension activation-service-type
                             (const wesnothd-activation))
          (service-extension shepherd-root-service-type
                             (compose list wesnothd-shepherd-service))))
   (default-value (wesnothd-configuration))))
d> -rw-r--r--cpio.scm3154logplainabout -rw-r--r--cran.scm4894logplainabout -rw-r--r--crate.scm22191logplainabout -rw-r--r--cve-sample.json46447logplainabout -rw-r--r--cve.scm3672logplainabout -rw-r--r--debug-link.scm6709logplainabout -rw-r--r--derivations.scm65027logplainabout -rw-r--r--discovery.scm2540logplainabout -rw-r--r--egg.scm4098logplainabout -rw-r--r--elm.scm10342logplainabout -rw-r--r--elpa.scm3274logplainabout -rw-r--r--file-systems.scm4717logplainabout -rw-r--r--gem.scm6259logplainabout -rw-r--r--gexp.scm80317logplainabout -rw-r--r--git-authenticate.scm23665logplainabout -rw-r--r--git.scm9612logplainabout -rw-r--r--glob.scm2551logplainabout -rw-r--r--gnu-maintenance.scm2449logplainabout -rw-r--r--go.scm20078logplainabout -rw-r--r--grafts.scm25794logplainabout -rw-r--r--graph.scm24254logplainabout -rw-r--r--gremlin.scm8006logplainabout -rw-r--r--guix-archive.sh2803logplainabout -rw-r--r--guix-authenticate.sh3055logplainabout -rw-r--r--guix-build-branch.sh2222logplainabout -rw-r--r--guix-build.sh12599logplainabout -rw-r--r--guix-daemon.sh8308logplainabout -rw-r--r--guix-describe.sh1405logplainabout -rw-r--r--guix-download.sh1485logplainabout -rw-r--r--guix-environment-container.sh6944logplainabout -rw-r--r--guix-environment.sh9300logplainabout -rw-r--r--guix-gc.sh2682logplainabout -rw-r--r--guix-git-authenticate.sh2722logplainabout -rw-r--r--guix-graph.sh2881logplainabout -rw-r--r--guix-hash.sh3663logplainabout -rw-r--r--guix-home.sh7161logplainabout -rw-r--r--guix-lint.sh3213logplainabout -rw-r--r--guix-pack-localstatedir.sh2565logplainabout -rw-r--r--guix-pack-relocatable.sh9237logplainabout -rw-r--r--guix-pack.sh5132logplainabout -rw-r--r--guix-package-aliases.sh2155logplainabout -rw-r--r--guix-package-net.sh8093logplainabout -rw-r--r--guix-package.sh17584logplainabout -rw-r--r--guix-repl.sh2376logplainabout -rw-r--r--guix-shell-export-manifest.sh3290logplainabout -rw-r--r--guix-shell.sh4233logplainabout -rw-r--r--guix-style.sh2008logplainabout -rw-r--r--guix-system.sh10730logplainabout -rw-r--r--hackage.scm16510logplainabout -rw-r--r--hexpm.scm9314logplainabout -rw-r--r--home-import.scm6885logplainabout -rw-r--r--home-services.scm1678logplainabout -rw-r--r--http-client.scm2869logplainabout -rw-r--r--import-git.scm10047logplainabout -rw-r--r--import-github.scm5165logplainabout -rw-r--r--import-utils.scm8902logplainabout -rw-r--r--inferior.scm15074logplainabout -rw-r--r--ipfs.scm2021logplainabout d---------keys437logplain -rw-r--r--lint.scm57607logplainabout -rw-r--r--minetest.scm19401logplainabout -rw-r--r--modules.scm2591logplainabout -rw-r--r--monads.scm9618logplainabout -rw-r--r--nar.scm22167logplainabout -rw-r--r--networking.scm4024logplainabout -rw-r--r--offload.scm2683logplainabout -rw-r--r--opam.scm7386logplainabout -rw-r--r--openpgp.scm10524logplainabout -rw-r--r--pack.scm17239logplainabout -rw-r--r--packages.scm89603logplainabout -rw-r--r--pki.scm5220logplainabout -rw-r--r--print.scm5845logplainabout -rw-r--r--processes.scm4691logplainabout -rw-r--r--profiles.scm38903logplainabout -rw-r--r--publish.scm32334logplainabout -rw-r--r--pypi.scm17948logplainabout -rw-r--r--read-print.scm8866logplainabout -rw-r--r--records.scm17060logplainabout -rw-r--r--scripts.scm2034logplainabout -rw-r--r--search-paths.scm1768logplainabout -rw-r--r--services.scm12666logplainabout d---------services167logplain -rw-r--r--sets.scm1507logplainabout -rw-r--r--size.scm4576logplainabout -rw-r--r--status.scm12718logplainabout -rw-r--r--store-database.scm5421logplainabout -rw-r--r--store-deduplication.scm6535logplainabout -rw-r--r--store-roots.scm1899logplainabout -rw-r--r--store.scm69013logplainabout -rw-r--r--style.scm14136logplainabout -rw-r--r--substitute.scm25772logplainabout -rw-r--r--swh.scm4936logplainabout -rw-r--r--syscalls.scm22514logplainabout -rw-r--r--system.scm5961logplainabout -rw-r--r--test.drv5922logplainabout -rw-r--r--texlive.scm10112logplainabout -rw-r--r--transformations.scm23808logplainabout -rw-r--r--ui.scm11715logplainabout -rw-r--r--union.scm9714logplainabout -rw-r--r--upstream.scm7355logplainabout -rw-r--r--utils.scm12786logplainabout -rw-r--r--uuid.scm2755logplainabout -rw-r--r--workers.scm2172logplainabout