Fixes <http://bugs.gnu.org/22176>.
Reported by Florian Paul Schmidt <mista.tapas@gmx.net>.
* gnu/system/file-systems.scm (<file-system>)[mount?]: New field.
(file-system->spec): Adjust accordingly.
* gnu/services/base.scm (file-system-dmd-service): Return the empty list
when FILE-SYSTEM has 'mount?' set to false.
(user-processes-service): Select the subset of FILE-SYSTEMS that matches
'file-system-mount?'.
* doc/guix.texi (File Systems): Document it.
Rather than using $<host-TMPDIR>/nix-build-<drvname>-<number>, the
temporary directory is now always /tmp/nix-build-<drvname>-0. This
improves bitwise-exact reproducibility for builds that store $TMPDIR
in their build output. (Of course, those should still be fixed...)
* nix/libstore/build.cc (DerivationGoal)[tmpDirInSandbox]: New field.
(DerivationGoal::startBuilder): Initialize 'useChroot' earlier. Compute
'tmpDirInSandbox', and use it when populating 'dirsInChroot'.
* doc/guix.texi (Build Environment Setup): Document it.
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* gnu/services/networking.scm (<tor-configuration>, <hidden-service>):
New record types.
(tor-configuration->torrc): New procedure.
(tor-dmd-service): Use it.
(tor-hidden-service-activation): New procedure.
(tor-service-type)[extensions]: Extend ACTIVATION-SERVICE-TYPE.
[compose, extend]: New fields.
(tor-service): Use 'tor-configuration'.
(tor-hidden-service-type): New variable.
(tor-hidden-service): New procedure.
* gnu/services/dmd.scm (%default-imported-modules, %default-modules):
New variables.
* gnu/services/dmd.scm (<dmd-service>)[modules, imported-modules]: New
field.
* gnu/services/dmd.scm (dmd-service-file-name, dmd-service-file): New
procedures.
(dmd-configuration-file)[modules]: Compute based on the
'imported-modules' field of SERVICES.
(dmd-configuration-file): Remove 'use-modules' form. Use
'dmd-service-file', and call 'primitive-load' on each file.
* doc/guix.texi (dmd Services): Document the new fields.
Partly fixes <http://bugs.gnu.org/20255>.
* guix/scripts/package.scm (search-path-environment-variables): Change
'profile' to 'profiles'; expect it to be a list.
(display-search-paths): Likewise.
(%default-options): Remove 'profile' entry.
(%options) <--profile>: Keep previous values associated with 'profile'
in RESULT.
(guix-package)[process-actions, process-query]: Handle the possible
lack of 'profile' pair in OPTS.
* gnu/services/base.scm (<gpm-configuration>): New record type.
(gpm-dmd-service): New procedure.
(gpm-service-type): New variable.
(gpm-service): New procedure.
* doc/guix.texi (Base Services): Document it.
Reported by 宋文武 <iyzsong@openmailbox.org>
at <https://lists.gnu.org/archive/html/guix-devel/2015-11/msg00096.html>.
* doc/guix.texi (System Installation): Comment out encrypted root
partition commands.
* gnu/system/examples/desktop.tmpl (mapped-devices): Remove.
(file-systems): Refer to the root by label.
* NEWS: Adjust.
* gnu/services/base.scm (<guix-publish-configuration>): New record
type.
(guix-publish-dmd-service): New procedure.
(%guix-publish-accounts, guix-publish-service-type): New variables.
(guix-publish-service): New procedure.
* doc/guix.texi (Invoking guix publish): Add xref to
'guix-publish-service' anchor.
(Base Services): Document 'guix-publish-service'.
* gnu/services.scm (system-derivation): New procedure.
(system-service-type): New variable.
(boot-script-entry): New procedure.
(boot-service-type): Extend SYSTEM-SERVICE-TYPE.
(etc-entry): New procedure.
(etc-service-type): Extend SYSTEM-SERVICE-TYPE.
(fold-services): Change default #:target-type to SYSTEM-SERVICE-TYPE.
* gnu/system.scm (operating-system-directory-base-entries): New procedure.
(essential-services): Use it. Add an instance of
SYSTEM-SERVICE-TYPE.
(operating-system-boot-script): Pass #:target-type to 'fold-services'.
(operating-system-derivation): Rewrite in terms of 'fold-services'.
* gnu/system/linux-container.scm (system-container): Remove.
(container-script): Use 'operating-system-derivation'.
* guix/scripts/system.scm (export-extension-graph): Replace
BOOT-SERVICE-TYPE by SYSTEM-SERVICE-TYPE.
* doc/images/service-graph.dot: Add 'system' node and edges.
* doc/guix.texi (Service Composition): Mention SYSTEM-SERVICE-TYPE.
(Service Reference): Document it. Update 'fold-services'
documentation.
* emacs/guix-build-log.el (guix-build-log-minor-mode-activate): New variable.
(guix-build-log-minor-mode-activate-maybe): New function.
* emacs/guix-init.el: Add it to 'shell-mode-hook'.
* doc/emacs.texi (Emacs Build Log): Mention it.
* gnu/system/examples/desktop.tmpl: Add 'mapped-devices' field.
Use it in 'file-systems'.
* doc/guix.texi (System Installation): Suggest encrypted partitions.
Give an example of a command sequence.
* gnu/services/desktop.scm (<udisks-configuration>): New record type.
(udisks-service-type): New variable.
(udisks-service): New procedure.
(%desktop-services): Use it.
* doc/guix.texi (Desktop Services): Document it.
* gnu/packages/polkit.scm (polkit)[source]: Adjust snippet so that rules
and actions are looked for under /etc/polkit-1.
* gnu/services/desktop.scm (<polkit-configuration>): New record type.
(polkit-directory, polkit-etc-files, polkit-setuid-programs): New
procedures.
(polkit-service-type)[compose, extend]: New fields.
(polkit-service): Refine docstring.
(colord-service-type): Extend POLKIT-SERVICE-TYPE.
(elogind-configuration-file): Extend POLKIT-SERVICE-TYPE.
* doc/guix.texi (Desktop Services): Update 'polkit-service'
documentation.
* emacs/guix-build-log.el (guix-build-log-mode-map): Move keys to ...
(guix-build-log-common-map): ...here. New variable.
(guix-build-log-minor-mode-map): New variable.
(guix-build-log-minor-mode): Use it.
* doc/emacs.texi (Emacs Build Log): Document it.
* gnu/services/networking.scm (tor-dmd-service): Take a 'config'
parameter and honor it.
(tor-service): Take a 'config-file' parameter. Pass it in the
service's value.
* doc/guix.texi (Networking Services): Adjust accordingly.
* gnu/system/locale.scm (localedef-command)[maybe-version-directory]:
New procedure.
Use it.
(locale-directory): Rename to...
(single-locale-directory): ... this. Check the version of LIBC to
determine whether to create a "X.Y" sub-directory or to make it a
symlink to ".". Add the version number in the derivation name.
(locale-directory): New procedure.
(%default-locale-libcs): New variable.
* gnu/system.scm (<operating-system>)[locale-libcs]: New field.
(operating-system-locale-directory): Pass it to 'locale-directory'.
* doc/guix.texi (operating-system Reference): Document 'locale-libcs'.
(Locales)[Locale Data Compatibility Considerations]: New section.
This patch changes the --ad-hoc flag to be positional. That is, the
packages that appear before --ad-hoc are interpreted as packages whose
inputs should be in the environment; the packages that appear after are
interpreted as packages to be directly added to the environment.
* guix/scripts/environment.scm (tag-package-arg, compact): New
procedures.
(%options): Tweak the handlers for --load and --expression options.
(options/resolve-packages): Preserve package mode tag.
(parse-args): Tweak argument handler to use package tagging procedure.
(guix-environment): Apply ad-hoc behavior on a per package basis.
* tests/guix-environment.sh: Add test.
* doc/guix.texi ("invoking guix environment"): Document new behavior of
--ad-hoc.
* gnu/services.scm (%modify-service, modify-services): New macros.
* gnu/services/base.scm (mingetty-service-type, guix-service-type):
Export.
* emacs/guix-devel.el (guix-devel-keywords): Add 'modify-services'.
Ditto in 'guix-devel-scheme-indent' call.
* doc/guix.texi (Using the Configuration System): Give an example of
'modify-services'.
(Service Reference): Document it.
* gnu/services/base.scm (<guix-configuration>)[substitute-urls]: New
field.
(guix-dmd-service): Honor it.
* doc/guix.texi (Base Services): Document it.
* guix/scripts/system.scm (specification->file-system-mapping): Move from
here...
* guix/ui.scm (specification->file-system-mapping): ... to here.
* guix/scripts/enviroment.scm (show-help): Show help for new options.
(%options): Add --container --network, --expose, and --share options.
(%network-configuration-files): New variable.
(launch-environment, launch-environment/container, requisites*,
inputs->requisites): New procedures.
(guix-environment): Spawn new process in a container when requested.
* doc/guix.texi (Invoking guix environment): Document it.
* tests/guix-environment-container.sh: New file.
* Makefile.am (SH_TESTS): Add it.
* guix/scripts/refresh.scm (%options, show-help): Add --type.
(lookup-updater): New procedure.
(update-package): Add 'updaters' parameter and honor it.
(guix-refresh)[options->updaters]: New procedure.
Use it, and honor --type.
* guix/scripts/archive.scm (show-help, %options): Add --extract.
(guix-archive): Honor it.
* tests/guix-archive.sh: Test it.
* doc/guix.texi (Invoking guix archive): Document it.
* gnu/services/avahi.scm (avahi-service): Mention the extension of
nscd.
* doc/guix.texi (Networking Services): Update accordingly.
(Name Service Switch): Remove '%my-base-services' example and
explanation.
Suggested by Ludovic Courtès <ludo@gnu.org>.
* guix/scripts.scm (build-package-source): New procedure.
* emacs/guix-devel.el (guix-devel-build-package-source): New command.
(guix-devel-keys-map): Add key binding for it.
* doc/emacs.texi (Emacs Development): Document it.
This patch rewrites GuixSD services to make them extensible.
* gnu-system.am (GNU_SYSTEM_MODULES): Add gnu/services/dbus.scm.
* gnu/services.scm (<service>): Replace with new record type.
(<service-extension>, <service-type>): New record types.
(write-service-type, compute-boot-script, second-argument): New
procedures.
(%boot-service, boot-service-type): New variables.
(file-union, directory-union, modprobe-wrapper,
activation-service->script, activation-script,
gexps->activation-gexp): New procedures.
(activation-service-type, %activation-service): New variables.
(etc-directory, files->etc-directory, etc-service): New procedures.
(etc-service-type, setuid-program-service, firmware-service-type): New
variables.
(firmware->activation-gexp): New procedure.
(&service-error, &missing-target-service-error,
&ambiguous-target-service-error): New condition types.
(service-back-edges, fold-services): New procedures.
* gnu/services/avahi.scm (<avahi-configuration>): New record type.
(configuration-file): Replace keyword parameters with a single
'config' parameter.
(%avahi-accounts, %avahi-activation, avahi-service-type): New
variables.
(avahi-dmd-service): New procedure.
(avahi-service): Rewrite using 'service' and 'avahi-configuration'.
* gnu/services/base.scm (%root-file-system-dmd-service,
root-file-system-service-type): New variables.
(root-file-system-service): Use them.
(file-system->dmd-service-name): New procedure.
(file-system-service-type): New variable.
(file-system-service): Use it. Replace keyword parameters with a
single 'file-system' object.
(user-unmount-service-type): New variable.
(user-unmount-service): Use it.
(user-processes-service-type): New variable.
(user-processes-service): Use it.
(host-name-service-type): New variable.
(host-name-service): Use it.
(console-keymap-service-type): New variable.
(console-keymap-service): Use it.
(console-font-service-type): New variable.
(console-font-service): Use it.
(mingetty-pam-service, mingetty-dmd-service): New procedures.
(mingetty-service-type): New variable.
(mingetty-service): Use it.
(nscd-dmd-service): New procedure.
(nscd-activation, nscd-service-type): New variables.
(nscd-service): Use the latter.
(syslog-service-type): New variable.
(syslog-service): Use it.
(<guix-configuration>): New record type.
(%default-guix-configuration): New variable.
(guix-dmd-service, guix-accounts, guix-activation): New procedures.
(guix-service-type): New variable.
(guix-service): Replace list of keyword parameters with a single
'config' parameter. Rewrite using 'service'.
(<udev-configuration>): New record type.
(udev-dmd-service): New procedure.
(udev-service-type): New variable.
(udev-service): Use it.
(device-mapping-service-type): New variable.
(device-mapping-service): Use it.
(swap-service-type): New variable.
(swap-service): Use it.
* gnu/services/databases.scm (<postgresql-configuration>): New record
type.
(%postgresql-accounts, postgresql-activation): New variables.
(postgresql-dmd-service): New procedure.
(postgresql-service): Rewrite using 'service' and
'postgresql-configuration'.
* gnu/services/dbus.scm: New file.
* gnu/services/desktop.scm (dbus-configuration-directory, dbus-service):
Remove.
(wrapped-dbus-service): New procedure.
(<upower-configuration>): New record type.
(upower-configuration-file): Replace keyword parameters with single
<upower-configuration> parameter.
(%upower-accounts, %upower-activation): New variables.
(upower-dbus-service, upower-dmd-service): New procedures.
(upower-service-type): New variable.
(upower-service): Rewrite using 'service' and 'upower-configuration'.
(%colord-activation, %colord-accounts): New variables.
(colord-dmd-service): New procedure.
(colord-service-type): New variable.
(colord-service): Rewrite using 'service'.
(<geoclue-configuration>): New record type.
(geoclue-configuration-file): Replace keyword parameters with a single
'config' parameter.
(geoclue-dbus-service, geoclue-dmd-service): New procedures.
(%geoclue-accounts, geoclue-service-type): New variables.
(geoclue-service): Rewrite using 'service' and
'geoclue-configuration'.
(%polkit-accounts, %polkit-pam-services, polkit-service-type): New
variables.
(polkit-dmd-service): New procedure.
(polkit-service): Rewrite using 'service'.
(<elogind-configuration>)[elogind]: New field.
(elogind-dmd-service): New procedure.
(elogind-service-type): New variable.
(elogind-service): Rewrite using 'service'.
(%desktop-services): Remove argument to 'dbus-service'. Remove 'map'
over %BASE-SERVICES.
* gnu/services/dmd.scm (dmd-boot-gexp): New procedure.
(dmd-root-service-type, %dmd-root-service): New variables.
(dmd-service-type): New macro.
(<dmd-service>): New record type.
* gnu/services/lirc.scm (<lirc-configuration>): New record type.
(%lirc-activation): New variable.
(lirc-dmd-service): New procedure.
(lirc-service-type): New variable.
(lirc-service): Rewrite using 'service' and 'lirc-configuration'.
* gnu/services/networking.scm (<static-networking>): New record type.
(static-networking-service-type): New variable.
(static-networking-service): Rewrite using 'service' and
'static-networking'.
(dhcp-client-service-type): New variable.
(dhcp-client-service): Rewrite using 'service'.
(<ntp-configuration>): New record type.
(ntp-dmd-service): New procedure.
(ntp-service-type): New variable.
(ntp-service): New procedure.
(%tor-accounts, tor-service-type): New variable.
(tor-dmd-service): New procedure.
(tor-service): Rewrite using 'service'.
(<bitlbee-configuration>): New record type.
(bitlbee-dmd-service): New procedure.
(%bitlbee-accounts, %bitlbee-activation, bitlbee-service-type): New
variables.
(bitlbee-service): Rewrite using 'service'.
(%wicd-activation): New variable.
(wicd-dmd-service): New procedure.
(wicd-service-type): New variable.
(wicd-service): Rewrite using 'service'.
* gnu/services/ssh.scm (<lsh-configuration>): New record type.
(activation): Rename to...
(lsh-initialization): ... this.
(lsh-activation, lsh-dmd-service, lsh-pam-services): New procedures.
(lsh-service-type): New variable.
(lsh-service): Rewrite using 'service' and 'lsh-configuration'.
* gnu/services/web.scm (<nginx-configuration>): New record type.
(%nginx-accounts): New variable.
(nginx-activation, nginx-dmd-service): New procedures.
(nginx-service-type): New variable.
(nginx-service): Rewrite using 'service' and 'nginx-configuration'.
* gnu/services/xorg.scm (<slim-configuration>): New record type.
(slim-pam-service, slim-dmd-service): New procedures.
(slim-service-type): New variable.
(slim-service): Rewrite using 'service' and 'slim-configuration'.
* gnu/system.scm (file-union): Remove.
(other-file-system-services): Adjust to new 'file-system-service'
signature.
(essential-services): Add #:container? parameter. Add
%DMD-ROOT-SERVICE, %ACTIVATION-SERVICE, and calls to
'pam-root-service', 'account-service', 'operating-system-etc-service',
and a SETUID-PROGRAM-SERVICE instance.
(operating-system-services): Pass #:container? to 'essential-services.
(etc-directory): Remove.
(operating-system-etc-service): New procedure. Rewrite as a call to
'etc-service'.
(operating-system-accounts): Change to not return accounts required by
services.
(operating-system-etc-directory): Rewrite as a call to 'fold-services'
and 'etc-directory'.
(user-group->gexp, user-account->gexp, modprobe-wrapper): Remove.
(operating-system-activation-script): Rewrite as a call to
'fold-services' and 'activation-service->script'.
(operating-system-boot-script): Likewise.
(operating-system-derivation): Add call to 'lower-object'.
(emacs-site-file, emacs-site-directory, shells-file): Change to use
'computed-file' and 'scheme-file' instead of the monadic procedures.
* gnu/system/install.scm (cow-store-service-type): New variable.
(cow-store-service): Rewrite using 'service'.
(/etc/configuration-files): New procedure.
(configuration-template-service-type,
%configuration-template-service): New variables.
(configuration-template-service): Remove.
(installation-services): Adjust accordingly. Adjust argument to
'guix-service'.
* gnu/system/linux.scm (/etc-entry, pam-root-service): New procedures.
(pam-root-service-type): New variable.
* gnu/system/shadow.scm (user-group->gexp, user-account->gexp,
account-activation, etc-skel, account-service): New procedures.
(account-service-type): New variable.
* tests/services.scm: New file.
* doc/guix.texi (Base Services, Desktop Services): Adjust accordingly.
(Defining Services): Rewrite.
* doc/images/service-graph.dot: New file.
* doc.am (DOT_FILES): Add it.
* po/guix/POTFILES.in: Add gnu/services.scm.
* guix/scripts/system.scm (perform-action): Add #:derivations-only?
parameter and honor it.
(show-help, %options): Add '--derivation'.
(guix-system): Pass #:derivations-only? to 'perform-action'.
* tests/guix-system.sh: Test it.
* doc/guix.texi (Invoking guix system): Document it.
* guix/gexp.scm (<scheme-file>): New record type.
(scheme-file, scheme-file-compiler): New procedures.
* tests/gexp.scm ("scheme-file"): New test.
* doc/guix.texi (G-Expressions): Document 'scheme-file'.
* gnu/services/base.scm (<nscd-configuration>)[glibc, name-services]:
New fields.
(nscd-service): Remove #:glibc and #:name-services parameters. Adjust
body to take those from CONFIG.
* gnu/services/desktop.scm (%desktop-services): Adjust accordingly.
* doc/guix.texi (Base Services): Adjust accordingly.
(Name Service Switch): Adjust example.
* gnu/services/avahi.scm (configuration-file): Use 'plain-file' instead
of 'text-file'.
(avahi-service): Turn into a regular procedure that returns a <service>.
* gnu/services/base.scm (root-file-system-service, file-system-service,
user-unmount-service, user-processes-service, host-name-service,
console-keymap-service, console-font-service, mingetty-service,
nscd.conf-file, nscd-service): Likewise.
(%default-syslog.conf): New variable.
(syslog-service): Use it. Turn into a regular procedure.
(guix-service, udev-rules-union, kvm-udev-rule, udev-service,
device-mapping-service, swap-service): Likewise.
* gnu/services/databases.scm (%default-postgres-hba,
%default-postgres-ident): Use 'plain-file' instead of 'text-file'.
(%default-postgres-config): Use 'mixed-text-file' instead of
'text-file*'.
(postgresql-service): Use 'program-file' instead of 'gexp->script'.
Turn into a regular procedure.
* gnu/services/desktop.scm (dbus-configuration-directory): Use
'computed-file' instead of 'gexp->derivation'.
(upower-configuration-file, geoclue-configuration-file,
elogind-configuration-file): Use 'plain-file' instead of 'text-file'.
(dbus-service, upower-service, colord-service, geoclue-service,
polkit-service, elogind-service): Turn into regular procedures.
(%desktop-services): Remove use of 'mlet' when iterating on
%BASE-SERVICES.
* gnu/services/lirc.scm (lirc-service): Turn into a regular procedure.
* gnu/services/networking.scm (static-networking-service,
dhcp-client-service, ntp-service, tor-service, bitlbee-service,
wicd-service): Likewise.
* gnu/services/ssh.scm (lsh-service): Likewise.
* gnu/services/web.scm (nginx-service): Likewise.
* gnu/services/xorg.scm (xorg-configuration-file): Use 'mixed-text-file'
instead of 'text-file*'.
(xorg-start-command, slim-service): Turn into regular procedures.
(xinitrc): Use 'program-file' instead of 'gexp->script'.
* gnu/system/install.scm (cow-store-service,
configuration-template-service): Turn into regular procedures.
* gnu/system.scm (other-file-system-services, device-mapping-services,
swap-services, essential-services, operating-system-services,
user-shells, operating-system-accounts): Remove now unnecessary
'mlet' and turn into regular procedures.
(operating-system-etc-directory, operating-system-activation-script,
operating-system-boot-script): Adjust accordingly.
* doc/guix.texi (Base Services, Networking Services, X Window, Desktop
Services, Database Services, Web Services, Various Services, Name
Service Switch): Adjust accordingly.
* gnu/services/base.scm (mingetty-service): Change default value of
#:motd from a monadic value to a <plain-file>. Assume MOTD to be a
file-like object. Assume LOGIN-PROGRAM is a gexp or #f.
(%base-services): Use 'plain-file' instead of 'text-file' for motd.
* gnu/system/linux.scm (unix-pam-service): Update docstring to mention
that MOTD is a file-like object.
* doc/guix.texi (Base Services): Adjust 'mingetty-service' documentation
accordingly.
* gnu/system/install.scm (installation-services): Adjust accordingly.
(log-to-info): Use 'program-file' instead of 'gexp->script'.
* guix/gexp.scm (<program-file>): New record type.
(program-file, program-file-compiler): New procedures.
* tests/gexp.scm ("program-file"): New test.
* doc/guix.texi (G-Expressions): Document it.
This allows for direct program invokation without needing a shell to act
as a command interpreter.
* guix/scripts/environment.scm (%default-shell): New variable.
(show-help): Adjust description. Remove '--exec' reference.
(%default-options): Use '%default-shell'.
(%options): Adjust '--exec' to run command via the default shell.
(parse-args): New procedure.
(guix-environment): Use 'parse-args'. Use 'system*' instead of
'system'.
* tests/guix-environment.sh: Add test for '--' command invokation.
* doc/guix.texi ("Invoking guix environment"): Use new syntax. Remove
'--exec' documentation.
Suggested by Ludovic Courtès <ludo@gnu.org>.
* emacs/guix-devel.el (guix-devel-setup-repl): Add a workaround for
'guix-warning-port'.
(guix-devel-lint-package): New command.
(guix-devel-keys-map): Add key binding for it.
* doc/emacs.texi (Emacs Development): Document it.
Suggested by Mark H Weaver <mhw@netris.org>.
* gnu/packages/patches/glibc-versioned-locpath.patch: New file.
* gnu-system.am (dist_patch_DATA): Add it.
* gnu/packages/base.scm (glibc)[source]: Use it.
[arguments]: Add explicit version sub-directory to
libc_cv_localedir.
[native-search-paths]: Use 'GUIX_LOCPATH' instead of 'LOCPATH'.
(glibc-locales, glibc-utf8-locales): Write to a VERSION
sub-directory.
* gnu/packages/patches/glibc-guix-locpath.patch: New file.
* gnu-system.am (dist_patch_DATA): Add it.
* gnu/packages/base.scm (glibc)[source]: Use it.
[native-search-paths]: Use 'GUIX_LOCPATH' instead of 'LOCPATH'.
* doc/guix.texi (Application Setup): Introduce the term "foreign
distro". Document 'GUIX_LOCPATH'.
* gnu/packages/base.scm (glibc)[arguments]: Append VERSION to
'libc_cv_localedir'.
* gnu/system/locale.scm (localedef-command): Write to the sub-directory
called (package-version libc) in #$output.
(locale-directory): Create said directory.
* doc/guix.texi (Locales): Mention the per-version sub-directory.
Suggested by Ludovic Courtès <ludo@gnu.org>.
* emacs/guix-guile.el (guix-guile-definition-regexp): New variable.
(guix-guile-current-definition, guix-guile-boolean): New functions.
* emacs/guix-devel.el: Require 'guix-base'.
(guix-devel-repl-processes): New variable.
(guix-devel-setup-repl, guix-devel-setup-repl-maybe): New functions.
(guix-devel-build-package-definition): New command.
* doc/emacs.texi (Emacs Development): Document it.
* emacs/guix-guile.el (guix-guile-current-module): New function.
* emacs/guix-devel.el: New file.
* emacs.am (ELFILES): Add it.
* doc/emacs.texi (Emacs Development): New node.
(Emacs Interface): Add it.
* doc/contributing.texi (The Perfect Setup): Mention it.
* doc/guix.texi (Top): Add it.
* emacs/guix-init.el: Add 'guix-devel-activate-mode-maybe' to
'scheme-mode-hook'.
Suggested by Petter <petter@mykolab.ch>
and Mark H Weaver <mhw@netris.org>.
Reported by Duncan Keall <duncan@duncankeall.com>.
Partly fixes <http://bugs.gnu.org/19190> by populating /dev/mapper
early enough.
* gnu/build/linux-boot.scm (mount-essential-file-systems): Mount /dev as
a devtmpfs.
(move-essential-file-systems): Add /dev.
(mount-root-file-system): Mount /rw-root/dev as a devtmpfs instead of
calling 'make-essential-device-nodes'.
(boot-system): Remove call to 'make-essential-device-nodes'.
* gnu/system/file-systems.scm (%devtmpfs-file-system): Remove.
* doc/guix.texi (File Systems): Adjust accordingly.
Apply the recommended formatting rules from '.dir-locals.el' to the
examples in the manual in order to fulfill it's purpose of being a
reference.
* doc/package-hello.scm: Indent it.
* doc/guix.texi (Defining Packages, Version Numbers): Likewise.
* gnu/packages/base.scm (hello): Be consistent with the manual.
Previously, the Ruby build system only knew how to work with gem archives,
which made it difficult to build unreleased gems from a Git repository or
released gems in tarball form.
* gnu/build/ruby-build-system.scm (gnu:unpack, gem-archive?): New procedures.
(unpack): Use GNU build system unpack phase for non-gem sources.
(build): Rebuild the gemspec iff the source is a gem archive.
* guix.texi ("ruby-build-system"): Mention that tarballs and directories are
acceptable.
* gnu/services/base.scm (mingetty-service): Change default value of
#:motd from a monadic value to a <plain-file>. Assume MOTD to be a
file-like object. Assume LOGIN-PROGRAM is a gexp or #f.
(%base-services): Use 'plain-file' instead of 'text-file' for motd.
* gnu/system/linux.scm (unix-pam-service): Update docstring to mention
that MOTD is a file-like object.
* doc/guix.texi (Base Services): Adjust 'mingetty-service' documentation
accordingly.
* guix/scripts/build.scm (%default-log-urls): New variable.
(log-url): New procedure.
(guix-build): Use it.
* doc/guix.texi (Invoking guix build): Document it.
* doc/guix.texi (Package Management): Move "Emacs Interface" node to ...
(Top): ...here, since it is not just about package management.
* doc/emacs.texi: Shift all nodes one level up (@section -> @chapter, etc.).
Rename "Emacs Usage" node into "Emacs Package Management". Move "Emacs
Configuration" node here.
* doc/guix.texi (Locales): Introduce "codeset".
<%default-locale-definitions>: Mention the "normalized codeset", with
an xref to libc's manual.
* gnu/system/locale.scm (%default-locale-definitions)[utf8-locale]:
Mention the "normalized codeset" in a comment.
* guix/gexp.scm (lower-object): New procedure.
(lower-inputs, lower-references, gexp->sexp): Use it.
* tests/gexp.scm ("lower-object"): New test.
* doc/guix.texi (G-Expressions): Document it.
* gnu/services/desktop.scm (bool): New top-level helper.
(upower-configuration-file): Use top-level `bool'.
(geoclue-application): New public function.
(%standard-geoclue-applications): New public variable.
(geoclue-service): New public variable.
(%desktop-services): Add GeoClue. Add a comment about activation.
* doc/guix.texi (Desktop Services): Document the GeoClue service.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* guix/scripts/package.scm (show-help): Add help text for --install-from-file
option.
(%options): Add --install-from-file option.
* tests/guix-package.sh: Test it.
* doc/guix.texi ("invoking guix package"): Document it.
* doc/package-hello.scm: New file.
* doc.am (EXTRA_DIST): Add it.
Fixes <http://bugs.gnu.org/21111>.
Reported by Dave Love <fx@gnu.org>.
* doc/guix.texi (Binary Installation): Add paragraph about "implausibly old
time stamps" warning from tar.
* gnu/system.scm (<operating-system>)[kernel-arguments]: New field.
(operating-system-grub.cfg): Honor it.
(operating-system-parameters-file): Add 'kernel-arguments' to the parameters
file.
* guix/scripts/system.scm (previous-grub-entries)[system->grub-entry]: Read
the 'kernel-arguments' field of the parameters file, when available.
* gnu/system/vm.scm (system-qemu-image/shared-store-script):
Use (operating-system-kernel-arguments os) in '-append'.
* doc/guix.texi (operating-system Reference): Document it.
Fixes <http://bugs.gnu.org/19778>.
Reported by Mark H Weaver <mhw@netris.org>.
* gnu/system/file-systems.scm (%uuid-rx): New variable.
(string->uuid): New procedure.
(uuid): New macro.
* tests/file-systems.scm: New file.
* Makefile.am (SCM_TESTS): Add it.
* doc/guix.texi (File Systems): Give an example of UUID.
* gnu/packages/gcc.scm (gcc-configure-flags-for-triplet): On armhf,
include --with-fpu=neon.
* doc/guix.texi (GNU Distribution): Document that our armhf port
requires NEON.
* doc/guix.texi (Daemon Offload Setup): Mention that we're using lsh. Mention
GUILE_LOAD_PATH settings on the target machine. Explain that machines must
authorize each other.
* guix/scripts/environment.scm (package+propagated-inputs): Add 'output'
parameter. Use it in return value.
(options/resolve-packages): Use 'append-map' instead of 'map'. For 'load'
and 'expression', return all the outputs of the resulting package. For
'package', use 'specification->package+output' instead of
'specification->package'.
(guix-environment): Adjust uses of PACKAGES accordingly.
* doc/guix.texi (Invoking guix environment): Document it.
* tests/guix-environment.sh: Add test for --ad-hoc guile-bootstrap:out.
* doc/environment-gdb.scm: New file.
* doc.am (EXTRA_DIST): Add it.
* doc/guix.texi (Invoking guix environment): Clarify wording of the first
example. Add a --ad-hoc example upfront. Add an example for '-e', and one
for '-l'.
* emacs/guix-base.el (guix-define-buffer-type): Move common key bindings
from here...
(guix-root-map): ... to here. New variable.
* emacs/guix-info.el (guix-info-mode-map): Use it.
* emacs/guix-list.el (guix-list-mode-map): Use it.
* doc/emacs.texi (Emacs Keymaps): Document it.
* guix/scripts/size.scm: New file.
* Makefile.am (MODULES): Add it.
(SCM_TESTS): Add tests/size.scm.
* doc.am (SUBCOMMANDS): Add 'size'.
* po/guix/POTFILES.in: Add guix/scripts/size.scm.
* tests/size.scm: New file.
* doc/guix.texi (Packages with Multiple Outputs): Add xref to "Invoking guix
size".
(Invoking guix size): New node.
(Invoking guix gc): Add index for "closure" and xref to the above.
* doc/contributing.texi (Submitting Patches): Use @enumerate for the check
list. Add item about 'guix size'.
* HACKING (Contributing): New section.
(Building from Git, The Perfect Setup, Coding Style, Submitting Patches):
Move to ...
* doc/guix.texi (Running Guix Before It Is Installed): Likewise.
* doc/contributing.texi: ... here. New file.
* doc.am (EXTRA_DIST): Use it.
* README (Installation): Adapt to it.
* configure.ac (DOT): Likewise.
* guix/scripts/build.scm (package-with-source)[tarball-base-name]: Gracefully
handle file names that lack an extension.
Pass #:recursive? #t to 'download-to-store'.
* guix/download.scm (download-to-store): Add #:recursive? parameter and pass
it to 'add-to-store'.
* doc/guix.texi (Invoking guix build): Add an example of --with-source with a
directory.
* guix/import/cabal.scm: New file.
* guix/import/hackage.scm: Update to use the new Cabal parsing module.
* tests/hackage.scm: Update tests.
* guix/scripts/import/hackage.scm: Add new '--cabal-environment' and '--stdin'
options.
* doc/guix.texi: ... and document them.
* Makefile.am (MODULES): Add 'guix/import/cabal.scm',
'guix/import/hackage.scm' and 'guix/scripts/import/hackage.scm'.
(SCM_TESTS): Add 'tests/hackage.scm'.
Suggested by Thomas Schwinge <thomas@codesourcery.com>.
* gnu/system/install.scm (self-contained-tarball): Remove
"/root/.guix-profile" from the 'tar' arguments.
* doc/guix.texi (Binary Installation): Add a step to create
~root/.guix-profile.
Suggested by Federico Beffa <beffa@fbengineering.ch>.
* guix/monads.scm (bind-syntax): New macro.
(with-monad): Use it instead of 'identifier-syntax'.
* tests/monads.scm (">>= with more than two arguments"): New test.
* doc/guix.texi (The Store Monad): Explain that there can be several MPROC.
Add an example.
Reported by ngz on #guix.
* doc/emacs.texi (Emacs Initial Setup): Describe how to configure
"guix.el" in the case of binary installation and when Guix is not
installed.
Suggested by Ludovic Courtès <ludo@gnu.org>.
* emacs/guix-pcomplete.el: New file.
* emacs.am (ELFILES): Add it.
* doc/emacs.texi (Emacs Completions): New node.
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.
* emacs/guix-list.el: Split 'guix-list-mark' into internal and
interactive functions. Remove "M" key binding, use "C-u m" instead.
(guix-list--mark): New function. Use it in other marking functions.
(guix-list-mark): Mark all lines with a prefix argument.
* doc/emacs.texi (Emacs List buffer): Document changes in the key
bindings.
* 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.