summaryrefslogtreecommitdiff
path: root/gnu/system
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/system')
-rw-r--r--gnu/system/examples/vm-image.tmpl28
-rw-r--r--gnu/system/file-systems.scm2
-rw-r--r--gnu/system/hurd.scm4
-rw-r--r--gnu/system/image.scm57
-rw-r--r--gnu/system/images/orangepi-r1-plus-lts-rk3328.scm76
-rw-r--r--gnu/system/install.scm9
-rw-r--r--gnu/system/mapped-devices.scm67
-rw-r--r--gnu/system/shadow.scm116
-rw-r--r--gnu/system/vm.scm6
9 files changed, 266 insertions, 99 deletions
diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl
index b68183a023..dc9a7542a5 100644
--- a/gnu/system/examples/vm-image.tmpl
+++ b/gnu/system/examples/vm-image.tmpl
@@ -8,7 +8,7 @@
(use-modules (gnu) (guix) (srfi srfi-1))
(use-service-modules desktop mcron networking spice ssh xorg sddm)
(use-package-modules bootloaders certs fonts
- package-management xorg)
+ package-management xdisorg xorg)
(define vm-image-motd (plain-file "motd" "
\x1b[1;37mThis is the GNU system. Welcome!\x1b[0m
@@ -25,18 +25,6 @@ Run '\x1b[1;37minfo guix\x1b[0m' to browse documentation.
accounts.\x1b[0m
"))
-;;; XXX: Xfce does not implement what is needed for the SPICE dynamic
-;;; resolution to work (see:
-;;; https://gitlab.xfce.org/xfce/xfce4-settings/-/issues/142). Workaround it
-;;; by manually invoking xrandr every second.
-(define auto-update-resolution-crutch
- #~(job '(next-second)
- (lambda ()
- (setenv "DISPLAY" ":0.0")
- (setenv "XAUTHORITY" "/home/guest/.Xauthority")
- (execl (string-append #$xrandr "/bin/xrandr") "xrandr" "-s" "0"))
- #:user "guest"))
-
(operating-system
(host-name "gnu")
(timezone "Etc/UTC")
@@ -65,7 +53,7 @@ accounts.\x1b[0m
(users (cons (user-account
(name "guest")
(comment "GNU Guix Live")
- (password "") ;no password
+ (password "") ;no password
(group "users")
(supplementary-groups '("wheel" "netdev"
"audio" "video")))
@@ -77,8 +65,13 @@ accounts.\x1b[0m
root ALL=(ALL) ALL
%wheel ALL=NOPASSWD: ALL\n"))
- (packages (append (list font-bitstream-vera nss-certs)
- %base-packages))
+ (packages
+ (append (list font-bitstream-vera nss-certs
+ ;; Auto-started script providing SPICE dynamic resizing for
+ ;; Xfce (see:
+ ;; https://gitlab.xfce.org/xfce/xfce4-settings/-/issues/142).
+ x-resize)
+ %base-packages))
(services
(append (list (service xfce-desktop-service-type)
@@ -104,9 +97,6 @@ root ALL=(ALL) ALL
;; integration with the host, etc.
(service spice-vdagent-service-type)
- (simple-service 'cron-jobs mcron-service-type
- (list auto-update-resolution-crutch))
-
;; Use the DHCP client service rather than NetworkManager.
(service dhcp-client-service-type))
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 6d385d71d4..af0567bd3e 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -369,7 +369,7 @@ TARGET in the other system."
;; List of know pseudo file system types. This is used when validating file
;; system definitions.
'("binfmt_misc" "cgroup" "cgroup2" "debugfs" "devpts" "devtmpfs" "efivarfs" "fusectl"
- "hugetlbfs" "overlay" "proc" "securityfs" "sysfs" "tmpfs" "xenfs"))
+ "hugetlbfs" "overlay" "proc" "securityfs" "sysfs" "tmpfs" "tracefs" "xenfs"))
(define %fuse-control-file-system
;; Control file system for Linux' file systems in user-space (FUSE).
diff --git a/gnu/system/hurd.scm b/gnu/system/hurd.scm
index 3b138bef65..cbe0081382 100644
--- a/gnu/system/hurd.scm
+++ b/gnu/system/hurd.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
@@ -70,7 +70,7 @@
;; Note: the Shepherd comes before the Hurd, not just because its duty is to
;; shepherd the herd, but also because we want its 'halt' and 'reboot'
;; commands to take precedence.
- (list shepherd-0.8 hurd netdde bash coreutils file findutils grep sed
+ (list shepherd-0.10 hurd netdde bash coreutils file findutils grep sed
diffutils patch gawk tar gzip bzip2 xz lzip
guile-3.0-latest guile-colorized guile-readline
net-base nss-certs inetutils less procps shadow sudo which
diff --git a/gnu/system/image.scm b/gnu/system/image.scm
index a990c4f861..5456b3a5a0 100644
--- a/gnu/system/image.scm
+++ b/gnu/system/image.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
;;; Copyright © 2022 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2023 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -466,7 +467,9 @@ used in the image."
;; Allow non-ASCII file names--e.g., 'nss-certs'--to be
;; decoded.
(setenv "GUIX_LOCPATH"
- #+(file-append glibc-utf8-locales "/lib/locale"))
+ #+(file-append (libc-utf8-locales-for-target
+ (%current-system))
+ "/lib/locale"))
(setlocale LC_ALL "en_US.utf8")
(initializer image-root
@@ -532,7 +535,8 @@ used in the image."
(when (and (gpt-image? image)
(not
- (memq (bootloader-name bootloader) '(grub-efi grub-efi32))))
+ (memq (bootloader-name bootloader)
+ '(grub-efi grub-efi32 grub-efi-removable-bootloader))))
(raise
(formatted-message
(G_ "EFI bootloader required with GPT partitioning"))))
@@ -633,7 +637,8 @@ used in the image. "
;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded.
(setenv "GUIX_LOCPATH"
- #+(file-append glibc-utf8-locales "/lib/locale"))
+ #+(file-append (libc-utf8-locales-for-target (%current-system))
+ "/lib/locale"))
(setlocale LC_ALL "en_US.utf8")
@@ -683,7 +688,8 @@ returns an image record where the first partition's label is set to <label>."
(define* (system-docker-image image
#:key
- (name "docker-image"))
+ (name "docker-image")
+ (archiver tar))
"Build a docker image for IMAGE. NAME is the base name to use for the
output file."
(define boot-program
@@ -728,6 +734,7 @@ output file."
(use-modules (guix docker)
(guix build utils)
(gnu build image)
+ (srfi srfi-1)
(srfi srfi-19)
(guix build store-copy)
(guix store database))
@@ -737,7 +744,8 @@ output file."
;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded.
(setenv "GUIX_LOCPATH"
- #+(file-append glibc-utf8-locales "/lib/locale"))
+ #+(file-append (libc-utf8-locales-for-target (%current-system))
+ "/lib/locale"))
(setlocale LC_ALL "en_US.utf8")
(set-path-environment-variable "PATH" '("bin" "sbin") '(#+tar))
@@ -750,18 +758,30 @@ output file."
#:register-closures? #$register-closures?
#:deduplicate? #f
#:system-directory #$os)
- (build-docker-image
- #$output
- (cons* image-root
- (map store-info-item
- (call-with-input-file #$graph
- read-reference-graph)))
- #$os
- #:entry-point '(#$boot-program #$os)
- #:compressor '(#+(file-append gzip "/bin/gzip") "-9n")
- #:creation-time (make-time time-utc 0 1)
- #:system #$image-target
- #:transformations `((,image-root -> ""))))))))
+ (when #$(image-max-layers image)
+ (setenv "PATH"
+ (string-join (list #+(file-append archiver "/bin")
+ #+(file-append gzip "/bin"))
+ ":")))
+ (apply build-docker-image
+ (append (list #$output
+ (append (if #$(image-max-layers image)
+ '()
+ (list image-root))
+ (map store-info-item
+ (call-with-input-file #$graph
+ read-reference-graph)))
+ #$os
+ #:entry-point '(#$boot-program #$os)
+ #:compressor
+ '(#+(file-append gzip "/bin/gzip") "-9n")
+ #:creation-time (make-time time-utc 0 1)
+ #:system #$image-target
+ #:transformations `((,image-root -> "")))
+ (if #$(image-max-layers image)
+ (list #:root-system image-root
+ #:max-layers #$(image-max-layers image))
+ '()))))))))
(computed-file name builder
;; Allow offloading so that this I/O-intensive process
@@ -816,7 +836,8 @@ output file."
;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded.
(setenv "GUIX_LOCPATH"
- #+(file-append glibc-utf8-locales "/lib/locale"))
+ #+(file-append (libc-utf8-locales-for-target (%current-system))
+ "/lib/locale"))
(setlocale LC_ALL "en_US.utf8")
(let ((image-root (string-append (getcwd) "/tmp-root"))
diff --git a/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm b/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm
new file mode 100644
index 0000000000..eaaa12ba78
--- /dev/null
+++ b/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm
@@ -0,0 +1,76 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Herman Rimm <herman@rimm.ee>
+;;;
+;;; 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 system images orangepi-r1-plus-lts-rk3328)
+ #:use-module (gnu bootloader)
+ #:use-module (gnu bootloader u-boot)
+ #:use-module (gnu image)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages certs)
+ #:use-module (guix platforms arm)
+ #:use-module (gnu services)
+ #:use-module (gnu services base)
+ #:use-module (gnu services networking)
+ #:use-module (gnu system)
+ #:use-module (gnu system file-systems)
+ #:use-module (gnu system image)
+ #:use-module (srfi srfi-26)
+ #:export (orangepi-r1-plus-lts-rk3328-barebones-os
+ orangepi-r1-plus-lts-rk3328-image-type
+ orangepi-r1-plus-lts-rk3328-barebones-raw-image))
+
+(define orangepi-r1-plus-lts-rk3328-barebones-os
+ (operating-system
+ (host-name "windmolen")
+ (timezone "Europe/Amsterdam")
+ (locale "en_US.utf8")
+ (bootloader (bootloader-configuration
+ (bootloader u-boot-orangepi-r1-plus-lts-rk3328-bootloader)
+ (targets '("/dev/mmcblk0"))))
+ (initrd-modules '())
+ (kernel linux-libre-arm64-generic)
+ (file-systems (cons (file-system
+ (device (file-system-label "my-root"))
+ (mount-point "/")
+ (type "ext4")) %base-file-systems))
+ (services
+ (cons* (service agetty-service-type
+ (agetty-configuration (extra-options '("-L")) ;no carrier detect
+ (baud-rate "1500000")
+ (term "vt100")
+ (tty "ttyS2")))
+ (service dhcp-client-service-type)
+ (service ntp-service-type) %base-services))
+ (packages (cons nss-certs %base-packages))))
+
+(define orangepi-r1-plus-lts-rk3328-image-type
+ (image-type (name 'orangepi-r1-plus-lts-rk3328-raw)
+ (constructor (lambda (os)
+ (image (inherit (raw-with-offset-disk-image (expt
+ 2 24)))
+ (operating-system
+ os)
+ (platform aarch64-linux))))))
+
+(define orangepi-r1-plus-lts-rk3328-barebones-raw-image
+ (image (inherit (os+platform->image orangepi-r1-plus-lts-rk3328-barebones-os
+ aarch64-linux
+ #:type orangepi-r1-plus-lts-rk3328-image-type))
+ (name 'orangepi-r1-plus-lts-rk3328-barebones-raw-image)))
+
+orangepi-r1-plus-lts-rk3328-barebones-raw-image
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 28161de153..371bfc2a63 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -7,6 +7,7 @@
;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2022 Josselin Poiret <dev@jpoiret.xyz>
+;;; Copyright © 2023 Herman Rimm <herman@rimm.ee>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -69,6 +70,7 @@
mx6cuboxi-installation-os
nintendo-nes-classic-edition-installation-os
novena-installation-os
+ orangepi-r1-plus-lts-rk3328-installation-os
firefly-rk3399-installation-os
pine64-plus-installation-os
pinebook-installation-os
@@ -454,7 +456,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m
(service gc-root-service-type
(append
(list bare-bones-os
- glibc-utf8-locales
+ (libc-utf8-locales-for-target system)
texinfo
guile-3.0)
%default-locale-libcs)))
@@ -633,6 +635,11 @@ The bootloader BOOTLOADER is installed to BOOTLOADER-TARGET."
"/dev/mmcblk0" ; SD card (solder it yourself)
"ttyS0"))
+(define orangepi-r1-plus-lts-rk3328-installation-os
+ (embedded-installation-os u-boot-orangepi-r1-plus-lts-rk3328-bootloader
+ "/dev/mmcblk0" ; SD card storage
+ "ttyS0"))
+
(define pine64-plus-installation-os
(embedded-installation-os u-boot-pine64-plus-bootloader
"/dev/mmcblk0" ; SD card storage
diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm
index e6b8970c12..c19a818453 100644
--- a/gnu/system/mapped-devices.scm
+++ b/gnu/system/mapped-devices.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2014-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2017, 2018 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -64,6 +65,7 @@
check-device-initrd-modules ;XXX: needs a better place
luks-device-mapping
+ luks-device-mapping-with-options
raid-device-mapping
lvm-device-mapping))
@@ -188,7 +190,7 @@ option of @command{guix system}.\n")
;;; Common device mappings.
;;;
-(define (open-luks-device source targets)
+(define* (open-luks-device source targets #:key key-file)
"Return a gexp that maps SOURCE to TARGET as a LUKS device, using
'cryptsetup'."
(with-imported-modules (source-module-closure
@@ -198,7 +200,8 @@ option of @command{guix system}.\n")
((target)
#~(let ((source #$(if (uuid? source)
(uuid-bytevector source)
- source)))
+ source))
+ (keyfile #$key-file))
;; XXX: 'use-modules' should be at the top level.
(use-modules (rnrs bytevectors) ;bytevector?
((gnu build file-systems)
@@ -215,29 +218,35 @@ option of @command{guix system}.\n")
;; 'cryptsetup open' requires standard input to be a tty to allow
;; for interaction but shepherd sets standard input to /dev/null;
;; thus, explicitly request a tty.
- (zero? (system*/tty
- #$(file-append cryptsetup-static "/sbin/cryptsetup")
- "open" "--type" "luks"
-
- ;; Note: We cannot use the "UUID=source" syntax here
- ;; because 'cryptsetup' implements it by searching the
- ;; udev-populated /dev/disk/by-id directory but udev may
- ;; be unavailable at the time we run this.
- (if (bytevector? source)
- (or (let loop ((tries-left 10))
- (and (positive? tries-left)
- (or (find-partition-by-luks-uuid source)
- ;; If the underlying partition is
- ;; not found, try again after
- ;; waiting a second, up to ten
- ;; times. FIXME: This should be
- ;; dealt with in a more robust way.
- (begin (sleep 1)
- (loop (- tries-left 1))))))
- (error "LUKS partition not found" source))
- source)
-
- #$target)))))))
+ (let ((partition
+ ;; Note: We cannot use the "UUID=source" syntax here
+ ;; because 'cryptsetup' implements it by searching the
+ ;; udev-populated /dev/disk/by-id directory but udev may
+ ;; be unavailable at the time we run this.
+ (if (bytevector? source)
+ (or (let loop ((tries-left 10))
+ (and (positive? tries-left)
+ (or (find-partition-by-luks-uuid source)
+ ;; If the underlying partition is
+ ;; not found, try again after
+ ;; waiting a second, up to ten
+ ;; times. FIXME: This should be
+ ;; dealt with in a more robust way.
+ (begin (sleep 1)
+ (loop (- tries-left 1))))))
+ (error "LUKS partition not found" source))
+ source)))
+ ;; We want to fallback to the password unlock if the keyfile fails.
+ (or (and keyfile
+ (zero? (system*/tty
+ #$(file-append cryptsetup-static "/sbin/cryptsetup")
+ "open" "--type" "luks"
+ "--key-file" keyfile
+ partition #$target)))
+ (zero? (system*/tty
+ #$(file-append cryptsetup-static "/sbin/cryptsetup")
+ "open" "--type" "luks"
+ partition #$target)))))))))
(define (close-luks-device source targets)
"Return a gexp that closes TARGET, a LUKS device."
@@ -276,6 +285,14 @@ option of @command{guix system}.\n")
(close close-luks-device)
(check check-luks-device)))
+(define* (luks-device-mapping-with-options #:key key-file)
+ "Return a luks-device-mapping object with open modified to pass the arguments
+into the open-luks-device procedure."
+ (mapped-device-kind
+ (inherit luks-device-mapping)
+ (open (λ (source targets) (open-luks-device source targets
+ #:key-file key-file)))))
+
(define (open-raid-device sources targets)
"Return a gexp that assembles SOURCES (a list of devices) to the RAID device
TARGET (e.g., \"/dev/md0\"), using 'mdadm'."
diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm
index 47f19551b6..8b3958ba5c 100644
--- a/gnu/system/shadow.scm
+++ b/gnu/system/shadow.scm
@@ -64,6 +64,13 @@
user-group-system?)
#:export (%default-bashrc
+ %default-bash-profile
+ %default-zprofile
+ %default-xdefaults
+ %default-gdbinit
+ %default-nanorc
+ %default-dotguile
+ %default-skeleton-home-config
default-skeletons
skeleton-directory
%base-groups
@@ -147,11 +154,8 @@ alias ll='ls -l'
alias grep='grep --color=auto'
alias ip='ip -color=auto'\n"))
-(define (default-skeletons)
- "Return the default skeleton files for /etc/skel. These files are copied by
-'useradd' in the home directory of newly created user accounts."
-
- (let ((profile (plain-file "bash_profile" "\
+(define %default-bash-profile
+ (plain-file "bash_profile" "\
# Set up Guix Home profile
if [ -f ~/.profile ]; then . ~/.profile; fi
@@ -167,25 +171,23 @@ eval \"$(guix package --search-paths \\
# Prepend setuid programs.
export PATH=/run/setuid-programs:$PATH
"))
- (bashrc %default-bashrc)
- (zprofile (plain-file "zprofile" "\
-# Honor system-wide environment variables
-source /etc/profile
-
-# Merge search-paths from multiple profiles, the order matters.
-eval \"$(guix package --search-paths \\
--p $HOME/.config/guix/current \\
--p $HOME/.guix-profile \\
--p /run/current-system/profile)\"
-# Prepend setuid programs.
-export PATH=/run/setuid-programs:$PATH
+(define %default-zprofile
+ (plain-file "zprofile" "\
+# Set up the system, user profile, and related variables.
+source /etc/profile
+# Set up the home environment profile.
+source ~/.profile
"))
- (xdefaults (plain-file "Xdefaults" "\
+
+(define %default-xdefaults
+ (plain-file "Xdefaults" "\
XTerm*utf8: always
XTerm*metaSendsEscape: true\n"))
- (gdbinit (plain-file "gdbinit" "\
-# Tell GDB where to look for separate debugging files.
+
+(define %default-gdbinit
+ (plain-file "gdbinit"
+ "# Tell GDB where to look for separate debugging files.
guile
(use-modules (gdb))
(execute (string-append \"set debug-file-directory \"
@@ -203,19 +205,16 @@ end
# Authorize extensions found in the store, such as the
# pretty-printers of libstdc++.
-set auto-load safe-path /gnu/store/*/lib\n")))
- `((".bash_profile" ,profile)
- (".bashrc" ,bashrc)
- ;; Zsh sources ~/.zprofile before ~/.zshrc, and it sources ~/.zlogin
- ;; after ~/.zshrc. To avoid interfering with any customizations a user
- ;; may have made in their ~/.zshrc, put this in .zprofile, not .zlogin.
- (".zprofile" ,zprofile)
- (".nanorc" ,(plain-file "nanorc" "\
-# Include all the syntax highlighting modules.
+set auto-load safe-path /gnu/store/*/lib\n"))
+
+(define %default-nanorc
+ (plain-file "nanorc"
+ "# Include all the syntax highlighting modules.
include /run/current-system/profile/share/nano/*.nanorc\n"))
- (".Xdefaults" ,xdefaults)
- (".guile" ,(plain-file "dot-guile"
- "(cond ((false-if-exception (resolve-interface '(ice-9 readline)))
+
+(define %default-dotguile
+ (plain-file "dot-guile"
+ "(cond ((false-if-exception (resolve-interface '(ice-9 readline)))
=>
(lambda (module)
;; Enable completion and input history at the REPL.
@@ -233,7 +232,58 @@ convenient interactive line editing and input history.\\n\\n\")))
(else
(display \"Consider installing the 'guile-colorized' package
for a colorful Guile experience.\\n\\n\"))))\n"))
- (".gdbinit" ,gdbinit))))
+
+(define %default-skeleton-home-config
+ (plain-file "default-home-config" "\
+;; This is a sample Guix Home configuration which can help setup your
+;; home directory in the same declarative manner as Guix System.
+;; For more information, see the Home Configuration section of the manual.
+(define-module (guix-home-config)
+ #:use-module (gnu home)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services shells)
+ #:use-module (gnu services)
+ #:use-module (gnu system shadow))
+
+(define home-config
+ (home-environment
+ (services
+ (list
+ ;; Uncomment the shell you wish to use for your user:
+ ;(service home-bash-service-type)
+ ;(service home-fish-service-type)
+ ;(service home-zsh-service-type)
+
+ (service home-files-service-type
+ `((\".guile\" ,%default-dotguile)
+ (\".Xdefaults\" ,%default-xdefaults)))
+
+ (service home-xdg-configuration-files-service-type
+ `((\"gdb/gdbinit\" ,%default-gdbinit)
+ (\"nano/nanorc\" ,%default-nanorc)))))))
+
+home-config"))
+
+(define (default-skeletons)
+ "Return the default skeleton files for /etc/skel. These files are copied by
+'useradd' in the home directory of newly created user accounts."
+
+ (let ((profile %default-bash-profile)
+ (bashrc %default-bashrc)
+ (zprofile %default-zprofile)
+ (xdefaults %default-xdefaults)
+ (gdbinit %default-gdbinit))
+ `((".bash_profile" ,profile)
+ (".bashrc" ,bashrc)
+ ;; Zsh sources ~/.zprofile before ~/.zshrc, and it sources ~/.zlogin
+ ;; after ~/.zshrc. To avoid interfering with any customizations a user
+ ;; may have made in their ~/.zshrc, put this in .zprofile, not .zlogin.
+ (".zprofile" ,zprofile)
+ (".nanorc" ,%default-nanorc)
+ (".Xdefaults" ,xdefaults)
+ (".guile" ,%default-dotguile)
+ (".gdbinit" ,gdbinit)
+ ("guix-home-config.scm" ,%default-skeleton-home-config))))
(define (skeleton-directory skeletons)
"Return a directory containing SKELETONS, a list of name/derivation tuples."
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 70f7b00116..8c27ff787d 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -168,6 +168,12 @@ environment with the store shared with the host. MAPPINGS is a list of
file-systems
#:volatile-root? volatile?
rest)))
+ ;; The (QEMU-only) "cirrus" graphics driver is still expected by some
+ ;; VPS with old QEMU versions. See <https://bugs.gnu.org/36069>.
+ (initrd-modules (let ((modules (operating-system-initrd-modules os)))
+ (if (member "cirrus" modules)
+ modules
+ (cons "cirrus" modules))))
;; Disable swap.
(swap-devices '())