summaryrefslogtreecommitdiff
path: root/users
diff options
context:
space:
mode:
Diffstat (limited to 'users')
-rw-r--r--users/id1000.scm583
-rw-r--r--users/id1001.scm94
-rw-r--r--users/uid1000-gitconfig36
-rw-r--r--users/uid1000-gitignore20
-rw-r--r--users/uid1000-test-channels.scm55
-rw-r--r--users/vmail.scm34
6 files changed, 351 insertions, 471 deletions
diff --git a/users/id1000.scm b/users/id1000.scm
index cfc4827..6a9a9f8 100644
--- a/users/id1000.scm
+++ b/users/id1000.scm
@@ -1,298 +1,66 @@
-(define-module (users id1000)
- ;; home-environment
- #:use-module (gnu home)
-
- ;; home-profile-service-type
- ;; home-xdg-configuration-files-service-type
- #:use-module (gnu home services)
-
- ;; gparted
- #:use-module (gnu packages disk)
-
- ;; emacs
- #:use-module (gnu packages emacs)
-
- ;; emacs-org-roam
- ;; emacs-paredit
- #:use-module (gnu packages emacs-xyz)
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; SPDX-FileCopyrightText: 2026 Marek Paśnikowski <marek@marekpasnikowski.pl>
- ;; git
- #:use-module (gnu packages version-control)
-
- ;; simple-service
- #:use-module (gnu services)
+;;; COPYRIGHT NOTICE
+;;;
+;;; Copyright 2026, Marek Paśnikowski <marek@marekpasnikowski.pl>
- ;; user-account
- #:use-module (gnu system shadow)
+;;; LICENSE NOTICE
+;;;
+;;; This library 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 library 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 library.
+;;; If not, see <https://www.gnu.org/licenses/>.
- ;; local-file
+(define-module (users id1000)
#:use-module (guix gexp)
-
- ;; %suweren-home-services
- #:use-module (suweren home)
-
- #:use-module (guix records)
- #:use-module (ice-9 match))
-
-(define-record-type* <dkimproxy-out-signature-configuration>
- dkimproxy-out-signature-configuration
- make-dkimproxy-out-signature-configuration
- dkimproxy-out-signature-configuration?
- (type dkimproxy-out-signature-configuration-type
- (default 'dkim))
- (key dkimproxy-out-signature-configuration-key
- (default #f))
- (algorithm dkimproxy-out-signature-configuration-algorithm
- (default #f))
- (method dkimproxy-out-signature-configuration-method
- (default #f))
- (domain dkimproxy-out-signature-configuration-domain
- (default #f))
- (identity dkimproxy-out-signature-configuration-identity
- (default #f))
- (selector dkimproxy-out-signature-configuration-selector
- (default #f)))
-
-(define-public generate-dkimproxy-out-signature-configuration
- (match-lambda
- (($
- <dkimproxy-out-signature-configuration>
- type
- key
- algorithm
- method
- domain
- identity
- selector )
- (string-append
- (match type
- ('dkim "dkim")
- ('domainkeys "domainkeys"))
- (if (or key algorithm method domain identity selector)
- (string-append
- "("
- (string-join
- `(,@ (if key
- (list (string-append "key=" key))
- '())
- ,@ (if algorithm
- (list (string-append "a=" algorithm))
- '())
- ,@ (if method
- (list (string-append "c=" method))
- '())
- ,@ (if domain
- (list (string-append "d=" domain))
- '())
- ,@ (if identity
- (list (string-append "i=" identity))
- '())
- ,@ (if selector
- (list (string-append "s=" selector))
- '()))
- ",")
- ")")
- "")))))
-
-(define-record-type* <dkimproxy-out-configuration>
- dkimproxy-out-configuration
- make-dkimproxy-out-configuration
- dkimproxy-out-configuration?
- (package dkimproxy-out-configuration-package
- (default (@ (gnu packages mail) dkimproxy)))
- (listen dkimproxy-out-configuration-listen
- (default #f))
- (relay dkimproxy-out-configuration-relay
- (default #f))
- (list-id-map dkimproxy-out-configuration-list-id-map
- (default '()))
- (sender-map dkimproxy-out-configuration-sender-map
- (default '()))
- (reject-error? dkimproxy-out-configuration-sender-reject-error?
- (default #f))
- (config-file dkimproxy-out-configuration-config-file
- (default #f)))
-
-(define (generate-map-file config filename)
- (apply
- plain-file
- filename
- (map (lambda (config)
- (match config
- ((selector (config ...))
- (string-append
- selector " "
- (string-join
- (map
- generate-dkimproxy-out-signature-configuration
- config)
- "\n")))
- ((selector config)
- (string-append
- selector " "
- (generate-dkimproxy-out-signature-configuration
- config)))))
- config)))
-
-(define dkimproxy-out-shepherd-service
- (match-lambda
- (($
- <dkimproxy-out-configuration>
- package
- listen
- relay
- list-id-map
- sender-map
- reject-error?
- config-file)
- (list
- ((@ (gnu services shepherd) shepherd-service)
- (provision '(dkimproxy-out))
- (requirement '(loopback))
- (documentation "Outbound DKIM proxy.")
- (start
- (let ((proxy (file-append package "/bin/dkimproxy.out")))
- (if config-file
- #~
- (make-forkexec-constructor
- (list
- #$
- proxy
- (string-append "--conf_file=" #$ config-file)
- "--pidfile=/var/run/dkimproxy.out.pid"
- "--user=dkimproxy" "--group=dkimproxy")
- #:pid-file "/var/run/dkimproxy.out.pid")
- (let*
- ((first-signature
- (match sender-map
- (((sender (signature _ ...)) _ ...) signature)
- (((sender signature) _ ...) signature)))
- (domains
- (apply append
- (map
- (lambda (sender)
- (match sender
- (((domains ...) config) domains)
- ((domain config) domain)))
- sender-map)))
- (sender-map
- (generate-map-file sender-map "sender.map"))
- (listid-map
- (if (null? list-id-map)
- #f
- (generate-map-file list-id-map "listid.map")))
- (keyfile
- (dkimproxy-out-signature-configuration-key
- first-signature))
- (selector
- (dkimproxy-out-signature-configuration-selector
- first-signature))
- (method
- (dkimproxy-out-signature-configuration-method
- first-signature))
- (signature
- (match (dkimproxy-out-signature-configuration-type
- first-signature)
- ('dkim "dkim")
- ('domainkeys "domainkeys"))))
- #~
- (make-forkexec-constructor
- `(,#$
- proxy
- "--pidfile=/var/run/dkimproxy.out.pid"
- "--user=dkimproxy" "--group=dkimproxy"
- ,(string-append "--listen=" #$ listen)
- ,(string-append "--relay=" #$ relay)
- ,(string-append "--sender_map=" #$ sender-map)
- ,@ (if #$ listid-map
- (list
- (string-append "--listid_map=" #$ listid-map))
- '())
- ,(string-append "--domain=" #$ domains)
- ,(string-append "--keyfile=" #$ keyfile)
- ,(string-append "--selector=" #$ selector)
- ,@ (if #$ method
- (list
- (string-append "--method=" #$ method))
- '())
- ,@ (if #$ reject-error?
- '("--reject_error")
- '())
- ,@ (if #$ signature
- (list
- (string-append "--signature=" #$ signature))
- '())))))))
- (stop #~ (make-kill-destructor)))))))
-
-(define %dkimproxy-accounts
- (list (user-group (name "dkimproxy")
- (system? #t))
- (user-account (name "dkimproxy")
- (group "dkimproxy")
- (system? #t)
- (comment "Dkimproxy user")
- (home-directory "/var/empty")
- (shell (file-append (@ (gnu packages admin)
- shadow)
- "/sbin/nologin")))))
-
-(define dkimproxy-out-service-type
- (service-type
- (name 'dkimproxy-out)
- (description "stub")
- (extensions
- (list
- (service-extension
- account-service-type
- (const %dkimproxy-accounts))
- (service-extension
- (@ (gnu services shepherd) shepherd-root-service-type)
- dkimproxy-out-shepherd-service)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(define dkimproxy-signature-dkim
- (dkimproxy-out-signature-configuration
- (algorithm "rsa-sha256")
- (key "/etc/mail/dkim/marekpasnikowski.pl.key")
- (method "relaxed")
- (selector "dkim")
- (type 'dkim)))
-
-(define dkimproxy-signature-domainkeys
- (dkimproxy-out-signature-configuration
- (method "mofws")
- (type 'domainkeys)))
-
-;;;;;
-
-(define aliases-file
- ((@ (guix gexp) mixed-text-file)
- "aliases"
- "@ vmail\n"))
-
-(define blacklist-file
- ((@ (guix gexp) mixed-text-file)
- "blacklist"
- "@yahoo.com.cn\n"
- "@qq.com\n"
- "@fnac.com\n"
- "@just-aero.us\n"
- "@elitetorrent1.com\n"))
-
-(define dkimproxy-signatures-marekpasnikowski
- (list dkimproxy-signature-dkim
- dkimproxy-signature-domainkeys))
+ #:use-module (sovereign services mail)
+ #:use-module ( (gnu home)
+ #:prefix gnu:home:)
+ #:use-module ( (gnu home services)
+ #:prefix gnu:home:services:)
+ #:use-module ( (gnu home services desktop)
+ #:prefix gnu:home:services:desktop:)
+ #:use-module ( (gnu home services shepherd)
+ #:prefix gnu:home:services:shepherd:)
+ #:use-module ( (gnu home services sound)
+ #:prefix gnu:home:services:sound:)
+ #:use-module ( (gnu home services ssh)
+ #:prefix gnu:home:services:ssh:)
+ #:use-module ( (gnu packages audio)
+ #:prefix gnu:packages:audio:)
+ #:use-module ( (gnu packages disk)
+ #:prefix gnu:packages:disk:)
+ #:use-module ( (gnu packages version-control)
+ #:prefix gnu:packages:version-control:)
+ #:use-module ( (gnu services)
+ #:prefix gnu:services:)
+ #:use-module ( (gnu system accounts)
+ #:prefix gnu:system:accounts:)
+ #:use-module ( (sovereign packages emacs)
+ #:prefix sovereign:packages:emacs:)
+ #:use-module ( (sovereign services admin)
+ #:prefix sovereign:services:admin:)
+ #:use-module ( (sovereign services fontutils)
+ #:prefix sovereign:services:fontutils:)
+ #:use-module ( (sovereign systems)
+ #:prefix sovereign:systems:))
(define dovecot-imap-login-inet-configuration
((@ (gnu services mail) inet-listener-configuration)
- (address "192.168.10.2")
+ (address "192.168.1.2")
(port 993)
(protocol "imaps")))
(define dovecot-lmtp-inet-configuration
((@ (gnu services mail) inet-listener-configuration)
- (address "192.168.10.2 127.0.0.1")
+ (address "192.168.1.2 127.0.0.1")
(port 24)
(protocol "lmtp")))
@@ -333,20 +101,8 @@
(auto "subscribe")
(special-use (list "\\Trash"))))
-(define relays-file
- ((@ (guix gexp) mixed-text-file)
- "other-relays"
- "mx1.forwardemail.net\n"
- "mx2.forwardemail.net\n"))
-
-(define smtpd-keys
- "/secrets/smtpd")
-
;;;
-(define dkimproxy-sender-marekpasnikowski
- `("marekpasnikowski.pl" ,dkimproxy-signatures-marekpasnikowski))
-
(define dovecot-imap
((@ (gnu services mail) protocol-configuration)
(name "imap")))
@@ -389,76 +145,6 @@
"uid=vmail"))
(driver "static")))
-(define (opensmtpd-config interface
- domain)
- ((@ (guix gexp) mixed-text-file)
- "smtpd.conf"
- "# This is the smtpd server system-wide configuration file.\n"
- "# See smtpd.conf(5) for more information.\n"
- "\n"
- "# My TLS certificate and key\n"
- "pki marekpasnikowski.pl cert \"/etc/letsencrypt/live/" domain "/fullchain.pem\"\n"
- "pki marekpasnikowski.pl key \"/etc/letsencrypt/live/" domain "/privkey.pem\"\n"
- "\n"
- "# Edit this file to add add more virtual users (passwords are read in that file\n"
- "# instead of /etc/passwd\n"
- "table passwd file:" smtpd-keys "\n"
- "\n"
- "table other-relays file:" relays-file "\n"
- "table blacklist file:" blacklist-file "\n"
- "\n"
- "# A simple spam filter\n"
- "# filter spam-filter phase mail-from match mail-from <blacklist> reject \"555\"\n"
- "\n"
- "# port 25 is used only for receiving from external servers, and they may start\n"
- "# a TLS session if they want.\n"
- "listen on " interface " port 25 # tls pki marekpasnikowski.pl filter spam-filter\n"
- "\n"
- "# For sending messages from outside of this server, you need to authenticate and\n"
- "# use TLS.\n"
- "listen on " interface " port 465 smtps pki marekpasnikowski.pl mask-src auth <passwd>\n"
- "\n"
- "# Localhost is used by the .onion, so we use the same configuration for \n"
- "# local connections."
- "listen on lo port 25 tls pki marekpasnikowski.pl filter spam-filter\n"
- "# Since incoming connection uses tor, we don't need tls, but still require\n"
- "# authentication; we're not a relay\n"
- "# listen on lo port 587 tls pki marekpasnikowski.pl mask-src auth <passwd>\n"
- "\n"
- "# DKIMproxy\n"
- "listen on lo port 10028 tag DKIM_OUT\n"
- "\n"
- "# The socket is considered an internal connection\n"
- "listen on socket mask-src\n"
- "\n"
- "# Maybe it'll work better if we connect to gmail only with v4?\n"
- "# limit mta for domain gmail.com inet4\n"
- "\n"
- "# TODO: manage these files directly in the configuration?\n"
- "# If you edit the file, you have to run \"smtpctl update table aliases\"\n"
- "table aliases file:" aliases-file "\n"
- "\n"
- "# We define some actions\n"
- "action receive lmtp \"/var/run/dovecot/lmtp\" rcpt-to virtual <aliases>\n"
- "action outbound relay helo \"" domain "\"\n"
- "action godkim relay host smtp://127.0.0.1:10027\n"
- "\n"
- "# We accept to relay any mail from authenticated users\n"
- "match for any from any auth action godkim\n"
- "match tag DKIM_OUT for any action outbound\n"
- "\n"
- "# Then, we reject on some other conditions:\n"
- "\n"
- "# If the mail tries to impersonate us\n"
- "# match !from src <other-relays> mail-from \"@marekpasnikowski.pl\" for any reject\n"
- "\n"
- "# If it comes from someone on the blacklist\n"
- "match from any mail-from <blacklist> reject\n"
- "\n"
- "# Finally, if we accept incoming messages\n"
- "match from any for domain \"marekpasnikowski.pl\" action receive\n"
- "match for local action receive\n" ))
-
(define ssl-cert-path
(string-append "</etc/letsencrypt/live/"
"marekpasnikowski.pl"
@@ -471,12 +157,6 @@
;;;
-(define dkimproxy-out-configuration*
- (dkimproxy-out-configuration
- (listen "127.0.0.1:10027")
- (relay "172.0.0.1:10028")
- (sender-map `(,dkimproxy-sender-marekpasnikowski))))
-
(define dovecot-configuration*
((@ (gnu services mail) dovecot-configuration)
(disable-plaintext-auth? #t)
@@ -494,76 +174,123 @@
(userdbs (list dovecot-userdb-static-configuration))))
(define groups
- (list "kvm"
+ (list "audio"
+ ;; "libvirt"
+ "netdev"
+ "video"
"wheel"))
-(define opensmtpd-configuration*
- ((@ (gnu services mail) opensmtpd-configuration)
- (config-file (opensmtpd-config "enp1s0"
- "marekpasnikowski.pl"))))
-
;;;
-(define-public dkim-service
- (service dkimproxy-out-service-type
- dkimproxy-out-configuration*))
+(define environment-variables
+ (let
+ ( (l-variables (list '("EDITOR" . "kate -s sesja -b"))))
+ (gnu:services:simple-service 'id1000-environment-variables
+ gnu:home:services:home-environment-variables-service-type
+ l-variables)))
(define-public dovecot-service
- (service (@ (gnu services mail) dovecot-service-type)
+ (gnu:services:service (@ (gnu services mail) dovecot-service-type)
dovecot-configuration*))
-(define-public smtp-service
- (service (@ (gnu services mail) opensmtpd-service-type)
- opensmtpd-configuration*))
+(define openssh-host/*
+ (gnu:home:services:ssh:openssh-host
+ (name "top-level")
+ (host-name "*")
+ (extra-content (string-append "ServerAliveInterval 5\n"
+ "ServerAliveCountMax 11\n"))))
+
+(define openssh-configuration
+ (let
+ ( (l-aisaka (mixed-text-file "aisaka-openssh-keys"
+ "aisaka ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM0Eh0q54myeSEironEP9DEKl+ownYuH7oSgAVuLIDNt\n"
+ "[git.marekpasnikowski.pl]:23 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM0Eh0q54myeSEironEP9DEKl+ownYuH7oSgAVuLIDNt\n"
+ "[www.marekpasnikowski.pl]:23 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM0Eh0q54myeSEironEP9DEKl+ownYuH7oSgAVuLIDNt\n"))
+ (l-akashi (mixed-text-file "akashi-openssh-keys"
+ "akashi ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICtEYtiph2TwshHHSQhLL7A2ZvFMCogWuI8vfS3jLQsm\n"))
+ (l-ayase (mixed-text-file "ayase-openssh-keys"
+ "ayase ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIC9WLFRywGMc2Il35oLTSlG6VwdOreoMcj7SbiEt75i\n"))
+ (l-marek (mixed-text-file "marek-openssh-keys"
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK4THTYnHCc/ihCJNKJtGTNu1zCnLndbMHnxnrxzJk+N marek@aisaka\n"
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFzC1VvW6TB4pMuGyfTM36T7Ar7FZqSXc7kCoVDNwtUX marek@akashi\n"
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMefVFbVR/yQ639LnmVacvaifYFJSocxi9wWJKUQJ/Vz marek@ayase\n"
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJew7ti1qr545Z6OUZ/xcNUg7ib6P0pTbSZqFpSvNhKU marek@mcdowell\n"
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICBo2coChmWHQn9BEbp0dA7DQG7CPEweVcsmnaIVmXyR marek@rakan\n"))
+ (l-mcdowell (mixed-text-file "mcdowell-openssh-keys"
+ "mcdowell ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP/EueZjfqWhdML17z+Da7+KWHofXBpP020ff1vKedOr\n"))
+ (l-rakan (mixed-text-file "rakan-openssh-keys"
+ "rakan ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxlIhNlkWCNA+l/RiOJztB+VWhuJtDTUvSwwlE3MpgJ\n"
+ "[www.marekpasnikowski.pl]:24 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxlIhNlkWCNA+l/RiOJztB+VWhuJtDTUvSwwlE3MpgJ\n")))
+ (gnu:home:services:ssh:home-openssh-configuration
+ (hosts (list openssh-host/*))
+ (known-hosts (list l-aisaka
+ l-akashi
+ l-mcdowell
+ l-rakan))
+ (authorized-keys (list l-marek)))))
+
+(define openssh
+ (gnu:services:service
+ gnu:home:services:ssh:home-openssh-service-type
+ openssh-configuration))
(define-public uid1000-name
"marek")
(define-public uid1000-account
- (user-account (name uid1000-name)
- (group "users")
- (supplementary-groups groups)
- (uid 1000)
- (comment "Marek Paśnikowski")
- (home-directory "/home/marek")))
+ (gnu:system:accounts:user-account
+ (name uid1000-name)
+ (password #f)
+ (uid 1000)
+ (group "users")
+ (supplementary-groups groups)
+ (comment "Marek Paśnikowski")
+ (home-directory "/home/marek")))
(define-public uid1000-home-environment
- (lambda (host-name*)
- (let* ((gitconfig-file (local-file "uid1000-gitconfig")) ; TODO modularize
- (gitignore-file (local-file "uid1000-gitignore")) ; TODO review the contents
-
- (gitconfig (list "git/config"
- gitconfig-file))
- (gitignore (list "git/ignore"
- gitignore-file))
-
- (emacs-packages (list emacs
- emacs-org-roam
- emacs-paredit))
- (git-configuration-files (list gitconfig
- gitignore))
- (git-packages (list git))
- (packages (list gparted))
-
- (emacs-software (simple-service 'emacs-packages
- home-profile-service-type
- emacs-packages))
- (git-configuration (simple-service 'git-configuration
- home-xdg-configuration-files-service-type
- git-configuration-files))
- (git-software (simple-service 'git-packages
- home-profile-service-type
- git-packages))
- (profile (simple-service 'user-packages
- home-profile-service-type
- packages))
-
- (%suweren-home-services* (%suweren-home-services host-name*))
- (user-services (list emacs-software
- git-configuration
- git-software
- profile))
+ (let
+ ( (l-gitconfig-file (local-file "uid1000-gitconfig")) ; TODO modularize
+ (l-gitignore-file (local-file "uid1000-gitignore")) ; TODO review the contents
+ (l-home-dbus-service (gnu:services:service gnu:home:services:desktop:home-dbus-service-type))
+ (l-home-files `( (".test-channels.scm" ,(local-file "./uid1000-test-channels.scm"))))
+ (l-home-pipewire-service (gnu:services:service gnu:home:services:sound:home-pipewire-service-type))
+ (l-home-shepherd-service (gnu:services:service gnu:home:services:shepherd:home-shepherd-service-type)))
+ (let
+ ( (l-gitconfig (list "git/config"
+ l-gitconfig-file))
+ (l-gitignore (list "git/ignore"
+ l-gitignore-file))
+ (l-fontconfig (sovereign:services:fontutils:home-fontconfig-service-type #t
+ #t
+ "Noto"))
+ (l-home-files-service (gnu:services:simple-service 'home-files
+ gnu:home:services:home-files-service-type
+ l-home-files)))
+ (let*
+ ( (l-git-configuration-files (list l-gitconfig
+ l-gitignore))
+ (l-git-configuration (gnu:services:simple-service 'git-configuration
+ gnu:home:services:home-xdg-configuration-files-service-type
+ l-git-configuration-files))
+ (l-user-services (list sovereign:systems:bash-configuration
+ environment-variables
+ l-git-configuration
+ l-home-files-service
+ l-fontconfig)))
+ (gnu:home:home-environment
+ (packages (cons* gnu:packages:version-control:git
+ gnu:packages:disk:gparted
+ sovereign:systems:common-home-environment-packages))
+ (services (cons* sovereign:services:admin:update-commands
+ l-home-dbus-service
+ l-home-pipewire-service
+ l-home-shepherd-service
+ openssh
+ sovereign:packages:emacs:spacemacs-home-files
+ sovereign:packages:emacs:spacemacs-home-profile
+ sovereign:packages:emacs:spacemacs-variables
+ l-user-services)))))))
- (services* (append %suweren-home-services*
- user-services)))
- (home-environment (services services*)))))
+(define-public named-home-environment
+ (list uid1000-name
+ uid1000-home-environment))
diff --git a/users/id1001.scm b/users/id1001.scm
index 26a76f6..8a2110e 100644
--- a/users/id1001.scm
+++ b/users/id1001.scm
@@ -1,45 +1,63 @@
-(define-module (users id1001)
- ;; home-environment
- #:use-module (gnu home)
-
- ;; home-profile-service-type
- ;; home-xdg-configuration-files-service-type
- #:use-module (gnu home services)
-
- ;; simple-service
- #:use-module (gnu services)
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; SPDX-FileCopyrightText: 2026 Marek Paśnikowski <marek@marekpasnikowski.pl>
- ;; user-account
- #:use-module (gnu system shadow)
+;;; COPYRIGHT NOTICE
+;;;
+;;; Copyright 2026, Marek Paśnikowski <marek@marekpasnikowski.pl>
- ;; %suweren-home-services
- #:use-module (suweren home))
+;;; LICENSE NOTICE
+;;;
+;;; This library 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 library 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 library.
+;;; If not, see <https://www.gnu.org/licenses/>.
-;; string
-(define-public uid1001-name
- "lilia")
-
-;; (string) ->
-;; record user-account
-(define-public uid1001-account
- (user-account (name uid1001-name)
- (group "users")
- (uid 1001)
- (comment "Liliana Ruszuk")
- (home-directory "/home/lilia")))
+(define-module (users id1001)
+ #:use-module ( (gnu home)
+ #:prefix gnu:home:)
+ #:use-module ( (gnu packages libreoffice)
+ #:prefix gnu:packages:libreoffice:)
+ #:use-module ( (gnu system accounts)
+ #:prefix gnu:system:accounts:)
+ #:use-module ( (nongnu packages mozilla)
+ #:prefix nongnu:packages:mozilla:)
+ #:use-module ( (sovereign services admin)
+ #:prefix sovereign:services:admin:)
+ #:use-module ( (sovereign services fontutils)
+ #:prefix sovereign:services:fontutils:)
+ #:use-module ( (sovereign systems)
+ #:prefix sovereign:systems:))
-;; record home-environment
-(define-public uid1001-home-environment
- (lambda (host-name*)
- (let* ((packages (list ))
+(define name
+ "janusz")
- (profile (simple-service 'user-packages
- home-profile-service-type
- packages))
+(define home-environment
+ (let
+ ( (l-fontconfig (sovereign:services:fontutils:home-fontconfig-service-type #t
+ #t
+ "Noto")))
+ (let
+ ( (l-services (list sovereign:systems:bash-configuration
+ sovereign:services:admin:update-commands
+ l-fontconfig)))
+ (gnu:home:home-environment
+ (packages (cons* gnu:packages:libreoffice:libreoffice
+ sovereign:systems:common-home-environment-packages))
+ (services l-services)))))
- (%suweren-home-services* (%suweren-home-services host-name*))
- (user-services (list profile))
+(define-public named-home-environment
+ (list name
+ home-environment))
- (services* (append %suweren-home-services*
- user-services)))
- (home-environment (services services*)))))
+(define-public user-account
+ (gnu:system:accounts:user-account
+ (name name)
+ (password #f)
+ (group "users")
+ (supplementary-groups (list "wheel"))))
diff --git a/users/uid1000-gitconfig b/users/uid1000-gitconfig
index 300f906..c040d80 100644
--- a/users/uid1000-gitconfig
+++ b/users/uid1000-gitconfig
@@ -1,10 +1,36 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+# SPDX-FileCopyrightText: 2026 Marek Paśnikowski <marek@marekpasnikowski.pl>
+
+# COPYRIGHT NOTICE
+#
+# Copyright 2026, Marek Paśnikowski <marek@marekpasnikowski.pl>
+
+# LICENSE NOTICE
+#
+# This library 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 library 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 library.
+# If not, see <https://www.gnu.org/licenses/>.
+
+[core]
+quotePath = false
+
[commit]
- gpgsign = true
+gpgsign = true
[user]
- email = marek@marekpasnikowski.pl
- name = Marek Paśnikowski
- signingkey = 6D81B1207711899F
+email = marek@marekpasnikowski.pl
+name = Marek Paśnikowski
+signingkey = 6D81B1207711899F
[push]
- autoSetupRemote = true
+autoSetupRemote = true
+
+[safe]
+directory = *
diff --git a/users/uid1000-gitignore b/users/uid1000-gitignore
index 98e588f..73a9355 100644
--- a/users/uid1000-gitignore
+++ b/users/uid1000-gitignore
@@ -1,3 +1,23 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+# SPDX-FileCopyrightText: 2026 Marek Paśnikowski <marek@marekpasnikowski.pl>
+
+# COPYRIGHT NOTICE
+#
+# Copyright 2026, Marek Paśnikowski <marek@marekpasnikowski.pl>
+
+# LICENSE NOTICE
+#
+# This library 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 library 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 library.
+# If not, see <https://www.gnu.org/licenses/>.
+
# -*- mode: gitignore; -*-
*~
\#*\#
diff --git a/users/uid1000-test-channels.scm b/users/uid1000-test-channels.scm
new file mode 100644
index 0000000..adce628
--- /dev/null
+++ b/users/uid1000-test-channels.scm
@@ -0,0 +1,55 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; SPDX-FileCopyrightText: 2026 Marek Paśnikowski <marek@marekpasnikowski.pl>
+
+;;; COPYRIGHT NOTICE
+;;;
+;;; Copyright 2026, Marek Paśnikowski <marek@marekpasnikowski.pl>
+
+;;; LICENSE NOTICE
+;;;
+;;; This library 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 library 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 library.
+;;; If not, see <https://www.gnu.org/licenses/>.
+
+(define-module (users uid1000-test-channels)
+ #:use-module ( (guix channels)
+ #:prefix guix:channels:)
+ #:use-module ( (sovereign channels)
+ #:prefix sovereign:channels:))
+
+(define test-deployment-channel
+ (guix:channels:channel
+ (inherit sovereign:channels:deployment-channel)
+ (branch "test")))
+
+(define test-guix-channel
+ (guix:channels:channel
+ (inherit sovereign:channels:default-guix-channel)
+ (branch "test")))
+
+(define test-nonguix-channel
+ (guix:channels:channel
+ (inherit sovereign:channels:nonguix-channel)
+ (branch "test")))
+
+(define test-rde-channel
+ (guix:channels:channel
+ (inherit sovereign:channels:rde-channel)))
+
+(define test-sovereign-channel
+ (guix:channels:channel
+ (inherit sovereign:channels:sovereign-channel)
+ (branch "test")))
+
+(list test-deployment-channel
+ test-guix-channel
+ test-nonguix-channel
+ test-rde-channel
+ test-sovereign-channel)
diff --git a/users/vmail.scm b/users/vmail.scm
new file mode 100644
index 0000000..41454f1
--- /dev/null
+++ b/users/vmail.scm
@@ -0,0 +1,34 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; SPDX-FileCopyrightText: 2026 Marek Paśnikowski <marek@marekpasnikowski.pl>
+
+;;; COPYRIGHT NOTICE
+;;;
+;;; Copyright 2026, Marek Paśnikowski <marek@marekpasnikowski.pl>
+
+;;; LICENSE NOTICE
+;;;
+;;; This library 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 library 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 library.
+;;; If not, see <https://www.gnu.org/licenses/>.
+
+(define-module (users vmail)
+ #:use-module ((gnu system accounts)
+ #:prefix gnu:system:accounts:))
+
+(define vmail-name
+ "vmail")
+
+(define-public vmail-account
+ (gnu:system:accounts:user-account
+ (name vmail-name)
+ (group vmail-name)
+ (comment "used to own and manage mailboxes")
+ (home-directory "/home/vmail")
+ (system? #t)))