summaryrefslogtreecommitdiff
path: root/doc/guix.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/guix.texi')
-rw-r--r--doc/guix.texi661
1 files changed, 211 insertions, 450 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index acfe60b47a..3f5d4e7f0d 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -125,6 +125,8 @@ Copyright @copyright{} 2023 Saku Laesvuori@*
Copyright @copyright{} 2023 Graham James Addis@*
Copyright @copyright{} 2023 Tomas Volf@*
Copyright @copyright{} 2024 Herman Rimm@*
+Copyright @copyright{} 2024 Matthew Trzcinski@*
+Copyright @copyright{} 2024 Richard Sent@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -227,8 +229,6 @@ Introduction
Installation
* Binary Installation:: Getting Guix running in no time!
-* Requirements:: Software needed to build and run Guix.
-* Running the Test Suite:: Testing Guix.
* Setting Up the Daemon:: Preparing the build daemon's environment.
* Invoking guix-daemon:: Running the build daemon.
* Application Setup:: Application-specific setup.
@@ -358,7 +358,7 @@ Foreign Architectures
System Configuration
-* Getting Started with the System:: Your first steps.
+* Getting Started with the System:: Your first steps.
* Using the Configuration System:: Customizing your GNU system.
* operating-system Reference:: Detail of operating-system declarations.
* File Systems:: Configuring file system mounts.
@@ -691,19 +691,20 @@ to join! @xref{Contributing}, for information about how you can help.
@chapter Installation
@cindex installing Guix
+@cindex foreign distro
+@cindex Guix System
+You can install the package management tool Guix on top of an existing
+GNU/Linux or GNU/Hurd system@footnote{Hurd support is currently
+limited.}, referred to as a @dfn{foreign distro}. If, instead, you want
+to install the complete, standalone GNU system distribution,
+@dfn{Guix@tie{}System}, @pxref{System Installation}. This section is
+concerned only with the installation of Guix on a foreign distro.
-@quotation Note
-We recommend the use of this
-@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
-shell installer script} to install Guix on top of a running GNU/Linux system,
-thereafter called a @dfn{foreign distro}@footnote{This section is concerned
-with the installation of the package manager, which can be done on top of a
-running GNU/Linux system. If, instead, you want to install the complete GNU
-operating system, @pxref{System Installation}.}. @xref{Binary
-Installation}, for more information.
+@quotation Important
+This section only applies to systems without Guix. Following it for
+existing Guix installations will overwrite important system files.
@end quotation
-@cindex foreign distro
@cindex directories related to foreign distro
When installed on a foreign distro, GNU@tie{}Guix complements the available
tools without interference. Its data lives exclusively in two directories,
@@ -713,15 +714,8 @@ such as @file{/etc}, are left untouched.
Once installed, Guix can be updated by running @command{guix pull}
(@pxref{Invoking guix pull}).
-If you prefer to perform the installation steps manually or want to tweak
-them, you may find the following subsections useful. They describe the
-software requirements of Guix, as well as how to install it manually and get
-ready to use it.
-
@menu
* Binary Installation:: Getting Guix running in no time!
-* Requirements:: Software needed to build and run Guix.
-* Running the Test Suite:: Testing Guix.
* Setting Up the Daemon:: Preparing the build daemon's environment.
* Invoking guix-daemon:: Running the build daemon.
* Application Setup:: Application-specific setup.
@@ -735,226 +729,69 @@ ready to use it.
@cindex installer script
This section describes how to install Guix from a self-contained tarball
providing binaries for Guix and for all its dependencies. This is often
-quicker than installing from source, which is described in the next
-sections. Binary installation requires a system using a Hurd or Linux
-kernel; the GNU@tie{}tar and Xz commands must also be available.
+quicker than installing from source, described later (@pxref{Building
+from Git}).
@quotation Important
This section only applies to systems without Guix. Following it for
existing Guix installations will overwrite important system files.
+@end quotation
-@c Note duplicated from the ``Installation'' node.
-We recommend the use of this
-@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
-shell installer script}. The script automates the download, installation, and
-initial configuration steps described below. It should be run as the root
-user. As root, you can thus run this:
-
-@example
-cd /tmp
-wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh
-chmod +x guix-install.sh
-./guix-install.sh
-@end example
-
-The script automates the download, installation, and initial
-configuration of Guix, interactively offering various configuration
-options.
-
-@cindex uninstalling Guix
-@cindex uninstallation, of Guix
-Should you eventually want to uninstall Guix, run the same script with
-the @option{--uninstall} flag:
-
-@example
-./guix-install.sh --uninstall
-@end example
-
-With @option{--uninstall}, the script irreversibly deletes all the Guix
-files, configuration, and services.
+Some GNU/Linux distributions, such as Debian, Ubuntu, and openSUSE
+provide Guix through their own package managers. The version of Guix
+may be older than @value{VERSION} but you can update it afterwards by
+running @samp{guix pull}.
-If you're running Debian or a derivative such as Ubuntu, you can instead
-install the package (it might be a version older than @value{VERSION}
-but you can update it afterwards by running @samp{guix pull}):
+For Debian or a derivative such as Ubuntu, call:
@example
sudo apt install guix
@end example
-Likewise on openSUSE:
+Likewise, on openSUSE:
@example
sudo zypper install guix
@end example
-When you're done, @pxref{Application Setup} for extra configuration you
-might need, and @ref{Getting Started} for your first steps!
-@end quotation
-
-Installing goes along these lines:
-
-@enumerate
-@item
-@cindex downloading Guix binary
-Download the binary tarball from
-@indicateurl{@value{BASE-URL}/guix-binary-@value{VERSION}.x86_64-linux.tar.xz},
-where @code{x86_64-linux} can be replaced with @code{i686-linux} for an
-@code{i686} (32-bits) machine already running the kernel Linux, and so on
-(@pxref{GNU Distribution}).
-
-@c The following is somewhat duplicated in ``System Installation''.
-Make sure to download the associated @file{.sig} file and to verify the
-authenticity of the tarball against it, along these lines:
-
-@example
-$ wget @value{BASE-URL}/guix-binary-@value{VERSION}.x86_64-linux.tar.xz.sig
-$ gpg --verify guix-binary-@value{VERSION}.x86_64-linux.tar.xz.sig
-@end example
-
-If that command fails because you do not have the required public key,
-then run this command to import it:
+The Guix project also provides a shell script, @file{guix-install.sh},
+which automates the binary installation process without use of a foreign
+distro package
+manager@footnote{@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh}}.
+Use of @file{guix-install.sh} requires Bash, GnuPG, GNU@tie{}tar, wget,
+and Xz.
-@example
-$ wget '@value{OPENPGP-SIGNING-KEY-URL}' \
- -qO - | gpg --import -
-@end example
+The script guides you through the following:
-@noindent
-and rerun the @code{gpg --verify} command.
-
-Take note that a warning like ``This key is not certified with a trusted
-signature!'' is normal.
+@itemize
+@item Downloading and extracting the binary tarball
+@item Setting up the build daemon
+@item Making the ‘guix’ command available to non-root users
+@item Configuring substitute servers
+@end itemize
-@c end authentication part
-
-@item
-Now, you need to become the @code{root} user. Depending on your distribution,
-you may have to run @code{su -} or @code{sudo -i}. As @code{root}, run:
+As root, run:
@example
# cd /tmp
-# tar --warning=no-timestamp -xf \
- /path/to/guix-binary-@value{VERSION}.x86_64-linux.tar.xz
-# mv var/guix /var/ && mv gnu /
-@end example
-
-This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
-The latter contains a ready-to-use profile for @code{root} (see next
-step).
-
-Do @emph{not} unpack the tarball on a working Guix system since that
-would overwrite its own essential files.
-
-The @option{--warning=no-timestamp} option makes sure GNU@tie{}tar does
-not emit warnings about ``implausibly old time stamps'' (such
-warnings were triggered by GNU@tie{}tar 1.26 and older; recent
-versions are fine).
-They stem from the fact that all the
-files in the archive have their modification time set to 1 (which
-means January 1st, 1970). This is done on purpose to make sure the
-archive content is independent of its creation time, thus making it
-reproducible.
-
-@item
-Make the profile available under @file{~root/.config/guix/current}, which is
-where @command{guix pull} will install updates (@pxref{Invoking guix pull}):
-
-@example
-# mkdir -p ~root/.config/guix
-# ln -sf /var/guix/profiles/per-user/root/current-guix \
- ~root/.config/guix/current
-@end example
-
-Source @file{etc/profile} to augment @env{PATH} and other relevant
-environment variables:
-
-@example
-# GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
- source $GUIX_PROFILE/etc/profile
-@end example
-
-@item
-Create the group and user accounts for build users as explained below
-(@pxref{Build Environment Setup}).
-
-@item
-Run the daemon, and set it to automatically start on boot.
-
-If your host distro uses the systemd init system, this can be achieved
-with these commands:
-
-@c Versions of systemd that supported symlinked service files are not
-@c yet widely deployed, so we should suggest that users copy the service
-@c files into place.
-@c
-@c See this thread for more information:
-@c https://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
-
-@example
-# cp ~root/.config/guix/current/lib/systemd/system/gnu-store.mount \
- ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
- /etc/systemd/system/
-# systemctl enable --now gnu-store.mount guix-daemon
-@end example
-
-You may also want to arrange for @command{guix gc} to run periodically:
-
-@example
-# cp ~root/.config/guix/current/lib/systemd/system/guix-gc.service \
- ~root/.config/guix/current/lib/systemd/system/guix-gc.timer \
- /etc/systemd/system/
-# systemctl enable --now guix-gc.timer
-@end example
-
-You may want to edit @file{guix-gc.service} to adjust the command line
-options to fit your needs (@pxref{Invoking guix gc}).
-
-If your host distro uses the Upstart init system:
-
-@example
-# initctl reload-configuration
-# cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
- /etc/init/
-# start guix-daemon
-@end example
-
-Otherwise, you can still start the daemon manually with:
-
-@example
-# ~root/.config/guix/current/bin/guix-daemon \
- --build-users-group=guixbuild
-@end example
-
-@item
-Make the @command{guix} command available to other users on the machine,
-for instance with:
-
-@example
-# mkdir -p /usr/local/bin
-# cd /usr/local/bin
-# ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
+# wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh
+# chmod +x guix-install.sh
+# ./guix-install.sh
@end example
-It is also a good idea to make the Info version of this manual available
-there:
-
-@example
-# mkdir -p /usr/local/share/info
-# cd /usr/local/share/info
-# for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
- do ln -s $i ; done
-@end example
-
-That way, assuming @file{/usr/local/share/info} is in the search path,
-running @command{info guix} will open this manual (@pxref{Other Info
-Directories,,, texinfo, GNU Texinfo}, for more details on changing the
-Info search path).
+@quotation Note
+By default, @file{guix-install.sh} will configure Guix to download
+pre-built package binaries, called @dfn{substitutes}
+(@pxref{Substitutes}), from the project's build farms. If you choose
+not to permit this, Guix will build @emph{everything} from source,
+making each installation and upgrade very expensive. @xref{On Trusting
+Binaries} for a discussion of why you may want to build packages from
+source.
-@item
@cindex substitutes, authorization thereof
To use substitutes from @code{@value{SUBSTITUTE-SERVER-1}},
-@code{@value{SUBSTITUTE-SERVER-2}} or a mirror (@pxref{Substitutes}),
-authorize them:
+@code{@value{SUBSTITUTE-SERVER-2}} or a mirror, you must authorize them.
+For example,
@example
# guix archive --authorize < \
@@ -962,28 +799,13 @@ authorize them:
# guix archive --authorize < \
~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER-2}.pub
@end example
-
-@quotation Note
-If you do not enable substitutes, Guix will end up building
-@emph{everything} from source on your machine, making each installation
-and upgrade very expensive. @xref{On Trusting Binaries}, for a
-discussion of reasons why one might want do disable substitutes.
@end quotation
-@item
-Each user may need to perform a few additional steps to make their Guix
-environment ready for use, @pxref{Application Setup}.
-@end enumerate
-
-Voilà, the installation is complete!
-
-You can confirm that Guix is working by installing a sample package into
-the root profile:
-
-@example
-# guix install hello
-@end example
+When you're done installing Guix, @pxref{Application Setup} for extra
+configuration you might need, and @ref{Getting Started} for your first
+steps!
+@quotation Note
The binary installation tarball can be (re)produced and verified simply
by running the following command in the Guix source tree:
@@ -1000,200 +822,19 @@ guix pack -s @var{system} --localstatedir \
@end example
@xref{Invoking guix pack}, for more info on this handy tool.
+@end quotation
-@node Requirements
-@section Requirements
-
-This section lists requirements when building Guix from source. The
-build procedure for Guix is the same as for other GNU software, and is
-not covered here. Please see the files @file{README} and @file{INSTALL}
-in the Guix source tree for additional details.
-
-@cindex official website
-GNU Guix is available for download from its website at
-@url{https://www.gnu.org/software/guix/}.
-
-GNU Guix depends on the following packages:
-
-@itemize
-@item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x,
-version 3.0.3 or later;
-@item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
-0.1.0 or later;
-@item
-@uref{https://gitlab.com/gnutls/guile/, Guile-GnuTLS} (@pxref{Guile
-Preparations, how to install the GnuTLS bindings for Guile,,
-gnutls-guile, GnuTLS-Guile})@footnote{The Guile bindings to
-@uref{https://gnutls.org/, GnuTLS} were distributed as part of GnuTLS
-until version 3.7.8 included.};
-@item
-@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0
-or later;
-@item @uref{https://notabug.org/guile-zlib/guile-zlib, Guile-zlib},
-version 0.1.0 or later;
-@item @uref{https://notabug.org/guile-lzlib/guile-lzlib, Guile-lzlib};
-@item @uref{https://www.nongnu.org/guile-avahi/, Guile-Avahi};
-@item
-@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, version 0.5.0
-or later;
-@item @uref{https://git-scm.com, Git} (yes, both!);
-@item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
-4.3.0 or later;
-@item @url{https://www.gnu.org/software/make/, GNU Make}.
-@end itemize
-
-The following dependencies are optional:
-
-@itemize
-@item
-@c Note: We need at least 0.13.0 for #:nodelay.
-Support for build offloading (@pxref{Daemon Offload Setup}) and
-@command{guix copy} (@pxref{Invoking guix copy}) depends on
-@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
-version 0.13.0 or later.
-
-@item
-@uref{https://notabug.org/guile-zstd/guile-zstd, Guile-zstd}, for zstd
-compression and decompression in @command{guix publish} and for
-substitutes (@pxref{Invoking guix publish}).
-
-@item
-@uref{https://ngyro.com/software/guile-semver.html, Guile-Semver} for
-the @code{crate} importer (@pxref{Invoking guix import}).
-
-@item
-@uref{https://www.nongnu.org/guile-lib/doc/ref/htmlprag/, Guile-Lib} for
-the @code{go} importer (@pxref{Invoking guix import}) and for some of
-the ``updaters'' (@pxref{Invoking guix refresh}).
-
-@item
-When @url{http://www.bzip.org, libbz2} is available,
-@command{guix-daemon} can use it to compress build logs.
-@end itemize
-
-Unless @option{--disable-daemon} was passed to @command{configure}, the
-following packages are also needed:
-
-@itemize
-@item @url{https://gnupg.org/, GNU libgcrypt};
-@item @url{https://sqlite.org, SQLite 3};
-@item @url{https://gcc.gnu.org, GCC's g++}, with support for the
-C++11 standard.
-@end itemize
-
-@cindex state directory
-@cindex localstatedir
-@cindex system configuration directory
-@cindex sysconfdir
-When configuring Guix on a system that already has a Guix installation,
-be sure to specify the same state directory as the existing installation
-using the @option{--localstatedir} option of the @command{configure}
-script (@pxref{Directory Variables, @code{localstatedir},, standards,
-GNU Coding Standards}). Usually, this @var{localstatedir} option is set
-to the value @file{/var}. The @command{configure} script protects
-against unintended misconfiguration of @var{localstatedir} so you do not
-inadvertently corrupt your store (@pxref{The Store}). The configuration
-directory should also be configured by setting the @option{--sysconfdir}
-option to the @file{/etc} value, which is the location used by Guix to
-store for example the access control list of authorized machines and the
-definition of offload machines.
-
-@node Running the Test Suite
-@section Running the Test Suite
-
-@cindex test suite
-After a successful @command{configure} and @code{make} run, it is a good
-idea to run the test suite. It can help catch issues with the setup or
-environment, or bugs in Guix itself---and really, reporting test
-failures is a good way to help improve the software. To run the test
-suite, type:
-
-@example
-make check
-@end example
-
-Test cases can run in parallel: you can use the @code{-j} option of
-GNU@tie{}make to speed things up. The first run may take a few minutes
-on a recent machine; subsequent runs will be faster because the store
-that is created for test purposes will already have various things in
-cache.
-
-It is also possible to run a subset of the tests by defining the
-@code{TESTS} makefile variable as in this example:
-
-@example
-make check TESTS="tests/store.scm tests/cpio.scm"
-@end example
-
-By default, tests results are displayed at a file level. In order to
-see the details of every individual test cases, it is possible to define
-the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
-
-@example
-make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
-@end example
-
-The underlying SRFI 64 custom Automake test driver used for the 'check'
-test suite (located at @file{build-aux/test-driver.scm}) also allows
-selecting which test cases to run at a finer level, via its
-@option{--select} and @option{--exclude} options. Here's an example, to
-run all the test cases from the @file{tests/packages.scm} test file
-whose names start with ``transaction-upgrade-entry'':
-
-@example
-export SCM_LOG_DRIVER_FLAGS="--select=^transaction-upgrade-entry"
-make check TESTS="tests/packages.scm"
-@end example
-
-Those wishing to inspect the results of failed tests directly from the
-command line can add the @option{--errors-only=yes} option to the
-@code{SCM_LOG_DRIVER_FLAGS} makefile variable and set the @code{VERBOSE}
-Automake makefile variable, as in:
-
-@example
-make check SCM_LOG_DRIVER_FLAGS="--brief=no --errors-only=yes" VERBOSE=1
-@end example
-
-The @option{--show-duration=yes} option can be used to print the
-duration of the individual test cases, when used in combination with
-@option{--brief=no}:
-
-@example
-make check SCM_LOG_DRIVER_FLAGS="--brief=no --show-duration=yes"
-@end example
-
-@xref{Parallel Test Harness,,,automake,GNU Automake} for more
-information about the Automake Parallel Test Harness.
-
-Upon failure, please email @email{bug-guix@@gnu.org} and attach the
-@file{test-suite.log} file. Please specify the Guix version being used
-as well as version numbers of the dependencies (@pxref{Requirements}) in
-your message.
-
-Guix also comes with a whole-system test suite that tests complete
-Guix System instances. It can only run on systems where
-Guix is already installed, using:
-
-@example
-make check-system
-@end example
-
-@noindent
-or, again, by defining @code{TESTS} to select a subset of tests to run:
+@cindex uninstalling Guix
+@cindex uninstallation, of Guix
+Should you eventually want to uninstall Guix, run the same script with
+the @option{--uninstall} flag:
@example
-make check-system TESTS="basic mcron"
+./guix-install.sh --uninstall
@end example
-These system tests are defined in the @code{(gnu tests @dots{})}
-modules. They work by running the operating systems under test with
-lightweight instrumentation in a virtual machine (VM). They can be
-computationally intensive or rather cheap, depending on whether
-substitutes are available for their dependencies (@pxref{Substitutes}).
-Some of them require a lot of storage space to hold VM images.
-
-Again in case of test failures, please send @email{bug-guix@@gnu.org}
-all the details.
+With @option{--uninstall}, the script irreversibly deletes all the Guix
+files, configuration, and services.
@node Setting Up the Daemon
@section Setting Up the Daemon
@@ -1208,8 +849,8 @@ goes through the daemon. For instance, command-line tools such as
daemon (@i{via} remote procedure calls) to instruct it what to do.
The following sections explain how to prepare the build daemon's
-environment. See also @ref{Substitutes}, for information on how to allow
-the daemon to download pre-built binaries.
+environment. @xref{Substitutes} for how to allow the daemon to download
+pre-built binaries.
@menu
* Build Environment Setup:: Preparing the isolated build environment.
@@ -2908,7 +2549,7 @@ This builds a new system @dfn{generation} with the latest packages and
services.
Now, @pxref{Getting Started with the System}, and
-join us on @code{#guix} on the Libera Chat IRC network or on
+join us on @code{#guix} on the Libera.Chat IRC network or on
@email{guix-devel@@gnu.org} to share your experience!
@@ -2942,7 +2583,7 @@ The resulting file will be much smaller than 50 GB (typically less than
1 MB), but it will grow as the virtualized storage device is filled up.
@item
-Boot the USB installation image in an VM:
+Boot the USB installation image in a VM:
@example
qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm \
@@ -6342,12 +5983,18 @@ such as @file{/usr/bin} on foreign distros.
This @option{--container} option can also prove useful if you wish to
run a security-sensitive application, such as a web browser, in an
isolated environment. For example, the command below launches
-Ungoogled-Chromium in an isolated environment, this time sharing network
-access with the host and preserving its @code{DISPLAY} environment
-variable, but without even sharing the current directory:
+Ungoogled-Chromium in an isolated environment, which:
+@itemize
+@item shares network access with the host
+@item inherits host's environment variables @code{DISPLAY} and @code{XAUTHORITY}
+@item has access to host's authentication records from the @code{XAUTHORITY}
+file
+@item has no information about host's current directory
+@end itemize
@example
guix shell --container --network --no-cwd ungoogled-chromium \
+ --preserve='^XAUTHORITY$' --expose="$@{XAUTHORITY@}" \
--preserve='^DISPLAY$' -- chromium
@end example
@@ -9446,7 +9093,7 @@ package name should be prefixed with the lisp implementation, such as
@code{sbcl-} for @code{asdf-build-system/sbcl}.
Additionally, the corresponding source package should be labeled using
-the same convention as python packages (see @ref{Python Modules}), using
+the same convention as Python packages (@pxref{Python Modules}), using
the @code{cl-} prefix.
In order to create executable programs and images, the build-side
@@ -12552,9 +12199,10 @@ The resulting file holds references to all the dependencies of @var{exp}
or a subset thereof.
@end deffn
-@deffn {Procedure} scheme-file name exp [#:splice? #f] [#:set-load-path? #t]
+@deffn {Procedure} scheme-file name exp [#:splice? #f] @
+ [#:guile #f] [#:set-load-path? #t]
Return an object representing the Scheme file @var{name} that contains
-@var{exp}.
+@var{exp}. @var{guile} is the Guile package used to produce that file.
This is the declarative counterpart of @code{gexp->file}.
@end deffn
@@ -17020,7 +16668,9 @@ The available targets are:
- powerpc64le-linux-gnu
- riscv64-linux-gnu
- x86_64-linux-gnu
+ - x86_64-linux-gnux32
- x86_64-w64-mingw32
+ - xtensa-ath9k-elf
@end example
Targets are specified as GNU triplets (@pxref{Specifying Target
@@ -17158,7 +16808,7 @@ instantiated. Then we show how this mechanism can be extended, for
instance to support new system services.
@menu
-* Getting Started with the System:: Your first steps.
+* Getting Started with the System:: Your first steps.
* Using the Configuration System:: Customizing your GNU system.
* operating-system Reference:: Detail of operating-system declarations.
* File Systems:: Configuring file system mounts.
@@ -17508,7 +17158,7 @@ the @code{(gnu packages)} module. For example:
(operating-system
;; ...
(packages (append (map specification->package+output
- '("nss-certs" "git" "git:send-email"))
+ '("git" "git:send-email"))
%base-packages)))
@end lisp
@@ -17596,8 +17246,7 @@ This example refers to the @file{/boot/efi} file system by its UUID,
as returned by the @command{blkid} command.
@xref{Desktop Services}, for the exact list of services provided by
-@code{%desktop-services}. @xref{X.509 Certificates}, for background
-information about the @code{nss-certs} package that is used here.
+@code{%desktop-services}.
Again, @code{%desktop-services} is just a list of service objects. If
you want to remove services from there, you can do so using the
@@ -17726,6 +17375,7 @@ configuration (@pxref{Using the Configuration System}).
@table @asis
@item @code{kernel} (default: @code{linux-libre})
+@c footnote duplicated in @pxref{Installation}
The package object of the operating system kernel to
use@footnote{Currently only the Linux-libre kernel is fully supported.
Using GNU@tie{}mach with the GNU@tie{}Hurd is experimental and only
@@ -24818,10 +24468,42 @@ polkit with the actions from @code{gnome-settings-daemon}.
@deftp {Data Type} gnome-desktop-configuration
Configuration record for the GNOME desktop environment.
+Available @code{gnome-desktop-configuration} fields are:
@table @asis
-@item @code{gnome} (default: @code{gnome})
-The GNOME package to use.
+@item @code{core-services} (type: list-of-packages)
+A list of packages that the GNOME Shell and applications may rely on.
+
+@item @code{shell} (type: list-of-packages)
+A list of packages that constitute the GNOME Shell, without
+applications.
+
+@item @code{utilities} (type: list-of-packages)
+A list of packages that serve as applications to use on top of the GNOME Shell.
+
+@item @code{gnome} (type: maybe-package)
+This field used to be the only configuration point and specified
+a GNOME meta-package to install system-wide. Since the meta-package
+itself provides neither sources nor the actual packages and is only
+used to propagate them, this field is deprecated.
+
+@item @code{extra-packages} (type: list-of-packages)
+A list of GNOME-adjacent packages to also include. This field is
+intended for users to add their own packages to their GNOME experience.
+Note, that it already includes some packages that are considered
+essential by some (most?) GNOME users.
+
+@item @code{udev-ignorelist} (default: @code{()}) (type: list-of-strings)
+A list of regular expressions denoting udev rules or hardware file names
+provided by any package that should not be installed. By default, every
+udev rule and hardware file specified by any package referenced in the
+other fields are installed.
+
+@item @code{polkit-ignorelist} (default: @code{()}) (type: list-of-strings)
+A list of regular expressions denoting polkit rules provided by any
+package that should not be installed. By default, every polkit rule
+added by any package referenced in the other fields are installed.
+
@end table
@end deftp
@@ -25259,6 +24941,25 @@ Package object for UDisks.
@end table
@end deftp
+@defvar gvfs-service-type
+Type for the service that provides virtual file systems for GIO
+applicaitons, which enables support for @code{trash:///}, @code{ftp://},
+@code{sftp://} and many other location schemas in file managers like
+Nautilus (GNOME Files) and Thunar.
+
+The value for this service is a @code{<gvfs-configuration>} object.
+@end defvar
+
+@deftp {Data Type} gvfs-configuration
+Data type representing the configuration for @code{gvfs-service-type}.
+
+@table @asis
+@item @code{gvfs} (default: @code{gvfs}) (type: file-like)
+Package object for GVfs.
+
+@end table
+@end deftp
+
@defvar colord-service-type
This is the type of the service that runs @command{colord}, a system
service with a D-Bus
@@ -26999,7 +26700,7 @@ Disable LOGIN command and all other plaintext authentications unless
SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
matches the local IP (i.e.@: you're connecting from the same computer),
the connection is considered secure and plaintext authentication is
-allowed. See also ssl=required setting.
+allowed. See also the @samp{ssl=required} setting.
Defaults to @samp{#t}.
@end deftypevr
@@ -27139,7 +26840,7 @@ Defaults to @samp{#f}.
List of wanted authentication mechanisms. Supported mechanisms are:
@samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
-@samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
+@samp{otp}, @samp{skey}, and @samp{gss-spnego}. See also the
@samp{disable-plaintext-auth} setting.
@end deftypevr
@@ -32812,9 +32513,9 @@ pulling channels from Git. To that end, it needs to access X.509 certificates
so that it can authenticate Git servers when communicating over HTTPS, and it
assumes that @file{/etc/ssl/certs} contains those certificates.
-Thus, make sure to add @code{nss-certs} or another certificate package to the
-@code{packages} field of your configuration. @ref{X.509 Certificates}, for
-more information on X.509 certificates.
+A certificate package, @code{nss-certs}, is provided by default as
+part of @code{%base-packages}. @ref{X.509 Certificates}, for more
+information on X.509 certificates.
@end quotation
@subsubheading gmnisrv
@@ -39706,6 +39407,44 @@ Extra command line options for @code{guix-data-service-process-jobs}.
@end table
@end deftp
+@anchor{guix-home-service-type}
+@subsubheading Guix Home Service
+
+The Guix Home service is a way to let Guix System deploy the home
+environment of one or more users (@pxref{Home Configuration}, for more
+on Guix Home). That way, the system configuration embeds declarations
+of the home environment of those users and can be used to deploy
+everything consistently at once, saving users the need to run
+@command{guix home reconfigure} independently.
+
+@defvar guix-home-service-type
+Service type for the Guix Home service. Its value must be a list of
+lists containing user and home environment pairs. The key of each pair
+is a string representing the user to deploy the configuration under and
+the value is a home-environment configuration.
+
+@lisp
+(use-modules (gnu home))
+
+(define my-home
+ (home-environment
+ @dots{}))
+
+(operating-system
+ (services (append (list (service guix-home-service-type
+ `(("alice" ,my-home))))
+ %base-services)))
+@end lisp
+
+This service can be extended by other services to add additional home
+environments, as in this example:
+
+@lisp
+(simple-service 'my-extra-home home-service-type
+ `(("bob" ,my-extra-home))))
+@end lisp
+@end defvar
+
@subsubheading Nar Herder
The @uref{https://git.cbaines.net/guix/nar-herder/about/,Nar Herder} is
a utility for managing a collection of nars.
@@ -41323,7 +41062,7 @@ Reference}). Guix includes one such package, @code{nss-certs}, which
is a set of CA certificates provided as part of Mozilla's Network
Security Services.
-Note that it is @emph{not} part of @code{%base-packages}, so you need to
+This package is part of @code{%base-packages}, so there is no need to
explicitly add it. The @file{/etc/ssl/certs} directory, which is where
most applications and libraries look for certificates by default, points
to the certificates installed globally.
@@ -41696,7 +41435,7 @@ program. That gives a lot of flexibility. The
program to run in that initrd.
@deffn {Procedure} expression->initrd exp @
- [#:guile %guile-static-stripped] [#:name "guile-initrd"]
+ [#:guile %guile-static-initrd] [#:name "guile-initrd"]
Return as a file-like object a Linux initrd (a gzipped cpio archive)
containing @var{guile} and that evaluates @var{exp}, a G-expression,
upon booting. All the derivations referenced by @var{exp} are
@@ -44579,6 +44318,12 @@ mechanism to create the XDG run-time directory and has the
like user Shepherd and its descendants will not start.
@end quotation
+If you're using Guix System, you can embed your home configuration in
+your system configuration such that @command{guix system reconfigure}
+will deploy both the system @emph{and} your home at once!
+@xref{guix-home-service-type, @code{guix-home-service-type}}, for how to
+do that.
+
@node Configuring the Shell
@section Configuring the Shell
This section is safe to skip if your shell or shells are managed by
@@ -46823,12 +46568,13 @@ guix time-machine \
You can think of it as some sort of built-in version control! Your
home is not just a binary artifact: @emph{it carries its own source}.
-@c @xref{Service Reference, @code{provenance-service-type}}, for more
-@c information on provenance tracking.
-@c @footnote{This action (and the related actions
-@c @code{switch-generation} and @code{roll-back}) are usable after the
-@c home environment is initialized.}.
+@quotation Note
+If you're using Guix System, @ref{guix-home-service-type,
+@code{guix-home-service-type}}, on how to embed your home configuration
+in your system configuration such that @command{guix system reconfigure}
+deploys both your system and your home.
+@end quotation
@item switch-generation
@cindex home generations
@@ -47159,6 +46905,11 @@ Platform targeting x86 CPU running GNU/Linux.
Platform targeting x86 64-bit CPU running GNU/Linux.
@end defvar
+@defvar x86_64-linux-x32
+Platform targeting x86 64-bit CPU running GNU/Linux with the run-time using
+the X32 ABI.
+@end defvar
+
@defvar i686-mingw
Platform targeting x86 CPU running Windows, with run-time support from
MinGW.
@@ -47184,6 +46935,11 @@ Platform targeting OpenRISC 1000 CPU without an operating system and without a
C standard library.
@end defvar
+@defvar xtensa-ath9k-elf
+Platform targeting Xtensa CPU used in the Qualcomm Atheros AR7010 and AR9271
+USB 802.11n @acronym{NICs, Network Interface Controllers}.
+@end defvar
+
@node System Images
@chapter Creating System Images
@@ -48223,7 +47979,12 @@ The graph below shows the resulting dependency graph for
@code{gcc-core-mesboot0}, the bootstrap compiler used for the
traditional bootstrap of the rest of the Guix System.
-@c ./pre-inst-env guix graph -e '(@@ (gnu packages commencement) gcc-core-mesboot0)' | sed -re 's,((bootstrap-seeds|guile-bootstrap).*shape =) box,\1 ellipse,' > doc/images/gcc-core-mesboot0-graph.dot
+@c ./pre-inst-env guix graph \
+@c -e '(@@ (gnu packages commencement) gcc-core-mesboot0)' \
+@c | sed -r \
+@c -e 's,((bootstrap-seeds|guile-bootstrap).*shape =) box,\1 ellipse,' \
+@c -e 's,fontname = sans,fontname = "dejavu sans",' \
+@c > doc/images/gcc-core-mesboot0-graph.dot
@image{images/gcc-core-mesboot0-graph,6in,,Dependency graph of gcc-core-mesboot0}
Work is ongoing to bring these bootstraps to the @code{arm-linux} and