From e32171eeeb4baef781dac797a76fee100a802a3d Mon Sep 17 00:00:00 2001 From: John Darrington Date: Wed, 9 Nov 2016 15:34:33 +0100 Subject: [PATCH] doc: Added some index entries. * doc/guix.texi: Added various @cindex tags to assist readers. --- doc/guix.texi | 138 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 130 insertions(+), 8 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index ffed57a768..0fe14d7fed 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -286,7 +286,7 @@ users (@pxref{Setting Up the Daemon}) and for downloading pre-built binaries from authorized sources (@pxref{Substitutes}). @cindex extensibility of the distribution -@cindex customization of packages +@cindex customization, of packages Guix includes package definitions for many GNU and non-GNU packages, all of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the user's computing freedom}. It is @emph{extensible}: users can write @@ -340,6 +340,7 @@ garbage collection of packages (@pxref{Features}). @node Installation @chapter Installation +@cindex installing Guix GNU Guix is available for download from its website at @url{http://www.gnu.org/software/guix/}. This section describes the software requirements of Guix, as well as how to install it and get @@ -369,6 +370,7 @@ system, such as @file{/etc}, are left untouched. @node Binary Installation @section Binary Installation +@cindex installing Guix from binaries This section describes how to install Guix on an arbitrary system from a self-contained tarball providing binaries for Guix and for all its dependencies. This is often quicker than installing from source, which @@ -379,6 +381,7 @@ Installing goes along these lines: @enumerate @item +@cindex downloading Guix binary Download the binary tarball from @indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz}, where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine @@ -494,6 +497,7 @@ Directories,,, texinfo, GNU Texinfo}, for more details on changing the Info search path.) @item +@cindex substitutes, authorization thereof To use substitutes from @code{hydra.gnu.org} or one of its mirrors (@pxref{Substitutes}), authorize them: @@ -577,6 +581,7 @@ following packages are also needed: C++11 standard. @end itemize +@cindex state directory 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 @code{--localstatedir} option of the @command{configure} @@ -585,6 +590,7 @@ GNU Coding Standards}). The @command{configure} script protects against unintended misconfiguration of @var{localstatedir} so you do not inadvertently corrupt your store (@pxref{The Store}). +@cindex Nix, compatibility When a working installation of @url{http://nixos.org/nix/, the Nix package manager} is available, you can instead configure Guix with @code{--disable-daemon}. In that case, @@ -603,6 +609,7 @@ your goal is to share the store with Nix. @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 @@ -688,6 +695,7 @@ the daemon to download pre-built binaries. @node Build Environment Setup @subsection Build Environment Setup +@cindex build environment In a standard multi-user setup, Guix and its daemon---the @command{guix-daemon} program---are installed by the system administrator; @file{/gnu/store} is owned by @code{root} and @@ -1203,6 +1211,7 @@ versions may be incompatible. @subsection X11 Fonts +@cindex fonts The majority of graphical applications use Fontconfig to locate and load fonts and perform X11-client-side rendering. The @code{fontconfig} package in Guix looks for fonts in @file{$HOME/.guix-profile} @@ -1222,6 +1231,7 @@ for Chinese languages: guix package -i font-adobe-source-han-sans:cn @end example +@cindex @code{xterm} Older programs such as @command{xterm} do not use Fontconfig and instead rely on server-side font rendering. Such programs require to specify a full name of a font using XLFD (X Logical Font Description), like this: @@ -1237,11 +1247,13 @@ your Guix profile, you need to extend the font path of the X server: xset +fp ~/.guix-profile/share/fonts/truetype @end example +@cindex @code{xlsfonts} After that, you can run @code{xlsfonts} (from @code{xlsfonts} package) to make sure your TrueType fonts are listed there. @subsection X.509 Certificates +@cindex @code{nss-certs} The @code{nss-certs} package provides X.509 certificates, which allow programs to authenticate Web servers accessed over HTTPS. @@ -1252,6 +1264,7 @@ information. @subsection Emacs Packages +@cindex @code{emacs} When you install Emacs packages with Guix, the elisp files may be placed either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in sub-directories of @@ -1275,6 +1288,7 @@ option (@pxref{Init File,,, emacs, The GNU Emacs Manual}). @node Package Management @chapter Package Management +@cindex packages The purpose of GNU Guix is to allow users to easily install, upgrade, and remove software packages, without having to know about their build procedures or dependencies. Guix also goes beyond this obvious set of @@ -1322,6 +1336,7 @@ The @command{guix package} command is the central tool to manage packages (@pxref{Invoking guix package}). It operates on the per-user profiles, and can be used @emph{with normal user privileges}. +@cindex transactions The command provides the obvious install, remove, and upgrade operations. Each invocation is actually a @emph{transaction}: either the specified operation succeeds, or nothing happens. Thus, if the @@ -1377,6 +1392,10 @@ package into their profile (@pxref{Invoking guix environment}). @node Invoking guix package @section Invoking @command{guix package} +@cindex installing packages +@cindex removing packages +@cindex package installation +@cindex package removal The @command{guix package} command is the tool that allows users to install, upgrade, and remove packages, as well as rolling back to previous configurations. It operates only on the user's own profile, @@ -1386,7 +1405,7 @@ is: @example guix package @var{options} @end example - +@cindex transactions Primarily, @var{options} specifies the operations to be performed during the transaction. Upon completion, a new profile is created, but previous @dfn{generations} of the profile remain available, should the user @@ -1404,6 +1423,7 @@ whereby the user specifies the exact set of packages to be available and passes it @i{via} the @option{--manifest} option (@pxref{profile-manifest, @option{--manifest}}). +@cindex profile For each user, a symlink to the user's default profile is automatically created in @file{$HOME/.guix-profile}. This symlink always points to the current generation of the user's default profile. Thus, users can add @@ -1510,6 +1530,7 @@ and/or output name in addition to the package name. For instance, @item --upgrade[=@var{regexp} @dots{}] @itemx -u [@var{regexp} @dots{}] +@cindex upgrading packages Upgrade all the installed packages. If one or more @var{regexp}s are specified, upgrade only installed packages whose name matches a @var{regexp}. Also see the @code{--do-not-upgrade} option below. @@ -1558,6 +1579,9 @@ of packages: @end example @item --roll-back +@cindex rolling back +@cindex undoing transactions +@cindex transactions, undoing Roll back to the previous @dfn{generation} of the profile---i.e., undo the last transaction. @@ -1574,6 +1598,7 @@ generations in a profile is always linear. @item --switch-generation=@var{pattern} @itemx -S @var{pattern} +@cindex generations Switch to a particular generation defined by @var{pattern}. @var{pattern} may be either a generation number or a number prefixed @@ -1755,6 +1780,7 @@ Multiple Outputs}), and the source location of its definition. @item --list-generations[=@var{pattern}] @itemx -l [@var{pattern}] +@cindex generations Return a list of generations along with their creation dates; for each generation, show the installed packages, with the most recently installed packages shown last. Note that the zeroth generation is never @@ -1856,6 +1882,7 @@ your system has unpatched security vulnerabilities. @cindex security @cindex digital signatures +@cindex substitutes, authorization thereof To allow Guix to download substitutes from @code{hydra.gnu.org} or a mirror thereof, you must add its public key to the access control list (ACL) of archive @@ -1965,6 +1992,7 @@ like to discuss this project, join us on @email{guix-devel@@gnu.org}. @cindex multiple-output packages @cindex package outputs +@cindex outputs Often, packages defined in Guix have a single @dfn{output}---i.e., the source package leads to exactly one directory in the store. When running @@ -1987,6 +2015,7 @@ which contains everything but the documentation, one would run: guix package -i glib @end example +@cindex documentation The command to install its documentation is: @example @@ -2016,6 +2045,7 @@ guix package}). @section Invoking @command{guix gc} @cindex garbage collector +@cindex disk space Packages that are installed, but not used, may be @dfn{garbage-collected}. The @command{guix gc} command allows users to explicitly run the garbage collector to reclaim space from the @file{/gnu/store} directory. It is @@ -2098,6 +2128,7 @@ In addition, the references among existing store files can be queried: @item --references @itemx --referrers +@cindex package dependencies List the references (respectively, the referrers) of store files given as arguments. @@ -2160,6 +2191,9 @@ this option is primarily useful when the daemon was running with @node Invoking guix pull @section Invoking @command{guix pull} +@cindex upgrading Guix +@cindex @command{guix pull} +@cindex pull Packages are installed or upgraded to the latest version available in the distribution currently available on your local machine. To update that distribution, along with the Guix tools, you must run @command{guix @@ -2202,11 +2236,14 @@ useful to Guix developers. @node Invoking guix archive @section Invoking @command{guix archive} +@cindex @command{guix archive} +@cindex archive The @command{guix archive} command allows users to @dfn{export} files from the store into a single archive, and to later @dfn{import} them. In particular, it allows store files to be transferred from one machine to the store on another machine. +@cindex exporting store items To export store files as an archive to standard output, run: @example @@ -2730,6 +2767,7 @@ A one-line description of the package. A more elaborate description of the package. @item @code{license} +@cindex license, of packages The license of the package; a value from @code{(guix licenses)}, or a list of such values. @@ -4263,6 +4301,8 @@ the Scheme programming interface of Guix in a convenient way. @node Invoking guix build @section Invoking @command{guix build} +@cindex package building +@cindex @command{guix build} The @command{guix build} command builds packages or derivations and their dependencies, and prints the resulting store paths. Note that it does not modify the user's profile---this is the job of the @@ -4717,6 +4757,7 @@ You can freely access a huge library of build logs! @node Invoking guix edit @section Invoking @command{guix edit} +@cindex @command{guix edit} @cindex package definition, editing So many packages, so many source files! The @command{guix edit} command facilitates the life of users and packagers by pointing their editor at @@ -4747,6 +4788,8 @@ guix-search-by-name} and similar commands (@pxref{Emacs Commands}). @node Invoking guix download @section Invoking @command{guix download} +@cindex @command{guix download} +@cindex downloading package sources When writing a package definition, developers typically need to download a source tarball, compute its SHA256 hash, and write that hash in the package definition (@pxref{Defining Packages}). The @@ -4794,6 +4837,7 @@ URL, which makes you vulnerable to ``man-in-the-middle'' attacks. @node Invoking guix hash @section Invoking @command{guix hash} +@cindex @command{guix hash} The @command{guix hash} command computes the SHA256 hash of a file. It is primarily a convenience tool for anyone contributing to the distribution: it computes the cryptographic hash of a file, which can be @@ -4858,6 +4902,7 @@ $ guix hash -rx . @cindex importing packages @cindex package import @cindex package conversion +@cindex Invoking @command{guix import} The @command{guix import} command is useful for people who would like to add a package to the distribution with as little work as possible---a legitimate demand. The command knows of a few @@ -5102,6 +5147,7 @@ is welcome here (@pxref{Contributing}). @node Invoking guix refresh @section Invoking @command{guix refresh} +@cindex @command {guix refresh} The primary audience of the @command{guix refresh} command is developers of the GNU software distribution. By default, it reports any packages provided by the distribution that are outdated compared to the latest @@ -5305,6 +5351,9 @@ otherwise. @node Invoking guix lint @section Invoking @command{guix lint} + +@cindex @command{guix lint} +@cindex package, checking for errors The @command{guix lint} command is meant to help package developers avoid common errors and use a consistent style. It runs a number of checks on a given set of packages in order to find common mistakes in their @@ -5392,6 +5441,10 @@ names returned by @code{--list-checkers}. @node Invoking guix size @section Invoking @command{guix size} +@cindex size +@cindex package size +@cindex closure +@cindex @command{guix size} The @command{guix size} command helps package developers profile the disk usage of packages. It is easy to overlook the impact of an additional dependency added to a package, or the impact of using a @@ -5495,6 +5548,8 @@ Consider packages for @var{system}---e.g., @code{x86_64-linux}. @section Invoking @command{guix graph} @cindex DAG +@cindex @command{guix graph} +@cindex package dependencies Packages and their dependencies form a @dfn{graph}, specifically a directed acyclic graph (DAG). It can quickly become difficult to have a mental model of the package DAG, so the @command{guix graph} command @@ -5637,6 +5692,8 @@ guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)' @cindex reproducible build environments @cindex development environments +@cindex @command{guix environment} +@cindex environment, package build environment The purpose of @command{guix environment} is to assist hackers in creating reproducible development environments without polluting their package profile. The @command{guix environment} tool takes one or more @@ -5883,6 +5940,7 @@ build} supports (@pxref{Common Build Options}). @node Invoking guix publish @section Invoking @command{guix publish} +@cindex @command{guix publish} The purpose of @command{guix publish} is to enable users to easily share their store with others, who can then use it as a substitute server (@pxref{Substitutes}). @@ -5993,7 +6051,8 @@ of the @code{operating-system} declaration (@pxref{guix-publish-service, @cindex reproducible builds @cindex verifiable builds - +@cindex @command{guix challenge} +@cindex challenge Do the binaries provided by this server really correspond to the source code it claims to build? Is a package build process deterministic? These are the questions the @command{guix challenge} command attempts to @@ -6118,7 +6177,7 @@ URLs to compare to. @node Invoking guix container @section Invoking @command{guix container} @cindex container - +@cindex @command{guix container} @quotation Note As of version @value{VERSION}, this tool is experimental. The interface is subject to radical change in the future. @@ -6244,6 +6303,7 @@ to join! @xref{Contributing}, for information about how you can help. @node System Installation @section System Installation +@cindex installing GuixSD @cindex Guix System Distribution This section explains how to install the Guix System Distribution (GuixSD) on a machine. The Guix package manager can @@ -6487,6 +6547,8 @@ ifconfig @var{interface} up @end example @item Wireless connection +@cindex wireless +@cindex WiFi To configure wireless networking, you can create a configuration file for the @command{wpa_supplicant} configuration tool (its location is not important) using one of the available text editors such as @@ -6519,6 +6581,7 @@ wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B Run @command{man wpa_supplicant} for more information. @end table +@cindex DHCP At this point, you need to acquire an IP address. On a network where IP addresses are automatically assigned @i{via} DHCP, you can run: @@ -6727,6 +6790,7 @@ that. @node Building the Installation Image @subsection Building the Installation Image +@cindex installation image The installation image described above was built using the @command{guix system} command, specifically: @@ -6841,6 +6905,7 @@ version: @unnumberedsubsubsec System Services +@cindex services @vindex %base-services The @code{services} field lists @dfn{system services} to be made available when the system starts (@pxref{Services}). @@ -6995,6 +7060,8 @@ the command-line of the kernel---e.g., @code{("console=ttyS0")}. The system bootloader configuration object. @xref{GRUB Configuration}. @item @code{initrd} (default: @code{base-initrd}) +@cindex initrd +@cindex initial RAM disk A two-argument monadic procedure that returns an initial RAM disk for the Linux kernel. @xref{Initial RAM Disk}. @@ -7386,6 +7453,9 @@ automatically later. @node User Accounts @subsection User Accounts +@cindex users +@cindex accounts +@cindex user accounts User accounts and groups are entirely managed through the @code{operating-system} declaration. They are specified with the @code{user-account} and @code{user-group} forms: @@ -7419,6 +7489,7 @@ be specified: The name of the user account. @item @code{group} +@cindex groups This is the name (a string) or identifier (a number) of the user group this account belongs to. @@ -7467,6 +7538,7 @@ Manual}, for information on Guile's @code{crypt} procedure. @end table @end deftp +@cindex groups User group declarations are even simpler: @example @@ -7754,6 +7826,7 @@ This is the data type representing the configuration of login. @table @asis @item @code{motd} +@cindex message of the day A file-like object containing the ``message of the day''. @item @code{allow-empty-passwords?} (default: @code{#t}) @@ -7924,6 +7997,8 @@ external name servers do not even need to be queried. @end defvr @anchor{syslog-configuration-type} +@cindex syslog +@cindex logging @deftp {Data Type} syslog-configuration This data type represents the configuration of the syslog daemon. @@ -7938,6 +8013,7 @@ The syslog configuration file to use. @end deftp @anchor{syslog-service} +@cindex syslog @deffn {Scheme Procedure} syslog-service @var{config} Return a service that runs a syslog daemon according to @var{config}. @@ -7961,6 +8037,7 @@ Name of the group for build user accounts. Number of build user accounts to create. @item @code{authorize-key?} (default: @code{#t}) +@cindex substitutes, authorization thereof Whether to authorize the substitute keys listed in @code{authorized-keys}---by default that of @code{hydra.gnu.org} (@pxref{Substitutes}). @@ -8007,6 +8084,8 @@ This is the name of the file where some random bytes are saved by It defaults to @file{/var/lib/random-seed}. @end defvr +@cindex keymap +@cindex keyboard @deffn {Scheme Procedure} console-keymap-service @var{files} ... @cindex keyboard layout Return a service to load console keymaps from @var{files} using @@ -8028,6 +8107,8 @@ See @code{man loadkeys} for details. @end deffn +@cindex mouse +@cindex gpm @deffn {Scheme Procedure} gpm-service [#:gpm @var{gpm}] @ [#:options] Run @var{gpm}, the general-purpose mouse daemon, with the given @@ -8089,6 +8170,7 @@ commonly used for real-time audio systems. @subsubsection Scheduled Job Execution @cindex cron +@cindex mcron @cindex scheduling jobs The @code{(gnu services mcron)} module provides an interface to GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,, @@ -8184,6 +8266,7 @@ specifications,, mcron, GNU@tie{}mcron}). @cindex rottlog @cindex log rotation +@cindex logging Log files such as those found in @file{/var/log} tend to grow endlessly, so it's a good idea to @dfn{rotate} them once in a while---i.e., archive their contents in separate files, possibly compressed. The @code{(gnu @@ -8278,6 +8361,8 @@ gateway. @end deffn @cindex wicd +@cindex wireless +@cindex WiFi @cindex network management @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}] Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network @@ -8307,6 +8392,8 @@ several the @command{connmanctl} command to interact with the daemon and configure networking." @end deffn +@cindex NTP +@cindex real time clock @deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @ [#:servers @var{%ntp-servers}] @ [#:allow-large-adjustment? #f] @@ -8321,6 +8408,7 @@ make an initial adjustment of more than 1,000 seconds. List of host names used as the default NTP servers. @end defvr +@cindex Tor @deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}] Return a service to run the @uref{https://torproject.org, Tor} anonymous networking daemon. @@ -8368,6 +8456,8 @@ configuration file. @end deffn Furthermore, @code{(gnu services ssh)} provides the following services. +@cindex SSH +@cindex SSH server @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @ [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @ @@ -8405,6 +8495,8 @@ root. The other options should be self-descriptive. @end deffn +@cindex SSH +@cindex SSH server @deffn {Scheme Variable} openssh-service-type This is the type for the @uref{http://www.openssh.org, OpenSSH} secure shell daemon, @command{sshd}. Its value must be an @@ -8568,6 +8660,8 @@ sockets. @node X Window @subsubsection X Window +@cindex X11 +@cindex X Window System Support for the X Window graphical display system---specifically Xorg---is provided by the @code{(gnu services xorg)} module. Note that there is no @code{xorg-service} procedure. Instead, the X server is @@ -8665,6 +8759,7 @@ Relogin after logout. @end table @end deftp +@cindex login manager @deffn {Scheme Procedure} sddm-service config Return a service that spawns the SDDM graphical login manager for config of type @code{}. @@ -9011,6 +9106,8 @@ Users need to be in the @code{lp} group to access the D-Bus service. @node Database Services @subsubsection Database Services +@cindex database +@cindex SQL The @code{(gnu services databases)} module provides the following services. @deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @ @@ -9047,6 +9144,8 @@ For MariaDB, the root password is empty. @node Mail Services @subsubsection Mail Services +@cindex mail +@cindex email The @code{(gnu services mail)} module provides Guix service definitions for mail services. Currently the only implemented service is Dovecot, an IMAP, POP3, and LMTP server. @@ -10450,6 +10549,9 @@ Local accounts with lower values will silently fail to authenticate. @node Web Services @subsubsection Web Services +@cindex web +@cindex www +@cindex HTTP The @code{(gnu services web)} module provides the following service: @deffn {Scheme Procedure} nginx-service [#:nginx nginx] @ @@ -10665,6 +10767,7 @@ resolution when the graphical console window resizes. @end deffn @subsubsection Dictionary Services +@cindex dictionary The @code{(gnu services dict)} module provides the following service: @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)] @@ -10956,8 +11059,8 @@ Reference Manual}). For example: @node Initial RAM Disk @subsection Initial RAM Disk -@cindex initial RAM disk (initrd) -@cindex initrd (initial RAM disk) +@cindex initrd +@cindex initial RAM disk For bootstrapping purposes, the Linux-Libre kernel is passed an @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary root file system as well as an initialization script. The latter is @@ -11033,6 +11136,8 @@ Now that you know all the features that initial RAM disks produced by @code{base-initrd} provide, here is how to use it and customize it further. +@cindex initrd +@cindex initial RAM disk @deffn {Monadic Procedure} base-initrd @var{file-systems} @ [#:qemu-networking? #f] [#:virtio? #t] [#:volatile-root? #f] @ [#:extra-modules '()] [#:mapped-devices '()] @@ -11235,6 +11340,7 @@ once @command{reconfigure} has completed. @end quotation @item switch-generation +@cindex generations Switch to an existing system generation. This action atomically switches the system profile to the specified system generation. It also rearranges the system's existing GRUB menu entries. It makes the menu @@ -11271,6 +11377,7 @@ deactivating services. This action will fail if the specified generation does not exist. @item roll-back +@cindex rolling back Switch to the preceding system generation. The next time the system boots, it will use the preceding system generation. This is the inverse of @command{reconfigure}, and it is exactly the same as invoking @@ -11490,11 +11597,13 @@ example graph. @node Running GuixSD in a VM @subsection Running GuixSD in a Virtual Machine +@cindex virtual machine One way to run GuixSD in a virtual machine (VM) is to build a GuixSD virtual machine image using @command{guix system vm-image} (@pxref{Invoking guix system}). The returned image is in qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently use. +@cindex QEMU To run the image in QEMU, copy it out of the store (@pxref{The Store}) and give yourself permission to write to the copy. When invoking QEMU, you must choose a system emulator that is suitable for your hardware @@ -11550,6 +11659,8 @@ network connectivity, like for example @command{curl}. @subsubsection Connecting Through SSH +@cindex SSH +@cindex SSH server To enable SSH inside a VM you need to add a SSH server like @code{(dropbear-service)} or @code{(lsh-service)} to your VM. The @code{(lsh-service}) doesn't currently boot unsupervised. It requires you to type some characters to initialize the @@ -11988,6 +12099,7 @@ extend it by passing it lists of packages to add to the system profile. @node Shepherd Services @subsubsection Shepherd Services +@cindex shepherd services @cindex PID 1 @cindex init system The @code{(gnu services shepherd)} module provides a way to define @@ -12312,6 +12424,7 @@ bootstrap)} module. For more information on bootstrapping, @node Packaging Guidelines @section Packaging Guidelines +@cindex packages, creating The GNU distribution is nascent and may well lack some of your favorite packages. This section describes how you can help make the distribution grow. @xref{Contributing}, for additional information on how you can @@ -12389,7 +12502,7 @@ needed is to review and apply the patch. @subsection Software Freedom @c Adapted from http://www.gnu.org/philosophy/philosophy.html. - +@cindex free software The GNU operating system has been developed so that users can have freedom in their computing. GNU is @dfn{free software}, meaning that users have the @url{http://www.gnu.org/philosophy/free-sw.html,four @@ -12416,6 +12529,7 @@ upstream source. @node Package Naming @subsection Package Naming +@cindex package name A package has actually two names associated with it: First, there is the name of the @emph{Scheme variable}, the one following @code{define-public}. By this name, the package can be made known in the @@ -12440,6 +12554,7 @@ Font package names are handled differently, @pxref{Fonts}. @node Version Numbers @subsection Version Numbers +@cindex package version We usually package only the latest version of a given free software project. But sometimes, for instance for incompatible library versions, two (or more) versions of the same package are needed. These require @@ -12532,6 +12647,8 @@ definition may look like this: @node Synopses and Descriptions @subsection Synopses and Descriptions +@cindex package description +@cindex package synopsis As we have seen before, each package in GNU@tie{}Guix includes a synopsis and a description (@pxref{Defining Packages}). Synopses and descriptions are important: They are what @command{guix package @@ -12598,6 +12715,7 @@ for the X11 resize-and-rotate (RandR) extension. @dots{}") @node Python Modules @subsection Python Modules +@cindex python We currently package Python 2 and Python 3, under the Scheme variable names @code{python-2} and @code{python} as explained in @ref{Version Numbers}. To avoid confusion and naming clashes with other programming languages, it @@ -12668,6 +12786,7 @@ size}}). @node Perl Modules @subsection Perl Modules +@cindex perl Perl programs standing for themselves are named as any other package, using the lowercase upstream name. For Perl packages containing a single class, we use the lowercase class name, @@ -12683,6 +12802,7 @@ prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}. @node Java Packages @subsection Java Packages +@cindex java Java programs standing for themselves are named as any other package, using the lowercase upstream name. @@ -12702,6 +12822,7 @@ dashes and prepend the prefix @code{java-}. So the class @node Fonts @subsection Fonts +@cindex fonts For fonts that are in general not installed by a user for typesetting purposes, or that are distributed as part of a larger software package, we rely on the general packaging rules for software; for instance, this @@ -12875,6 +12996,7 @@ implicitly used by any package that uses @code{gnu-build-system} @unnumberedsubsec Building the Bootstrap Binaries +@cindex bootstrap binaries Because the final tool chain does not depend on the bootstrap binaries, those rarely need to be updated. Nevertheless, it is useful to have an automated way to produce them, should an update occur, and this is what @@ -12970,7 +13092,7 @@ providing artwork and themes, making suggestions, and more---thank you! @c ********************************************************************* @node GNU Free Documentation License @appendix GNU Free Documentation License - +@cindex license, GNU Free Documentation License @include fdl-1.3.texi @c *********************************************************************