summaryrefslogtreecommitdiff
path: root/guix/modules/sysadmin/people.scm
diff options
context:
space:
mode:
authorNils Gillmann <gillmann@infotropique.org>2018-03-31 13:04:55 +0000
committerNils Gillmann <gillmann@infotropique.org>2018-03-31 13:04:55 +0000
commitf7a6ab6cb6efe3af1a01d9c5054c0e2b75d7523e (patch)
treeabcdcc0c35f902ef0082c4b53da4e9721a76128e /guix/modules/sysadmin/people.scm
parent55ac1b80973d782a2c1d509fb1f859f4920f9c21 (diff)
downloaddeployment-f7a6ab6cb6efe3af1a01d9c5054c0e2b75d7523e.tar.gz
deployment-f7a6ab6cb6efe3af1a01d9c5054c0e2b75d7523e.tar.bz2
deployment-f7a6ab6cb6efe3af1a01d9c5054c0e2b75d7523e.zip
initial commit of guix directory
Signed-off-by: Nils Gillmann <gillmann@infotropique.org>
Diffstat (limited to 'guix/modules/sysadmin/people.scm')
-rw-r--r--guix/modules/sysadmin/people.scm73
1 files changed, 73 insertions, 0 deletions
diff --git a/guix/modules/sysadmin/people.scm b/guix/modules/sysadmin/people.scm
new file mode 100644
index 0000000..121c268
--- /dev/null
+++ b/guix/modules/sysadmin/people.scm
@@ -0,0 +1,73 @@
+;;; GNU Guix system administration tools.
+;;;
+;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This program 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.
+;;;
+;;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (sysadmin people)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:use-module (gnu services)
+ #:use-module (gnu system shadow)
+ #:use-module (gnu services ssh)
+ #:use-module (gnu packages base)
+ #:use-module (ice-9 match)
+ #:export (sysadmin?
+ sysadmin
+ sysadmin-service-type))
+
+;;; Commentary:
+;;;
+;;; Declaration of system administrator user accounts.
+;;;
+;;; Code:
+
+(define-record-type* <sysadmin> sysadmin make-sysadmin
+ sysadmin?
+ (name sysadmin-name)
+ (full-name sysadmin-full-name)
+ (ssh-public-key sysadmin-ssh-public-key)
+ (restricted? sysadmin-restricted? (default #f)))
+
+(define (sysadmin->account sysadmin)
+ "Return the user account for SYSADMIN."
+ (match sysadmin
+ (($ <sysadmin> name comment _ restricted?)
+ (user-account
+ (name name)
+ (comment comment)
+ (group "users")
+ (supplementary-groups (if restricted?
+ '()
+ '("wheel" "kvm"))) ;sudoer
+ (home-directory (string-append "/home/" name))))))
+
+(define (sysadmin->authorized-key sysadmin)
+ "Return an authorized key tuple for SYSADMIN."
+ (list (sysadmin-name sysadmin)
+ (sysadmin-ssh-public-key sysadmin)))
+
+(define sysadmin-service-type
+ ;; The service that initializes sysadmin accounts.
+ (service-type
+ (name 'sysadmin)
+ (extensions (list (service-extension account-service-type
+ (lambda (lst)
+ (map sysadmin->account lst)))
+ (service-extension openssh-service-type
+ (lambda (lst)
+ (map sysadmin->authorized-key
+ lst)))))))
+
+;;; people.scm ends here