Partly fixes <http://bugs.gnu.org/20720>.
Reported by Alex Kost <alezost@gmail.com>.
* gnu/system.scm (default-/etc/hosts): Change 'text-file' to 'plain-file'.
(maybe-file->monadic): New procedure.
(operating-system-etc-directory): Use it.
* doc/guix.texi (operating-system Reference, Networking Services): Adjust
accordingly.
Partly fixes <http://bugs.gnu.org/20720>
Reported by Alex Kost <alezost@gmail.com>.
* gnu/system.scm (etc-directory): Change default #:sudoers value to a
'plain-file'. Don't bind it. Remove #~#$.
(maybe-string->file): New procedure.
(operating-system-etc-directory): Use it.
(%sudoers-specification): Use 'plain-file'.
* doc/guix.texi (operating-system Reference): Adjust accordingly.
* guix/scripts/environment.scm (%options): Add "ad-hoc" option.
(show-help): Display help for "--ad-hoc".
(packages+propagated-inputs): New procedure.
(guix-environment): Create ad hoc environment when asked.
* doc/guix.texi ("invoking guix environment"): Document it.
* guix/ui.scm (load*): Add #:on-error parameter.
[tag, error-string]: New variables.
Wrap 'load' call in 'call-with-prompt'. Pass TAG to 'make-stack'. Honor
ON-ERROR after 'report-load-error' call.
(report-load-error): Change to not exit on error. Make private.
* guix/scripts/system.scm (show-help, %options): Add --on-error.
(guix-system): Use 'load*' and pass it #:on-error.
* gnu/system/shadow.scm (%base-user-accounts): New variable.
* gnu/system.scm (<operating-system>)[users]: Use it as the default value.
* gnu/system/examples/bare-bones.tmpl (users): Use it.
* gnu/system/examples/desktop.tmpl (users): Likewise.
* doc/guix.texi (operating-system Reference, User Accounts): Adjust
accordingly.
* doc/guix.texi (Invoking guix package): Mention the declarative approach and
--manifest in the intro. And an anchor for --manifest. Explain why/how it
can be used. Tweak wording.
* gnu/services/xorg.scm (xorg-configuration-file): New procedure, with code
formerly in 'xorg-start-command'.
(xorg-start-command): Remove #:drivers and #:resolutions; add
#:configuration-file; use it as well as 'xorg-configuration-file'.
* guix/scripts/package.scm (search-path-environment-variables): Add #:kind
parameter. Pass it to 'environment-variable-definition'.
(display-search-paths): Add #:kind parameter and pass it to
'search-path-environment-variables'.
(%options): Add an optional parameter for "--search-paths".
(guix-package)[process-query]: Handle it.
* tests/guix-package-net.sh: Adjust existing test.
* tests/guix-package.sh: Adjust existing tests and add new test.
* doc/guix.texi (Invoking guix package): Document it.
Fixes a thinko introduced in 175ced4.
* gnu/system/install.scm (self-contained-tarball): Use "root:0" as the
owner and group.
* doc/guix.texi (Binary Installation): Revert 175ced4.
Suggested by Andreas Enge <andreas@enge.fr>
at <http://lists.gnu.org/archive/html/guix-devel/2015-05/msg00220.html>.
* gnu/system/install.scm (self-contained-tarball): Pass --owner and
--group to 'tar'.
* doc/guix.texi (Binary Installation): Move group and account creation
before extraction. Make "run the daemon" a separate step.
Reported by Scott McDonough <smcdonough1@gmail.com>
in <http://bugs.gnu.org/20582>.
* doc/guix.texi (System Installation): Suggested setting the interface
up before running 'dhclient'.
* guix/scripts/publish.scm (show-help, %options): Add --listen.
(getaddrinfo*): New procedure.
(%default-options): Add 'address'.
(open-server-socket): Replace 'addr' and 'port' with 'address', a
sockaddr.
(guix-publish): Adjust accordingly. Augment "publishing" message with
the actual address.
* doc/guix.texi (Invoking guix publish): Document it.
* guix/scripts/publish.scm (show-help): Add --user.
(%options): Likewise.
(run-publish-server): Change 'port' parameter to 'socket'. Pass
#:socket instead of #:addr and #:port to 'run-server'. Update caller
accordingly.
(open-server-socket, gather-user-privileges): New procedures.
(guix-publish): Use them. Force %PRIVATE-KEY and %PUBLIC-KEY early
on. Warn when running as root.
* doc/guix.texi (Invoking guix publish): Document --user.
* doc/guix.texi (Using the Configuration System): Add xref to "X.509
Certificates".
(X.509 Certificates): New section.
* gnu/system/examples/desktop.tmpl: Use NSS-CERTS.
* doc/guix.texi (System Installation): Add xref to "Using the
Configuration System" instead of including one here.
(Using the Configuration System): Remove first example, and include
os-config-bare-bones.texi instead. Include os-config-desktop.texi as
a second example.
* doc.am (OS_CONFIG_EXAMPLES_TEXI): New variable.
(BUILT_SOURCES, EXTRA_DIST, MAINTAINERCLEANFILES): Use it.
(doc/os-config.texi): Remove.
(doc/os-config-%.texi): New target.
* gnu/system/install.scm (configuration-template-service): Remove
'local-template' and 'template'. Add 'search' and 'templates'.
[activate]: Copy all of TEMPLATES to /etc/configuration.
* doc/guix.texi (System Installation): Adjust file name accordingly.
* gnu/services/colord.scm, gnu/services/dbus.scm,
gnu/services/upower.scm: Remove.
* gnu/services/desktop.scm: New file, with contents taken from the above
files.
* gnu-system.am (GNU_SYSTEM_MODULES): Adjust accordingly.
* doc/guix.texi (Desktop Services): New section.
(Various Services): Move colord-service and upower-service from
here to "Desktop Services".
Reported by Christopher A. Webber <cwebber@dustycloud.org>.
* doc/guix.texi (The Store Monad): Reintroduce 'mlet' in 'sh-symlink'
example. Move the simplified version below. Explain that the 'store'
parameter is threaded.
* doc/guix.texi (The Store Monad): Replace reference to "profile.sh",
which is not defined until the next node, with "sh-symlink", which
is defined immediately above
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* gnu/packages.scm (find-packages-by-name): Sort MATCHING according to
'version>?'. Use 'string-prefix?' instead of 'string=?' to compare
against VERSION.
* doc/guix.texi (Invoking guix package): Add example and explanation.
* guix/scripts/refresh.scm (guix-refresh): Use 'specification->package'
instead of 'find-packages-by-name'. This allows users to specify
things like "qt-4.8.6".
* doc/guix.texi (Invoking guix refresh): Add an example.
* guix/scripts/package.scm (%options): Add the '--do-not-upgrade' option.
(show-help): Document it.
(options->installable): Add 'do-not-upgrade-regexps' variable.
Use it in 'packages-to-upgrade'.
* doc/guix.texi (Invoking guix package): Document the '--do-not-upgrade'
option.
* doc/guix.texi (Name Service Switch): Add link to nss-mdns. Add
example show how to pass #:name-services to 'nscd-service'.
(Base Services): Add link from 'nscd-service' to the above.
* gnu/services/base.scm (nscd-service): Update docstring accordingly.
Fixes <http://bugs.gnu.org/19795>.
Reported by David Thompson <dthompson2@worcester.edu>.
* gnu/build/activation.scm (enumerate, current-users, current-groups,
delete-user, delete-group): New procedures.
(activate-users+groups): Add calls to 'delete-user' and
'delete-group'.
* doc/guix.texi (User Accounts): Add a paragraph about statelessness.
Explain that passwords are preserved.
* guix/gexp.scm (<local-file>): New record type.
(local-file): New procedure.
(local-file-compiler): New compiler.
(gexp->sexp) <struct? thing>: Handle the case where 'lower' returns a
file name.
(text-file*): Update docstring.local-file doc
* tests/gexp.scm ("one local file", "gexp->derivation, local-file"): New
tests.
* doc/guix.texi (G-Expressions): Mention local files early. Document
'local-file'. Update 'text-file*' documentation.
This is a followup to bcb1328.
* doc/guix.texi (G-Expressions): Move paragraph about extensibility
below. Remove assumptions that things are either packages or
derivations.
From now own, (guix packages) depends on (guix gexps); it was the other
way around now. This means that (guix packages) code can use gexps.
* guix/gexp.scm (origin-compiler, package-compiler): Remove.
(default-guile-derivation): New procedure.
(gexp->derivation): Use it instead of 'default-guile' +
'package->derivation'.
* guix/packages.scm (default-guile-derivation): New procedure.
(package-compiler, origin-compiler): New variables.
* doc/guix.texi (G-Expressions): Mention extensibility.
That makes WindowMaker the default session, by default.
* gnu/services/xorg.scm (xsessions-directory)[builder]: Prepend a number
in the file name to preserve the order of SESSIONS.
(slim-service): Augment docstring.
* doc/guix.texi (X Window): Adjust accordingly.
* guix/store.scm (text-file): Add optional 'references' parameter. Pass
it to 'add-text-to-store'.
* doc/guix.texi (The Store Monad): Adjust accordingly.
* gnu/services/base.scm (nscd-service): Add #:name-services parameter.
In 'start' field, set LD_LIBRARY_PATH based on #:name-services.
* doc/guix.texi (Base Services): Document it.
(Name Service Switch): Link to 'nscd-service'.
* gnu/services/xorg.scm (<session-type>): New record type.
(%windowmaker-session-type, %ratpoison-session-type): New variables.
(%default-xsessions): Use them.
(xsessions-directory): Expect SESSIONS to be a list of <session-type>
and rewrite accordingly.
(slim-service): Adjust docstring.
* doc/guix.texi (X Window): Update accordingly.
* doc/guix.texi (Introduction): Introduce "Guix System Distribution".
Add a couple of sentences about it. Remove "Guixotic".
(GNU Distribution): Likewise.
(System Installation): Ditto.
* doc/guix.texi (The Store Monad): Document '%state-monad' and related
procedures. Describe '%store-monad' as an alias for '%state-monad'.
* guix/monads.scm: Update commentary.
* doc/guix.texi (GNU Distribution): Explain what "Guixotic" is.
(System Installation): Replace "the GNU system" by "Guixotic".
(System Configuration): Likewise.
(Invoking guix system): Likewise.
* gnu/packages/bootstrap/armhf-linux/bash,
gnu/packages/bootstrap/armhf-linux/mkdir,
gnu/packages/bootstrap/armhf-linux/tar,
gnu/packages/bootstrap/armhf-linux/xz: New files.
* gnu-system.am (bootstrap_armhf_linuxdir, dist_bootstrap_armhf_linux_DATA)
(nodist_bootstrap_armhf_linux_DATA): New variables.
(DISTCLEANFILES): Add $(nodist_bootstrap_armhf_linux_DATA).
(gnu/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz): New target.
* build-aux/download.scm (file-name->uri): Use newer date in URI for
armhf-linux.
* gnu/packages/bootstrap.scm (raw-build): Use "guile-2.0.11.tar.xz" on
armhf-linux.
(glibc-dynamic-linker, %bootstrap-coreutils&co, %bootstrap-binutils)
(%bootstrap-glibc, %bootstrap-gcc): Add armhf-linux cases.
* m4/guix.m4 (GUIX_SYSTEM_TYPE): Add armhf case.
(GUIX_ASSERT_SUPPORTED_SYSTEM): Add armhf-linux to list of
supported systems.
* doc/guix.texi (GNU Distribution): Add armhf-linux to the list of
supported systems.
Fixes <http://bugs.gnu.org/19315>.
Reported by rekado <rekado@elephly.net>.
* doc/guix.texi (Invoking guix package): Adjust text to new guix-daemon
behavior introduced in commit 15ddeff.
Before that, as it was given an empty configuration file, nscd would
actually have all its caches disabled.
* gnu/services/base.scm (<nscd-configuration>, <nscd-cache>): New record
types.
(%nscd-default-caches, %nscd-default-configuration): New variables.
(nscd.conf-file): New procedure.
(nscd-service): Add 'config' parameter. Use 'nscd.conf-file', and
pass its result as the '-f' parameter of nscd.
* doc/guix.texi (Base Services): Update 'nscd-service' documentation
accordingly. Document 'nscd-configuration', 'nscd-cache',
'%nscd-default-configuration', and '%nscd-default-caches'.
Fixes <http://bugs.gnu.org/19316>.
Reported by rekado <rekado@elephly.net>.
* doc/guix.texi (Build Environment Setup): Show commands to set the
ownership and permissions of /gnu/store.
Appending to "raw" args broke optional parameters in 'guix package -I'
and 'guix package -A', and possibly other places. Therefore, switch to
parsing each set of options on its own and append resulting alists
together afterwards.
* guix/scripts/archive.scm (parse-options-from): Rename from
(parse-options) and add explicit argument. New form of (parse-options)
using its old algorithm via -from function.
* guix/scripts/build.scm: Ditto.
* guix/scripts/environment.scm: Ditto.
* guix/scripts/package.scm: Ditto.
* guix/scripts/system.scm: Ditto.
* tests/guix-package.sh: Add test.
* doc/guix.texi (Invoking guix build): Make it clear that the options
are parsed independently.
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* guix/build/glib-or-gtk-build-system.scm (wrap-all-programs): Add
#:glib-or-gtk-wrap-excluded-outputs parameter and honor it.
* guix/build-system/glib-or-gtk.scm (glib-or-gtk-build): Add
#:glib-or-gtk-wrap-excluded-outputs parameter and pass it in BUILDER.
* doc/guix.texi (Build Systems): Mention it.
This reverts commit 3b09332adf, which
turned out to be a bad idea because we need to have dependency
information between the device-mapping service and the file-system
service that uses it.
* gnu/system/file-systems.scm (<mapped-device>)[needed-for-boot?]: New
field.
* gnu/system.scm (operating-system-user-mapped-devices,
operating-system-boot-mapped-devices): Use it instead of trying to
guess. Guessing doesn't work when one refers to a partition using its
label, for instance.
* doc/guix.texi (Mapped Devices): Document 'needed-for-boot?'.
* gnu/system/locale.scm: New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add it.
* gnu/system.scm (<operating-system>)[locale]: Change the default to
"en_US.utf8".
(operating-system-locale-directory): New procecure.
(operating-system-derivation): Use it.
* doc/guix.texi (Using the Configuration System): Change example locale
to "fr_FR.utf8".
(operating-system Reference): Add xref to "Locales". Document
'locale-definitions'.
(Locales): New section.
* po/guix/POTFILES.in: Add gnu/system.scm.
Suggested by Adam Pribyl <pribyl@lowlevel.cz>.
* gnu/services/ssh.scm (lsh-service): Update docstring with xrefs to
the lsh manual. Fix typos.
* doc/guix.texi (Networking Services): Synchronize.
Reported by Adam Pribyl <pribyl@lowlevel.cz>.
* doc/guix.texi (Using the Configuration System): Use #:root-login?, not
#:allow-root-login?, in example.
(Networking Services): Fix module name for ssh.
Suggested by Alex Sassmannshausen <alex.sassmannshausen@gmail.com>.
* doc/guix.texi (Using the Configuration System): Remove 'password'
field in the example.
(User Accounts): Clarify use of the 'password' field, with links to
the libc and Guile manuals.
* gnu/build/activation.scm (activate-firmware): New procedure.
* gnu/system.scm (<operating-system>)[firmware]: New field.
(directory-union): New procedure.
(%base-firmware): New variable.
(operating-system-activation-script): Use 'directory-union', and call
'activate-firmware'.
* doc/guix.texi (operating-system Reference): Document 'firmware'.
* guix/gexp.scm (gexp->derivation): Add #:module-path parameter, and
pass it to 'imported-modules' and 'compiled-modules'.
* doc/guix.texi (G-Expressions): Adjust accordingly.
* gnu/system/vm.scm (system-qemu-image/shared-store-script): Add "$@" at
the end of the script.
(common-qemu-options): Remove trailing newline.
* doc/guix.texi (Invoking guix system): Document it.
* gnu/system/vm.scm (system-qemu-image/shared-store): Add
#:disk-image-size and #:full-boot? parameters and honor them. Pass
'#:copy-inputs? full-boot?', and change #:inputs argument.
* guix/scripts/system.scm (system-derivation-for-action): Pass
#:disk-image-size to 'system-qemu-image/shared-store'.
* doc/guix.texi (Invoking guix system): Mention use of '--image-size' in
conjunction with '--full-boot'.
* gnu/services/xorg.scm (xorg-start-command): Add #:drivers parameter.
Add 'device-section' procedure, and use it in 'xserver.conf'.
* doc/guix.texi (X Window): Document it.
Thanks to Mark H. Weaver <mhw@netris.org> for insightful discussions
and suggestions.
* guix/packages.scm (<package>)[graft]: New field.
(patch-and-repack): Invoke 'package-derivation' with #:graft? #f.
(package-source-derivation): Likewise. Do not use (%guile-for-build)
in call to 'patch-and-repack', and we could end up using a grafted
Guile.
(expand-input): Likewise, also for 'package-cross-derivation' call.
(package->bag): Add #:graft? parameter. Honor it. Use 'strip-append'
instead of 'package-full-name'.
(input-graft, input-cross-graft, bag-grafts, package-grafts): New
procedures.
(package-derivation, package-cross-derivation): Add #:graft? parameter
and honor it.
* gnu/packages/bootstrap.scm (package-with-bootstrap-guile): Add
recursive call on 'graft'.
* guix/build-system/gnu.scm (package-with-explicit-inputs,
package-with-extra-configure-variable, static-package): Likewise.
(gnu-build): Use the ungrafted Guile to avoid full rebuilds.
(gnu-cross-build): Likewise.
* guix/build-system/cmake.scm (cmake-build): Likewise.
* guix/build-system/glib-or-gtk.scm (glib-or-gtk-build): Likewise.
* guix/build-system/perl.scm (perl-build): Likewise.
* guix/build-system/python.scm (python-build): Likewise.
* guix/build-system/ruby.scm (ruby-build): Likewise.
* guix/build-system/trivial.scm (guile-for-build): Likewise.
* tests/packages.scm ("package-derivation, direct graft",
"package-cross-derivation, direct graft", "package-grafts,
indirect grafts", "package-grafts, indirect grafts, cross",
"package-grafts, indirect grafts, propagated inputs",
"package-derivation, indirect grafts"): New tests.
("bag->derivation", "bag->derivation, cross-compilation"): Wrap in
'parameterize'.
* doc/guix.texi (Security Updates): New node.
(Invoking guix build): Document --no-graft.
* guix/scripts/package.scm (switch-to-generation): New procedure.
(switch-to-previous-generation): Use it.
(guix-package): Adjust for '--switch-generation' option.
* tests/guix-package.sh: Test it.
* doc/guix.texi (Invoking guix package): Document it.
* doc/guix.texi (Using the Configuration System): Add xref to
"operating-system Reference".
(operating-system Reference): New section.
(Networking Services): Add xref to it.
* guix/build-system.scm (<build-system>)[build, cross-build]: Remove.
[lower]: New field.
(<bag>): New record type.
(make-bag): New procedure.
* guix/packages.scm (bag-transitive-inputs, bag-transitive-build-inputs,
bag-transitive-host-inputs, bag-transitive-target-inputs,
package->bag): New procedures.
(package-derivation): Use it; use the bag, apply its build procedure,
etc.
(package-cross-derivation): Likewise.
* gnu/packages/bootstrap.scm (raw-build, make-raw-bag): New procedure.
(%bootstrap-guile): Use them.
* guix/build-system/trivial.scm (lower): New procedure.
(trivial-build, trivial-cross-build): Remove 'source' parameter. Pass
INPUTS as is.
(trivial-build-system): Adjust accordingly.
* guix/build-system/gnu.scm (%store, inputs-search-paths,
standard-search-paths, expand-inputs, standard-inputs): Remove.
(gnu-lower): New procedure.
(gnu-build): Remove 'source' and #:implicit-inputs? parameters.
Remove 'implicit-inputs' and 'implicit-search-paths' variables. Get
the source from INPUT-DRVS.
(gnu-cross-build): Likewise.
(standard-cross-packages): Remove call to 'standard-packages'.
(standard-cross-inputs, standard-cross-search-paths): Remove.
(gnu-build-system): Remove 'build' and 'cross-build'; add 'lower'.
* guix/build-system/cmake.scm (lower): New procedure.
(cmake-build): Remove 'source' and #:cmake parameters. Use INPUTS and
SEARCH-PATHS as is. Get the source from INPUTS.
* guix/build-system/perl.scm: Likewise.
* guix/build-system/python.scm: Likewise.
* guix/build-system/ruby.scm: Likewise.
* gnu/packages/cross-base.scm (cross-gcc): Change "cross-linux-headers"
to "linux-headers".
(cross-libc)[xlinux-headers]: Pass #:implicit-cross-inputs? #f.
Likewise. In 'propagated-inputs', change "cross-linux-headers" to
"linux-headers".
* guix/git-download.scm (git-fetch): Use 'standard-packages' instead of
'standard-inputs'.
* tests/builders.scm ("gnu-build-system"): Remove use of
'build-system-builder'.
("gnu-build"): Remove 'source' and #:implicit-inputs? arguments to
'gnu-build'.
* tests/packages.scm ("search paths"): Adjust to new build system API.
("package-cross-derivation, no cross builder"): Likewise.
* doc/guix.texi (Build Systems): Add paragraph on bags.
* guix/build-system/cmake.scm (cmake-build): Add #:build-type. Pass it
in BUILDER.
* guix/build/cmake-build-system.scm (configure): Add #:build-type
parameter and honor it.
* doc/guix.texi (Build Systems): Document #:configure-flags and
#:build-type for CMake.
* guix/ui.scm (size->number): Add a bunch of large units. Recognize
one-letter unit names. Change "KB" to "kB".
* tests/ui.scm ("size->number, 1T"): New test.
* doc/guix.texi (Invoking guix gc): Add cross-reference to "Block size"
in the Coreutils manual.
(Invoking guix system): Likewise.
This fixes regressions introduced in de1c158 ("system: Add support for
boot-time mapped devices.").
* doc/guix.texi (Initial RAM Disk): Adjust example with custom use of
'base-initrd'. Document #:mapped-devices parameter of 'base-initrd'.
* gnu/system/vm.scm (system-disk-image, system-qemu-image,
virtualized-operating-system): Adjust call to 'base-initrd' to new
signature.
* gnu/system/linux-initrd.scm (expression->initrd): Remove #:linux and
#:linux-modules parameters. Remove call to
'float-linux-module-directory'.
(base-initrd): Add call to 'float-linux-module-directory'. Use it in
#:linux-modules argument in the gexp. Remove #:linux and
#:linux-modules arguments to 'expression->initrd'.
* gnu/build/linux-initrd.scm (build-initrd): Remove
#:linux-module-directory parameter. Don't create 'modules'
sub-directory.
* gnu/build/linux-boot.scm (boot-system): Mentin that LINUX-MODULES is a
list of absolute file names. Don't prepend "/modules/" to
LINUX-MODULES.
* doc/guix.texi (Initial RAM Disk): Adjust accordingly.
* guix/gexp.scm (lower-reference-graphs): New procedure.
(gexp->derivation)[graphs-file-names]: New procedure.
Use 'lower-reference-graphs', and augment #:inputs argument as a
function of #:references-graphs.
* doc/guix.texi (G-Expressions): Adjust 'gexp->derivation' documentation
accordingly.
* tests/gexp.scm ("gexp->derivation, store copy"): Remove reference to
TWO in BUILD-DRV. Use TWO directly in #:references-graphs argument.
("gexp->derivation #:references-graphs"): New test.
* gnu/system/vm.scm (qemu-image): Remove variable 'graph'; use INPUTS as
the #:references-graphs argument to
'expression->derivation-in-linux-vm'.
* configure.ac (emacsuidir): New variable.
(AC_CONFIG_FILES): Add 'emacs/guix-init.el', 'emacs/guix-helper.scm'.
* Makefile.am: Include 'emacs.am'.
* emacs.am: New file.
* doc/emacs.texi: New file.
* doc/guix.texi: Include 'emacs.texi'.
* emacs/guix-backend.el: New file.
* emacs/guix-base.el: New file.
* emacs/guix-helper.scm.in: New file.
* emacs/guix-history.el: New file.
* emacs/guix-info.el: New file.
* emacs/guix-init.el.in: New file.
* emacs/guix-list.el: New file.
* emacs/guix-main.scm: New file.
* emacs/guix-utils.el: New file.
* emacs/guix.el: New file.
* guix/gexp.scm (<gexp>)[natives]: New field.
(write-gexp): Use both 'gexp-references' and
'gexp-native-references'.
(gexp->derivation): Use both 'gexp-inputs' and 'gexp-native-inputs',
and append them.
(gexp-inputs): Add 'references' parameter and honor it.
(gexp-native-inputs): New procedure.
(gexp->sexp)[reference->sexp]: Add 'native?' parameter and honor it.
Use it, and use 'gexp-native-references'.
(gexp)[collect-native-escapes]: New procedure.
[escape->ref]: Handle 'ungexp-native' and 'ungexp-native-splicing'.
[substitute-ungexp, substitute-ungexp-splicing]: New procedures.
[substitute-references]: Use them, and handle 'ungexp-native' and
'ungexp-native-splicing'.
Adjust generated 'make-gexp' call to provide both normal references
and native references.
[read-ungexp]: Support 'ungexp-native' and
'ungexp-native-splicing'.
Add reader extension for #+.
* tests/gexp.scm (gexp-native-inputs): New procedure.
(gexp->sexp*): Add 'target' parameter.
("ungexp + ungexp-native",
"input list + ungexp-native",
"input list splicing + ungexp-native-splicing",
"gexp->derivation, ungexp-native",
"gexp->derivation, ungexp + ungexp-native"): New tests.
("sugar"): Add tests for #+ and #+@.
* doc/guix.texi (G-Expressions): Document 'ungexp-native' et al.
* guix/gexp.scm (lower-inputs): Add #:system and #:target. Use
'package->cross-derivation' when TARGET is true. Honor SYSTEM.
(gexp->derivation): Add #:target argument. Pass SYSTEM and TARGET to
'lower-inputs' and 'gexp->sexp'.
(gexp->sexp): Add #:system and #:target. Pass them in recursive call
and to 'package-file'.
* tests/gexp.scm (gexp->sexp*): Add 'system' and 'target' parameters.
("gexp->derivation, cross-compilation"): New test.
* guix/monads.scm (package-file): Add #:target keyword parameter and
honor it.
(package->cross-derivation): New procedure.
* tests/monads.scm ("package-file + package->cross-derivation"): New test.
* doc/guix.texi (The Store Monad): Update 'package-file' documentation.
Add 'package->cross-derivation'.
Suggested by Mark H. Weaver.
* gnu/system/shadow.scm (<user-group>)[system?]: New field.
(%base-groups): Introduce 'system-group' macro, and use it.
* gnu/system.scm (user-group->gexp): Pass the 'system?' field.
* guix/build/activation.scm (add-group): Add #:system? and honor it.
(activate-users+groups): Handle the 'system?' field.
* gnu/system/file-systems.scm (%tty-gid): Choose an ID below 1000.
* doc/guix.texi (User Accounts): Document the 'system?' field.
* guix/build/linux-initrd.scm (MS_NOSUID, MS_NODEV, MS_NOEXEC): New
variables.
(mount-flags->bit-mask): New procedure.
(mount-file-system)[flags->bit-mask]: Remove.
Use 'mount-flags->bit-mask' instead.
In /etc/mtab, use the empty string when OPTIONS is false.
* gnu/services/base.scm (file-system-service): Add #:flags parameter and
honor it.
* gnu/system.scm (other-file-system-services): Pass FLAGS to
'file-system-service'.
* gnu/services/networking.scm (tor-service): New procedure.
* doc/guix.texi (Networking Services): Document it.
* build-aux/hydra/demo-os.scm: Use it. Add TOR and TORSOCKS to
'packages'.
* doc/guix.texi (Using the Configuration System): Remove details about
'%base-services', and link to "Services".
(Services): Add introductory text.
(Base Services, Networking Services, X Window): New nodes.
* doc/guix.texi (Using the Configuration System): Change 'guix system
boot' to 'guix system reconfigure'.
(File Systems, User Accounts, Services): New nodes.
* doc/guix.texi (Using the Configuration System): Make the intro more
user-oriented. Change example to return an operating system. Fix
typos. Mention mandatory/optional fields.
* guix/ui.scm (%guix-user-module): New variable.
(read/eval): Pass it as the second argument to 'eval'.
* guix/scripts/build.scm (options/resolve-packages): Add case for
'gexp?'.
* tests/guix-build.sh: Add tests.
* doc/guix.texi (Invoking guix build): Document '-e gexp'.
guxi build: Allow gexps to be passed to '-e'.
* guix/ui.scm (%guix-user-module): New variable.
(read/eval): Pass it as the second argument to 'eval'.
* guix/scripts/build.scm (options/resolve-packages): Add case for
'gexp?'.
* tests/guix-build.sh: Add tests.
* doc/guix.texi (Invoking guix build): Document '-e gexp'.
* guix/derivations.scm (build-expression->derivation): Add
#:allowed-references and pass it to 'derivation.
* doc/guix.texi (Derivations): Adjust accordingly.
* gnu/system.scm (<operating-system>)[packages]: Change default value to
%BASE-PACKAGES.
(%base-packages): New variable.
* gnu/system/install.scm (installation-os): Use it when defining the
'packages' field.
* doc/guix.texi (Using the Configuration System): Use %BASE-PACKAGES in
example. Remove now unneeded module imports. Explain this.
* gnu.scm: New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add it.
* build-aux/hydra/demo-os.scm: Use (gnu) and strip import list
accordingly.
* doc/guix.texi (Using the Configuration System): Adjust example
accordingly.
* doc/guix.texi (Installing Debugging Files): Add @cindex. Remove
unneeded '-i' in example. Mention source code an 'directory'. Link
to "Build Systems" instead of "Defining Packages".
* doc/guix.texi (G-Expressions): Show coreutils version number in store
file name. Add xref to "Derivations", in documentation of
'gexp->derivation'. Fix typo.
* gnu/system.scm (<operating-system>)[initrd]: Default to
'qemu-initrd'.
(<file-system>): New record type.
(operating-system-root-file-system): New procedure.
(operating-system-derivation): Take the device name for GRUB from
'operating-system-root-file-system'. Pass the
'operating-system-initrd' procedure the list of boot file systems.
* gnu/system/linux-initrd.scm (file-system->spec): New procedure.
(qemu-initrd): Add 'file-systems' parameter, and remove #:mounts
parameter.
[file-system-type-predicate]: New procedure.
[linux-modules]: Use it.
Adjust #:mounts argument in 'boot-system' call.
(gnu-system-initrd): Remove.
* gnu/system/vm.scm (%linux-vm-file-systems): New variable.
(expression->derivation-in-linux-vm): Adjust call to 'qemu-initrd'.
(virtualized-operating-system): New procedure.
(system-qemu-image/shared-store-script)[initrd]: Remove. Use
'virtualized-operating-system'. Get the 'initrd' file from OS-DRV.
* guix/build/linux-initrd.scm (mount-qemu-smb-share, mount-qemu-9p):
Remove.
(MS_RDONLY, MS_BIND): New global variables.
(bind-mount): Remove local 'MS_BIND' definition.
(mount-root-file-system): New procedure, with code formerly in
'boot-system'.
(mount-file-system): New procedure.
(boot-system): Add #:root-fs-type parameter. Remove 'MS_RDONLY' local
variable. Use 'mount-root-file-system' and 'mount-file-system'.
* doc/guix.texi (Using the Configuration System): Add 'file-system'
declaration.
* guix/monads.scm: Unexport 'lower-inputs' and 'derivation-expression'.
(text-file*): Add comment about the switch to 'gexp->derivation'.
(lower-inputs): Add comment about its doom.
(derivation-expression): Likewise.
* guix/gexp.scm (lower-inputs*): Rename to...
(lower-inputs): ... this. Update callers.
* tests/monads.scm (derivation-expression): New procedure.
* doc/guix.texi (The Store Monad): Use 'gexp->derivation' instead of
'derivation-expression'. Remove documentation of
'derivation-expression'.
* guix/ui.scm (read/eval): Use THE-ROOT-MODULE so that macros are
properly expanded.
* tests/guix-build.sh: Use 'gexp->derivation' instead of
'derivation-expression'.monads: Hide 'derivation-expression' and 'lower-inputs'.
* gnu/services.scm (<service>)[inputs]: Remove.
* gnu/system.scm (links): Remove.
(etc-directory): Add PASSWD and SHADOW to #:inputs.
(operating-system-boot-script): Pass ETC to 'dmd-configuration-file'.
(operating-system-derivation): Remove EXTRAS from the union.
* gnu/system/linux.scm (pam-service->configuration): Rewrite in terms of
'gexp->derivation'. Compute the contents on the build side. Expect
'arguments' to contain a list of gexps.
(pam-services->directory): Rewrite in terms of 'gexp->derivation'.
(unix-pam-service): Change 'arguments' to a list of one gexp.
* gnu/system/shadow.scm (<user-account>)[inputs]: Remove.
[shell]: Change default value to a gexp.
(passwd-file): Rewrite in terms of 'gexp->derivation'. Compute
contents on the build side.
* gnu/services/base.scm (host-name-service, mingetty-service,
nscd-service, syslog-service, guix-service): Change 'start' and 'stop'
to gexps; remove 'inputs' field.
(guix-build-accounts): Change 'shell' field to a gexp.
* gnu/services/networking.scm (static-networking-service): Change
'start' and 'stop' to gexps; remove 'inputs' field.
* gnu/services/xorg.scm (slim-service): Likewise.
* gnu/services/dmd.scm (dmd-configuration-file): Expect ETC to be a
derivation. Change 'config' to a gexp. Use 'gexp->file' instead of
'text-file'.
* doc/guix.texi (Defining Services): Update nscd example with gexps, and
without 'inputs'. Add xref to "G-Expressions".
* guix/gexp.scm: New file.
* tests/gexp.scm: New file.
* Makefile.am (MODULES): Add guix/gexp.scm.
(SCM_TESTS): Add tests/gexp.scm.
* doc/guix.texi (Derivations): Add #:inputs in 'derivation' example.
Mark 'build-expression->derivation' as deprecated, refer to
"G-Expressions". Remove paragraph about code strata.
(G-Expressions): New node.
* doc/guix.texi (Defining Packages): Add 'arguments' field in the
example; update 'synopsis' and 'description'. Remove most of the
description of 'build-system', and instead reference to the "Build
Systems" node. Briefly describe 'arguments' field, and remove more
elaborate description. Add cross-reference to "Packaging Guidelines".
(Build Systems): New node.
(Packaging Guidelines): Mention '--log-file'.
* doc/guix.texi (Invoking guix-daemon): Add cross-reference to
"Substitutes".
(Features): Remove footnote about unauthenticated substitutes. Link
to "Substitutes".
(Substitutes): New node.
(Invoking guix build): Link to "Substitutes".
(Packaging Guidelines): Likewise.
* HACKING (Submitting Patches): Mention 'git send-mail'.
* doc/guix.texi (Packaging Guidelines): More details on how to prepare a
package module.
(Contributing): Add reference to #guix channel on Freenode.
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* doc/guix.texi (Invoking guix package): Explain where packages are
searched for and link to "Package Modules".
(Defining Packages) <example>: Use 'define-module' clause instead of
'use-modules'. Explain why and link to "Package Modules".
(Invoking guix build): Explain where packages aer searched for and
link to "Package Modules".
(Package Modules): Explain that (gnu packages ...) is scanned.
* doc/guix.texi (Invoking guix package): Remove documentation for
--dry-run, --fallback, --no-substitutes, and --max-silent-time. Add a
cross-ref to "Invoking guix build".
(Invoking guix archive): Add "common build options" as the cross-ref
topic for "Invoking guix build".
(Invoking guix build): Move common build options separately. Add a
paragraph to explain.
* guix/derivations.scm (<derivation-output>): Add 'recursive?' field.
Adjust 'make-derivation-output' callers.
(%read-derivation) <fixed-output>: When HASH-ALGO starts with 'r:',
set the 'recursive?' field and drop 'r:' from the hash algo name.
(write-derivation)[write-output]: Write the algo as 'r:HASH-ALGO' when
the RECURSIVE? field is set.
(derivation-hash) <fixed-output>: Prepend "r:" when RECURSIVE? is set.
(fixed-output-path): New procedure.
(derivation): Add #:recursive? parameter. Use 'fixed-output-path' to
compute the output file name of a fixed output derivation.
(build-expression->derivation): Add #:recursive? parameter. Pass it
to 'derivation'.
* tests/derivations.scm ("fixed-output derivation, recursive",
"build-expression->derivation produces recursive fixed-output",
"build-expression->derivation uses recursive fixed-output"): New
tests.
* doc/guix.texi (Derivations): Document #:recursive? for 'derivation'.
Add #:recursive? for 'build-expression->derivation'.
* guix/scripts/hash.scm (show-help): Add --recursive.
(%options): Likewise.
(guix-hash)[file-hash]: New procedure. Honor --recursive.
Use it.
* guix/nar.scm (write-file): Add missing field to the &nar-error
condition raised upon unsupported file type; change its message to be
more descriptive.
* tests/guix-hash.sh: Add tests with -r.
* doc/guix.texi (Invoking guix hash): Document --recursive.
* gnu/services/base.scm (%base-services): New variable.
* gnu/system.scm (<operating-system>)[services]: Change the default
value to %BASE-SERVICES.
* doc/guix.texi (Using the Configuration System): Change
'%standard-services' to '%base-services'.
* guix/scripts/system.scm: New file.
* Makefile.am (MODULES): Add it.
* po/POTFILES.in: Likewise.
* doc/guix.texi (Using the Configuration System): Link to "Invoking guix
system".
(Invoking guix system): New node.
* guix/monads.scm (text-file*): New procedure.
* tests/monads.scm ("text-file*"): New test.
* doc/guix.texi (The Store Monad): Change example since the previous one
would erroneously fail to retain a reference to Coreutils. Document
'text-file*'.
* guix/derivations.scm (derivation): Add #:local-build? parameter and
honor it.
(build-expression->derivation): Likewise.
* doc/guix.texi (Derivations): Update documentation of these
procedures.
* doc/guix.texi (Daemon Offload Setup): Start with "When desired". Say
more on what can go in 'machines.scm', and mention Guile-Avahi.
(Invoking guix-daemon): Document '--no-build-hook'.
(Invoking guix build): Add xref to "Daemon Offload Setup".
* nix/nix-daemon/guix-daemon.cc (GUIX_OPT_NO_BUILD_HOOK): New macro.
(options): Add '--no-build-hook'.
(parse_opt): Handle it.
(main)[HAVE_DAEMON_OFFLOAD_HOOK]: Set 'useBuildHook' by default.
Set $NIX_BUILD_HOOK to our offload hook unless otherwise specified.
[!HAVE_DAEMON_OFFLOAD_HOOK]: Clear 'useBuildHook'.
* pre-inst-env.in: Set and export NIX_BUILD_HOOK.
* nix/scripts/offload.in, guix/scripts/offload.scm: New files.
* guix/ui.scm (show-guix-help)[internal?]: Add "offload".
* config-daemon.ac: Call 'GUIX_CHECK_UNBUFFERED_CBIP'.
Instantiate 'nix/scripts/offload'. Set 'BUILD_DAEMON_OFFLOAD'
conditional, and optionally define 'HAVE_DEAMON_OFFLOAD_HOOK' cpp
macro.
* daemon.am (nodist_pkglibexec_SCRIPTS)[BUILD_DAEMON_OFFLOAD]: Add it.
* Makefile.am (MODULES)[BUILD_DAEMON_OFFLOAD]: Add
'guix/scripts/offload.scm'.
(EXTRA_DIST)[!BUILD_DAEMON_OFFLOAD]: Likewise.
* m4/guix.m4 (GUIX_CHECK_UNBUFFERED_CBIP): New macro.
* doc/guix.texi (Setting Up the Daemon): Move most of the body to...
(Build Environment Setup): ... this. New subsection.
(Daemon Offload Setup): New subsection.
* nix-upstream: Update sub-module.
* daemon.am (libutil_a_SOURCES): Add affinity.cc.
(libutil_headers): Add affinity.hh.
(libexec_PROGRAMS, nix_setuid_helper_SOURCES,
nix_setuid_helper_CPPFLAGS, nix_setuid_helper_LDADD): Remove.
* doc/guix.texi (Setting Up the Daemon): Remove paragraph about
'nix-setuid-helper'.
* guix/scripts/substitute-binary.scm (guix-substitute-binary): Exit 0 when
%CACHE-URL has an HTTP scheme and looking up its host fails.
Always print a newline to stdout when starting.