mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-07-07 08:54:06 +02:00
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5a5d55b7cd | |||
| 0f4c1ed1a7 | |||
| cd60cd5bb9 | |||
| f8be2117b1 | |||
| 6550a260db | |||
| 5c72b7cc0a | |||
| b6472ce4ed | |||
| 12db45a481 | |||
| 4c11a3e33a | |||
| 41a4b1e49a | |||
| 0869e2220d | |||
| 21173006e4 | |||
| 358d959e84 | |||
| f8868dd56b | |||
| 1d5caad391 | |||
| 15d0fd16f3 | |||
| fbccd14b5b | |||
| 1b6a6d6b24 | |||
| 935e3c9e93 | |||
| c3db650680 | |||
| c2b8584ac5 | |||
| 6540a2551e | |||
| 7206ab15bd | |||
| a6f53ad63a | |||
| 2417be6861 | |||
| 3b84ecee59 | |||
| 702f4c7942 | |||
| 1802c75a3e | |||
| 359ca34027 | |||
| d1d2bf3eb6 | |||
| 5838f4e354 | |||
| 3da8e4a658 | |||
| dcae73e0d4 | |||
| 65a3e80efc | |||
| 62aebd90ca | |||
| 93085078ad | |||
| 5530030442 | |||
| 3b73512763 | |||
| ec32c8591e | |||
| edb380b705 | |||
| 1edfe6dd7b |
@@ -1,74 +0,0 @@
|
||||
;; Per-directory local variables for GNU Emacs 23 and later.
|
||||
|
||||
((nil
|
||||
. ((fill-column . 78)
|
||||
(tab-width . 8)
|
||||
|
||||
;; For use with 'bug-reference-prog-mode'.
|
||||
(bug-reference-url-format . "http://bugs.gnu.org/%s")
|
||||
(bug-reference-bug-regexp
|
||||
. "<https?://\\(debbugs\\|bugs\\)\\.gnu\\.org/\\([0-9]+\\)>")))
|
||||
(c-mode . ((c-file-style . "gnu")))
|
||||
(scheme-mode
|
||||
.
|
||||
((indent-tabs-mode . nil)
|
||||
(eval . (put 'eval-when 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-prompt 'scheme-indent-function 1))
|
||||
(eval . (put 'test-assert 'scheme-indent-function 1))
|
||||
(eval . (put 'test-assertm 'scheme-indent-function 1))
|
||||
(eval . (put 'test-equal 'scheme-indent-function 1))
|
||||
(eval . (put 'test-eq 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-input-string 'scheme-indent-function 1))
|
||||
(eval . (put 'guard 'scheme-indent-function 1))
|
||||
(eval . (put 'lambda* 'scheme-indent-function 1))
|
||||
(eval . (put 'substitute* 'scheme-indent-function 1))
|
||||
(eval . (put 'modify-phases 'scheme-indent-function 1))
|
||||
(eval . (put 'modify-services 'scheme-indent-function 1))
|
||||
(eval . (put 'with-directory-excursion 'scheme-indent-function 1))
|
||||
(eval . (put 'package 'scheme-indent-function 0))
|
||||
(eval . (put 'origin 'scheme-indent-function 0))
|
||||
(eval . (put 'build-system 'scheme-indent-function 0))
|
||||
(eval . (put 'bag 'scheme-indent-function 0))
|
||||
(eval . (put 'graft 'scheme-indent-function 0))
|
||||
(eval . (put 'operating-system 'scheme-indent-function 0))
|
||||
(eval . (put 'file-system 'scheme-indent-function 0))
|
||||
(eval . (put 'manifest-entry 'scheme-indent-function 0))
|
||||
(eval . (put 'manifest-pattern 'scheme-indent-function 0))
|
||||
(eval . (put 'substitute-keyword-arguments 'scheme-indent-function 1))
|
||||
(eval . (put 'with-store 'scheme-indent-function 1))
|
||||
(eval . (put 'with-error-handling 'scheme-indent-function 0))
|
||||
(eval . (put 'with-mutex 'scheme-indent-function 1))
|
||||
(eval . (put 'with-atomic-file-output 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-compressed-output-port 'scheme-indent-function 2))
|
||||
(eval . (put 'call-with-decompressed-port 'scheme-indent-function 2))
|
||||
(eval . (put 'signature-case 'scheme-indent-function 1))
|
||||
(eval . (put 'emacs-batch-eval 'scheme-indent-function 0))
|
||||
(eval . (put 'emacs-batch-edit-file 'scheme-indent-function 1))
|
||||
(eval . (put 'emacs-substitute-sexps 'scheme-indent-function 1))
|
||||
(eval . (put 'emacs-substitute-variables 'scheme-indent-function 1))
|
||||
(eval . (put 'with-derivation-narinfo 'scheme-indent-function 1))
|
||||
(eval . (put 'with-derivation-substitute 'scheme-indent-function 2))
|
||||
|
||||
(eval . (put 'syntax-parameterize 'scheme-indent-function 1))
|
||||
(eval . (put 'with-monad 'scheme-indent-function 1))
|
||||
(eval . (put 'mbegin 'scheme-indent-function 1))
|
||||
(eval . (put 'mwhen 'scheme-indent-function 1))
|
||||
(eval . (put 'munless 'scheme-indent-function 1))
|
||||
(eval . (put 'mlet* 'scheme-indent-function 2))
|
||||
(eval . (put 'mlet 'scheme-indent-function 2))
|
||||
(eval . (put 'run-with-store 'scheme-indent-function 1))
|
||||
(eval . (put 'run-with-state 'scheme-indent-function 1))
|
||||
(eval . (put 'wrap-program 'scheme-indent-function 1))
|
||||
|
||||
(eval . (put 'call-with-container 'scheme-indent-function 1))
|
||||
(eval . (put 'container-excursion 'scheme-indent-function 1))
|
||||
|
||||
;; Recognize '~', '+', and '$', as used for gexps, as quotation symbols.
|
||||
;; This notably allows '(' in Paredit to not insert a space when the
|
||||
;; preceding symbol is one of these.
|
||||
(eval . (modify-syntax-entry ?~ "'"))
|
||||
(eval . (modify-syntax-entry ?$ "'"))
|
||||
(eval . (modify-syntax-entry ?+ "'"))))
|
||||
(emacs-lisp-mode . ((indent-tabs-mode . nil)))
|
||||
(texinfo-mode . ((indent-tabs-mode . nil)
|
||||
(fill-column . 72))))
|
||||
-135
@@ -1,135 +0,0 @@
|
||||
*~
|
||||
,*
|
||||
*.tmp
|
||||
*.go
|
||||
tmp
|
||||
*.log
|
||||
/build-aux/compile
|
||||
/build-aux/config.guess
|
||||
/build-aux/config.rpath
|
||||
/build-aux/config.sub
|
||||
/build-aux/depcomp
|
||||
/build-aux/install-sh
|
||||
/build-aux/mdate-sh
|
||||
/build-aux/missing
|
||||
/build-aux/test-driver
|
||||
/build-aux/texinfo.tex
|
||||
/configure
|
||||
Makefile.in
|
||||
Makefile
|
||||
/autom4te.cache
|
||||
config.cache
|
||||
/aclocal.m4
|
||||
/config.status
|
||||
/ABOUT-NLS
|
||||
/m4/ChangeLog
|
||||
/m4/gettext.m4
|
||||
/m4/iconv.m4
|
||||
/m4/lib-ld.m4
|
||||
/m4/lib-link.m4
|
||||
/m4/lib-prefix.m4
|
||||
/m4/nls.m4
|
||||
/m4/po.m4
|
||||
/m4/progtest.m4
|
||||
/po/guix/ChangeLog
|
||||
/po/guix/Makefile.in.in
|
||||
/po/guix/Makevars.template
|
||||
/po/guix/POTFILES
|
||||
/po/guix/Rules-quot
|
||||
/po/guix/boldquot.sed
|
||||
/po/guix/en@boldquot.*
|
||||
/po/guix/en@quot.*
|
||||
/po/guix/insert-header.sin
|
||||
/po/guix/*.insert-header
|
||||
/po/guix/quot.sed
|
||||
/po/guix/remove-potcdate.sed
|
||||
/po/guix/remove-potcdate.sin
|
||||
/po/guix/stamp-po
|
||||
/po/guix/guix.pot
|
||||
/po/guix/*.mo
|
||||
/po/guix/*.gmo
|
||||
/po/packages/ChangeLog
|
||||
/po/packages/Makefile.in.in
|
||||
/po/packages/Makevars.template
|
||||
/po/packages/POTFILES
|
||||
/po/packages/Rules-quot
|
||||
/po/packages/boldquot.sed
|
||||
/po/packages/en@boldquot.*
|
||||
/po/packages/en@quot.*
|
||||
/po/packages/insert-header.sin
|
||||
/po/packages/*.insert-header
|
||||
/po/packages/quot.sed
|
||||
/po/packages/remove-potcdate.sed
|
||||
/po/packages/remove-potcdate.sin
|
||||
/po/packages/stamp-po
|
||||
/po/packages/guix-packages.pot
|
||||
/po/packages/*.mo
|
||||
/po/packages/*.gmo
|
||||
/tests/*.trs
|
||||
/INSTALL
|
||||
/m4/*
|
||||
/pre-inst-env
|
||||
/doc/.dirstamp
|
||||
/doc/guix.info
|
||||
/doc/guix.info-[0-9]
|
||||
/doc/guix.pdf
|
||||
/doc/stamp-vti
|
||||
/doc/version.texi
|
||||
/gnu/packages/bootstrap/x86_64-linux/guile-2.0.9.tar.xz
|
||||
/gnu/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz
|
||||
/gnu/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz
|
||||
/gnu/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz
|
||||
/guix/config.scm
|
||||
/nix/nix-daemon/nix-daemon.cc
|
||||
/nix/config.h
|
||||
/nix/config.h.in
|
||||
stamp-h[0-9]
|
||||
/nix/AUTHORS
|
||||
/nix/COPYING
|
||||
/libformat.a
|
||||
/libstore.a
|
||||
/libutil.a
|
||||
/guix-daemon
|
||||
/test-tmp
|
||||
/nix/scripts/list-runtime-roots
|
||||
/test-env
|
||||
/nix/nix-setuid-helper/nix-setuid-helper.cc
|
||||
/scripts/guix
|
||||
/doc/guix.aux
|
||||
/doc/guix.cp
|
||||
/doc/guix.cps
|
||||
/doc/guix.fn
|
||||
/doc/guix.fns
|
||||
/doc/guix.ky
|
||||
/doc/guix.pg
|
||||
/doc/guix.toc
|
||||
/doc/guix.tp
|
||||
/doc/guix.vr
|
||||
/doc/guix.vrs
|
||||
/nix/scripts/substitute
|
||||
/doc/images/bootstrap-graph.png
|
||||
/doc/images/bootstrap-graph.eps
|
||||
/guix-register
|
||||
GPATH
|
||||
GRTAGS
|
||||
GTAGS
|
||||
/nix-setuid-helper
|
||||
/nix/scripts/guix-authenticate
|
||||
/nix/scripts/offload
|
||||
/emacs/Makefile.in
|
||||
/emacs/Makefile
|
||||
/emacs/guix-autoloads.el
|
||||
/emacs/guix-helper.scm
|
||||
/emacs/guix-config.el
|
||||
/doc/os-config-bare-bones.texi
|
||||
/doc/os-config-desktop.texi
|
||||
/doc/*.1
|
||||
/etc/guix-daemon.service
|
||||
/doc/images/bootstrap-graph.pdf
|
||||
/doc/images/coreutils-bag-graph.png
|
||||
/doc/images/coreutils-graph.png
|
||||
/doc/images/coreutils-size-map.eps
|
||||
/doc/images/service-graph.png
|
||||
/doc/images/service-graph.eps
|
||||
/doc/images/service-graph.pdf
|
||||
/doc/images/dmd-graph.png
|
||||
@@ -1,29 +0,0 @@
|
||||
# This list is used to avoid multiple name/email instances of the same
|
||||
# contributors reported by "git log" and "git shortlog" commands.
|
||||
|
||||
Alexander I. Grafov <grafov@gmail.com>
|
||||
Amirouche Boubekki <amirouche@hypermove.net>
|
||||
Andy Wingo <wingo@igalia.com> <wingo@pobox.com>
|
||||
Ben Woodcroft <b.woodcroft@uq.edu.au> <donttrustben@gmail.com>
|
||||
Claes Wallin (韋嘉誠) <claes.wallin@greatsinodevelopment.com>
|
||||
Cyprien Nicolas <cyprien@nicolas.tf> <c.nicolas+gitorious@gmail.com>
|
||||
David Thompson <davet@gnu.org> <dthompson2@worcester.edu>
|
||||
David Thompson <davet@gnu.org> <dthompson@member.fsf.org>
|
||||
Deck Pickard <deck.r.pickard@gmail.com> <nebu@kipple>
|
||||
Eric Bavier <bavier@member.fsf.org> <ericbavier@gmail.com>
|
||||
Eric Dvorsak <eric@dvorsak.fr> <yenda1@gmail.com>
|
||||
John Darrington <jmd@gnu.org> <john@darrington.wattle.id.au>
|
||||
Joshua Grant <tadni@riseup.net> <gzg@riseup.net>
|
||||
Joshua Grant <tadni@riseup.net> <jgrant@parenthetical.io>
|
||||
Joshua Grant <tadni@riseup.net> <tadnimi@gmail.com>
|
||||
Joshua Grant <tadni@riseup.net> <youlysses@riseup.net>
|
||||
Ludovic Courtès <ludo@gnu.org> <ludovic.courtes@inria.fr>
|
||||
Mathieu Lirzin <mthl@openmailbox.org> <mathieu.lirzin@openmailbox.org>
|
||||
Nikita Karetnikov <nikita@karetnikov.org> <nikita.karetnikov@gmail.com>
|
||||
Pjotr Prins <pjotr.public01@thebird.nl>
|
||||
Pjotr Prins <pjotr.public01@thebird.nl> <pjotr.public12@thebird.nl>
|
||||
Ricardo Wurmus <rekado@elephly.net>
|
||||
Ricardo Wurmus <rekado@elephly.net> <ricardo.wurmus@mdc-berlin.de>
|
||||
Sou Bunnbu (宋文武) <iyzsong@gmail.com>
|
||||
Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
|
||||
Tomáš Čech <sleep_walker@gnu.org> <sleep_walker@suse.cz>
|
||||
@@ -1,9 +0,0 @@
|
||||
GNU Guix consists of Scheme code that implements the deployment model
|
||||
of the Nix package management tool. In fact, it currently talks to a
|
||||
build daemon whose code comes from Nix (see the manual for details.)
|
||||
|
||||
Nix was initially written by Eelco Dolstra; other people have been
|
||||
contributing to it. See `nix/AUTHORS' for details.
|
||||
|
||||
The list of GNU Guix contributors is now generated from the output of
|
||||
'git log' and written to this file, as can be seen in release tarballs.
|
||||
@@ -1,674 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
@@ -1,4 +0,0 @@
|
||||
Normally a ChangeLog is generated at "make dist" time and available in
|
||||
source tarballs.
|
||||
|
||||
If not, see the Git commit log at <http://git.sv.gnu.org/cgit/guix.git/>.
|
||||
@@ -1,43 +0,0 @@
|
||||
-*- mode: org; coding: utf-8; -*-
|
||||
|
||||
#+TITLE: Hacking GNU Guix and Its Incredible Distro
|
||||
|
||||
Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
* Contributing
|
||||
|
||||
See the manual for useful hacking informations, either by running
|
||||
|
||||
info -f doc/guix.info "(guix) Contributing"
|
||||
|
||||
or by checking the [[http://www.gnu.org/software/guix/manual/guix.html#Contributing][web copy of the manual]].
|
||||
|
||||
* Commit Access
|
||||
|
||||
For frequent contributors, having write access to the repository is
|
||||
convenient. When you deem it necessary, feel free to ask for it on the
|
||||
mailing list. When you get commit access, please make sure to follow the
|
||||
policy below (discussions of the policy can take place on guix-devel@gnu.org.)
|
||||
|
||||
Non-trivial patches should always be posted to guix-devel@gnu.org (trivial
|
||||
patches include fixing typos, etc.)
|
||||
|
||||
For patches that just add a new package, and a simple one, it’s OK to commit,
|
||||
if you’re confident (which means you successfully built it in a chroot setup,
|
||||
and have done a reasonable copyright and license auditing.) Likewise for
|
||||
package upgrades, except upgrades that trigger a lot of rebuilds (for example,
|
||||
upgrading GnuTLS or GLib.) We have a mailing list for commit notifications
|
||||
(guix-commits@gnu.org), so people can notice. Before pushing your changes,
|
||||
make sure to run ‘git pull --rebase’.
|
||||
|
||||
For anything else, please post to guix-devel@gnu.org and leave time for a
|
||||
review, without committing anything. If you didn’t receive any reply
|
||||
after two weeks, and if you’re confident, it’s OK to commit.
|
||||
|
||||
That last part is subject to being adjusted, allowing individuals to commit
|
||||
directly on non-controversial changes on parts they’re familiar with.
|
||||
-456
@@ -1,456 +0,0 @@
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||
# Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
# GNU Guix is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or (at
|
||||
# your option) any later version.
|
||||
#
|
||||
# GNU Guix is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
bin_SCRIPTS = \
|
||||
scripts/guix
|
||||
|
||||
nodist_noinst_SCRIPTS = \
|
||||
pre-inst-env \
|
||||
test-env
|
||||
|
||||
include gnu-system.am
|
||||
|
||||
MODULES = \
|
||||
guix/base32.scm \
|
||||
guix/base64.scm \
|
||||
guix/cpio.scm \
|
||||
guix/records.scm \
|
||||
guix/gcrypt.scm \
|
||||
guix/hash.scm \
|
||||
guix/pk-crypto.scm \
|
||||
guix/pki.scm \
|
||||
guix/utils.scm \
|
||||
guix/sets.scm \
|
||||
guix/download.scm \
|
||||
guix/git-download.scm \
|
||||
guix/monads.scm \
|
||||
guix/monad-repl.scm \
|
||||
guix/gexp.scm \
|
||||
guix/profiles.scm \
|
||||
guix/serialization.scm \
|
||||
guix/nar.scm \
|
||||
guix/derivations.scm \
|
||||
guix/gnu-maintenance.scm \
|
||||
guix/upstream.scm \
|
||||
guix/licenses.scm \
|
||||
guix/build-system.scm \
|
||||
guix/build-system/cmake.scm \
|
||||
guix/build-system/emacs.scm \
|
||||
guix/build-system/glib-or-gtk.scm \
|
||||
guix/build-system/gnu.scm \
|
||||
guix/build-system/haskell.scm \
|
||||
guix/build-system/perl.scm \
|
||||
guix/build-system/python.scm \
|
||||
guix/build-system/waf.scm \
|
||||
guix/build-system/r.scm \
|
||||
guix/build-system/ruby.scm \
|
||||
guix/build-system/trivial.scm \
|
||||
guix/ftp-client.scm \
|
||||
guix/http-client.scm \
|
||||
guix/gnupg.scm \
|
||||
guix/elf.scm \
|
||||
guix/store.scm \
|
||||
guix/cvs-download.scm \
|
||||
guix/svn-download.scm \
|
||||
guix/ui.scm \
|
||||
guix/build/download.scm \
|
||||
guix/build/cmake-build-system.scm \
|
||||
guix/build/emacs-build-system.scm \
|
||||
guix/build/git.scm \
|
||||
guix/build/glib-or-gtk-build-system.scm \
|
||||
guix/build/gnu-build-system.scm \
|
||||
guix/build/gnu-dist.scm \
|
||||
guix/build/perl-build-system.scm \
|
||||
guix/build/python-build-system.scm \
|
||||
guix/build/r-build-system.scm \
|
||||
guix/build/ruby-build-system.scm \
|
||||
guix/build/waf-build-system.scm \
|
||||
guix/build/haskell-build-system.scm \
|
||||
guix/build/store-copy.scm \
|
||||
guix/build/utils.scm \
|
||||
guix/build/union.scm \
|
||||
guix/build/profiles.scm \
|
||||
guix/build/pull.scm \
|
||||
guix/build/rpath.scm \
|
||||
guix/build/cvs.scm \
|
||||
guix/build/svn.scm \
|
||||
guix/build/gremlin.scm \
|
||||
guix/build/emacs-utils.scm \
|
||||
guix/build/graft.scm \
|
||||
guix/search-paths.scm \
|
||||
guix/packages.scm \
|
||||
guix/import/utils.scm \
|
||||
guix/import/gnu.scm \
|
||||
guix/import/snix.scm \
|
||||
guix/import/cabal.scm \
|
||||
guix/import/cran.scm \
|
||||
guix/import/hackage.scm \
|
||||
guix/import/elpa.scm \
|
||||
guix/scripts.scm \
|
||||
guix/scripts/download.scm \
|
||||
guix/scripts/build.scm \
|
||||
guix/scripts/archive.scm \
|
||||
guix/scripts/import.scm \
|
||||
guix/scripts/package.scm \
|
||||
guix/scripts/gc.scm \
|
||||
guix/scripts/hash.scm \
|
||||
guix/scripts/pull.scm \
|
||||
guix/scripts/substitute.scm \
|
||||
guix/scripts/authenticate.scm \
|
||||
guix/scripts/refresh.scm \
|
||||
guix/scripts/system.scm \
|
||||
guix/scripts/lint.scm \
|
||||
guix/scripts/challenge.scm \
|
||||
guix/scripts/import/cran.scm \
|
||||
guix/scripts/import/gnu.scm \
|
||||
guix/scripts/import/nix.scm \
|
||||
guix/scripts/import/hackage.scm \
|
||||
guix/scripts/import/elpa.scm \
|
||||
guix/scripts/environment.scm \
|
||||
guix/scripts/publish.scm \
|
||||
guix/scripts/edit.scm \
|
||||
guix/scripts/size.scm \
|
||||
guix/scripts/graph.scm \
|
||||
guix/scripts/container.scm \
|
||||
guix/scripts/container/exec.scm \
|
||||
guix.scm \
|
||||
$(GNU_SYSTEM_MODULES)
|
||||
|
||||
if BUILD_SYSCALLS_MODULE
|
||||
|
||||
MODULES += \
|
||||
guix/build/syscalls.scm
|
||||
|
||||
endif
|
||||
|
||||
if BUILD_DAEMON_OFFLOAD
|
||||
|
||||
MODULES += \
|
||||
guix/scripts/offload.scm
|
||||
|
||||
endif BUILD_DAEMON_OFFLOAD
|
||||
|
||||
# Internal module with test suite support.
|
||||
dist_noinst_DATA = guix/tests.scm
|
||||
|
||||
# Because of the autoload hack in (guix build download), we must build it
|
||||
# first to avoid errors on systems where (gnutls) is unavailable.
|
||||
guix/scripts/download.go: guix/build/download.go
|
||||
guix/download.go: guix/build/download.go
|
||||
|
||||
# Linux-Libre configurations.
|
||||
KCONFIGS = \
|
||||
gnu/packages/linux-libre-i686.conf \
|
||||
gnu/packages/linux-libre-x86_64.conf
|
||||
|
||||
# Templates, examples.
|
||||
EXAMPLES = \
|
||||
gnu/system/examples/bare-bones.tmpl \
|
||||
gnu/system/examples/desktop.tmpl
|
||||
|
||||
GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go guix/tests.go
|
||||
|
||||
nobase_dist_guilemodule_DATA = \
|
||||
$(MODULES) $(KCONFIGS) $(EXAMPLES) \
|
||||
$(MISC_DISTRO_FILES)
|
||||
nobase_nodist_guilemodule_DATA = $(GOBJECTS) guix/config.scm
|
||||
|
||||
# Do we need to provide our own non-broken (srfi srfi-37) module?
|
||||
if INSTALL_SRFI_37
|
||||
|
||||
nobase_nodist_guilemodule_DATA += srfi/srfi-37.scm
|
||||
GOBJECTS += srfi/srfi-37.go
|
||||
|
||||
srfi/srfi-37.scm: srfi/srfi-37.scm.in
|
||||
$(MKDIR_P) srfi
|
||||
cp "$<" "$@"
|
||||
|
||||
endif INSTALL_SRFI_37
|
||||
|
||||
# Handy way to remove the .go files without removing all the rest.
|
||||
clean-go:
|
||||
-$(RM) -f $(GOBJECTS)
|
||||
|
||||
|
||||
SCM_TESTS = \
|
||||
tests/base32.scm \
|
||||
tests/base64.scm \
|
||||
tests/cpio.scm \
|
||||
tests/hash.scm \
|
||||
tests/pk-crypto.scm \
|
||||
tests/pki.scm \
|
||||
tests/sets.scm \
|
||||
tests/substitute.scm \
|
||||
tests/builders.scm \
|
||||
tests/derivations.scm \
|
||||
tests/ui.scm \
|
||||
tests/records.scm \
|
||||
tests/utils.scm \
|
||||
tests/build-utils.scm \
|
||||
tests/packages.scm \
|
||||
tests/snix.scm \
|
||||
tests/hackage.scm \
|
||||
tests/cran.scm \
|
||||
tests/elpa.scm \
|
||||
tests/store.scm \
|
||||
tests/monads.scm \
|
||||
tests/gexp.scm \
|
||||
tests/nar.scm \
|
||||
tests/union.scm \
|
||||
tests/profiles.scm \
|
||||
tests/syscalls.scm \
|
||||
tests/gremlin.scm \
|
||||
tests/lint.scm \
|
||||
tests/publish.scm \
|
||||
tests/scripts.scm \
|
||||
tests/size.scm \
|
||||
tests/graph.scm \
|
||||
tests/challenge.scm \
|
||||
tests/file-systems.scm \
|
||||
tests/services.scm \
|
||||
tests/containers.scm
|
||||
|
||||
if HAVE_GUILE_JSON
|
||||
|
||||
MODULES += \
|
||||
guix/import/json.scm \
|
||||
guix/import/pypi.scm \
|
||||
guix/scripts/import/pypi.scm \
|
||||
guix/import/cpan.scm \
|
||||
guix/scripts/import/gem.scm \
|
||||
guix/import/gem.scm
|
||||
|
||||
SCM_TESTS += \
|
||||
tests/pypi.scm \
|
||||
tests/cpan.scm \
|
||||
tests/gem.scm
|
||||
|
||||
endif
|
||||
|
||||
SH_TESTS = \
|
||||
tests/guix-build.sh \
|
||||
tests/guix-download.sh \
|
||||
tests/guix-gc.sh \
|
||||
tests/guix-hash.sh \
|
||||
tests/guix-package.sh \
|
||||
tests/guix-package-net.sh \
|
||||
tests/guix-system.sh \
|
||||
tests/guix-archive.sh \
|
||||
tests/guix-authenticate.sh \
|
||||
tests/guix-environment.sh \
|
||||
tests/guix-environment-container.sh \
|
||||
tests/guix-graph.sh \
|
||||
tests/guix-lint.sh
|
||||
|
||||
if BUILD_DAEMON
|
||||
|
||||
SH_TESTS += tests/guix-register.sh
|
||||
|
||||
endif BUILD_DAEMON
|
||||
|
||||
|
||||
TESTS = $(SCM_TESTS) $(SH_TESTS)
|
||||
|
||||
TEST_EXTENSIONS = .scm .sh
|
||||
|
||||
AM_TESTS_ENVIRONMENT = abs_top_srcdir="$(abs_top_srcdir)"
|
||||
|
||||
SCM_LOG_COMPILER = $(top_builddir)/test-env $(GUILE)
|
||||
AM_SCM_LOG_FLAGS = --no-auto-compile -L "$(top_srcdir)"
|
||||
|
||||
SH_LOG_COMPILER = $(top_builddir)/test-env $(SHELL)
|
||||
AM_SH_LOG_FLAGS = -x -e
|
||||
|
||||
# Make sure `tests/guix-gc.sh' runs last, after all the others. Otherwise it
|
||||
# could end up removing files from the store while they are being used by
|
||||
# other instances of the daemon.
|
||||
tests/guix-gc.log: \
|
||||
$(patsubst %.sh,%.log,$(filter-out tests/guix-gc.sh,$(SH_TESTS))) \
|
||||
$(SCM_TESTS:%.scm=%.log)
|
||||
|
||||
# Public key used to sign substitutes from hydra.gnu.org.
|
||||
dist_pkgdata_DATA = hydra.gnu.org.pub
|
||||
|
||||
# Bash completion file.
|
||||
dist_bashcompletion_DATA = etc/completion/bash/guix
|
||||
|
||||
EXTRA_DIST = \
|
||||
HACKING \
|
||||
ROADMAP \
|
||||
TODO \
|
||||
.dir-locals.el \
|
||||
build-aux/build-self.scm \
|
||||
build-aux/hydra/gnu-system.scm \
|
||||
build-aux/hydra/demo-os.scm \
|
||||
build-aux/hydra/guix.scm \
|
||||
build-aux/check-available-binaries.scm \
|
||||
build-aux/check-final-inputs-self-contained.scm \
|
||||
build-aux/download.scm \
|
||||
build-aux/make-binary-tarball.scm \
|
||||
build-aux/generate-authors.scm \
|
||||
srfi/srfi-37.scm.in \
|
||||
srfi/srfi-64.scm \
|
||||
srfi/srfi-64.upstream.scm \
|
||||
tests/test.drv \
|
||||
tests/signing-key.pub \
|
||||
tests/signing-key.sec \
|
||||
build-aux/config.rpath \
|
||||
bootstrap \
|
||||
release.nix \
|
||||
$(TESTS)
|
||||
|
||||
if !BUILD_DAEMON_OFFLOAD
|
||||
|
||||
EXTRA_DIST += \
|
||||
guix/scripts/offload.scm
|
||||
|
||||
endif !BUILD_DAEMON_OFFLOAD
|
||||
|
||||
if !BUILD_SYSCALLS_MODULE
|
||||
|
||||
EXTRA_DIST += \
|
||||
guix/build/syscalls.scm
|
||||
|
||||
endif !BUILD_SYSCALLS_MODULE
|
||||
|
||||
|
||||
CLEANFILES = \
|
||||
$(GOBJECTS) \
|
||||
$(SCM_TESTS:tests/%.scm=%.log)
|
||||
|
||||
AM_V_GUILEC = $(AM_V_GUILEC_$(V))
|
||||
AM_V_GUILEC_ = $(AM_V_GUILEC_$(AM_DEFAULT_VERBOSITY))
|
||||
AM_V_GUILEC_0 = @echo " GUILEC" $@;
|
||||
|
||||
# Flags passed to 'guild compile'.
|
||||
GUILD_COMPILE_FLAGS = \
|
||||
-Wformat -Wunbound-variable -Warity-mismatch
|
||||
|
||||
# Unset 'GUILE_LOAD_COMPILED_PATH' altogether while compiling. Otherwise, if
|
||||
# $GUILE_LOAD_COMPILED_PATH contains $(moduledir), we may find .go files in
|
||||
# there that are newer than the local .scm files (for instance because the
|
||||
# user ran 'make install' recently). When that happens, we end up loading
|
||||
# those previously-installed .go files, which may be stale, thereby breaking
|
||||
# the whole thing.
|
||||
#
|
||||
# XXX: Use the C locale for when Guile lacks
|
||||
# <http://git.sv.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=e2c6bf3866d1186c60bacfbd4fe5037087ee5e3f>.
|
||||
.scm.go:
|
||||
$(AM_V_GUILEC)$(MKDIR_P) `dirname "$@"` ; \
|
||||
unset GUILE_LOAD_COMPILED_PATH ; \
|
||||
LC_ALL=C \
|
||||
$(top_builddir)/pre-inst-env \
|
||||
$(GUILD) compile -L "$(top_builddir)" -L "$(top_srcdir)" \
|
||||
$(GUILD_COMPILE_FLAGS) --target="$(host)" \
|
||||
-o "$@" "$<"
|
||||
|
||||
SUFFIXES = .go
|
||||
|
||||
# Make sure source files are installed first, so that the mtime of
|
||||
# installed compiled files is greater than that of installed source
|
||||
# files. See
|
||||
# <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html>
|
||||
# for details.
|
||||
guix_install_go_files = install-nobase_nodist_guilemoduleDATA
|
||||
$(guix_install_go_files): install-nobase_dist_guilemoduleDATA
|
||||
|
||||
# The above trick doesn't work for 'config.go' because both 'config.scm' and
|
||||
# 'config.go' are listed in $(nobase_nodist_guilemodule_DATA). Thus, give it
|
||||
# special treatment.
|
||||
install-data-hook: set-bootstrap-executable-permissions
|
||||
touch "$(DESTDIR)$(guilemoduledir)/guix/config.go"
|
||||
|
||||
|
||||
SUBDIRS = po/guix po/packages
|
||||
BUILT_SOURCES =
|
||||
|
||||
include doc.am
|
||||
|
||||
if BUILD_DAEMON
|
||||
|
||||
include daemon.am
|
||||
|
||||
endif BUILD_DAEMON
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
AM_DISTCHECK_CONFIGURE_FLAGS = \
|
||||
--with-libgcrypt-prefix="$(LIBGCRYPT_PREFIX)" \
|
||||
--with-libgcrypt-libdir="$(LIBGCRYPT_LIBDIR)" \
|
||||
--with-nix-prefix="$(NIX_PREFIX)" \
|
||||
--enable-daemon
|
||||
|
||||
dist_emacsui_DATA = emacs/guix-main.scm
|
||||
nodist_emacsui_DATA = emacs/guix-helper.scm
|
||||
include emacs.am
|
||||
|
||||
# The self-contained tarball.
|
||||
guix-binary.%.tar.xz:
|
||||
-GUIX_PACKAGE_PATH= \
|
||||
$(top_builddir)/pre-inst-env "$(GUILE)" \
|
||||
"$(top_srcdir)/build-aux/make-binary-tarball.scm" "$*" "$@"
|
||||
|
||||
|
||||
dist-hook: sync-descriptions gen-ChangeLog gen-AUTHORS
|
||||
dist-hook: assert-no-store-file-names
|
||||
|
||||
distcheck-hook: assert-binaries-available assert-final-inputs-self-contained
|
||||
|
||||
sync-descriptions:
|
||||
-GUIX_PACKAGE_PATH= \
|
||||
$(top_builddir)/pre-inst-env guix lint --checkers=gnu-description
|
||||
|
||||
gen-ChangeLog:
|
||||
if test -d .git; then \
|
||||
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
||||
> $(distdir)/cl-t; \
|
||||
rm -f $(distdir)/ChangeLog; \
|
||||
mv $(distdir)/cl-t $(distdir)/ChangeLog; \
|
||||
fi
|
||||
|
||||
gen-AUTHORS:
|
||||
if test -d .git; then \
|
||||
rm -f "$(distdir)/AUTHORS"; \
|
||||
$(top_builddir)/pre-inst-env "$(GUILE)" \
|
||||
"$(top_srcdir)/build-aux/generate-authors.scm" \
|
||||
"$(top_srcdir)" "$(distdir)/AUTHORS"; \
|
||||
fi
|
||||
|
||||
# Make sure we're not shipping a file that embeds a local /gnu/store file name.
|
||||
assert-no-store-file-names:
|
||||
if grep -r --exclude=*.texi --exclude=*.info \
|
||||
"$(storedir)/[a-z0-9]{32}-" $(distdir) ; \
|
||||
then \
|
||||
echo "error: store file names embedded in the distribution" >&2 ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
|
||||
# Make sure hydra.gnu.org has the important binaries.
|
||||
assert-binaries-available:
|
||||
$(top_builddir)/pre-inst-env "$(GUILE)" \
|
||||
"$(top_srcdir)/build-aux/check-available-binaries.scm"
|
||||
|
||||
# Make sure the final inputs don't refer to bootstrap tools.
|
||||
assert-final-inputs-self-contained:
|
||||
$(top_builddir)/pre-inst-env "$(GUILE)" \
|
||||
"$(top_srcdir)/build-aux/check-final-inputs-self-contained.scm"
|
||||
|
||||
.PHONY: sync-descriptions gen-ChangeLog gen-AUTHORS clean-go
|
||||
.PHONY: assert-no-store-file-names assert-binaries-available
|
||||
.PHONY: assert-final-inputs-self-contained
|
||||
@@ -1,153 +1,3 @@
|
||||
-*- mode: org -*-
|
||||
|
||||
[[http://www.gnu.org/software/guix/][GNU Guix]] (IPA: /ɡiːks/) is a purely functional package manager, and
|
||||
associated free software distribution, for the [[http://www.gnu.org/gnu/gnu.html][GNU system]]. In addition
|
||||
to standard package management features, Guix supports transactional
|
||||
upgrades and roll-backs, unprivileged package management, per-user
|
||||
profiles, and garbage collection.
|
||||
|
||||
It provides [[http://www.gnu.org/software/guile/][Guile]] Scheme APIs, including a high-level embedded
|
||||
domain-specific languages (EDSLs) to describe how packages are to be
|
||||
built and composed.
|
||||
|
||||
A user-land free software distribution for GNU/Linux comes as part of
|
||||
Guix.
|
||||
|
||||
Guix is based on the [[http://nixos.org/nix/][Nix]] package manager.
|
||||
|
||||
|
||||
* Requirements
|
||||
|
||||
GNU Guix currently depends on the following packages:
|
||||
|
||||
- [[http://gnu.org/software/guile/][GNU Guile 2.0.x]], version 2.0.7 or later
|
||||
- [[http://gnupg.org/][GNU libgcrypt]]
|
||||
- [[http://www.gnu.org/software/make/][GNU Make]]
|
||||
- optionally [[http://savannah.nongnu.org/projects/guile-json/][Guile-JSON]], for the 'guix import pypi' command
|
||||
- optionally [[http://www.gnutls.org][GnuTLS]] compiled with guile support enabled, for HTTPS support
|
||||
in the 'guix download' command. Note that 'guix import pypi' requires
|
||||
this functionality.
|
||||
|
||||
Unless `--disable-daemon' was passed, the following packages are needed:
|
||||
|
||||
- [[http://sqlite.org/][SQLite 3]]
|
||||
- [[http://www.bzip.org][libbz2]]
|
||||
- [[http://gcc.gnu.org][GCC's g++]]
|
||||
|
||||
When `--disable-daemon' was passed, you instead need the following:
|
||||
|
||||
- [[http://nixos.org/nix/][Nix]]
|
||||
|
||||
* Installation
|
||||
|
||||
See the manual for the installation instructions, either by running
|
||||
|
||||
info -f doc/guix.info "(guix) Installation"
|
||||
|
||||
or by checking the [[http://www.gnu.org/software/guix/manual/guix.html#Installation][web copy of the manual]].
|
||||
|
||||
For information on installation from a Git checkout, please see the section
|
||||
"Building from Git" in the manual.
|
||||
|
||||
* Installing Guix from Guix
|
||||
|
||||
You can re-build and re-install Guix using a system that already runs Guix.
|
||||
To do so:
|
||||
|
||||
- Start a shell with the development environment for Guix:
|
||||
|
||||
guix environment guix
|
||||
|
||||
- Re-run the 'configure' script passing it the option
|
||||
'--localstatedir=/somewhere', where '/somewhere' is the 'localstatedir'
|
||||
value of the currently installed Guix (failing to do that would lead the
|
||||
new Guix to consider the store to be empty!).
|
||||
|
||||
- Run "make", "make check", and "make install".
|
||||
|
||||
* How It Works
|
||||
|
||||
Guix does the high-level preparation of a /derivation/. A derivation is
|
||||
the promise of a build; it is stored as a text file under
|
||||
=/gnu/store/xxx.drv=. The (guix derivations) module provides the
|
||||
`derivation' primitive, as well as higher-level wrappers such as
|
||||
`build-expression->derivation'.
|
||||
|
||||
Guix does remote procedure calls (RPCs) to the Guix or Nix daemon (the
|
||||
=guix-daemon= or =nix-daemon= command), which in turn performs builds
|
||||
and accesses to the Nix store on its behalf. The RPCs are implemented
|
||||
in the (guix store) module.
|
||||
|
||||
* Installing Guix as non-root
|
||||
|
||||
The Guix daemon allows software builds to be performed under alternate
|
||||
user accounts, which are normally created specifically for this
|
||||
purpose. For instance, you may have a pool of accounts in the
|
||||
=guixbuild= group, and then you can instruct =guix-daemon= to use them
|
||||
like this:
|
||||
|
||||
$ guix-daemon --build-users-group=guixbuild
|
||||
|
||||
However, unless it is run as root, =guix-daemon= cannot switch users.
|
||||
In that case, it falls back to using a setuid-root helper program call
|
||||
=nix-setuid-helper=. That program is not setuid-root by default when
|
||||
you install it; instead you should run a command along these lines
|
||||
(assuming Guix is installed under /usr/local):
|
||||
|
||||
# chown root.root /usr/local/libexec/nix-setuid-helper
|
||||
# chmod 4755 /usr/local/libexec/nix-setuid-helper
|
||||
|
||||
* Contact
|
||||
|
||||
GNU Guix is hosted at https://savannah.gnu.org/projects/guix/.
|
||||
|
||||
Please email <bug-guix@gnu.org> for bug reports or questions regarding
|
||||
Guix and its distribution; email <gnu-system-discuss@gnu.org> for
|
||||
general issues regarding the GNU system.
|
||||
|
||||
Join #guix on irc.freenode.net.
|
||||
|
||||
* Guix & Nix
|
||||
|
||||
GNU Guix is based on [[http://nixos.org/nix/][the Nix package manager]]. It implements the same
|
||||
package deployment paradigm, and in fact it reuses some of its code.
|
||||
Yet, different engineering decisions were made for Guix, as described
|
||||
below.
|
||||
|
||||
Nix is really two things: a package build tool, implemented by a library
|
||||
and daemon, and a special-purpose programming language. GNU Guix relies
|
||||
on the former, but uses Scheme as a replacement for the latter.
|
||||
|
||||
Using Scheme instead of a specific language allows us to get all the
|
||||
features and tooling that come with Guile (compiler, debugger, REPL,
|
||||
Unicode, libraries, etc.) And it means that we have a general-purpose
|
||||
language, on top of which we can have embedded domain-specific languages
|
||||
(EDSLs), such as the one used to define packages. This broadens what
|
||||
can be done in package recipes themselves, and what can be done around them.
|
||||
|
||||
Technically, Guix makes remote procedure calls to the ‘nix-worker’
|
||||
daemon to perform operations on the store. At the lowest level, Nix
|
||||
“derivations” represent promises of a build, stored in ‘.drv’ files in
|
||||
the store. Guix produces such derivations, which are then interpreted
|
||||
by the daemon to perform the build. Thus, Guix derivations can use
|
||||
derivations produced by Nix (and vice versa).
|
||||
|
||||
With Nix and the [[http://nixos.org/nixpkgs][Nixpkgs]] distribution, package composition happens at
|
||||
the Nix language level, but builders are usually written in Bash.
|
||||
Conversely, Guix encourages the use of Scheme for both package
|
||||
composition and builders. Likewise, the core functionality of Nix is
|
||||
written in C++ and Perl; Guix relies on some of the original C++ code,
|
||||
but exposes all the API as Scheme.
|
||||
|
||||
* Related software
|
||||
|
||||
- [[http://nixos.org][Nix, Nixpkgs, and NixOS]], functional package manager and associated
|
||||
software distribution, are the inspiration of Guix
|
||||
- [[http://www.gnu.org/software/stow/][GNU Stow]] builds around the idea of one directory per prefix, and a
|
||||
symlink tree to create user environments
|
||||
- [[http://www.pvv.ntnu.no/~arnej/store/storedoc_6.html][STORE]] shares the same idea
|
||||
- [[https://live.gnome.org/OSTree/][GNOME's OSTree]] allows bootable system images to be built from a
|
||||
specified set of packages
|
||||
- The [[http://www.gnu.org/s/gsrc/][GNU Source Release Collection]] (GSRC) is a user-land software
|
||||
distribution; unlike Guix, it relies on core tools available on the
|
||||
host system
|
||||
This “orphan” branch contains the keyring of the Guix project: the OpenPGP
|
||||
public keys of all the Guix committers ever. It is used to verify signatures
|
||||
on Guix commits. We only ever add new keys here.
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
-*- mode: org; coding: utf-8; -*-
|
||||
|
||||
#+TITLE: Tentative GNU Guix Road Map
|
||||
|
||||
Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
The goals of the GNU Guix project are two-fold:
|
||||
|
||||
- to build a purely functional package manager, based on Nix and
|
||||
Guile;
|
||||
|
||||
- to use it to build a practical 100% free software distribution of
|
||||
GNU/Linux and possibly other GNU variants, with a focus on the
|
||||
promotion and tight integration of GNU components–the GNU system.
|
||||
|
||||
Since its inception, the project has gone a long way towards that goal. Below
|
||||
is a list of items we want for version "1.0" of the Guix System Distribution.
|
||||
There will be a few 0.x releases by then to give the new features more
|
||||
exposure and testing.
|
||||
|
||||
You're welcome to discuss this road map on guix-devel@gnu.org or #guix on
|
||||
Freenode!
|
||||
|
||||
* Features scheduled for 1.0
|
||||
|
||||
- larger & more robust build farm
|
||||
+ we need a powerful, dedicated front-end
|
||||
+ armhf-linux build machine
|
||||
+ leave Hydra in favor of 'guix publish' + custom code?
|
||||
- more OS features
|
||||
+ LVM support
|
||||
+ encrypted root
|
||||
+ configurable name service switch
|
||||
+ whole-system unit tests, using VMs
|
||||
- more service definitions
|
||||
+ mcron, postfix(?), wicd(?), etc.
|
||||
- better 'guix system'
|
||||
+ 'reconfigure' should be able to restart non-essential services
|
||||
+ support for '--list-generations' and '--delete-generations'
|
||||
- better 'guix pull'
|
||||
+ using Git to fetch the source instead of re-downloading everything
|
||||
+ build more quickly
|
||||
+ install new .mo files and new manual
|
||||
+ authentication of the Guix source: use signed commits?
|
||||
- simplified, purely declarative service list in 'operating-system'
|
||||
+ it should be possible to inspect the service instance declarations and
|
||||
settings
|
||||
- GUIs
|
||||
+ integrate guix-web?
|
||||
+ guile-ncurses installer?
|
||||
- 'guix publish'?
|
||||
|
||||
* Features for later
|
||||
|
||||
- complete GNU/Hurd port
|
||||
- use content-based addressing when downloading substitutes to reduce
|
||||
bandwidth requirements
|
||||
+ design nar v2 format where file contents are replaced by their hashes
|
||||
+ leverage /gnu/store/.links
|
||||
- binary origin tracking
|
||||
+ keep signatures in sqlite.db
|
||||
+ preserve signatures upon import/export
|
||||
- peer-to-peer distribution of updates (GNUnet?)
|
||||
- more deterministic builds
|
||||
+ identify & fix sources of non-determinism in builds
|
||||
+ strengthen guix-daemon containers to further increase reproducibility
|
||||
+ trusting-trust: bootstrap with different tool chains
|
||||
+ fixed-point: re-bootstrap until fixed point is reached
|
||||
+ distributed validation: compare contents of store items with others
|
||||
* resist a hydra.gnu.org compromise
|
||||
- reproducible containers: mix of 'guix environment' and 'guix system vm'
|
||||
- execute code with least privilege
|
||||
+ build containers like guix-daemon does
|
||||
+ provide a Plash-like interface in Bash
|
||||
- daemon rewritten in Guile
|
||||
- more dmd integration
|
||||
+ monitor network interfaces and start/stop events based on that
|
||||
+ include a DHCP client written in Scheme
|
||||
@@ -0,0 +1,170 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
ZPFE
|
||||
=c1wa
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
fCnIDNs57Q==
|
||||
=JaPp
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,50 +0,0 @@
|
||||
A big thanks to Eelco Dolstra, who designed and implemented Nix.
|
||||
Transposing functional programming discipline to package management
|
||||
proved to be inspiring and fruitful.
|
||||
|
||||
Thanks to the following people who contributed to GNU Guix through
|
||||
suggestions, bug reports, patches, internationalization, or general
|
||||
infrastructure help:
|
||||
|
||||
Lluís Batlle i Rossell <viric@viric.name>
|
||||
Sylvain Beucler <beuc@beuc.net>
|
||||
Carlos Carleos <carleos@uniovi.es>
|
||||
Felipe Castro <fefcas@gmail.com>
|
||||
Daniel Clark <dclark@pobox.com>
|
||||
Alexandru Cojocaru <xojoc@gmx.com>
|
||||
Aleix Conchillo Flaqué <aconchillo@gmail.com>
|
||||
Malcolm Cook <MEC@stowers.org>
|
||||
Rafael Ferreira <rafael.f.f1@gmail.com>
|
||||
Christian Grothoff <christian@grothoff.org>
|
||||
Eric Hanchrow <eric.hanchrow@gmail.com>
|
||||
Konrad Hinsen <konrad.hinsen@fastmail.net>
|
||||
Brandon Invergo <brandon@gnu.org>
|
||||
Anders Jonsson <anders.jonsson@norsjovallen.se>
|
||||
Jeffrin Jose <ahiliation@yahoo.co.in>
|
||||
Kete <kete@ninthfloor.org>
|
||||
Daniel Kochmański <dkochmanski@hellsgate.pl>
|
||||
Matthew Lien <bluet@bluet.org>
|
||||
Dave Love <fx@gnu.org>
|
||||
Niels Möller <nisse@lysator.liu.se>
|
||||
Cyprien Nicolas <cyprien@nicolas.tf>
|
||||
Yutaka Niibe <gniibe@fsij.org>
|
||||
Andrei Osipov <andrspv@gmail.com>
|
||||
Petter <petter@mykolab.ch>
|
||||
Adam Pribyl <pribyl@lowlevel.cz>
|
||||
Pjotr Prins <pjotr.public12@thebird.nl>
|
||||
Yakkala Yagnesh Raghava <hi@yagnesh.org>
|
||||
Joshua Randall <jcrandall@alum.mit.edu>
|
||||
Bruno Félix Rezende Ribeiro <oitofelix@gnu.org>
|
||||
Benno Schulenberg <coordinator@translationproject.org>
|
||||
Thomas Schwinge <thomas@codesourcery.com>
|
||||
Alexander Shendi <Alexander.Shendi@web.de>
|
||||
Alen Skondro <askondro@gmail.com>
|
||||
Matthias Wachs <wachs@net.in.tum.de>
|
||||
Christopher Allan Webber <cwebber@dustycloud.org>
|
||||
Philip Woods <elzairthesorcerer@gmail.com>
|
||||
|
||||
GNU Guix also includes non-software works. Thanks to the following
|
||||
people who contributed the logo and general artwork and themes:
|
||||
|
||||
Nikita Karetnikov <nikita@karetnikov.org>
|
||||
Felipe López <felipe.lopez@openmailbox.org>
|
||||
@@ -1,97 +0,0 @@
|
||||
-*- mode: org; coding: utf-8; -*-
|
||||
|
||||
#+TITLE: What's left to do?
|
||||
#+STARTUP: content hidestars
|
||||
|
||||
Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
* Add `guix publish' to publish the store using Guile's web server
|
||||
|
||||
Generate narinfos and nars on the fly, upon HTTP GET requests.
|
||||
Ideally, extend .nix-cache-info to include the server's public key, and also
|
||||
reply to requests for .narinfo.sig.
|
||||
Optionally, use Guile-Avahi to publish the service.
|
||||
|
||||
* MAYBE Add a substituter that uses the GNUnet DHT or [[http://libswift.org][libswift]]
|
||||
|
||||
Would be neat if binaries could be pushed to and pulled from the GNUnet DHT or
|
||||
rather libswift (since DHTs aren’t suited for large payloads). Guix users
|
||||
would sign their binaries, and define which binaries they trust.
|
||||
|
||||
Use UPnP and similar to traverse NAT, like ‘filegive’ does.
|
||||
|
||||
* user interface
|
||||
** add guile-ncurses interface
|
||||
|
||||
* extend <package>
|
||||
** add ‘recommends’ field
|
||||
|
||||
For instance, glibc, binutils, gcc, and ld-wrapper would recommend each other.
|
||||
‘guix package -i’ could ask interactively (?), or allow users to follow all or
|
||||
none of the recommendations.
|
||||
|
||||
** add a ‘user-environment-hook’
|
||||
|
||||
This should specify builder code to be run when building a user
|
||||
environment with ‘guix-package’. For instance, Texinfo’s hook would
|
||||
create a new ‘dir’.
|
||||
|
||||
** extend ‘propagated-build-inputs’ with support for multiple outputs
|
||||
|
||||
#+BEGIN_SRC scheme
|
||||
(outputs '("out" "include"))
|
||||
(propagated-build-inputs
|
||||
`(((("i1" ,p1 "o1")
|
||||
("i2" ,p2))
|
||||
=> "include")
|
||||
("i3" ,p3)))
|
||||
#+END_SRC
|
||||
|
||||
* synchronize non-GNU package descriptions with the [[http://directory.fsf.org][FSD]]
|
||||
|
||||
Meta-data for GNU packages, including descriptions and synopses, can be
|
||||
dumped from the FSD:
|
||||
http://directory.fsf.org/wiki?title=GNU/Export&action=purge .
|
||||
We could periodically synchronize with that.
|
||||
|
||||
* add a guildhall build system
|
||||
|
||||
The Guildhall is Guile’s packaging system. It should be easy to add a
|
||||
‘guildhall-build-system’ that does the right thing based on guildhall
|
||||
recipes.
|
||||
|
||||
* union
|
||||
|
||||
Support sophisticated collision handling when building a union: honor
|
||||
per-package priorities, etc.
|
||||
|
||||
* add GUIX_ALLOW_EXPENSIVE_TESTS
|
||||
|
||||
Tests that need to download stuff or otherwise take a long time would only be
|
||||
run when that is defined.
|
||||
|
||||
* add "guix challenge"
|
||||
|
||||
Would download a substitute, and compare its contents against a (hopefully
|
||||
locally-built) copy.
|
||||
|
||||
* guix build utils
|
||||
** MAYBE Change ‘ld-wrapper’ to add RPATH for libs passed by file name
|
||||
|
||||
** MAYBE Add equivalent to chrpath that uses [[https://gitorious.org/guile-dlhacks/guile-dlhacks/][guile-dlhacks]]
|
||||
|
||||
** MAYBE Add a hash-rewriting thing for deep dependency replacement without rebuild
|
||||
|
||||
See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]].
|
||||
|
||||
* distro
|
||||
** port to GNU/Hurd, aka. ‘i686-gnu’
|
||||
|
||||
Problems include that current glibc releases do not build on GNU/Hurd.
|
||||
In addition, there haven’t been stable releases of GNU Mach, MiG, and
|
||||
Hurd, which would be a pre-condition.
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=EyBc
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,112 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
aqt8u5BPGC7qb6oikKM=
|
||||
=X0wP
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,22 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEW9wl+BYJKwYBBAHaRw8BAQdAurhrcJpShB9c6LjA10W25nH06B7+rC7Nha1V
|
||||
ba9Jo3G0IkFsZXggVm9uZyA8YWxleHZvbmcxOTk1QGdtYWlsLmNvbT6IlgQTFggA
|
||||
PgIbAQULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBOx5gmSisiCOEHk4nl/xWAk6
|
||||
4/s4BQJb3CnABQkCL/NKAAoJEF/xWAk64/s4bHEA/RYaH1dxst2MIVuHZQg0VWuj
|
||||
m7cWKTqzUasHhAkEi83eAQDq3b0LI5bPo5H2eYmeoULDUTJpuihi692H0luJRi6O
|
||||
B4h1BBAWCAAdFiEEqH9mXV5BNBTOWlOF865L2yPs2hsFAlvcUbYACgkQ865L2yPs
|
||||
2hsKdAD/XSsEETKmG5H597axepu6zUi8VnzEXRgUGMz4Gh1S9PkBALnlSMINOACE
|
||||
2nMLnJnPrn3mebMZPLCvFJ/OMW1ugvUFuDMEW9wm0RYJKwYBBAHaRw8BAQdAk2ez
|
||||
QR8X4VTHUVUiUDCeiBqnQaQWT5hq0Uj+p3VxaC6I9QQYFggAJgIbAhYhBOx5gmSi
|
||||
siCOEHk4nl/xWAk64/s4BQJb3CnTBQkCL/JwAIF2IAQZFggAHRYhBDBvy48sAcJd
|
||||
KdMFVmHvUC72AlLyBQJb3CbRAAoJEGHvUC72AlLyAtwA/j8hOb1n52PJ+ql+vYfN
|
||||
E7dG7KAnN3yUW2NOAMkiN/qzAP4/QTDzBX1l0V6EUo8m6ozQFRLsDTYbEmb9OXrX
|
||||
vCrpCAkQX/FYCTrj+zhWcAD/XFQnM1bdBKGnMxxI8fQRteaRS4WGt4qhW+CrJ6Jp
|
||||
DIQBAKtU4vXg9hWlgHgvKXqSEEFm8HyGh/9jx/OoJSfKiLUHuDgEW9wm8BIKKwYB
|
||||
BAGXVQEFAQEHQHWQ4hmlimFlV1kHTzNeEZ7OH1YxL8GtF5fSNeC2iAB+AwEIB4h+
|
||||
BBgWCAAmAhsMFiEE7HmCZKKyII4QeTieX/FYCTrj+zgFAlvcKeoFCQIv8lAACgkQ
|
||||
X/FYCTrj+zhYEgEAqflYQ6CHMbxZfiG1shTFx6rj7RjD9FqzN2bgefw4dDIA/20a
|
||||
jPZhWiOxJFj8dk+LST8x8vTktqIJwnsNy0rxeugN
|
||||
=bApJ
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,44 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=E8mu
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,81 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=SWD4
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,43 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
y63vnx/jt5aE6zbSm/QZPTxn3hSVmA7zdw==
|
||||
=IApS
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,122 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
CitZrazL0TshmAveJ+txLlujAB+TQb4=
|
||||
=tjy+
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,60 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=OQSj
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,157 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
9REKVGCYlTkgaMg=
|
||||
=Y6Uz
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,174 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=4xbz
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,62 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
I2E7RxUJVs3RxJoJtA==
|
||||
=7Bob
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,451 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=T+4B
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,125 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
gec=
|
||||
=fLn6
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,29 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQENBFgAga0BCADIY78eSt/I4vGPo/UMBMQhcM8O2tptvlN0B2F6Z8sDAOwgWnQp
|
||||
d0x2AVM8I39VymnmbEQfWf/Y0U9XJqrmOz91NreTsZUsR9BSZy1fVIUbdoQTI8m8
|
||||
CGpjDBnloX+cQwwDPDS2RL2/a0rZciXUMunVvM/o2zLHUIyO/GeoqKN5mU4d4nZY
|
||||
PHtBOBpmzfvfyZLM1uyu/flbKGFqW0uKmS8MQWhyUdvIsiAU/Aofuf0dVp2C/Z5w
|
||||
01Vyw38fReZ20onxbabSjLrOT+K6vzrV/9P+6435Ptoek+5BoQX50f+cMYq4d2rE
|
||||
2PBenDy4xAloL/qOUj6XqwW9ZWAkLLiqYiJdABEBAAG0LkZlZGVyaWNvIEJlZmZh
|
||||
IChOb25lKSA8YmVmZmFAZmJlbmdpbmVlcmluZy5jaD6JATgEEwECACIFAlgAga0C
|
||||
GwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEFiTbg4vG1pMn44IAMKLId+i
|
||||
81Qp15Tn+VQQqxp5hI5IK2UpkzD4TnjAfX2AO9ao5fyCGKU0tWopUY4xjtU/YH9C
|
||||
A9eqfmo46PTU5AFssfTly9sxtNGKhWhViBlfNHH19W3I4eF7OwN1tRon/QacCDkj
|
||||
iUwElyE03/H/IPk5TB25tRmqpcoM4VrHjLIkVvmQOFOeItFKWg6jARY0x09KcHKp
|
||||
P+Q3SVdS+3JTrO97xhMjAaPByiRgrjGCYTnh9MIPl/ANJFIlJVx8R1ZqeGUJBd2E
|
||||
Or6RkG34WpSC/tdfI9vxajlAHAUAIoUNq6Jn7LvVLGcnZXcoE4gU8oBtXkr79SUd
|
||||
42S6HC+S/XeRHfy5AQ0EWACBrQEIAMsqA2oLmPYfdE1uhsOfDDrt72Lx7BADKqhz
|
||||
k8Nqny45ISPe03MjOkVUwuClceuZDGByZ/u7fslcWvAzcjcLDO4thWj1a9s1PUmH
|
||||
5evVBfFQNaHaZ5gdRdIuE+O/Vkv+pbbcR1zckBSj4PCZCBF2rQgukxNaeRB4rTAC
|
||||
0VgozLRK/OgDV8nyCA/0Lx1GAFoUj+KgIIUI0mPQzPuCMJHBoOVoWQit9qANTQN0
|
||||
89P/6r8dj/3AVPnUmnpENul1gtxa2k7ck9F9hH7ePD3djL2tYtQcH720eqrV70Kd
|
||||
gSp7Q/N4Kujw7b9RgNmo2cUuTkRfiqR+grp7XR9BD552haU8a5EAEQEAAYkBHwQY
|
||||
AQIACQUCWACBrQIbDAAKCRBYk24OLxtaTBr5B/4vmneqSuuMYmWcurgk2sv+WKky
|
||||
81Q0z4OkXfwBVz+H6wdpmij0de6ZMbFqD6GjtsAMmEXKdQtbElcryibSXJSCcF6z
|
||||
d534yOdkC0ptOH09thCE8SoZQ6QLQ+wkcqqCBQSNujN+TNG3L7a50p91wLg1AXYX
|
||||
F+cOJ2bND8p3g5RjxGk4EEjTHycc9BMA1SRvAZsJG7WB63q1oKPwdVPy7FnNvV6H
|
||||
OR1DJeh4Fkmq0cJCoQ6AOQ4AhVBRXv74XT+rnjVblT3ISSEyneF4IfsztGboIzac
|
||||
7M/2czPyFWuID9mjiEcRbormFsV0Pz3huJ4AMlmCb/96ZKPAWQYVa7EmPy5Q
|
||||
=SMJ5
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,29 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQENBFhmClEBCACWlMzAd3Nm5WD8wwVcZB4mMGJNK41tOKvFxLTpQBuVLSU8Oebv
|
||||
zzJx6cWTAylqMOEtI1K4q3BtxvQ9L7ofkY/N8tVRO0zSTjFhYaFYrpNAF4TY5pSa
|
||||
RTjeCp1FOU+2dR50LC7ev3p8TWSDPITdzXAhTBPRNIy1zBRNo/2FkwHktSov3W51
|
||||
Ej9f/g5iIuy2yVSwPzqxynXErgmwILXa3j40ZYXj1jEFeBoeLGzSPVbeFLknvS8B
|
||||
4yMx6JLVvvK+IilKzFZ97kFcnYVVx8HvyyZZLYwGapI0BSWSK4GWt1SBt4KVEREZ
|
||||
38SVtyGsCSX5PBBzv/zy+gO3HOsrXGzz0RbdABEBAAG0JkJlbiBXb29kY3JvZnQg
|
||||
PGRvbnR0cnVzdGJlbkBnbWFpbC5jb20+iQE3BBMBCAAhBQJYZgpRAhsDBQsJCAcC
|
||||
BhUICQoLAgQWAgMBAh4BAheAAAoJECpq2fSqwg32OuEH/iMyKHsHrS4upCAl+JBy
|
||||
Bq4H7MWnZQYC/f4hc1RX1WKnVYZRYuX4GTZYR+sE3J60kpdhv3ZPby5Q8mNyZXkH
|
||||
wf3sF8oNpqWK5LVdM32UChMQK7L7VTkMNG7lPAq1hfS0iLiaaDN366iQNv62u4eB
|
||||
8dw933877jkeobr8hnTaBNmUf2s9eJm23Cmk81DNaEFLsIvVMEcmuiz4x8rLYG+7
|
||||
o8usK7n684OI2DV0k90Xn876VZtFUg9PDxnHixlvzETo2D+C6HIIx8660YJHnogr
|
||||
jNEP6Wj0CT1MoiZ/dMZepY1k+uNeyreSuXv2w/Y2qzbRM34ccXArYNyFV/a5KyAJ
|
||||
i9e5AQ0EWGYKUQEIAMAnzONTpBbvK9KZ2cHh+zwAF83VDl3V6EVANbQWBV39V7Rh
|
||||
+Dmpuro9RqZ5VyGD94nFyeUUIFUO8Uy8wT9CW9A7FD1zFe38bhb7oC0K1XeGYm/0
|
||||
WMadUb3Zp42T2KCbWN4agH9B3CwhJ/WJEM5fRpTfGq2HMq5LGlLs0AlPCli582MJ
|
||||
81tmoSzdnauVdtm+4llWCk/trpCag5TUed1pHFooOKIqSDmCnLei2cuXODj5Bdt1
|
||||
O3yTErBRLZcHc/Ep32DYNDqlbyeWL1KDHj4Ckc4ietX/jqpExko/RuCIhBR1niKA
|
||||
AYT3P31p82oPvX9Mz4Ro5nbdzeYfjODCljp3+AMAEQEAAYkBHwQYAQgACQUCWGYK
|
||||
UQIbDAAKCRAqatn0qsIN9mn0B/48T6WI2PDGn79woGBoG6VWvV3JWrXW+tA45Zy/
|
||||
XVEdSuDvFhMHZYwlFMr3ckhaX5Zi7NuHATIwONekIjtLusf8ievFbR4Ez4DzoN8h
|
||||
FSe00vh0C0xaOzEkufPjanbtyVCfJgGPdHJ8alB4Wxq6INvg/UBrRW4sqEikaogk
|
||||
52VCdLtLp5MnhJkmMIn0BvHkOyFs2DdKa/uld85cBwLiwSQpi4nj8EVIG77gYR5S
|
||||
lSmS9m65DZYp2/r2x9b8uqkc40a/USdpP/M41Kj67iHnYcQrl6/9O2i1dYMONBql
|
||||
60488V4ArDgWSZn3X5jO45flYE2S1mUc3vzfRl02Ms/JV+u5
|
||||
=mgGB
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,185 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
ugGwG9zObyWr6mj4fFA8ureXYA==
|
||||
=1FKf
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Create the build system.
|
||||
|
||||
set -e -x
|
||||
exec autoreconf -vfi
|
||||
@@ -0,0 +1,51 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
S96bMw==
|
||||
=UgjY
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
ihtSniwGIQ==
|
||||
=75zi
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,31 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQENBF8JTDABCADIOK7ciRg/PGLYj8MRQa5SLuAgrcrJITXUI9cKOfJGtTJPGzLL
|
||||
LrDD8RmkOU82GY3lFjkQ+MzQApT1NtBJe700G+kPhBGoSiDZCsEMJp0EepA+RhOH
|
||||
EOybYHT5b83o3Yh1hfKnhJLhMfUmexuvwhxZs7baHSKnUAq0pJzv/YtyGYX7uqiM
|
||||
50JmEoLazXrRyl61clofOfGgFid4BQssV+IeTb0v5r7l4Qv5PU1XQqvO30Hk8+2x
|
||||
y/pBv0uJuNJUqtiaORm0caJjLp0rc76/E945Jh8n6e/NEOnmWDcgMf6RnkSTmE7I
|
||||
LvjrlOzGSGFD9I5WyGQD8NvpXlNP3wNFnV07ABEBAAG0LkJyZXR0IEdpbGlvIChQ
|
||||
cml2YXRlIEdQRyBLZXkpIDxicmV0dGdAZ251Lm9yZz6JAVQEEwEIAD4WIQToKsAm
|
||||
ldb/AkPKHlz2xS3RuifLhwUCXwlMMAIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgID
|
||||
AQIeAQIXgAAKCRD2xS3RuifLh75SB/9JZa+c7SWBk1GHIfIjBPJEKhX6fIjDvaH+
|
||||
dQQY0BWnE79mFrZCbPBtnRKohnGvAwWbYR5xsJrJimsme+PmDoqRCWtbeFS6QIJx
|
||||
Ig6iPBA/E7sSfbs6zaFz8E09AZt6xUWhFLMZNkuLU8JWFz8I/8jL32C3hRW/MKGe
|
||||
h4BypjUzVBVsKDwWOAoYsKZHuhQF5gzQrh96AqTgMh/gzCR5Q78fxF335arht9c2
|
||||
5WoXiYJn/NHeSNi12vQ2DtqhrkUWmN+dMbOGddaEk7JFbpmZhCUQFeK0LHyMnXCt
|
||||
nyKVWcC0br/LtvyXr+W7dyA6SJ6xpEb72jqIi9GAw5pA1fTxapTruQENBF8JTDAB
|
||||
CADBF+D4xd81wkxcyQlP8dhE+0NW269Y31pNx/qAZKVEzBbTqmrXWHSGf8CVZLJT
|
||||
5oVOmC3nMIwRo/GuK7VTjRj7PruBcXpbqzuvMAk44SGtQIk81xca1+xrQT8xAs/+
|
||||
fimxSgYeG5AoB6e+5KxHv7SjqwXjU3WE7gqz5lcUk5kBPfjo0UtzhReK3FePxcjF
|
||||
NFNr3CCnNST6g6y70Nno89bKd0XcgwYtuwapVBxo9FSZza826+rj0UMsg+XCcerI
|
||||
Yz6KREFb8hkkHi9zGSLgP26ONyFmYxM8qvfoDnHAjmuqlGFE00WTAh+qIIEFOzd+
|
||||
GPgbM7xYHCbdXPOQZ+z2ZK9LABEBAAGJATwEGAEIACYWIQToKsAmldb/AkPKHlz2
|
||||
xS3RuifLhwUCXwlMMAIbDAUJA8JnAAAKCRD2xS3RuifLh5LYB/9BArNzn//eTeDr
|
||||
HyOBYpaoo8uF6k5k9Bsm4A8shr8uSagaj7JvOKiQM7Xp+loIVwJ2kUbM6dzY0Opn
|
||||
SNlcr7cmP/a4LpRqDbdJVQidL+YeYuhjSdk49zmtA6fJ4KzMUZvc9wLQCRy6LHm7
|
||||
zgc0Z3kYfuIY4tLIjkesuz3CzCS2sCYyHZWkuIDk2Y0S/unH16EsoFWzbl+hUL7C
|
||||
kL8wTjBe6Ha1gcThdY0UaiSZBqLsRXHZWy9imOYyKZ6SO0K331MEyaOjS+/PAwbI
|
||||
hE5/QrslksZwfdvMuL5mhI/RqEW/Ngzxg2LHjqdoUq0rk4aEiQ3zoeQSY4xY5rTe
|
||||
o+dOFmwC
|
||||
=xoG7
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,347 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
ifj+ccdGYpikfv7KOzn2dvte
|
||||
=lIl+
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,98 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(define-module (build-self)
|
||||
#:use-module (gnu)
|
||||
#:use-module (guix)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:export (build))
|
||||
|
||||
;;; Commentary:
|
||||
;;;
|
||||
;;; When loaded, this module returns a monadic procedure of at least one
|
||||
;;; argument: the source tree to build. It returns a derivation that
|
||||
;;; builds it.
|
||||
;;;
|
||||
;;; This file uses modules provided by the already-installed Guix. Those
|
||||
;;; modules may be arbitrarily old compared to the version we want to
|
||||
;;; build. Because of that, it must rely on the smallest set of features
|
||||
;;; that are likely to be provided by the (guix) and (gnu) modules, and by
|
||||
;;; Guile itself, forever and ever.
|
||||
;;;
|
||||
;;; Code:
|
||||
|
||||
|
||||
;; The dependencies. Don't refer explicitly to the variables because they
|
||||
;; could be renamed or shuffled around in modules over time. Conversely,
|
||||
;; 'find-best-packages-by-name' is expected to always have the same semantics.
|
||||
|
||||
(define libgcrypt
|
||||
(first (find-best-packages-by-name "libgcrypt" #f)))
|
||||
|
||||
(define guile-json
|
||||
(first (find-best-packages-by-name "guile-json" #f)))
|
||||
|
||||
|
||||
|
||||
;; The actual build procedure.
|
||||
|
||||
(define (top-source-directory)
|
||||
"Return the name of the top-level directory of this source tree."
|
||||
(and=> (assoc-ref (current-source-location) 'filename)
|
||||
(lambda (file)
|
||||
(string-append (dirname file) "/.."))))
|
||||
|
||||
;; The procedure below is our return value.
|
||||
(define* (build source #:key verbose?
|
||||
#:allow-other-keys
|
||||
#:rest rest)
|
||||
"Return a derivation that unpacks SOURCE into STORE and compiles Scheme
|
||||
files."
|
||||
(define builder
|
||||
#~(begin
|
||||
(use-modules (guix build pull))
|
||||
|
||||
(let ((json (string-append #$guile-json "/share/guile/site/2.0")))
|
||||
(set! %load-path (cons json %load-path))
|
||||
(set! %load-compiled-path (cons json %load-compiled-path)))
|
||||
|
||||
(build-guix #$output #$source
|
||||
|
||||
;; XXX: This is not perfect, enabling VERBOSE? means
|
||||
;; building a different derivation.
|
||||
#:debug-port (if #$verbose?
|
||||
(current-error-port)
|
||||
(%make-void-port "w"))
|
||||
#:gcrypt #$libgcrypt)))
|
||||
|
||||
(gexp->derivation "guix-latest" builder
|
||||
#:modules '((guix build pull)
|
||||
(guix build utils))
|
||||
|
||||
;; Arrange so that our own (guix build …) modules are
|
||||
;; used.
|
||||
#:module-path (list (top-source-directory))))
|
||||
|
||||
;; This file is loaded by 'guix pull'; return it the build procedure.
|
||||
build
|
||||
|
||||
;; Local Variables:
|
||||
;; eval: (put 'with-load-path 'scheme-indent-function 1)
|
||||
;; End:
|
||||
|
||||
;;; build-self.scm ends here
|
||||
@@ -1,53 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;;
|
||||
;;; Check whether important binaries are available at hydra.gnu.org.
|
||||
;;;
|
||||
|
||||
(use-modules (guix store)
|
||||
(guix packages)
|
||||
(guix derivations)
|
||||
(gnu packages emacs)
|
||||
(gnu packages make-bootstrap)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26)
|
||||
(ice-9 format))
|
||||
|
||||
(with-store store
|
||||
(parameterize ((%graft? #f))
|
||||
(let* ((native (append-map (lambda (system)
|
||||
(map (cut package-derivation store <> system)
|
||||
(list %bootstrap-tarballs emacs)))
|
||||
%hydra-supported-systems))
|
||||
(cross (map (cut package-cross-derivation store
|
||||
%bootstrap-tarballs <>)
|
||||
'("mips64el-linux-gnuabi64")))
|
||||
(total (append native cross)))
|
||||
|
||||
(set-build-options store #:use-substitutes? #t)
|
||||
(let* ((total (map derivation->output-path total))
|
||||
(available (substitutable-paths store total))
|
||||
(missing (lset-difference string=? total available)))
|
||||
(if (null? missing)
|
||||
(format (current-error-port) "~a packages found substitutable~%"
|
||||
(length total))
|
||||
(format (current-error-port)
|
||||
"~a packages are not substitutable:~%~{ ~a~%~}~%"
|
||||
(length missing) missing))
|
||||
(exit (null? missing))))))
|
||||
@@ -1,81 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;;
|
||||
;;; Check whether important binaries are available at hydra.gnu.org.
|
||||
;;;
|
||||
|
||||
(use-modules (guix store)
|
||||
(guix packages)
|
||||
(guix derivations)
|
||||
(guix ui)
|
||||
(gnu packages commencement)
|
||||
(ice-9 match)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26))
|
||||
|
||||
(define (final-inputs store system)
|
||||
"Return the list of outputs directories of the final inputs for SYSTEM."
|
||||
(append-map (match-lambda
|
||||
((name package)
|
||||
(let ((drv (package-derivation store package system)))
|
||||
;; Libc's 'debug' output refers to gcc-cross-boot0, but it's
|
||||
;; hard to avoid, so we tolerate it. This should be the
|
||||
;; only exception.
|
||||
(filter-map (match-lambda
|
||||
(("debug" . directory)
|
||||
(if (string=? "glibc" (package-name package))
|
||||
#f
|
||||
directory))
|
||||
((_ . directory) directory))
|
||||
(derivation->output-paths drv)))))
|
||||
%final-inputs))
|
||||
|
||||
(define (assert-valid-substitute substitute)
|
||||
"Make sure SUBSTITUTE does not refer to any bootstrap inputs, and bail out
|
||||
if it does."
|
||||
(let ((references (substitutable-references substitute)))
|
||||
(when (any (cut string-contains <> "boot") references)
|
||||
(leave (_ "'~a' refers to bootstrap inputs: ~s~%")
|
||||
(substitutable-path substitute) references))))
|
||||
|
||||
(define (test-final-inputs store system)
|
||||
"Check whether the final inputs for SYSTEM are clean---i.e., they don't
|
||||
refer to the bootstrap tools."
|
||||
(format #t "checking final inputs for '~a'...~%" system)
|
||||
(let* ((inputs (final-inputs store system))
|
||||
(available (substitutable-path-info store inputs)))
|
||||
(for-each (lambda (dir)
|
||||
(unless (find (lambda (substitute)
|
||||
(string=? (substitutable-path substitute)
|
||||
dir))
|
||||
available)
|
||||
(leave (_ "~a (system: ~a) has no substitute~%")
|
||||
dir system)))
|
||||
inputs)
|
||||
|
||||
(for-each assert-valid-substitute available)))
|
||||
|
||||
;; Entry point.
|
||||
(with-store store
|
||||
(parameterize ((%graft? #f))
|
||||
(set-build-options store #:use-substitutes? #t)
|
||||
|
||||
(for-each (cut test-final-inputs store <>)
|
||||
%hydra-supported-systems)))
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;;
|
||||
;;; Download a binary file from an external source.
|
||||
;;;
|
||||
|
||||
(use-modules (ice-9 match)
|
||||
(web uri)
|
||||
(web client)
|
||||
(rnrs io ports)
|
||||
(srfi srfi-11)
|
||||
(guix utils)
|
||||
(guix hash))
|
||||
|
||||
(define %url-base
|
||||
"http://alpha.gnu.org/gnu/guix/bootstrap"
|
||||
|
||||
;; Alternately:
|
||||
;;"http://www.fdn.fr/~lcourtes/software/guix/packages"
|
||||
)
|
||||
|
||||
;; XXX: Work around <http://bugs.gnu.org/13095>, present in Guile
|
||||
;; up to 2.0.7.
|
||||
(module-define! (resolve-module '(web client))
|
||||
'shutdown (const #f))
|
||||
|
||||
(define (file-name->uri file)
|
||||
"Return the URI for FILE."
|
||||
(match (string-tokenize file (char-set-complement (char-set #\/)))
|
||||
((_ ... system basename)
|
||||
(string->uri (string-append %url-base "/" system
|
||||
(match system
|
||||
("armhf-linux"
|
||||
"/20150101/")
|
||||
(_
|
||||
"/20131110/"))
|
||||
basename)))))
|
||||
|
||||
(match (command-line)
|
||||
((_ file expected-hash)
|
||||
(let ((uri (file-name->uri file)))
|
||||
(format #t "downloading file `~a' from `~a'...~%"
|
||||
file (uri->string uri))
|
||||
(let*-values (((resp data) (http-get uri #:decode-body? #f))
|
||||
((hash) (bytevector->base16-string (sha256 data)))
|
||||
((part) (string-append file ".part")))
|
||||
(if (string=? expected-hash hash)
|
||||
(begin
|
||||
(call-with-output-file part
|
||||
(lambda (port)
|
||||
(put-bytevector port data)))
|
||||
(rename-file part file))
|
||||
(begin
|
||||
(format (current-error-port)
|
||||
"file at `~a' has SHA256 ~a; expected ~a~%"
|
||||
(uri->string uri) hash expected-hash)
|
||||
(exit 1)))))))
|
||||
@@ -1,120 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;;
|
||||
;;; Generate AUTHORS file for directory with the Guix git repository.
|
||||
;;;
|
||||
|
||||
(use-modules
|
||||
(ice-9 popen)
|
||||
(ice-9 rdelim)
|
||||
(ice-9 match)
|
||||
(srfi srfi-1)
|
||||
(guix config)
|
||||
(guix utils)
|
||||
(guix build utils))
|
||||
|
||||
(define %guix-dir
|
||||
(make-parameter #f))
|
||||
|
||||
(define-syntax-rule (append-maybe init-lst (test add-lst) ...)
|
||||
(let* ((lst init-lst)
|
||||
(lst (if test
|
||||
(append lst add-lst)
|
||||
lst))
|
||||
...)
|
||||
lst))
|
||||
|
||||
(define (command-output cmd . args)
|
||||
"Execute CMD with ARGS and return its output without trailing newspace."
|
||||
(let* ((port (apply open-pipe* OPEN_READ cmd args))
|
||||
(output (read-string port)))
|
||||
(close-port port)
|
||||
(string-trim-right output #\newline)))
|
||||
|
||||
(define (git-output . args)
|
||||
"Execute git command with ARGS and return its output without trailing
|
||||
newspace."
|
||||
(with-directory-excursion (%guix-dir)
|
||||
(apply command-output "git" args)))
|
||||
|
||||
(define* (contributors-string #:optional (range "HEAD"))
|
||||
"Return a string with names of people contributed to commit RANGE."
|
||||
(git-output "shortlog" "--numbered" "--summary" "--email" range))
|
||||
|
||||
(define* (tags #:key pattern sort)
|
||||
"Return a list of the git repository tags.
|
||||
PATTERN is passed to '--list' and SORT is passed to '--sort' options of
|
||||
'git tag' command."
|
||||
(let* ((args (append-maybe
|
||||
'("tag")
|
||||
(pattern (list "--list" pattern))
|
||||
(sort (list "--sort" sort))))
|
||||
(output (apply git-output args)))
|
||||
(string-split output #\newline)))
|
||||
|
||||
(define (version-tags)
|
||||
"Return only version tags (v0.8, etc.) sorted from the biggest version
|
||||
to the smallest one."
|
||||
(tags #:pattern "v*"
|
||||
#:sort "-version:refname"))
|
||||
|
||||
(define (generate-authors-file file)
|
||||
"Generate authors FILE."
|
||||
(define previous-release-tag
|
||||
(find (lambda (tag)
|
||||
(version>? %guix-version
|
||||
(substring tag 1))) ; remove leading 'v'
|
||||
(version-tags)))
|
||||
|
||||
(define release-range
|
||||
(string-append previous-release-tag "..HEAD"))
|
||||
|
||||
(with-output-to-file file
|
||||
(lambda ()
|
||||
(display "\
|
||||
GNU Guix consists of Scheme code that implements the deployment model
|
||||
of the Nix package management tool. In fact, it currently talks to a
|
||||
build daemon whose code comes from Nix (see the manual for details.)
|
||||
|
||||
Nix was initially written by Eelco Dolstra; other people have been
|
||||
contributing to it. See `nix/AUTHORS' for details.\n\n")
|
||||
(format #t "Contributors to GNU Guix ~a:\n\n"
|
||||
%guix-version)
|
||||
(display (contributors-string release-range))
|
||||
(newline) (newline)
|
||||
(display "Overall contributors:\n\n")
|
||||
(display (contributors-string))
|
||||
(newline))))
|
||||
|
||||
(define (show-help)
|
||||
(match (command-line)
|
||||
((me _ ...)
|
||||
(format #t "Usage: guile ~a DIRECTORY AUTHORS
|
||||
Generate AUTHORS file for DIRECTORY with the Guix git repository.\n"
|
||||
me))))
|
||||
|
||||
(match (command-line)
|
||||
((_ guix-dir authors-file)
|
||||
(parameterize ((%guix-dir guix-dir))
|
||||
(generate-authors-file authors-file)))
|
||||
(_
|
||||
(show-help)
|
||||
(exit 1)))
|
||||
|
||||
;;; generate-authors.scm ends here
|
||||
@@ -1,432 +0,0 @@
|
||||
eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
|
||||
& eval 'exec perl -wS "$0" $argv:q'
|
||||
if 0;
|
||||
# Convert git log output to ChangeLog format.
|
||||
|
||||
my $VERSION = '2012-07-29 06:11'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
# Copyright (C) 2008-2013 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Written by Jim Meyering
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
(my $ME = $0) =~ s|.*/||;
|
||||
|
||||
# use File::Coda; # http://meyering.net/code/Coda/
|
||||
END {
|
||||
defined fileno STDOUT or return;
|
||||
close STDOUT and return;
|
||||
warn "$ME: failed to close standard output: $!\n";
|
||||
$? ||= 1;
|
||||
}
|
||||
|
||||
sub usage ($)
|
||||
{
|
||||
my ($exit_code) = @_;
|
||||
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||
if ($exit_code != 0)
|
||||
{
|
||||
print $STREAM "Try '$ME --help' for more information.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print $STREAM <<EOF;
|
||||
Usage: $ME [OPTIONS] [ARGS]
|
||||
|
||||
Convert git log output to ChangeLog format. If present, any ARGS
|
||||
are passed to "git log". To avoid ARGS being parsed as options to
|
||||
$ME, they may be preceded by '--'.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
--amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
|
||||
makes a change to SHA1's commit log text or metadata.
|
||||
--append-dot append a dot to the first line of each commit message if
|
||||
there is no other punctuation or blank at the end.
|
||||
--no-cluster never cluster commit messages under the same date/author
|
||||
header; the default is to cluster adjacent commit messages
|
||||
if their headers are the same and neither commit message
|
||||
contains multiple paragraphs.
|
||||
--srcdir=DIR the root of the source tree, from which the .git/
|
||||
directory can be derived.
|
||||
--since=DATE convert only the logs since DATE;
|
||||
the default is to convert all log entries.
|
||||
--format=FMT set format string for commit subject and body;
|
||||
see 'man git-log' for the list of format metacharacters;
|
||||
the default is '%s%n%b%n'
|
||||
--strip-tab remove one additional leading TAB from commit message lines.
|
||||
--strip-cherry-pick remove data inserted by "git cherry-pick";
|
||||
this includes the "cherry picked from commit ..." line,
|
||||
and the possible final "Conflicts:" paragraph.
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
$ME --since=2008-01-01 > ChangeLog
|
||||
$ME -- -n 5 foo > last-5-commits-to-branch-foo
|
||||
|
||||
SPECIAL SYNTAX:
|
||||
|
||||
The following types of strings are interpreted specially when they appear
|
||||
at the beginning of a log message line. They are not copied to the output.
|
||||
|
||||
Copyright-paperwork-exempt: Yes
|
||||
Append the "(tiny change)" notation to the usual "date name email"
|
||||
ChangeLog header to mark a change that does not require a copyright
|
||||
assignment.
|
||||
Co-authored-by: Joe User <user\@example.com>
|
||||
List the specified name and email address on a second
|
||||
ChangeLog header, denoting a co-author.
|
||||
Signed-off-by: Joe User <user\@example.com>
|
||||
These lines are simply elided.
|
||||
|
||||
In a FILE specified via --amend, comment lines (starting with "#") are ignored.
|
||||
FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
|
||||
a line) referring to a commit in the current project, and CODE refers to one
|
||||
or more consecutive lines of Perl code. Pairs must be separated by one or
|
||||
more blank line.
|
||||
|
||||
Here is sample input for use with --amend=FILE, from coreutils:
|
||||
|
||||
3a169f4c5d9159283548178668d2fae6fced3030
|
||||
# fix typo in title:
|
||||
s/all tile types/all file types/
|
||||
|
||||
1379ed974f1fa39b12e2ffab18b3f7a607082202
|
||||
# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
|
||||
# Change the author to be Paul. Note the escaped "@":
|
||||
s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
|
||||
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
# If the string $S is a well-behaved file name, simply return it.
|
||||
# If it contains white space, quotes, etc., quote it, and return the new string.
|
||||
sub shell_quote($)
|
||||
{
|
||||
my ($s) = @_;
|
||||
if ($s =~ m![^\w+/.,-]!)
|
||||
{
|
||||
# Convert each single quote to '\''
|
||||
$s =~ s/\'/\'\\\'\'/g;
|
||||
# Then single quote the string.
|
||||
$s = "'$s'";
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
||||
sub quoted_cmd(@)
|
||||
{
|
||||
return join (' ', map {shell_quote $_} @_);
|
||||
}
|
||||
|
||||
# Parse file F.
|
||||
# Comment lines (starting with "#") are ignored.
|
||||
# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
|
||||
# (alone on a line) referring to a commit in the current project, and
|
||||
# CODE refers to one or more consecutive lines of Perl code.
|
||||
# Pairs must be separated by one or more blank line.
|
||||
sub parse_amend_file($)
|
||||
{
|
||||
my ($f) = @_;
|
||||
|
||||
open F, '<', $f
|
||||
or die "$ME: $f: failed to open for reading: $!\n";
|
||||
|
||||
my $fail;
|
||||
my $h = {};
|
||||
my $in_code = 0;
|
||||
my $sha;
|
||||
while (defined (my $line = <F>))
|
||||
{
|
||||
$line =~ /^\#/
|
||||
and next;
|
||||
chomp $line;
|
||||
$line eq ''
|
||||
and $in_code = 0, next;
|
||||
|
||||
if (!$in_code)
|
||||
{
|
||||
$line =~ /^([0-9a-fA-F]{40})$/
|
||||
or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
|
||||
$fail = 1, next;
|
||||
$sha = lc $1;
|
||||
$in_code = 1;
|
||||
exists $h->{$sha}
|
||||
and (warn "$ME: $f:$.: duplicate SHA1\n"),
|
||||
$fail = 1, next;
|
||||
}
|
||||
else
|
||||
{
|
||||
$h->{$sha} ||= '';
|
||||
$h->{$sha} .= "$line\n";
|
||||
}
|
||||
}
|
||||
close F;
|
||||
|
||||
$fail
|
||||
and exit 1;
|
||||
|
||||
return $h;
|
||||
}
|
||||
|
||||
# git_dir_option $SRCDIR
|
||||
#
|
||||
# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
|
||||
# is undef). Return as a list (0 or 1 element).
|
||||
sub git_dir_option($)
|
||||
{
|
||||
my ($srcdir) = @_;
|
||||
my @res = ();
|
||||
if (defined $srcdir)
|
||||
{
|
||||
my $qdir = shell_quote $srcdir;
|
||||
my $cmd = "cd $qdir && git rev-parse --show-toplevel";
|
||||
my $qcmd = shell_quote $cmd;
|
||||
my $git_dir = qx($cmd);
|
||||
defined $git_dir
|
||||
or die "$ME: cannot run $qcmd: $!\n";
|
||||
$? == 0
|
||||
or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
|
||||
chomp $git_dir;
|
||||
push @res, "--git-dir=$git_dir/.git";
|
||||
}
|
||||
@res;
|
||||
}
|
||||
|
||||
{
|
||||
my $since_date;
|
||||
my $format_string = '%s%n%b%n';
|
||||
my $amend_file;
|
||||
my $append_dot = 0;
|
||||
my $cluster = 1;
|
||||
my $strip_tab = 0;
|
||||
my $strip_cherry_pick = 0;
|
||||
my $srcdir;
|
||||
GetOptions
|
||||
(
|
||||
help => sub { usage 0 },
|
||||
version => sub { print "$ME version $VERSION\n"; exit },
|
||||
'since=s' => \$since_date,
|
||||
'format=s' => \$format_string,
|
||||
'amend=s' => \$amend_file,
|
||||
'append-dot' => \$append_dot,
|
||||
'cluster!' => \$cluster,
|
||||
'strip-tab' => \$strip_tab,
|
||||
'strip-cherry-pick' => \$strip_cherry_pick,
|
||||
'srcdir=s' => \$srcdir,
|
||||
) or usage 1;
|
||||
|
||||
defined $since_date
|
||||
and unshift @ARGV, "--since=$since_date";
|
||||
|
||||
# This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
|
||||
# that makes a correction in the log or attribution of that commit.
|
||||
my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
|
||||
|
||||
my @cmd = ('git',
|
||||
git_dir_option $srcdir,
|
||||
qw(log --log-size),
|
||||
'--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
|
||||
open PIPE, '-|', @cmd
|
||||
or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
|
||||
. "(Is your Git too old? Version 1.5.1 or later is required.)\n");
|
||||
|
||||
my $prev_multi_paragraph;
|
||||
my $prev_date_line = '';
|
||||
my @prev_coauthors = ();
|
||||
while (1)
|
||||
{
|
||||
defined (my $in = <PIPE>)
|
||||
or last;
|
||||
$in =~ /^log size (\d+)$/
|
||||
or die "$ME:$.: Invalid line (expected log size):\n$in";
|
||||
my $log_nbytes = $1;
|
||||
|
||||
my $log;
|
||||
my $n_read = read PIPE, $log, $log_nbytes;
|
||||
$n_read == $log_nbytes
|
||||
or die "$ME:$.: unexpected EOF\n";
|
||||
|
||||
# Extract leading hash.
|
||||
my ($sha, $rest) = split ':', $log, 2;
|
||||
defined $sha
|
||||
or die "$ME:$.: malformed log entry\n";
|
||||
$sha =~ /^[0-9a-fA-F]{40}$/
|
||||
or die "$ME:$.: invalid SHA1: $sha\n";
|
||||
|
||||
# If this commit's log requires any transformation, do it now.
|
||||
my $code = $amend_code->{$sha};
|
||||
if (defined $code)
|
||||
{
|
||||
eval 'use Safe';
|
||||
my $s = new Safe;
|
||||
# Put the unpreprocessed entry into "$_".
|
||||
$_ = $rest;
|
||||
|
||||
# Let $code operate on it, safely.
|
||||
my $r = $s->reval("$code")
|
||||
or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
|
||||
|
||||
# Note that we've used this entry.
|
||||
delete $amend_code->{$sha};
|
||||
|
||||
# Update $rest upon success.
|
||||
$rest = $_;
|
||||
}
|
||||
|
||||
# Remove lines inserted by "git cherry-pick".
|
||||
if ($strip_cherry_pick)
|
||||
{
|
||||
$rest =~ s/^\s*Conflicts:\n.*//sm;
|
||||
$rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
|
||||
}
|
||||
|
||||
my @line = split "\n", $rest;
|
||||
my $author_line = shift @line;
|
||||
defined $author_line
|
||||
or die "$ME:$.: unexpected EOF\n";
|
||||
$author_line =~ /^(\d+) (.*>)$/
|
||||
or die "$ME:$.: Invalid line "
|
||||
. "(expected date/author/email):\n$author_line\n";
|
||||
|
||||
# Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
|
||||
# `(tiny change)' annotation.
|
||||
my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
|
||||
? ' (tiny change)' : '');
|
||||
|
||||
my $date_line = sprintf "%s %s$tiny\n",
|
||||
strftime ("%F", localtime ($1)), $2;
|
||||
|
||||
my @coauthors = grep /^Co-authored-by:.*$/, @line;
|
||||
# Omit meta-data lines we've already interpreted.
|
||||
@line = grep !/^(?:Signed-off-by:[ ].*>$
|
||||
|Co-authored-by:[ ]
|
||||
|Copyright-paperwork-exempt:[ ]
|
||||
)/x, @line;
|
||||
|
||||
# Remove leading and trailing blank lines.
|
||||
if (@line)
|
||||
{
|
||||
while ($line[0] =~ /^\s*$/) { shift @line; }
|
||||
while ($line[$#line] =~ /^\s*$/) { pop @line; }
|
||||
}
|
||||
|
||||
# Record whether there are two or more paragraphs.
|
||||
my $multi_paragraph = grep /^\s*$/, @line;
|
||||
|
||||
# Format 'Co-authored-by: A U Thor <email@example.com>' lines in
|
||||
# standard multi-author ChangeLog format.
|
||||
for (@coauthors)
|
||||
{
|
||||
s/^Co-authored-by:\s*/\t /;
|
||||
s/\s*</ </;
|
||||
|
||||
/<.*?@.*\..*>/
|
||||
or warn "$ME: warning: missing email address for "
|
||||
. substr ($_, 5) . "\n";
|
||||
}
|
||||
|
||||
# If clustering of commit messages has been disabled, if this header
|
||||
# would be different from the previous date/name/email/coauthors header,
|
||||
# or if this or the previous entry consists of two or more paragraphs,
|
||||
# then print the header.
|
||||
if ( ! $cluster
|
||||
|| $date_line ne $prev_date_line
|
||||
|| "@coauthors" ne "@prev_coauthors"
|
||||
|| $multi_paragraph
|
||||
|| $prev_multi_paragraph)
|
||||
{
|
||||
$prev_date_line eq ''
|
||||
or print "\n";
|
||||
print $date_line;
|
||||
@coauthors
|
||||
and print join ("\n", @coauthors), "\n";
|
||||
}
|
||||
$prev_date_line = $date_line;
|
||||
@prev_coauthors = @coauthors;
|
||||
$prev_multi_paragraph = $multi_paragraph;
|
||||
|
||||
# If there were any lines
|
||||
if (@line == 0)
|
||||
{
|
||||
warn "$ME: warning: empty commit message:\n $date_line\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($append_dot)
|
||||
{
|
||||
# If the first line of the message has enough room, then
|
||||
if (length $line[0] < 72)
|
||||
{
|
||||
# append a dot if there is no other punctuation or blank
|
||||
# at the end.
|
||||
$line[0] =~ /[[:punct:]\s]$/
|
||||
or $line[0] .= '.';
|
||||
}
|
||||
}
|
||||
|
||||
# Remove one additional leading TAB from each line.
|
||||
$strip_tab
|
||||
and map { s/^\t// } @line;
|
||||
|
||||
# Prefix each non-empty line with a TAB.
|
||||
@line = map { length $_ ? "\t$_" : '' } @line;
|
||||
|
||||
print "\n", join ("\n", @line), "\n";
|
||||
}
|
||||
|
||||
defined ($in = <PIPE>)
|
||||
or last;
|
||||
$in ne "\n"
|
||||
and die "$ME:$.: unexpected line:\n$in";
|
||||
}
|
||||
|
||||
close PIPE
|
||||
or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
|
||||
# FIXME-someday: include $PROCESS_STATUS in the diagnostic
|
||||
|
||||
# Complain about any unused entry in the --amend=F specified file.
|
||||
my $fail = 0;
|
||||
foreach my $sha (keys %$amend_code)
|
||||
{
|
||||
warn "$ME:$amend_file: unused entry: $sha\n";
|
||||
$fail = 1;
|
||||
}
|
||||
|
||||
exit $fail;
|
||||
}
|
||||
|
||||
# Local Variables:
|
||||
# mode: perl
|
||||
# indent-tabs-mode: nil
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "my $VERSION = '"
|
||||
# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "'; # UTC"
|
||||
# End:
|
||||
@@ -1,84 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
;;;
|
||||
;;; This file defines an operating system configuration for the demo virtual
|
||||
;;; machine images that we build.
|
||||
;;;
|
||||
|
||||
(use-modules (gnu))
|
||||
(use-service-modules desktop xorg networking avahi dbus)
|
||||
(use-package-modules linux xorg tor avahi)
|
||||
|
||||
(operating-system
|
||||
(host-name "gnu")
|
||||
(timezone "Europe/Paris")
|
||||
(locale "en_US.utf8")
|
||||
|
||||
(bootloader (grub-configuration
|
||||
(device "/dev/sda")))
|
||||
(file-systems
|
||||
;; We provide a dummy file system for /, but that's OK because the VM build
|
||||
;; code will automatically declare the / file system for us.
|
||||
(cons* (file-system
|
||||
(mount-point "/")
|
||||
(device "dummy")
|
||||
(type "dummy"))
|
||||
;; %fuse-control-file-system ; needs fuse.ko
|
||||
;; %binary-format-file-system ; needs binfmt.ko
|
||||
%base-file-systems))
|
||||
|
||||
(users (list (user-account
|
||||
(name "guest")
|
||||
(group "users")
|
||||
(supplementary-groups '("wheel")) ; allow use of sudo
|
||||
(password "")
|
||||
(comment "Guest of GNU")
|
||||
(home-directory "/home/guest"))))
|
||||
|
||||
(issue "
|
||||
This is an alpha preview of the GNU system. Welcome.
|
||||
|
||||
This image features the GNU Guix package manager, which was used to
|
||||
build it (http://www.gnu.org/software/guix/). The init system is
|
||||
GNU dmd (http://www.gnu.org/software/dmd/).
|
||||
|
||||
You can log in as 'guest' or 'root' with no password.
|
||||
")
|
||||
|
||||
(services (cons* (slim-service #:auto-login? #t
|
||||
#:default-user "guest")
|
||||
|
||||
;; QEMU networking settings.
|
||||
(static-networking-service "eth0" "10.0.2.10"
|
||||
#:name-servers '("10.0.2.3")
|
||||
#:gateway "10.0.2.2")
|
||||
|
||||
(avahi-service)
|
||||
(dbus-service)
|
||||
(tor-service)
|
||||
|
||||
%base-services))
|
||||
(pam-services
|
||||
;; Explicitly allow for empty passwords.
|
||||
(base-pam-services #:allow-empty-passwords? #t))
|
||||
|
||||
(packages (cons* strace
|
||||
tor torsocks
|
||||
xterm avahi %base-packages)))
|
||||
@@ -1,271 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;;
|
||||
;;; This file defines build jobs for the Hydra continuation integration
|
||||
;;; tool.
|
||||
;;;
|
||||
|
||||
;; Attempt to use our very own Guix modules.
|
||||
(eval-when (compile load eval)
|
||||
|
||||
;; Ignore any available .go, and force recompilation. This is because our
|
||||
;; checkout in the store has mtime set to the epoch, and thus .go files look
|
||||
;; newer, even though they may not correspond.
|
||||
(set! %fresh-auto-compile #t)
|
||||
|
||||
(and=> (assoc-ref (current-source-location) 'filename)
|
||||
(lambda (file)
|
||||
(let ((dir (string-append (dirname file) "/../..")))
|
||||
(format (current-error-port) "prepending ~s to the load path~%"
|
||||
dir)
|
||||
(set! %load-path (cons dir %load-path))))))
|
||||
|
||||
(use-modules (guix config)
|
||||
(guix store)
|
||||
(guix packages)
|
||||
(guix derivations)
|
||||
(guix monads)
|
||||
((guix licenses) #:select (gpl3+))
|
||||
((guix utils) #:select (%current-system))
|
||||
((guix scripts system) #:select (read-operating-system))
|
||||
(gnu packages)
|
||||
(gnu packages gcc)
|
||||
(gnu packages base)
|
||||
(gnu packages gawk)
|
||||
(gnu packages guile)
|
||||
(gnu packages gettext)
|
||||
(gnu packages compression)
|
||||
(gnu packages multiprecision)
|
||||
(gnu packages make-bootstrap)
|
||||
(gnu packages commencement)
|
||||
(gnu packages package-management)
|
||||
(gnu system)
|
||||
(gnu system vm)
|
||||
(gnu system install)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26)
|
||||
(ice-9 match))
|
||||
|
||||
;; XXX: Debugging hack: since `hydra-eval-guile-jobs' redirects the output
|
||||
;; port to the bit bucket, let us write to the error port instead.
|
||||
(setvbuf (current-error-port) _IOLBF)
|
||||
(set-current-output-port (current-error-port))
|
||||
|
||||
(define* (package->alist store package system
|
||||
#:optional (package-derivation package-derivation))
|
||||
"Convert PACKAGE to an alist suitable for Hydra."
|
||||
`((derivation . ,(derivation-file-name
|
||||
(package-derivation store package system
|
||||
#:graft? #f)))
|
||||
(description . ,(package-synopsis package))
|
||||
(long-description . ,(package-description package))
|
||||
(license . ,(package-license package))
|
||||
(home-page . ,(package-home-page package))
|
||||
(maintainers . ("bug-guix@gnu.org"))
|
||||
(timeout . ,(or (assoc-ref (package-properties package) 'timeout)
|
||||
72000)))) ; 20 hours by default
|
||||
|
||||
(define (package-job store job-name package system)
|
||||
"Return a job called JOB-NAME that builds PACKAGE on SYSTEM."
|
||||
(let ((job-name (symbol-append job-name (string->symbol ".")
|
||||
(string->symbol system))))
|
||||
`(,job-name . ,(cut package->alist store package system))))
|
||||
|
||||
(define (package-cross-job store job-name package target system)
|
||||
"Return a job called TARGET.JOB-NAME that cross-builds PACKAGE for TARGET on
|
||||
SYSTEM."
|
||||
`(,(symbol-append (string->symbol target) (string->symbol ".") job-name
|
||||
(string->symbol ".") (string->symbol system)) .
|
||||
,(cute package->alist store package system
|
||||
(lambda* (store package system #:key graft?)
|
||||
(package-cross-derivation store package target system
|
||||
#:graft? graft?)))))
|
||||
|
||||
(define %core-packages
|
||||
;; Note: Don't put the '-final' package variants because (1) that's
|
||||
;; implicit, and (2) they cannot be cross-built (due to the explicit input
|
||||
;; chain.)
|
||||
(list gcc-4.8 gcc-4.9 gcc-5 glibc binutils
|
||||
gmp mpfr mpc coreutils findutils diffutils patch sed grep
|
||||
gawk gnu-gettext hello guile-2.0 zlib gzip xz
|
||||
%bootstrap-binaries-tarball
|
||||
%binutils-bootstrap-tarball
|
||||
%glibc-bootstrap-tarball
|
||||
%gcc-bootstrap-tarball
|
||||
%guile-bootstrap-tarball
|
||||
%bootstrap-tarballs))
|
||||
|
||||
(define %packages-to-cross-build
|
||||
%core-packages)
|
||||
|
||||
(define %cross-targets
|
||||
'("mips64el-linux-gnu"
|
||||
"mips64el-linux-gnuabi64"))
|
||||
|
||||
(define (demo-os)
|
||||
"Return the \"demo\" 'operating-system' structure."
|
||||
(let* ((dir (dirname (assoc-ref (current-source-location) 'filename)))
|
||||
(file (string-append dir "/demo-os.scm")))
|
||||
(read-operating-system file)))
|
||||
|
||||
(define (qemu-jobs store system)
|
||||
"Return a list of jobs that build QEMU images for SYSTEM."
|
||||
(define (->alist drv)
|
||||
`((derivation . ,(derivation-file-name drv))
|
||||
(description . "Stand-alone QEMU image of the GNU system")
|
||||
(long-description . "This is a demo stand-alone QEMU image of the GNU
|
||||
system.")
|
||||
(license . ,gpl3+)
|
||||
(home-page . ,%guix-home-page-url)
|
||||
(maintainers . ("bug-guix@gnu.org"))))
|
||||
|
||||
(define (->job name drv)
|
||||
(let ((name (symbol-append name (string->symbol ".")
|
||||
(string->symbol system))))
|
||||
`(,name . ,(cut ->alist drv))))
|
||||
|
||||
(define MiB
|
||||
(expt 2 20))
|
||||
|
||||
(if (member system '("x86_64-linux" "i686-linux"))
|
||||
(list (->job 'qemu-image
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(system-qemu-image (demo-os)
|
||||
#:disk-image-size
|
||||
(* 1400 MiB))))) ; 1.4 GiB
|
||||
(->job 'usb-image
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(system-disk-image installation-os
|
||||
#:disk-image-size
|
||||
(* 860 MiB))))))
|
||||
'()))
|
||||
|
||||
(define (tarball-jobs store system)
|
||||
"Return Hydra jobs to build the self-contained Guix binary tarball."
|
||||
(define (->alist drv)
|
||||
`((derivation . ,(derivation-file-name drv))
|
||||
(description . "Stand-alone binary Guix tarball")
|
||||
(long-description . "This is a tarball containing binaries of Guix and
|
||||
all its dependencies, and ready to be installed on non-GuixSD distributions.")
|
||||
(license . ,gpl3+)
|
||||
(home-page . ,%guix-home-page-url)
|
||||
(maintainers . ("bug-guix@gnu.org"))))
|
||||
|
||||
(define (->job name drv)
|
||||
(let ((name (symbol-append name (string->symbol ".")
|
||||
(string->symbol system))))
|
||||
`(,name . ,(cut ->alist drv))))
|
||||
|
||||
;; XXX: Add a job for the stable Guix?
|
||||
(list (->job 'binary-tarball
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(self-contained-tarball))
|
||||
#:system system))))
|
||||
|
||||
(define job-name
|
||||
;; Return the name of a package's job.
|
||||
(compose string->symbol package-full-name))
|
||||
|
||||
(define package->job
|
||||
(let ((base-packages
|
||||
(delete-duplicates
|
||||
(append-map (match-lambda
|
||||
((_ package _ ...)
|
||||
(match (package-transitive-inputs package)
|
||||
(((_ inputs _ ...) ...)
|
||||
inputs))))
|
||||
%final-inputs))))
|
||||
(lambda (store package system)
|
||||
"Return a job for PACKAGE on SYSTEM, or #f if this combination is not
|
||||
valid."
|
||||
(cond ((member package base-packages)
|
||||
#f)
|
||||
((supported-package? package system)
|
||||
(package-job store (job-name package) package system))
|
||||
(else
|
||||
#f)))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Hydra entry point.
|
||||
;;;
|
||||
|
||||
(define (hydra-jobs store arguments)
|
||||
"Return Hydra jobs."
|
||||
(define subset
|
||||
(match (assoc-ref arguments 'subset)
|
||||
("core" 'core) ; only build core packages
|
||||
(_ 'all))) ; build everything
|
||||
|
||||
(define (cross-jobs system)
|
||||
(define (from-32-to-64? target)
|
||||
;; Return true if SYSTEM is 32-bit and TARGET is 64-bit. This hack
|
||||
;; prevents known-to-fail cross-builds from i686-linux or armhf-linux to
|
||||
;; mips64el-linux-gnuabi64.
|
||||
(and (or (string-prefix? "i686-" system)
|
||||
(string-prefix? "armhf-" system))
|
||||
(string-suffix? "64" target)))
|
||||
|
||||
(define (same? target)
|
||||
;; Return true if SYSTEM and TARGET are the same thing. This is so we
|
||||
;; don't try to cross-compile to 'mips64el-linux-gnu' from
|
||||
;; 'mips64el-linux'.
|
||||
(string-contains target system))
|
||||
|
||||
(define (either proc1 proc2)
|
||||
(lambda (x)
|
||||
(or (proc1 x) (proc2 x))))
|
||||
|
||||
(append-map (lambda (target)
|
||||
(map (lambda (package)
|
||||
(package-cross-job store (job-name package)
|
||||
package target system))
|
||||
%packages-to-cross-build))
|
||||
(remove (either from-32-to-64? same?) %cross-targets)))
|
||||
|
||||
;; Return one job for each package, except bootstrap packages.
|
||||
(append-map (lambda (system)
|
||||
(case subset
|
||||
((all)
|
||||
;; Build everything.
|
||||
(fold-packages (lambda (package result)
|
||||
(let ((job (package->job store package
|
||||
system)))
|
||||
(if job
|
||||
(cons job result)
|
||||
result)))
|
||||
(append (qemu-jobs store system)
|
||||
(tarball-jobs store system)
|
||||
(cross-jobs system))))
|
||||
((core)
|
||||
;; Build core packages only.
|
||||
(append (map (lambda (package)
|
||||
(package-job store (job-name package)
|
||||
package system))
|
||||
%core-packages)
|
||||
(cross-jobs system)))
|
||||
(else
|
||||
(error "unknown subset" subset))))
|
||||
%hydra-supported-systems))
|
||||
@@ -1,103 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;;
|
||||
;;; This file defines build jobs of Guix itself for the Hydra continuation
|
||||
;;; integration tool.
|
||||
;;;
|
||||
|
||||
;; Attempt to use our very own Guix modules.
|
||||
(eval-when (compile load eval)
|
||||
|
||||
;; Ignore any available .go, and force recompilation. This is because our
|
||||
;; checkout in the store has mtime set to the epoch, and thus .go files look
|
||||
;; newer, even though they may not correspond.
|
||||
(set! %fresh-auto-compile #t)
|
||||
|
||||
;; Display which files are loaded.
|
||||
(set! %load-verbosely #t)
|
||||
|
||||
(and=> (assoc-ref (current-source-location) 'filename)
|
||||
(lambda (file)
|
||||
(let ((dir (string-append (dirname file) "/../..")))
|
||||
(format (current-error-port) "prepending ~s to the load path~%"
|
||||
dir)
|
||||
(set! %load-path (cons dir %load-path))))))
|
||||
|
||||
|
||||
(use-modules (guix store)
|
||||
(guix packages)
|
||||
(guix utils)
|
||||
(guix derivations)
|
||||
(guix build-system gnu)
|
||||
(gnu packages version-control)
|
||||
(gnu packages package-management)
|
||||
(gnu packages graphviz)
|
||||
(gnu packages man)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26)
|
||||
(ice-9 match))
|
||||
|
||||
;; XXX: Debugging hack: since `hydra-eval-guile-jobs' redirects the output
|
||||
;; port to the bit bucket, let us write to the error port instead.
|
||||
(setvbuf (current-error-port) _IOLBF)
|
||||
(set-current-output-port (current-error-port))
|
||||
|
||||
(define* (package->alist store package system
|
||||
#:optional (package-derivation package-derivation))
|
||||
"Convert PACKAGE to an alist suitable for Hydra."
|
||||
`((derivation . ,(derivation-file-name
|
||||
(package-derivation store package system)))
|
||||
(description . ,(package-synopsis package))
|
||||
(long-description . ,(package-description package))
|
||||
(license . ,(package-license package))
|
||||
(home-page . ,(package-home-page package))
|
||||
(maintainers . ("bug-guix@gnu.org"))))
|
||||
|
||||
(define (tarball-package checkout)
|
||||
"Return a package that does `make distcheck' from CHECKOUT, a directory
|
||||
containing a Git checkout of Guix."
|
||||
(dist-package (package
|
||||
(inherit guix)
|
||||
(native-inputs `(("graphviz" ,graphviz)
|
||||
("help2man" ,help2man)
|
||||
,@(package-native-inputs guix))))
|
||||
checkout))
|
||||
|
||||
(define (hydra-jobs store arguments)
|
||||
"Return Hydra jobs."
|
||||
(define systems
|
||||
(match (filter-map (match-lambda
|
||||
(('system . value)
|
||||
value)
|
||||
(_ #f))
|
||||
arguments)
|
||||
((lst ..1)
|
||||
lst)
|
||||
(_
|
||||
(list (%current-system)))))
|
||||
|
||||
(define guix-checkout
|
||||
(assq-ref arguments 'guix))
|
||||
|
||||
(let ((guix (assq-ref guix-checkout 'file-name)))
|
||||
(format (current-error-port) "using checkout ~s (~s)~%"
|
||||
guix-checkout guix)
|
||||
`((tarball . ,(cute package->alist store
|
||||
(tarball-package guix)
|
||||
(%current-system))))))
|
||||
@@ -1,47 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
;;;
|
||||
;;; Build a self-contained tarball containing binaries for Guix and its
|
||||
;;; dependencies.
|
||||
;;;
|
||||
|
||||
(use-modules (guix)
|
||||
(guix ui)
|
||||
(gnu system install)
|
||||
(ice-9 match))
|
||||
|
||||
(define copy-file*
|
||||
(lift2 copy-file %store-monad))
|
||||
|
||||
(define rename-file*
|
||||
(lift2 rename-file %store-monad))
|
||||
|
||||
(match (command-line)
|
||||
((_ system file)
|
||||
(with-store store
|
||||
(run-with-store store
|
||||
(mlet %store-monad ((tarball (self-contained-tarball)))
|
||||
(mbegin %store-monad
|
||||
(show-what-to-build* (list tarball))
|
||||
(built-derivations (list tarball))
|
||||
(copy-file* (derivation->output-path tarball)
|
||||
(string-append file ".part"))
|
||||
(rename-file* (string-append file ".part") file)))
|
||||
#:system system))))
|
||||
@@ -0,0 +1,62 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
hOlob5tziejTU0hW0XIRXlXKukgc+7F4b/bIGgI=
|
||||
=Y7wf
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,50 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
YF3ov6wO
|
||||
=3+Zu
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,150 +0,0 @@
|
||||
dnl -*- Autoconf -*- fragment for the C++ daemon.
|
||||
|
||||
AC_MSG_CHECKING([whether to build daemon])
|
||||
AC_MSG_RESULT([$guix_build_daemon])
|
||||
|
||||
dnl C++ environment. This macro must be used unconditionnaly.
|
||||
AC_PROG_CXX
|
||||
AC_LANG([C++])
|
||||
|
||||
if test "x$guix_build_daemon" = "xyes"; then
|
||||
|
||||
GUIX_ASSERT_CXX11
|
||||
|
||||
AC_PROG_RANLIB
|
||||
AC_CONFIG_HEADER([nix/config.h])
|
||||
|
||||
dnl Decompressors, for use by the substituter.
|
||||
AC_PATH_PROG([GZIP], [gzip])
|
||||
AC_PATH_PROG([BZIP2], [bzip2])
|
||||
AC_PATH_PROG([XZ], [xz])
|
||||
AC_SUBST([GZIP])
|
||||
AC_SUBST([BZIP2])
|
||||
AC_SUBST([XZ])
|
||||
|
||||
dnl Use 64-bit file system calls so that we can support files > 2 GiB.
|
||||
AC_SYS_LARGEFILE
|
||||
|
||||
dnl Look for libbz2, a required dependency.
|
||||
AC_CHECK_LIB([bz2], [BZ2_bzWriteOpen], [true],
|
||||
[AC_MSG_ERROR([Guix requires libbz2, which is part of bzip2. See http://www.bzip.org/.])])
|
||||
AC_CHECK_HEADERS([bzlib.h], [true],
|
||||
[AC_MSG_ERROR([Guix requires libbz2, which is part of bzip2. See http://www.bzip.org/.])])
|
||||
|
||||
dnl Look for SQLite, a required dependency.
|
||||
PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.6.19])
|
||||
|
||||
AC_DEFINE([NIX_VERSION], ["0.0.0"], [Fake Nix version number.])
|
||||
AC_DEFINE_UNQUOTED([SYSTEM], ["$guix_system"],
|
||||
[Guix host system type--i.e., platform and OS kernel tuple.])
|
||||
|
||||
case "$LIBGCRYPT_PREFIX" in
|
||||
no)
|
||||
LIBGCRYPT_CFLAGS=""
|
||||
;;
|
||||
*)
|
||||
LIBGCRYPT_CFLAGS="-I$LIBGCRYPT_PREFIX/include"
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$LIBGCRYPT_LIBDIR" in
|
||||
no)
|
||||
LIBGCRYPT_LIBS="-lgcrypt"
|
||||
;;
|
||||
*)
|
||||
LIBGCRYPT_LIBS="-L$LIBGCRYPT_LIBDIR -lgcrypt"
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST([LIBGCRYPT_CFLAGS])
|
||||
AC_SUBST([LIBGCRYPT_LIBS])
|
||||
|
||||
save_CFLAGS="$CFLAGS"
|
||||
save_LDFLAGS="$LDFLAGS"
|
||||
CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
|
||||
LDFLAGS="$LDFLAGS $LIBGCRYPT_LDFLAGS"
|
||||
|
||||
have_gcrypt=yes
|
||||
AC_CHECK_LIB([gcrypt], [gcry_md_open], [:], [have_gcrypt=no])
|
||||
AC_CHECK_HEADER([gcrypt.h], [:], [have_gcrypt=no])
|
||||
if test "x$have_gcrypt" != "xyes"; then
|
||||
AC_MSG_ERROR([GNU libgcrypt not found; please install it.])
|
||||
fi
|
||||
|
||||
CFLAGS="$save_CFLAGS"
|
||||
LDFLAGS="$save_LDFLAGS"
|
||||
|
||||
dnl Chroot support.
|
||||
AC_CHECK_FUNCS([chroot unshare])
|
||||
AC_CHECK_HEADERS([sched.h sys/param.h sys/mount.h sys/syscall.h])
|
||||
|
||||
if test "x$ac_cv_func_chroot" != "xyes"; then
|
||||
AC_MSG_ERROR(['chroot' function missing, bailing out])
|
||||
fi
|
||||
|
||||
dnl lutimes and lchown: used when canonicalizing store items.
|
||||
dnl posix_fallocate: used when extracting archives.
|
||||
dnl vfork: to speed up spawning of helper programs.
|
||||
dnl `--> now disabled because of unpredictable behavior:
|
||||
dnl see <http://lists.gnu.org/archive/html/guix-devel/2014-05/msg00036.html>
|
||||
dnl and Nix commit f794465c (Nov. 2012).
|
||||
dnl sched_setaffinity: to improve RPC locality.
|
||||
dnl statvfs: to detect disk-full conditions.
|
||||
dnl strsignal: for error reporting.
|
||||
AC_CHECK_FUNCS([lutimes lchown posix_fallocate sched_setaffinity \
|
||||
statvfs nanosleep strsignal])
|
||||
|
||||
dnl Check whether the store optimiser can optimise symlinks.
|
||||
AC_MSG_CHECKING([whether it is possible to create a link to a symlink])
|
||||
ln -s bla tmp_link
|
||||
if ln tmp_link tmp_link2 2> /dev/null; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(CAN_LINK_SYMLINK, 1, [Whether link() works on symlinks.])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
rm -f tmp_link tmp_link2
|
||||
|
||||
dnl Check for <locale>.
|
||||
AC_LANG_PUSH(C++)
|
||||
AC_CHECK_HEADERS([locale])
|
||||
AC_LANG_POP(C++)
|
||||
|
||||
|
||||
dnl Check whether we have the `personality' syscall, which allows us
|
||||
dnl to do i686-linux builds on x86_64-linux machines.
|
||||
AC_CHECK_HEADERS([sys/personality.h])
|
||||
|
||||
dnl Check for <linux/fs.h> (for immutable file support).
|
||||
AC_CHECK_HEADERS([linux/fs.h])
|
||||
|
||||
dnl Check whether the 'offload' build hook can be built (uses
|
||||
dnl 'restore-file-set', which requires unbuffered custom binary input
|
||||
dnl ports from Guile >= 2.0.10.)
|
||||
GUIX_CHECK_UNBUFFERED_CBIP
|
||||
guix_build_daemon_offload="$ac_cv_guix_cbips_support_setvbuf"
|
||||
|
||||
if test "x$guix_build_daemon_offload" = "xyes"; then
|
||||
AC_DEFINE([HAVE_DAEMON_OFFLOAD_HOOK], [1],
|
||||
[Define if the daemon's 'offload' build hook is being built.])
|
||||
fi
|
||||
|
||||
dnl Temporary directory used to store the daemon's data.
|
||||
GUIX_TEST_ROOT_DIRECTORY
|
||||
GUIX_TEST_ROOT="$ac_cv_guix_test_root"
|
||||
AC_SUBST([GUIX_TEST_ROOT])
|
||||
|
||||
AC_CONFIG_FILES([nix/scripts/list-runtime-roots],
|
||||
[chmod +x nix/scripts/list-runtime-roots])
|
||||
AC_CONFIG_FILES([nix/scripts/substitute],
|
||||
[chmod +x nix/scripts/substitute])
|
||||
AC_CONFIG_FILES([nix/scripts/guix-authenticate],
|
||||
[chmod +x nix/scripts/guix-authenticate])
|
||||
AC_CONFIG_FILES([nix/scripts/offload],
|
||||
[chmod +x nix/scripts/offload])
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([BUILD_DAEMON], [test "x$guix_build_daemon" = "xyes"])
|
||||
AM_CONDITIONAL([BUILD_DAEMON_OFFLOAD], \
|
||||
[test "x$guix_build_daemon" = "xyes" \
|
||||
&& test "x$guix_build_daemon_offload" = "xyes"])
|
||||
-218
@@ -1,218 +0,0 @@
|
||||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.68)
|
||||
AC_INIT([GNU Guix], [0.9.0], [bug-guix@gnu.org], [guix],
|
||||
[http://www.gnu.org/software/guix/])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.12 gnu silent-rules subdir-objects \
|
||||
color-tests parallel-tests -Woverride -Wno-portability])
|
||||
|
||||
# Enable silent rules by default.
|
||||
AM_SILENT_RULES([yes])
|
||||
|
||||
AC_CONFIG_SRCDIR([guix.scm])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
dnl For the C++ code. This must be used early.
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
|
||||
AM_GNU_GETTEXT([external])
|
||||
AM_GNU_GETTEXT_VERSION([0.18.1])
|
||||
|
||||
guilemoduledir="${datarootdir}/guile/site/2.0"
|
||||
AC_SUBST([guilemoduledir])
|
||||
|
||||
GUIX_SYSTEM_TYPE
|
||||
GUIX_ASSERT_SUPPORTED_SYSTEM
|
||||
|
||||
AC_ARG_WITH(store-dir,
|
||||
AC_HELP_STRING([--with-store-dir=PATH],
|
||||
[file name of the store (defaults to /gnu/store)]),
|
||||
[storedir="$withval"],
|
||||
[storedir="/gnu/store"])
|
||||
AC_SUBST(storedir)
|
||||
|
||||
AC_ARG_WITH([bash-completion-dir],
|
||||
AC_HELP_STRING([--with-bash-completion-dir=DIR],
|
||||
[name of the Bash completion directory]),
|
||||
[bashcompletiondir="$withval"],
|
||||
[bashcompletiondir='${sysconfdir}/bash_completion.d'])
|
||||
AC_SUBST([bashcompletiondir])
|
||||
|
||||
dnl Better be verbose.
|
||||
AC_MSG_CHECKING([for the store directory])
|
||||
AC_MSG_RESULT([$storedir])
|
||||
|
||||
AC_ARG_ENABLE([daemon],
|
||||
[AS_HELP_STRING([--disable-daemon], [build the Nix daemon (C++)])],
|
||||
[guix_build_daemon="$enableval"],
|
||||
[guix_build_daemon="yes"])
|
||||
|
||||
# Prepare a version of $localstatedir & co. that does not contain references
|
||||
# to shell variables.
|
||||
guix_prefix="`eval echo $prefix | sed -e"s|NONE|/usr/local|g"`"
|
||||
guix_localstatedir="`eval echo $localstatedir | sed -e "s|NONE|$guix_prefix|g"`"
|
||||
guix_sysconfdir="`eval echo $sysconfdir | sed -e "s|NONE|$guix_prefix|g"`"
|
||||
guix_sbindir="`eval echo $sbindir | sed -e "s|NONE|$guix_prefix|g"`"
|
||||
AC_SUBST([guix_localstatedir])
|
||||
AC_SUBST([guix_sysconfdir])
|
||||
AC_SUBST([guix_sbindir])
|
||||
|
||||
GUIX_CHECK_FILE_NAME_LIMITS
|
||||
|
||||
dnl We require pkg.m4 (from pkg-config) and guile.m4 (from Guile.)
|
||||
dnl Make sure they are available.
|
||||
m4_pattern_forbid([PKG_CHECK_MODULES])
|
||||
m4_pattern_forbid([GUILE_MODULE_AVAILABLE])
|
||||
|
||||
PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.7])
|
||||
AC_PATH_PROG([GUILE], [guile])
|
||||
AC_PATH_PROG([GUILD], [guild])
|
||||
if test "x$GUILD" = "x"; then
|
||||
AC_MSG_ERROR(['guild' binary not found; please check your guile-2.x installation.])
|
||||
fi
|
||||
|
||||
dnl guile-json is used for the PyPI package importer
|
||||
GUILE_MODULE_AVAILABLE([have_guile_json], [(json)])
|
||||
AM_CONDITIONAL([HAVE_GUILE_JSON], [test "x$have_guile_json" = "xyes"])
|
||||
|
||||
dnl Make sure we have a full-fledged Guile.
|
||||
GUIX_ASSERT_GUILE_FEATURES([regex posix socket net-db threads])
|
||||
|
||||
dnl Check whether (srfi srfi-37) works, and provide our own if it doesn't.
|
||||
GUIX_CHECK_SRFI_37
|
||||
AM_CONDITIONAL([INSTALL_SRFI_37], [test "x$ac_cv_guix_srfi_37_broken" = xyes])
|
||||
|
||||
dnl Check whether (guix build syscalls) can be built.
|
||||
GUIX_CHECK_LIBC_MOUNT
|
||||
AM_CONDITIONAL([BUILD_SYSCALLS_MODULE],
|
||||
[test "x$guix_cv_libc_has_mount" = "xyes"])
|
||||
|
||||
AC_ARG_WITH([nix-prefix],
|
||||
[AS_HELP_STRING([--with-nix-prefix=DIR],
|
||||
[search for Nix in DIR (for testing purposes and '--disable-daemon' builds)])],
|
||||
[case "$withval" in
|
||||
yes|no) ;;
|
||||
*)
|
||||
NIX_PREFIX="$withval"
|
||||
PATH="$NIX_PREFIX/bin:$PATH"; export PATH
|
||||
AC_SUBST([NIX_PREFIX])
|
||||
;;
|
||||
esac],
|
||||
[])
|
||||
|
||||
AC_PATH_PROG([NIX_INSTANTIATE], [nix-instantiate])
|
||||
AC_PATH_PROG([NIX_HASH], [nix-hash])
|
||||
if test "x$guix_build_daemon$NIX_INSTANTIATE$NIX_HASH" = "xno"; then
|
||||
AC_MSG_ERROR([Nix programs not found; please install Nix or use `--with-nix-prefix'.])
|
||||
fi
|
||||
|
||||
if test "x$NIX_INSTANTIATE" = "x"; then
|
||||
# This program is an optional dependency, so we just want it to be
|
||||
# taken from $PATH if it's not available right now.
|
||||
NIX_INSTANTIATE="nix-instantiate"
|
||||
fi
|
||||
|
||||
AC_ARG_WITH([nixpkgs],
|
||||
[AS_HELP_STRING([--with-nixpkgs=DIR],
|
||||
[search for Nixpkgs in DIR (for testing purposes only)])],
|
||||
[case "$withval" in
|
||||
yes|no) AC_MSG_ERROR([Please use `--with-nixpkgs=DIR'.]);;
|
||||
*) NIXPKGS="$withval";;
|
||||
esac],
|
||||
[])
|
||||
|
||||
AC_MSG_CHECKING([for Nixpkgs source tree])
|
||||
if test -f "$NIXPKGS/default.nix"; then
|
||||
AC_MSG_RESULT([$NIXPKGS])
|
||||
AC_SUBST([NIXPKGS])
|
||||
else
|
||||
AC_MSG_RESULT([not found])
|
||||
fi
|
||||
|
||||
LIBGCRYPT="libgcrypt"
|
||||
LIBGCRYPT_LIBDIR="no"
|
||||
LIBGCRYPT_PREFIX="no"
|
||||
|
||||
AC_ARG_WITH([libgcrypt-prefix],
|
||||
[AS_HELP_STRING([--with-libgcrypt-prefix=DIR], [search for GNU libgcrypt in DIR])],
|
||||
[case "$withval" in
|
||||
yes|no)
|
||||
;;
|
||||
*)
|
||||
LIBGCRYPT="$withval/lib/libgcrypt"
|
||||
LIBGCRYPT_PREFIX="$withval"
|
||||
LIBGCRYPT_LIBDIR="$withval/lib"
|
||||
;;
|
||||
esac])
|
||||
|
||||
AC_ARG_WITH([libgcrypt-libdir],
|
||||
[AS_HELP_STRING([--with-libgcrypt-libdir=DIR],
|
||||
[search for GNU libgcrypt's shared library in DIR])],
|
||||
[case "$withval" in
|
||||
yes|no)
|
||||
LIBGCRYPT="libgcrypt"
|
||||
LIBGCRYPT_LIBDIR="no"
|
||||
;;
|
||||
*)
|
||||
LIBGCRYPT="$withval/libgcrypt"
|
||||
LIBGCRYPT_LIBDIR="$withval"
|
||||
;;
|
||||
esac])
|
||||
|
||||
dnl If none of the --with-libgcrypt-* options was used, try to determine the
|
||||
dnl absolute file name of libgcrypt.so.
|
||||
case "x$LIBGCRYPT_PREFIX$LIBGCRYPT_LIBDIR" in
|
||||
xnono)
|
||||
GUIX_LIBGCRYPT_LIBDIR([LIBGCRYPT_LIBDIR])
|
||||
if test "x$LIBGCRYPT_LIBDIR" != x; then
|
||||
LIBGCRYPT="$LIBGCRYPT_LIBDIR/libgcrypt"
|
||||
else
|
||||
dnl 'config-daemon.ac' expects "no" in this case.
|
||||
LIBGCRYPT_LIBDIR="no"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl Library name suitable for `dynamic-link'.
|
||||
AC_MSG_CHECKING([for libgcrypt shared library name])
|
||||
AC_MSG_RESULT([$LIBGCRYPT])
|
||||
AC_SUBST([LIBGCRYPT])
|
||||
AC_SUBST([LIBGCRYPT_PREFIX])
|
||||
AC_SUBST([LIBGCRYPT_LIBDIR])
|
||||
|
||||
GUIX_ASSERT_LIBGCRYPT_USABLE
|
||||
|
||||
AC_CACHE_SAVE
|
||||
|
||||
m4_include([config-daemon.ac])
|
||||
|
||||
dnl `dot' (from the Graphviz package) is only needed for maintainers.
|
||||
dnl See `Building from Git' in the manual for more info.
|
||||
AM_MISSING_PROG([DOT], [dot])
|
||||
|
||||
dnl Manual pages.
|
||||
AM_MISSING_PROG([HELP2MAN], [help2man])
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
po/guix/Makefile.in
|
||||
po/packages/Makefile.in
|
||||
guix/config.scm])
|
||||
|
||||
AC_CONFIG_FILES([scripts/guix], [chmod +x scripts/guix])
|
||||
AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env])
|
||||
AC_CONFIG_FILES([test-env], [chmod +x test-env])
|
||||
|
||||
dnl Emacs interface.
|
||||
AC_PATH_PROG([DOT_USER_PROGRAM], [dot], [dot])
|
||||
AM_PATH_LISPDIR
|
||||
AM_CONDITIONAL([HAVE_EMACS], [test "x$EMACS" != "xno"])
|
||||
|
||||
emacsuidir="${guilemoduledir}/guix/emacs"
|
||||
AC_SUBST([emacsuidir])
|
||||
AC_CONFIG_FILES([emacs/guix-config.el
|
||||
emacs/guix-helper.scm])
|
||||
|
||||
AC_OUTPUT
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
xjMEZ0yjARYJKwYBBAHaRw8BAQdASb8faq1fGlD3J0HchEAWmPqxndmew1tN+Ajr
|
||||
bSU0Q77NKENheWV0YW5vIFNhbnRvcyA8Y3NhbnRvc2JAaW52ZW50YXRpLm9yZz7C
|
||||
mAQTFgoAQQIbAwUJBaOagAULCQgHAwUVCgkICwUWAgMBAAIeBQIXgBYhBMy4GEL5
|
||||
1wWOzWc3er9c3032v2aCBQJnTLA+AhkBAAoJEL9c3032v2aCVAEA+L3wQPom76o/
|
||||
jlydTly+r0X5WLWHoeRdUMMGx02PGrAA/2FwlT662UR4nZOZEpdhHTX0ZGmECjZH
|
||||
p1uczk+/LmIGzTBDYXlldGFubyBTYW50b3MgKENOUlMpIDxjYXlldGFuby5zYW50
|
||||
b3NAY25ycy5mcj7ClgQTFgoAPhYhBMy4GEL51wWOzWc3er9c3032v2aCBQJnTKNQ
|
||||
AhsDBQkFo5qABQsJCAcDBRUKCQgLBRYCAwEAAh4FAheAAAoJEL9c3032v2aCrjsA
|
||||
/0pNCd77Sp7GplttQch/moMqrbFs4+tMzpH1ngdQuD5kAPwO+/fyfFikd2B9EsIB
|
||||
kGRLXDma5yWva/Fo5XTwDh3pC844BGdMowESCisGAQQBl1UBBQEBB0DPAWdwxi64
|
||||
FdJfNmqisLmZRuoPABUOP5Y+OeNpK68SDgMBCAfCfgQYFgoAJhYhBMy4GEL51wWO
|
||||
zWc3er9c3032v2aCBQJnTKMBAhsMBQkFo5qAAAoJEL9c3032v2aCMQUBAMMuMNqW
|
||||
9097k+E3t2YRjzCUGkC2C9K/YEfkyDKEC+LXAQCfUXE40rKiGht30uThgc8S26NU
|
||||
RgxOMjDlmYbHyOaCAw==
|
||||
=1inp
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,87 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
kLEjOoXNOJGMcTcKP6qdP2Aohg==
|
||||
=vgxe
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,210 +0,0 @@
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
# GNU Guix is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or (at
|
||||
# your option) any later version.
|
||||
#
|
||||
# GNU Guix is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#
|
||||
# Integration of the `guix-daemon' code taken from upstream Nix.
|
||||
#
|
||||
|
||||
BUILT_SOURCES += nix/libstore/schema.sql.hh
|
||||
CLEANFILES += $(BUILT_SOURCES) etc/guix-daemon.service
|
||||
|
||||
noinst_LIBRARIES = libformat.a libutil.a libstore.a
|
||||
|
||||
# Use '-std=c++11' for 'std::shared_ptr', 'auto', lambdas, and more.
|
||||
AM_CXXFLAGS = -Wall -std=c++11
|
||||
|
||||
libformat_a_SOURCES = \
|
||||
nix/boost/format/free_funcs.cc \
|
||||
nix/boost/format/parsing.cc \
|
||||
nix/boost/format/format_implementation.cc
|
||||
|
||||
libformat_headers = \
|
||||
nix/boost/throw_exception.hpp \
|
||||
nix/boost/format.hpp \
|
||||
nix/boost/assert.hpp \
|
||||
nix/boost/format/macros_default.hpp \
|
||||
nix/boost/format/format_fwd.hpp \
|
||||
nix/boost/format/format_class.hpp \
|
||||
nix/boost/format/exceptions.hpp \
|
||||
nix/boost/format/group.hpp \
|
||||
nix/boost/format/feed_args.hpp \
|
||||
nix/boost/format/internals_fwd.hpp \
|
||||
nix/boost/format/internals.hpp
|
||||
|
||||
libformat_a_CPPFLAGS = \
|
||||
-I$(top_srcdir)/nix
|
||||
|
||||
libutil_a_SOURCES = \
|
||||
nix/libutil/archive.cc \
|
||||
nix/libutil/affinity.cc \
|
||||
nix/libutil/serialise.cc \
|
||||
nix/libutil/util.cc \
|
||||
nix/libutil/xml-writer.cc \
|
||||
nix/libutil/hash.cc \
|
||||
nix/libutil/gcrypt-hash.cc
|
||||
|
||||
libutil_headers = \
|
||||
nix/libutil/affinity.hh \
|
||||
nix/libutil/hash.hh \
|
||||
nix/libutil/serialise.hh \
|
||||
nix/libutil/xml-writer.hh \
|
||||
nix/libutil/util.hh \
|
||||
nix/libutil/archive.hh \
|
||||
nix/libutil/types.hh \
|
||||
nix/libutil/gcrypt-hash.hh \
|
||||
nix/libutil/md5.h \
|
||||
nix/libutil/sha1.h \
|
||||
nix/libutil/sha256.h
|
||||
|
||||
libutil_a_CPPFLAGS = \
|
||||
-I$(top_builddir)/nix \
|
||||
-I$(top_srcdir)/nix/libutil \
|
||||
$(libformat_a_CPPFLAGS)
|
||||
|
||||
libstore_a_SOURCES = \
|
||||
nix/libstore/gc.cc \
|
||||
nix/libstore/globals.cc \
|
||||
nix/libstore/misc.cc \
|
||||
nix/libstore/references.cc \
|
||||
nix/libstore/store-api.cc \
|
||||
nix/libstore/optimise-store.cc \
|
||||
nix/libstore/local-store.cc \
|
||||
nix/libstore/remote-store.cc \
|
||||
nix/libstore/build.cc \
|
||||
nix/libstore/pathlocks.cc \
|
||||
nix/libstore/derivations.cc
|
||||
|
||||
libstore_headers = \
|
||||
nix/libstore/references.hh \
|
||||
nix/libstore/pathlocks.hh \
|
||||
nix/libstore/globals.hh \
|
||||
nix/libstore/worker-protocol.hh \
|
||||
nix/libstore/remote-store.hh \
|
||||
nix/libstore/derivations.hh \
|
||||
nix/libstore/misc.hh \
|
||||
nix/libstore/local-store.hh \
|
||||
nix/libstore/store-api.hh
|
||||
|
||||
libstore_a_CPPFLAGS = \
|
||||
$(libutil_a_CPPFLAGS) \
|
||||
-I$(top_srcdir)/nix/libstore \
|
||||
-I$(top_builddir)/nix/libstore \
|
||||
-DNIX_STORE_DIR=\"$(storedir)\" \
|
||||
-DNIX_DATA_DIR=\"$(datadir)\" \
|
||||
-DNIX_STATE_DIR=\"$(localstatedir)/guix\" \
|
||||
-DNIX_LOG_DIR=\"$(localstatedir)/log/guix\" \
|
||||
-DNIX_CONF_DIR=\"$(sysconfdir)/guix\" \
|
||||
-DNIX_LIBEXEC_DIR=\"$(libexecdir)\" \
|
||||
-DNIX_BIN_DIR=\"$(bindir)\" \
|
||||
-DOPENSSL_PATH="\"guix-authenticate\"" \
|
||||
-DDEFAULT_CHROOT_DIRS="\"\""
|
||||
|
||||
libstore_a_CXXFLAGS = $(AM_CXXFLAGS) \
|
||||
$(SQLITE3_CFLAGS) $(LIBGCRYPT_CFLAGS)
|
||||
|
||||
bin_PROGRAMS = guix-daemon
|
||||
sbin_PROGRAMS = guix-register
|
||||
|
||||
guix_daemon_SOURCES = \
|
||||
nix/nix-daemon/nix-daemon.cc \
|
||||
nix/nix-daemon/guix-daemon.cc
|
||||
|
||||
guix_daemon_CPPFLAGS = \
|
||||
-DLOCALEDIR=\"$(localedir)\" \
|
||||
$(libutil_a_CPPFLAGS) \
|
||||
-I$(top_srcdir)/nix/libstore
|
||||
|
||||
guix_daemon_LDADD = \
|
||||
libstore.a libutil.a libformat.a -lbz2 \
|
||||
$(SQLITE3_LIBS) $(LIBGCRYPT_LIBS)
|
||||
|
||||
guix_daemon_headers = \
|
||||
nix/nix-daemon/shared.hh
|
||||
|
||||
|
||||
guix_register_SOURCES = \
|
||||
nix/guix-register/guix-register.cc
|
||||
|
||||
guix_register_CPPFLAGS = \
|
||||
$(libutil_a_CPPFLAGS) \
|
||||
$(libstore_a_CPPFLAGS) \
|
||||
-I$(top_srcdir)/nix/libstore
|
||||
|
||||
# XXX: Should we start using shared libs?
|
||||
guix_register_LDADD = \
|
||||
libstore.a libutil.a libformat.a -lbz2 \
|
||||
$(SQLITE3_LIBS) $(LIBGCRYPT_LIBS)
|
||||
|
||||
|
||||
noinst_HEADERS = \
|
||||
$(libformat_headers) $(libutil_headers) $(libstore_headers) \
|
||||
$(guix_daemon_headers)
|
||||
|
||||
nix/libstore/schema.sql.hh: nix/libstore/schema.sql
|
||||
$(GUILE) --no-auto-compile -c \
|
||||
"(use-modules (rnrs io ports)) \
|
||||
(call-with-output-file \"$@\" \
|
||||
(lambda (out) \
|
||||
(call-with-input-file \"$^\" \
|
||||
(lambda (in) \
|
||||
(write (get-string-all in) out)))))"
|
||||
|
||||
nodist_pkglibexec_SCRIPTS = \
|
||||
nix/scripts/list-runtime-roots \
|
||||
nix/scripts/substitute
|
||||
|
||||
if BUILD_DAEMON_OFFLOAD
|
||||
|
||||
nodist_pkglibexec_SCRIPTS += \
|
||||
nix/scripts/offload
|
||||
|
||||
endif BUILD_DAEMON_OFFLOAD
|
||||
|
||||
|
||||
# XXX: It'd be better to hide it in $(pkglibexecdir).
|
||||
nodist_libexec_SCRIPTS = \
|
||||
nix/scripts/guix-authenticate
|
||||
|
||||
# The '.service' file for systemd.
|
||||
systemdservicedir = $(libdir)/systemd/system
|
||||
nodist_systemdservice_DATA = etc/guix-daemon.service
|
||||
|
||||
etc/guix-daemon.service: etc/guix-daemon.service.in \
|
||||
$(top_builddir)/config.status
|
||||
$(MKDIR_P) "`dirname "$@"`"
|
||||
$(SED) -e 's|@''bindir''@|$(bindir)|' < \
|
||||
"$(srcdir)/etc/guix-daemon.service.in" > "$@.tmp"
|
||||
mv "$@.tmp" "$@"
|
||||
|
||||
EXTRA_DIST += \
|
||||
nix/libstore/schema.sql \
|
||||
nix/AUTHORS \
|
||||
nix/COPYING \
|
||||
etc/guix-daemon.service.in
|
||||
|
||||
AM_TESTS_ENVIRONMENT += \
|
||||
top_builddir="$(abs_top_builddir)"
|
||||
|
||||
TESTS += \
|
||||
tests/guix-daemon.sh
|
||||
|
||||
clean-local:
|
||||
-if test -d "$(GUIX_TEST_ROOT)"; then \
|
||||
find "$(GUIX_TEST_ROOT)" | xargs chmod +w; \
|
||||
fi
|
||||
-rm -rf "$(GUIX_TEST_ROOT)"
|
||||
@@ -0,0 +1,80 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=RVmq
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,76 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
V2kKr54SWWZdTdeWM62qgpYeXrbDRg==
|
||||
=2JFc
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,36 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
o5EIudGx
|
||||
=r3t+
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,109 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
C0kDyI03GVXxDo+5JO4vUnLiVQ==
|
||||
=FZnZ
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,143 +0,0 @@
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
# GNU Guix is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or (at
|
||||
# your option) any later version.
|
||||
#
|
||||
# GNU Guix is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
info_TEXINFOS = doc/guix.texi
|
||||
|
||||
DOT_FILES = \
|
||||
doc/images/bootstrap-graph.dot \
|
||||
doc/images/coreutils-graph.dot \
|
||||
doc/images/coreutils-bag-graph.dot \
|
||||
doc/images/service-graph.dot \
|
||||
doc/images/dmd-graph.dot
|
||||
|
||||
DOT_VECTOR_GRAPHICS = \
|
||||
$(DOT_FILES:%.dot=%.eps) \
|
||||
$(DOT_FILES:%.dot=%.pdf)
|
||||
|
||||
EXTRA_DIST += \
|
||||
doc/contributing.texi \
|
||||
doc/emacs.texi \
|
||||
doc/fdl-1.3.texi \
|
||||
$(DOT_FILES) \
|
||||
$(DOT_VECTOR_GRAPHICS) \
|
||||
doc/images/coreutils-size-map.eps \
|
||||
doc/environment-gdb.scm \
|
||||
doc/package-hello.scm
|
||||
|
||||
OS_CONFIG_EXAMPLES_TEXI = \
|
||||
doc/os-config-bare-bones.texi \
|
||||
doc/os-config-desktop.texi
|
||||
|
||||
# Bundle this file so that makeinfo finds it in out-of-source-tree builds.
|
||||
BUILT_SOURCES += $(OS_CONFIG_EXAMPLES_TEXI)
|
||||
EXTRA_DIST += $(OS_CONFIG_EXAMPLES_TEXI)
|
||||
MAINTAINERCLEANFILES = $(OS_CONFIG_EXAMPLES_TEXI)
|
||||
|
||||
doc/os-config-%.texi: gnu/system/examples/%.tmpl
|
||||
$(MKDIR_P) "`dirname "$@"`"
|
||||
cp "$<" "$@"
|
||||
|
||||
infoimagedir = $(infodir)/images
|
||||
dist_infoimage_DATA = \
|
||||
$(DOT_FILES:%.dot=%.png) \
|
||||
doc/images/coreutils-size-map.png
|
||||
|
||||
# Try hard to obtain an image size and aspect that's reasonable for inclusion
|
||||
# in an Info or PDF document.
|
||||
DOT_OPTIONS = \
|
||||
-Gratio=.9 -Gnodesep=.005 -Granksep=.00005 \
|
||||
-Nfontsize=9 -Nheight=.1 -Nwidth=.1
|
||||
|
||||
.dot.png:
|
||||
$(DOT) -Tpng $(DOT_OPTIONS) < "$<" > "$@.tmp"
|
||||
mv "$@.tmp" "$@"
|
||||
|
||||
.dot.pdf:
|
||||
$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$@.tmp"
|
||||
mv "$@.tmp" "$@"
|
||||
|
||||
.dot.eps:
|
||||
$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$@.tmp"
|
||||
mv "$@.tmp" "$@"
|
||||
|
||||
.png.eps:
|
||||
convert "$<" "$@-tmp.eps"
|
||||
mv "$@-tmp.eps" "$@"
|
||||
|
||||
# We cannot add new dependencies to `doc/guix.pdf' & co. (info "(automake)
|
||||
# Extending"). Using the `-local' rules is imperfect, because they may be
|
||||
# triggered after the main rule. Oh, well.
|
||||
pdf-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.pdf)
|
||||
info-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.png)
|
||||
ps-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.eps) \
|
||||
$(top_srcdir)/doc/images/coreutils-size-map.eps
|
||||
dvi-local: ps-local
|
||||
|
||||
|
||||
# Manual pages.
|
||||
|
||||
doc/guix.1: $(SUBCOMMANDS:%=guix/scripts/%.scm)
|
||||
-LANGUAGE= $(top_builddir)/pre-inst-env \
|
||||
$(HELP2MAN) --output="$@" guix
|
||||
|
||||
# Note: Do not depend on 'guix-daemon' since that would trigger a rebuild even
|
||||
# for people building from a tarball.
|
||||
doc/guix-daemon.1: nix/nix-daemon/guix-daemon.cc
|
||||
-LANGUAGE= $(top_builddir)/pre-inst-env \
|
||||
$(HELP2MAN) --output="$@" guix-daemon
|
||||
|
||||
define subcommand-manual-target
|
||||
|
||||
doc/guix-$(1).1: guix/scripts/$(1).scm
|
||||
-LANGUAGE= $(top_builddir)/pre-inst-env \
|
||||
$(HELP2MAN) --output="$$@" "guix $(1)"
|
||||
|
||||
endef
|
||||
|
||||
SUBCOMMANDS := \
|
||||
archive \
|
||||
build \
|
||||
challenge \
|
||||
download \
|
||||
edit \
|
||||
environment \
|
||||
gc \
|
||||
hash \
|
||||
import \
|
||||
lint \
|
||||
package \
|
||||
publish \
|
||||
pull \
|
||||
refresh \
|
||||
size \
|
||||
system
|
||||
|
||||
$(eval $(foreach subcommand,$(SUBCOMMANDS), \
|
||||
$(call subcommand-manual-target,$(subcommand))))
|
||||
|
||||
dist_man1_MANS = \
|
||||
doc/guix.1 \
|
||||
$(SUBCOMMANDS:%=doc/guix-%.1)
|
||||
|
||||
if BUILD_DAEMON
|
||||
|
||||
dist_man1_MANS += \
|
||||
doc/guix-daemon.1
|
||||
|
||||
endif
|
||||
@@ -1,282 +0,0 @@
|
||||
@node Contributing
|
||||
@chapter Contributing
|
||||
|
||||
This project is a cooperative effort, and we need your help to make it
|
||||
grow! Please get in touch with us on @email{guix-devel@@gnu.org} and
|
||||
@code{#guix} on the Freenode IRC network. We welcome ideas, bug
|
||||
reports, patches, and anything that may be helpful to the project. We
|
||||
particularly welcome help on packaging (@pxref{Packaging Guidelines}).
|
||||
|
||||
@menu
|
||||
* Building from Git:: The latest and greatest.
|
||||
* Running Guix Before It Is Installed:: Hacker tricks.
|
||||
* The Perfect Setup:: The right tools.
|
||||
* Coding Style:: Hygiene of the contributor.
|
||||
* Submitting Patches:: Share your work.
|
||||
@end menu
|
||||
|
||||
@node Building from Git
|
||||
@section Building from Git
|
||||
|
||||
If you want to hack Guix itself, it is recommended to use the latest
|
||||
version from the Git repository. When building Guix from a checkout,
|
||||
the following packages are required in addition to those mentioned in
|
||||
the installation instructions (@pxref{Requirements}).
|
||||
|
||||
@itemize
|
||||
@item @url{http://gnu.org/software/autoconf/, GNU Autoconf};
|
||||
@item @url{http://gnu.org/software/automake/, GNU Automake};
|
||||
@item @url{http://gnu.org/software/gettext/, GNU Gettext};
|
||||
@item @url{http://gnu.org/software/texinfo/, GNU Texinfo};
|
||||
@item @url{http://www.graphviz.org/, Graphviz};
|
||||
@item @url{http://www.gnu.org/software/help2man/, GNU Help2man (optional)}.
|
||||
@end itemize
|
||||
|
||||
Run @command{./bootstrap} to download the Nix daemon source code and to
|
||||
generate the build system infrastructure using autoconf. It reports an
|
||||
error if an inappropriate version of the above packages is being used.
|
||||
|
||||
@noindent
|
||||
If you get an error like this one:
|
||||
|
||||
@example
|
||||
configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES
|
||||
@end example
|
||||
|
||||
it probably means that Autoconf couldn’t find @file{pkg.m4}, which is
|
||||
provided by @command{pkg-config}. Make sure that @file{pkg.m4} is
|
||||
available. For instance, if you installed Automake in
|
||||
@file{/usr/local}, it wouldn’t look for @file{.m4} files in
|
||||
@file{/usr/share}. So you have to invoke the following command in that
|
||||
case
|
||||
|
||||
@example
|
||||
export ACLOCAL_PATH=/usr/share/aclocal
|
||||
@end example
|
||||
|
||||
See @pxref{Macro Search Path,,, automake, The GNU Automake Manual} for
|
||||
more information.
|
||||
|
||||
Then, run @command{./configure} as usual.
|
||||
|
||||
Finally, you have to invoke @code{make check} to run tests. If anything
|
||||
fails, take a look at installation instructions (@pxref{Installation})
|
||||
or send a message to the @email{guix-devel@@gnu.org, mailing list}.
|
||||
|
||||
|
||||
@node Running Guix Before It Is Installed
|
||||
@section Running Guix Before It Is Installed
|
||||
|
||||
In order to keep a sane working environment, you will find it useful to
|
||||
test the changes made in your local source tree checkout without
|
||||
actually installing them. So that you can distinguish between your
|
||||
``end-user'' hat and your ``motley'' costume.
|
||||
|
||||
To that end, all the command-line tools can be used even if you have not
|
||||
run @code{make install}. To do that, prefix each command with
|
||||
@command{./pre-inst-env} (the @file{pre-inst-env} script lives in the
|
||||
top build tree of Guix), as in:
|
||||
|
||||
@example
|
||||
$ sudo ./pre-inst-env guix-daemon --build-users-group=guixbuild
|
||||
$ ./pre-inst-env guix build hello
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Similarly, for a Guile session using the Guix modules:
|
||||
|
||||
@example
|
||||
$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))'
|
||||
|
||||
;;; ("x86_64-linux")
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
@cindex REPL
|
||||
@cindex read-eval-print loop
|
||||
@dots{} and for a REPL (@pxref{Using Guile Interactively,,, guile, Guile
|
||||
Reference Manual}):
|
||||
|
||||
@example
|
||||
$ ./pre-inst-env guile
|
||||
scheme@@(guile-user)> ,use(guix)
|
||||
scheme@@(guile-user)> ,use(gnu)
|
||||
scheme@@(guile-user)> (define snakes
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (string-prefix? "python"
|
||||
(package-name package))
|
||||
(cons package lst)
|
||||
lst))
|
||||
'()))
|
||||
scheme@@(guile-user)> (length snakes)
|
||||
$1 = 361
|
||||
@end example
|
||||
|
||||
The @command{pre-inst-env} script sets up all the environment variables
|
||||
necessary to support this, including @env{PATH} and @env{GUILE_LOAD_PATH}.
|
||||
|
||||
Note that @command{./pre-inst-env guix pull} does @emph{not} upgrade the
|
||||
local source tree; it simply updates the @file{~/.config/guix/latest}
|
||||
symlink (@pxref{Invoking guix pull}). Run @command{git pull} instead if
|
||||
you want to upgrade your local source tree.
|
||||
|
||||
|
||||
@node The Perfect Setup
|
||||
@section The Perfect Setup
|
||||
|
||||
The Perfect Setup to hack on Guix is basically the perfect setup used
|
||||
for Guile hacking (@pxref{Using Guile in Emacs,,, guile, Guile Reference
|
||||
Manual}). First, you need more than an editor, you need
|
||||
@url{http://www.gnu.org/software/emacs, Emacs}, empowered by the
|
||||
wonderful @url{http://nongnu.org/geiser/, Geiser}.
|
||||
|
||||
Geiser allows for interactive and incremental development from within
|
||||
Emacs: code compilation and evaluation from within buffers, access to
|
||||
on-line documentation (docstrings), context-sensitive completion,
|
||||
@kbd{M-.} to jump to an object definition, a REPL to try out your code,
|
||||
and more (@pxref{Introduction,,, geiser, Geiser User Manual}). For
|
||||
convenient Guix development, make sure to augment Guile’s load path so
|
||||
that it finds source files from your checkout:
|
||||
|
||||
@lisp
|
||||
;; @r{Assuming the Guix checkout is in ~/src/guix.}
|
||||
(add-to-list 'geiser-guile-load-path "~/src/guix")
|
||||
@end lisp
|
||||
|
||||
To actually edit the code, Emacs already has a neat Scheme mode. But in
|
||||
addition to that, you must not miss
|
||||
@url{http://www.emacswiki.org/emacs/ParEdit, Paredit}. It provides
|
||||
facilities to directly operate on the syntax tree, such as raising an
|
||||
s-expression or wrapping it, swallowing or rejecting the following
|
||||
s-expression, etc.
|
||||
|
||||
GNU Guix also comes with a minor mode that provides some additional
|
||||
functionality for Scheme buffers (@pxref{Emacs Development}).
|
||||
|
||||
|
||||
@node Coding Style
|
||||
@section Coding Style
|
||||
|
||||
In general our code follows the GNU Coding Standards (@pxref{Top,,,
|
||||
standards, GNU Coding Standards}). However, they do not say much about
|
||||
Scheme, so here are some additional rules.
|
||||
|
||||
@menu
|
||||
* Programming Paradigm:: How to compose your elements.
|
||||
* Modules:: Where to store your code?
|
||||
* Data Types and Pattern Matching:: Implementing data structures.
|
||||
* Formatting Code:: Writing conventions.
|
||||
@end menu
|
||||
|
||||
@node Programming Paradigm
|
||||
@subsection Programming Paradigm
|
||||
|
||||
Scheme code in Guix is written in a purely functional style. One
|
||||
exception is code that involves input/output, and procedures that
|
||||
implement low-level concepts, such as the @code{memoize} procedure.
|
||||
|
||||
@node Modules
|
||||
@subsection Modules
|
||||
|
||||
Guile modules that are meant to be used on the builder side must live in
|
||||
the @code{(guix build @dots{})} name space. They must not refer to
|
||||
other Guix or GNU modules. However, it is OK for a ``host-side'' module
|
||||
to use a build-side module.
|
||||
|
||||
Modules that deal with the broader GNU system should be in the
|
||||
@code{(gnu @dots{})} name space rather than @code{(guix @dots{})}.
|
||||
|
||||
@node Data Types and Pattern Matching
|
||||
@subsection Data Types and Pattern Matching
|
||||
|
||||
The tendency in classical Lisp is to use lists to represent everything,
|
||||
and then to browse them ``by hand'' using @code{car}, @code{cdr},
|
||||
@code{cadr}, and co. There are several problems with that style,
|
||||
notably the fact that it is hard to read, error-prone, and a hindrance
|
||||
to proper type error reports.
|
||||
|
||||
Guix code should define appropriate data types (for instance, using
|
||||
@code{define-record-type*}) rather than abuse lists. In addition, it
|
||||
should use pattern matching, via Guile’s @code{(ice-9 match)} module,
|
||||
especially when matching lists.
|
||||
|
||||
@node Formatting Code
|
||||
@subsection Formatting Code
|
||||
|
||||
When writing Scheme code, we follow common wisdom among Scheme
|
||||
programmers. In general, we follow the
|
||||
@url{http://mumble.net/~campbell/scheme/style.txt, Riastradh's Lisp
|
||||
Style Rules}. This document happens to describe the conventions mostly
|
||||
used in Guile’s code too. It is very thoughtful and well written, so
|
||||
please do read it.
|
||||
|
||||
Some special forms introduced in Guix, such as the @code{substitute*}
|
||||
macro, have special indentation rules. These are defined in the
|
||||
@file{.dir-locals.el} file, which Emacs automatically uses. If you do
|
||||
not use Emacs, please make sure to let your editor know the rules.
|
||||
|
||||
We require all top-level procedures to carry a docstring. This
|
||||
requirement can be relaxed for simple private procedures in the
|
||||
@code{(guix build @dots{})} name space, though.
|
||||
|
||||
Procedures should not have more than four positional parameters. Use
|
||||
keyword parameters for procedures that take more than four parameters.
|
||||
|
||||
|
||||
@node Submitting Patches
|
||||
@section Submitting Patches
|
||||
|
||||
Development is done using the Git distributed version control system.
|
||||
Thus, access to the repository is not strictly necessary. We welcome
|
||||
contributions in the form of patches as produced by @code{git
|
||||
format-patch} sent to the @email{guix-devel@@gnu.org, mailing list}.
|
||||
Please write commit logs in the ChangeLog format (@pxref{Change Logs,,,
|
||||
standards, GNU Coding Standards}); you can check the commit history for
|
||||
examples.
|
||||
|
||||
Before submitting a patch that adds or modifies a package definition,
|
||||
please run through this check list:
|
||||
|
||||
@enumerate
|
||||
@item
|
||||
Take some time to provide an adequate synopsis and description for the
|
||||
package. @xref{Synopses and Descriptions}, for some guidelines.
|
||||
|
||||
@item
|
||||
Run @code{guix lint @var{package}}, where @var{package} is the
|
||||
name of the new or modified package, and fix any errors it reports
|
||||
(@pxref{Invoking guix lint}).
|
||||
|
||||
@item
|
||||
Make sure the package builds on your platform, using @code{guix build
|
||||
@var{package}}.
|
||||
|
||||
@item
|
||||
Take a look at the profile reported by @command{guix size}
|
||||
(@pxref{Invoking guix size}). This will allow you to notice references
|
||||
to other packages unwillingly retained. It may also help determine
|
||||
whether to split the package (@pxref{Packages with Multiple Outputs}),
|
||||
and which optional dependencies should be used.
|
||||
|
||||
@item
|
||||
For important changes, check that dependent package (if applicable) are
|
||||
not affected by the change; @code{guix refresh --list-dependent
|
||||
@var{package}} will help you do that (@pxref{Invoking guix refresh}).
|
||||
|
||||
@item
|
||||
Check whether the package's build process is deterministic. This
|
||||
typically means checking whether an independent build of the package
|
||||
yields the exact same result that you obtained, bit for bit.
|
||||
|
||||
A simple way to do that is with @command{guix challenge}
|
||||
(@pxref{Invoking guix challenge}). You may run it once the package has
|
||||
been committed and built by @code{hydra.gnu.org} to check whether it
|
||||
obtains the same result as you did. Better yet: Find another machine
|
||||
that can build it and run @command{guix publish}.
|
||||
|
||||
@end enumerate
|
||||
|
||||
When posting a patch to the mailing list, use @samp{[PATCH] @dots{}} as a
|
||||
subject. You may use your email client or the @command{git send-mail}
|
||||
command.
|
||||
-740
@@ -1,740 +0,0 @@
|
||||
@node Emacs Interface
|
||||
@chapter Emacs Interface
|
||||
|
||||
@cindex Emacs
|
||||
GNU Guix comes with several useful modules (known as ``guix.el'') for
|
||||
GNU@tie{}Emacs which are intended to make an Emacs user interaction with
|
||||
Guix convenient and fun.
|
||||
|
||||
@menu
|
||||
* Initial Setup: Emacs Initial Setup. Preparing @file{~/.emacs}.
|
||||
* Package Management: Emacs Package Management. Managing packages and generations.
|
||||
* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
|
||||
* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
|
||||
* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
|
||||
* Completions: Emacs Completions. Completing @command{guix} shell command.
|
||||
* Development: Emacs Development. Tools for Guix developers.
|
||||
@end menu
|
||||
|
||||
|
||||
@node Emacs Initial Setup
|
||||
@section Initial Setup
|
||||
|
||||
On the Guix System Distribution (@pxref{GNU Distribution}), ``guix.el''
|
||||
is ready to use, provided Guix is installed system-wide, which is the
|
||||
case by default. So if that is what you're using, you can happily skip
|
||||
this section and read about the fun stuff.
|
||||
|
||||
If you're not yet a happy user of GuixSD, a little bit of setup is needed.
|
||||
To be able to use ``guix.el'', you need to install the following
|
||||
packages:
|
||||
|
||||
@itemize
|
||||
@item
|
||||
@uref{http://www.gnu.org/software/emacs/, GNU Emacs}, version 24.3 or
|
||||
later;
|
||||
|
||||
@item
|
||||
@uref{http://nongnu.org/geiser/, Geiser}, version 0.3 or later: it is
|
||||
used for interacting with the Guile process.
|
||||
|
||||
@item
|
||||
@uref{https://github.com/magit/magit/, magit-popup library}. You
|
||||
already have this library if you use Magit 2.1.0 or later. This library
|
||||
is an optional dependency---it is required only for @kbd{M-x@tie{}guix}
|
||||
command (@pxref{Emacs Popup Interface}).
|
||||
|
||||
@end itemize
|
||||
|
||||
When it is done ``guix.el'' may be configured by requiring a special
|
||||
@code{guix-init} file---i.e., by adding the following code into your
|
||||
init file (@pxref{Init File,,, emacs, The GNU Emacs Manual}):
|
||||
|
||||
@example
|
||||
(add-to-list 'load-path "/path/to/directory-with-guix.el")
|
||||
(require 'guix-init nil t)
|
||||
@end example
|
||||
|
||||
So the only thing you need to figure out is where the directory with
|
||||
elisp files for Guix is placed. It depends on how you installed Guix:
|
||||
|
||||
@itemize
|
||||
@item
|
||||
If it was installed by a package manager of your distribution or by a
|
||||
usual @code{./configure && make && make install} command sequence, then
|
||||
elisp files are placed in a standard directory with Emacs packages
|
||||
(usually it is @file{/usr/share/emacs/site-lisp/}), which is already in
|
||||
@code{load-path}, so there is no need to add that directory there.
|
||||
|
||||
@item
|
||||
If you used a binary installation method (@pxref{Binary Installation}),
|
||||
then Guix is installed somewhere in the store, so the elisp files are
|
||||
placed in @file{/gnu/store/@dots{}-guix-0.8.2/share/emacs/site-lisp/} or
|
||||
alike. However it is not recommended to refer directly to a store
|
||||
directory. Instead you can install Guix using Guix itself with
|
||||
@command{guix package -i guix} command (@pxref{Invoking guix package})
|
||||
and add @file{~/.guix-profile/share/emacs/site-lisp/} directory to
|
||||
@code{load-path} variable.
|
||||
|
||||
@item
|
||||
If you did not install Guix at all and prefer a hacking way
|
||||
(@pxref{Running Guix Before It Is Installed}), along with augmenting
|
||||
@code{load-path} you need to set @code{guix-load-path} variable to the
|
||||
same directory, so your final configuration will look like this:
|
||||
|
||||
@example
|
||||
(let ((dir "/path/to/your-guix-git-tree/emacs"))
|
||||
(add-to-list 'load-path dir)
|
||||
(setq guix-load-path dir))
|
||||
(require 'guix-init nil t)
|
||||
@end example
|
||||
@end itemize
|
||||
|
||||
By default, along with autoloading (@pxref{Autoload,,, elisp, The GNU
|
||||
Emacs Lisp Reference Manual}) the main interactive commands for
|
||||
``guix.el'' (@pxref{Emacs Commands}), requiring @code{guix-init} will
|
||||
also autoload commands for the Emacs packages installed in your user
|
||||
profile.
|
||||
|
||||
To disable automatic loading of installed Emacs packages, set
|
||||
@code{guix-package-enable-at-startup} variable to @code{nil} before
|
||||
requiring @code{guix-init}. This variable has the same meaning for
|
||||
Emacs packages installed with Guix, as @code{package-enable-at-startup}
|
||||
for the built-in Emacs package system (@pxref{Package Installation,,,
|
||||
emacs, The GNU Emacs Manual}).
|
||||
|
||||
You can activate Emacs packages installed in your profile whenever you
|
||||
want using @kbd{M-x@tie{}guix-emacs-load-autoloads}.
|
||||
|
||||
|
||||
@node Emacs Package Management
|
||||
@section Package Management
|
||||
|
||||
Once ``guix.el'' has been successfully configured, you should be able to
|
||||
use a visual interface for routine package management tasks, pretty much
|
||||
like the @command{guix package} command (@pxref{Invoking guix package}).
|
||||
Specifically, it makes it easy to:
|
||||
|
||||
@itemize
|
||||
@item browse and display packages and generations;
|
||||
@item search, install, upgrade and remove packages;
|
||||
@item display packages from previous generations;
|
||||
@item do some other useful things.
|
||||
@end itemize
|
||||
|
||||
@menu
|
||||
* Commands: Emacs Commands. @kbd{M-x guix-@dots{}}
|
||||
* General information: Emacs General info. Common for both interfaces.
|
||||
* ``List'' buffer: Emacs List buffer. List-like interface.
|
||||
* ``Info'' buffer: Emacs Info buffer. Help-like interface.
|
||||
* Configuration: Emacs Configuration. Configuring the interface.
|
||||
@end menu
|
||||
|
||||
@node Emacs Commands
|
||||
@subsection Commands
|
||||
|
||||
All commands for displaying packages and generations use the current
|
||||
profile, which can be changed with
|
||||
@kbd{M-x@tie{}guix-set-current-profile}. Alternatively, if you call any
|
||||
of these commands with prefix argument (@kbd{C-u}), you will be prompted
|
||||
for a profile just for that command.
|
||||
|
||||
Commands for displaying packages:
|
||||
|
||||
@table @kbd
|
||||
|
||||
@item M-x guix-all-available-packages
|
||||
@itemx M-x guix-newest-available-packages
|
||||
Display all/newest available packages.
|
||||
|
||||
@item M-x guix-installed-packages
|
||||
Display all installed packages.
|
||||
|
||||
@item M-x guix-obsolete-packages
|
||||
Display obsolete packages (the packages that are installed in a profile
|
||||
but cannot be found among available packages).
|
||||
|
||||
@item M-x guix-search-by-name
|
||||
Display package(s) with the specified name.
|
||||
|
||||
@item M-x guix-search-by-regexp
|
||||
Search for packages by a specified regexp. By default ``name'',
|
||||
``synopsis'' and ``description'' of the packages will be searched. This
|
||||
can be changed by modifying @code{guix-search-params} variable.
|
||||
|
||||
@end table
|
||||
|
||||
By default, these commands display each output on a separate line. If
|
||||
you prefer to see a list of packages---i.e., a list with a package per
|
||||
line, use the following setting:
|
||||
|
||||
@example
|
||||
(setq guix-package-list-type 'package)
|
||||
@end example
|
||||
|
||||
Commands for displaying generations:
|
||||
|
||||
@table @kbd
|
||||
|
||||
@item M-x guix-generations
|
||||
List all the generations.
|
||||
|
||||
@item M-x guix-last-generations
|
||||
List the @var{N} last generations. You will be prompted for the number
|
||||
of generations.
|
||||
|
||||
@item M-x guix-generations-by-time
|
||||
List generations matching time period. You will be prompted for the
|
||||
period using Org mode time prompt based on Emacs calendar (@pxref{The
|
||||
date/time prompt,,, org, The Org Manual}).
|
||||
|
||||
@end table
|
||||
|
||||
You can also invoke the @command{guix pull} command (@pxref{Invoking
|
||||
guix pull}) from Emacs using:
|
||||
|
||||
@table @kbd
|
||||
@item M-x guix-pull
|
||||
With @kbd{C-u}, make it verbose.
|
||||
@end table
|
||||
|
||||
Once @command{guix pull} has succeeded, the Guix REPL is restared. This
|
||||
allows you to keep using the Emacs interface with the updated Guix.
|
||||
|
||||
@node Emacs General info
|
||||
@subsection General information
|
||||
|
||||
The following keys are available for both ``list'' and ``info'' types of
|
||||
buffers:
|
||||
|
||||
@table @kbd
|
||||
@item l
|
||||
@itemx r
|
||||
Go backward/forward by the history of the displayed results (this
|
||||
history is similar to the history of the Emacs @code{help-mode} or
|
||||
@code{Info-mode}).
|
||||
|
||||
@item g
|
||||
Revert current buffer: update information about the displayed
|
||||
packages/generations and redisplay it.
|
||||
|
||||
@item R
|
||||
Redisplay current buffer (without updating information).
|
||||
|
||||
@item M
|
||||
Apply manifest to the current profile or to a specified profile, if
|
||||
prefix argument is used. This has the same meaning as @code{--manifest}
|
||||
option (@pxref{Invoking guix package}).
|
||||
|
||||
@item C-c C-z
|
||||
@cindex REPL
|
||||
@cindex read-eval-print loop
|
||||
Go to the Guix REPL (@pxref{The REPL,,, geiser, Geiser User Manual}).
|
||||
|
||||
@item h
|
||||
@itemx ?
|
||||
Describe current mode to see all available bindings.
|
||||
|
||||
@end table
|
||||
|
||||
@emph{Hint:} If you need several ``list'' or ``info'' buffers, you can
|
||||
simlpy @kbd{M-x clone-buffer} them, and each buffer will have its own
|
||||
history.
|
||||
|
||||
@emph{Warning:} Name/version pairs cannot be used to identify packages
|
||||
(because a name is not necessarily unique), so ``guix.el'' uses special
|
||||
identifiers that live only during a guile session, so if the Guix REPL
|
||||
was restarted, you may want to revert ``list'' buffer (by pressing
|
||||
@kbd{g}).
|
||||
|
||||
@node Emacs List buffer
|
||||
@subsection ``List'' buffer
|
||||
|
||||
An interface of a ``list'' buffer is similar to the interface provided
|
||||
by ``package.el'' (@pxref{Package Menu,,, emacs, The GNU Emacs Manual}).
|
||||
|
||||
Default key bindings available for both ``package-list'' and
|
||||
``generation-list'' buffers:
|
||||
|
||||
@table @kbd
|
||||
@item m
|
||||
Mark the current entry (with prefix, mark all entries).
|
||||
@item u
|
||||
Unmark the current entry (with prefix, unmark all entries).
|
||||
@item @key{DEL}
|
||||
Unmark backward.
|
||||
@item S
|
||||
Sort entries by a specified column.
|
||||
@end table
|
||||
|
||||
A ``package-list'' buffer additionally provides the following bindings:
|
||||
|
||||
@table @kbd
|
||||
@item @key{RET}
|
||||
Describe marked packages (display available information in a
|
||||
``package-info'' buffer).
|
||||
@item i
|
||||
Mark the current package for installation.
|
||||
@item d
|
||||
Mark the current package for deletion.
|
||||
@item U
|
||||
Mark the current package for upgrading.
|
||||
@item ^
|
||||
Mark all obsolete packages for upgrading.
|
||||
@item e
|
||||
Edit the definition of the curent package (go to its location). This is
|
||||
similar to @command{guix edit} command (@pxref{Invoking guix edit}), but
|
||||
for opening a package recipe in the current Emacs instance.
|
||||
@item x
|
||||
Execute actions on the marked packages.
|
||||
@end table
|
||||
|
||||
A ``generation-list'' buffer additionally provides the following
|
||||
bindings:
|
||||
|
||||
@table @kbd
|
||||
@item @key{RET}
|
||||
List packages installed in the current generation.
|
||||
@item i
|
||||
Describe marked generations (display available information in a
|
||||
``generation-info'' buffer).
|
||||
@item s
|
||||
Switch profile to the current generation.
|
||||
@item d
|
||||
Mark the current generation for deletion (with prefix, mark all
|
||||
generations).
|
||||
@item x
|
||||
Execute actions on the marked generations---i.e., delete generations.
|
||||
@item e
|
||||
Run Ediff (@pxref{Top,,, ediff, The Ediff Manual}) on package outputs
|
||||
installed in the 2 marked generations. With prefix argument, run Ediff
|
||||
on manifests of the marked generations.
|
||||
@item D
|
||||
@itemx =
|
||||
Run Diff (@pxref{Diff Mode,,, emacs, The GNU Emacs Manual}) on package
|
||||
outputs installed in the 2 marked generations. With prefix argument,
|
||||
run Diff on manifests of the marked generations.
|
||||
@item +
|
||||
List package outputs added to the latest marked generation comparing
|
||||
with another marked generation.
|
||||
@item -
|
||||
List package outputs removed from the latest marked generation comparing
|
||||
with another marked generation.
|
||||
@end table
|
||||
|
||||
@node Emacs Info buffer
|
||||
@subsection ``Info'' buffer
|
||||
|
||||
The interface of an ``info'' buffer is similar to the interface of
|
||||
@code{help-mode} (@pxref{Help Mode,,, emacs, The GNU Emacs Manual}).
|
||||
|
||||
``Info'' buffer contains some buttons (as usual you may use @key{TAB} /
|
||||
@kbd{S-@key{TAB}} to move between buttons---@pxref{Mouse References,,,
|
||||
emacs, The GNU Emacs Manual}) which can be used to:
|
||||
|
||||
@itemize @bullet
|
||||
@item (in a ``package-info'' buffer)
|
||||
|
||||
@itemize @minus
|
||||
@item install/remove a package;
|
||||
@item jump to a package location;
|
||||
@item browse home page of a package;
|
||||
@item describe packages from ``Inputs'' fields.
|
||||
@end itemize
|
||||
|
||||
@item (in a ``generation-info'' buffer)
|
||||
|
||||
@itemize @minus
|
||||
@item remove a generation;
|
||||
@item switch to a generation;
|
||||
@item list packages installed in a generation;
|
||||
@item jump to a generation directory.
|
||||
@end itemize
|
||||
|
||||
@end itemize
|
||||
|
||||
It is also possible to copy a button label (a link to an URL or a file)
|
||||
by pressing @kbd{c} on a button.
|
||||
|
||||
|
||||
@node Emacs Configuration
|
||||
@subsection Configuration
|
||||
|
||||
There are many variables you can modify to change the appearance or
|
||||
behavior of Emacs user interface. Some of these variables are described
|
||||
in this section. Also you can use Custom Interface (@pxref{Easy
|
||||
Customization,,, emacs, The GNU Emacs Manual}) to explore/set variables
|
||||
(not all) and faces.
|
||||
|
||||
@menu
|
||||
* Guile and Build Options: Emacs Build Options. Specifying how packages are built.
|
||||
* Buffer Names: Emacs Buffer Names. Names of Guix buffers.
|
||||
* Keymaps: Emacs Keymaps. Configuring key bindings.
|
||||
* Appearance: Emacs Appearance. Settings for visual appearance.
|
||||
@end menu
|
||||
|
||||
@node Emacs Build Options
|
||||
@subsubsection Guile and Build Options
|
||||
|
||||
@table @code
|
||||
@item guix-guile-program
|
||||
If you have some special needs for starting a Guile process, you may set
|
||||
this variable, for example:
|
||||
|
||||
@example
|
||||
(setq guix-guile-program '("/bin/guile" "--no-auto-compile"))
|
||||
@end example
|
||||
|
||||
@item guix-use-substitutes
|
||||
Has the same meaning as @code{--no-substitutes} option (@pxref{Invoking
|
||||
guix build}).
|
||||
|
||||
@item guix-dry-run
|
||||
Has the same meaning as @code{--dry-run} option (@pxref{Invoking guix
|
||||
build}).
|
||||
|
||||
@end table
|
||||
|
||||
@node Emacs Buffer Names
|
||||
@subsubsection Buffer Names
|
||||
|
||||
Default names of ``guix.el'' buffers (``*Guix@tie{}@dots{}*'') may be
|
||||
changed with the following variables:
|
||||
|
||||
@table @code
|
||||
@item guix-package-list-buffer-name
|
||||
@item guix-output-list-buffer-name
|
||||
@item guix-generation-list-buffer-name
|
||||
@item guix-package-info-buffer-name
|
||||
@item guix-output-info-buffer-name
|
||||
@item guix-generation-info-buffer-name
|
||||
@item guix-repl-buffer-name
|
||||
@item guix-internal-repl-buffer-name
|
||||
@end table
|
||||
|
||||
By default, the name of a profile is also displayed in a ``list'' or
|
||||
``info'' buffer name. To change this behavior, use
|
||||
@code{guix-buffer-name-function} variable.
|
||||
|
||||
For example, if you want to display all types of results in a single
|
||||
buffer (in such case you will probably use a history (@kbd{l}/@kbd{r})
|
||||
extensively), you may do it like this:
|
||||
|
||||
@example
|
||||
(let ((name "Guix Universal"))
|
||||
(setq
|
||||
guix-package-list-buffer-name name
|
||||
guix-output-list-buffer-name name
|
||||
guix-generation-list-buffer-name name
|
||||
guix-package-info-buffer-name name
|
||||
guix-output-info-buffer-name name
|
||||
guix-generation-info-buffer-name name
|
||||
guix-buffer-name-function #'guix-buffer-name-simple))
|
||||
@end example
|
||||
|
||||
@node Emacs Keymaps
|
||||
@subsubsection Keymaps
|
||||
|
||||
If you want to change default key bindings, use the following keymaps
|
||||
(@pxref{Init Rebinding,,, emacs, The GNU Emacs Manual}):
|
||||
|
||||
@table @code
|
||||
@item guix-root-map
|
||||
Parent keymap with general keys for all guix modes.
|
||||
|
||||
@item guix-list-mode-map
|
||||
Parent keymap with general keys for ``list'' buffers.
|
||||
|
||||
@item guix-package-list-mode-map
|
||||
Keymap with specific keys for ``package-list'' buffers.
|
||||
|
||||
@item guix-output-list-mode-map
|
||||
Keymap with specific keys for ``output-list'' buffers.
|
||||
|
||||
@item guix-generation-list-mode-map
|
||||
Keymap with specific keys for ``generation-list'' buffers.
|
||||
|
||||
@item guix-info-mode-map
|
||||
Parent keymap with general keys for ``info'' buffers.
|
||||
|
||||
@item guix-package-info-mode-map
|
||||
Keymap with specific keys for ``package-info'' buffers.
|
||||
|
||||
@item guix-output-info-mode-map
|
||||
Keymap with specific keys for ``output-info'' buffers.
|
||||
|
||||
@item guix-generation-info-mode-map
|
||||
Keymap with specific keys for ``generation-info'' buffers.
|
||||
|
||||
@item guix-info-button-map
|
||||
Keymap with keys available when a point is placed on a button.
|
||||
|
||||
@end table
|
||||
|
||||
@node Emacs Appearance
|
||||
@subsubsection Appearance
|
||||
|
||||
You can change almost any aspect of ``list'' / ``info'' buffers using
|
||||
the following variables:
|
||||
|
||||
@table @code
|
||||
@item guix-list-column-format
|
||||
@itemx guix-list-column-titles
|
||||
@itemx guix-list-column-value-methods
|
||||
Specify the columns, their names, what and how is displayed in ``list''
|
||||
buffers.
|
||||
|
||||
@item guix-info-displayed-params
|
||||
@itemx guix-info-insert-methods
|
||||
@itemx guix-info-ignore-empty-vals
|
||||
@itemx guix-info-param-title-format
|
||||
@itemx guix-info-multiline-prefix
|
||||
@itemx guix-info-indent
|
||||
@itemx guix-info-fill-column
|
||||
@itemx guix-info-delimiter
|
||||
Various settings for ``info'' buffers.
|
||||
|
||||
@end table
|
||||
|
||||
|
||||
@node Emacs Popup Interface
|
||||
@section Popup Interface
|
||||
|
||||
If you ever used Magit, you know what ``popup interface'' is
|
||||
(@pxref{Top,,, magit-popup, Magit-Popup User Manual}). Even if you are
|
||||
not acquainted with Magit, there should be no worries as it is very
|
||||
intuitive.
|
||||
|
||||
So @kbd{M-x@tie{}guix} command provides a top-level popup interface for
|
||||
all available guix commands. When you select an option, you'll be
|
||||
prompted for a value in the minibuffer. Many values have completions,
|
||||
so don't hesitate to press @key{TAB} key. Multiple values (for example,
|
||||
packages or lint checkers) should be separated by commas.
|
||||
|
||||
After specifying all options and switches for a command, you may choose
|
||||
one of the available actions. The following default actions are
|
||||
available for all commands:
|
||||
|
||||
@itemize
|
||||
|
||||
@item
|
||||
Run the command in the Guix REPL. It is faster than running
|
||||
@code{guix@tie{}@dots{}} command directly in shell, as there is no
|
||||
need to run another guile process and to load required modules there.
|
||||
|
||||
@item
|
||||
Run the command in a shell buffer. You can set
|
||||
@code{guix-run-in-shell-function} variable to fine tune the shell buffer
|
||||
you want to use.
|
||||
|
||||
@item
|
||||
Add the command line to the kill ring (@pxref{Kill Ring,,, emacs, The
|
||||
GNU Emacs Manual}).
|
||||
|
||||
@end itemize
|
||||
|
||||
Several commands (@command{guix graph}, @command{guix system dmd-graph}
|
||||
and @command{guix system extension-graph}) also have a ``View graph''
|
||||
action, which allows you to view a generated graph using @command{dot}
|
||||
command (specified by @code{guix-dot-program} variable). By default a
|
||||
PNG file will be saved in @file{/tmp} directory and will be opened
|
||||
directly in Emacs. This behavior may be changed with the following
|
||||
variables:
|
||||
|
||||
@table @code
|
||||
|
||||
@item guix-find-file-function
|
||||
Function used to open a generated graph. If you want to open a graph in
|
||||
an external program, you can do it by modifying this variable---for
|
||||
example, you can use a functionality provided by the Org Mode
|
||||
(@pxref{Top,,, org, The Org Manual}):
|
||||
|
||||
@example
|
||||
(setq guix-find-file-function 'org-open-file)
|
||||
(add-to-list 'org-file-apps '("\\.png\\'" . "sxiv %s"))
|
||||
@end example
|
||||
|
||||
@item guix-dot-default-arguments
|
||||
Command line arguments to run @command{dot} command. If you change an
|
||||
output format (for example, into @code{-Tpdf}), you also need to change
|
||||
the next variable.
|
||||
|
||||
@item guix-dot-file-name-function
|
||||
Function used to define a name of the generated graph file. Default
|
||||
name is @file{/tmp/guix-emacs-graph-XXXXXX.png}.
|
||||
|
||||
@end table
|
||||
|
||||
So, for example, if you want to generate and open a PDF file in your
|
||||
Emacs, you may change the settings like this:
|
||||
|
||||
@example
|
||||
(defun my-guix-pdf-graph ()
|
||||
"/tmp/my-current-guix-graph.pdf")
|
||||
|
||||
(setq guix-dot-default-arguments '("-Tpdf")
|
||||
guix-dot-file-name-function 'my-guix-pdf-graph)
|
||||
@end example
|
||||
|
||||
|
||||
@node Emacs Prettify
|
||||
@section Guix Prettify Mode
|
||||
|
||||
GNU@tie{}Guix also comes with ``guix-prettify.el''. It provides a minor
|
||||
mode for abbreviating store file names by replacing hash sequences of
|
||||
symbols with ``@dots{}'':
|
||||
|
||||
@example
|
||||
/gnu/store/72f54nfp6g1hz873w8z3gfcah0h4nl9p-foo-0.1
|
||||
@result{} /gnu/store/…-foo-0.1
|
||||
@end example
|
||||
|
||||
Once you set up ``guix.el'' (@pxref{Emacs Initial Setup}), the following
|
||||
commands become available:
|
||||
|
||||
@table @kbd
|
||||
|
||||
@item M-x guix-prettify-mode
|
||||
Enable/disable prettifying for the current buffer.
|
||||
|
||||
@item M-x global-guix-prettify-mode
|
||||
Enable/disable prettifying globally.
|
||||
|
||||
@end table
|
||||
|
||||
To automatically enable @code{guix-prettify-mode} globally on Emacs
|
||||
start, add the following line to your init file:
|
||||
|
||||
@example
|
||||
(global-guix-prettify-mode)
|
||||
@end example
|
||||
|
||||
If you want to enable it only for specific major modes, add it to the
|
||||
mode hooks (@pxref{Hooks,,, emacs, The GNU Emacs Manual}), for example:
|
||||
|
||||
@example
|
||||
(add-hook 'shell-mode-hook 'guix-prettify-mode)
|
||||
(add-hook 'dired-mode-hook 'guix-prettify-mode)
|
||||
@end example
|
||||
|
||||
|
||||
@node Emacs Build Log
|
||||
@section Build Log Mode
|
||||
|
||||
GNU@tie{}Guix provides major and minor modes for highlighting build
|
||||
logs. So when you have a file with a package build output---for
|
||||
example, a file returned by @command{guix build --log-file @dots{}}
|
||||
command (@pxref{Invoking guix build}), you may call @kbd{M-x
|
||||
guix-build-log-mode} command in the buffer with this file. This major
|
||||
mode highlights some lines specific to build output and provides the
|
||||
following key bindings:
|
||||
|
||||
@table @kbd
|
||||
|
||||
@item M-n
|
||||
Move to the next build phase.
|
||||
|
||||
@item M-p
|
||||
Move to the previous build phase.
|
||||
|
||||
@item @key{TAB}
|
||||
Toggle (show/hide) the body of the current build phase.
|
||||
|
||||
@item S-@key{TAB}
|
||||
Toggle (show/hide) the bodies of all build phases.
|
||||
|
||||
@end table
|
||||
|
||||
There is also @kbd{M-x guix-build-log-minor-mode} which also provides
|
||||
the same highlighting and the same key bindings as the major mode, but
|
||||
prefixed with @kbd{C-c}. By default, this minor mode is enabled in
|
||||
shell buffers (@pxref{Interactive Shell,,, emacs, The GNU Emacs
|
||||
Manual}). If you don't like it, set
|
||||
@code{guix-build-log-minor-mode-activate} to nil.
|
||||
|
||||
|
||||
@node Emacs Completions
|
||||
@section Shell Completions
|
||||
|
||||
Another feature that becomes available after configuring Emacs interface
|
||||
(@pxref{Emacs Initial Setup}) is completing of @command{guix}
|
||||
subcommands, options, packages and other things in @code{shell}
|
||||
(@pxref{Interactive Shell,,, emacs, The GNU Emacs Manual}) and
|
||||
@code{eshell} (@pxref{Top,,, eshell, Eshell: The Emacs Shell}).
|
||||
|
||||
It works the same way as other completions do. Just press @key{TAB}
|
||||
when your intuition tells you.
|
||||
|
||||
And here are some examples, where pressing @key{TAB} may complete
|
||||
something:
|
||||
|
||||
@itemize @w{}
|
||||
|
||||
@item @code{guix pa}@key{TAB}
|
||||
@item @code{guix package -}@key{TAB}
|
||||
@item @code{guix package --}@key{TAB}
|
||||
@item @code{guix package -i gei}@key{TAB}
|
||||
@item @code{guix build -L/tm}@key{TAB}
|
||||
@item @code{guix build --sy}@key{TAB}
|
||||
@item @code{guix build --system=i}@key{TAB}
|
||||
@item @code{guix system rec}@key{TAB}
|
||||
@item @code{guix lint --checkers=sy}@key{TAB}
|
||||
@item @code{guix lint --checkers=synopsis,des}@key{TAB}
|
||||
|
||||
@end itemize
|
||||
|
||||
|
||||
@node Emacs Development
|
||||
@section Development
|
||||
|
||||
By default, when you open a Scheme file, @code{guix-devel-mode} will be
|
||||
activated (if you don't want it, set @code{guix-devel-activate-mode} to
|
||||
nil). This minor mode provides the following key bindings:
|
||||
|
||||
@table @kbd
|
||||
|
||||
@item C-c . k
|
||||
Copy the name of the current Guile module into kill ring
|
||||
(@code{guix-devel-copy-module-as-kill}).
|
||||
|
||||
@item C-c . u
|
||||
Use the current Guile module. Often after opening a Scheme file, you
|
||||
want to use a module it defines, so you switch to the Geiser REPL and
|
||||
write @code{,use (some module)} there. You may just use this command
|
||||
instead (@code{guix-devel-use-module}).
|
||||
|
||||
@item C-c . b
|
||||
Build a package defined by the current variable definition. The
|
||||
building process is run in the current Geiser REPL. If you modified the
|
||||
current package definition, don't forget to reevaluate it before calling
|
||||
this command---for example, with @kbd{C-M-x} (@pxref{To eval or not to
|
||||
eval,,, geiser, Geiser User Manual})
|
||||
(@code{guix-devel-build-package-definition}).
|
||||
|
||||
@item C-c . s
|
||||
Build a source derivation of the package defined by the current variable
|
||||
definition. This command has the same meaning as @code{guix build -S}
|
||||
shell command (@pxref{Invoking guix build})
|
||||
(@code{guix-devel-build-package-source}).
|
||||
|
||||
@item C-c . l
|
||||
Lint (check) a package defined by the current variable definition
|
||||
(@pxref{Invoking guix lint}) (@code{guix-devel-lint-package}).
|
||||
|
||||
@end table
|
||||
|
||||
Unluckily, there is a limitation related to long-running REPL commands.
|
||||
When there is a running process in a Geiser REPL, you are not supposed
|
||||
to evaluate anything in a scheme buffer, because this will ``freeze''
|
||||
the REPL: it will stop producing any output (however, the evaluating
|
||||
process will continue---you will just not see any progress anymore). Be
|
||||
aware: even moving the point in a scheme buffer may ``break'' the REPL
|
||||
if Autodoc (@pxref{Autodoc and friends,,, geiser, Geiser User Manual})
|
||||
is enabled (which is the default).
|
||||
|
||||
So you have to postpone editing your scheme buffers until the running
|
||||
evaluation will be finished in the REPL.
|
||||
|
||||
Alternatively, to avoid this limitation, you may just run another Geiser
|
||||
REPL, and while something is being evaluated in the previous REPL, you
|
||||
can continue editing a scheme file with the help of the current one.
|
||||
@@ -1,13 +0,0 @@
|
||||
(use-modules (guix)
|
||||
(gnu packages gdb)
|
||||
(gnu packages autotools)
|
||||
(gnu packages texinfo))
|
||||
|
||||
;; Augment the package definition of GDB with the build tools
|
||||
;; needed when developing GDB (and which are not needed when
|
||||
;; simply installing it.)
|
||||
(package (inherit gdb)
|
||||
(native-inputs `(("autoconf" ,autoconf-2.64)
|
||||
("automake" ,automake)
|
||||
("texinfo" ,texinfo)
|
||||
,@(package-native-inputs gdb))))
|
||||
@@ -1,505 +0,0 @@
|
||||
@c The GNU Free Documentation License.
|
||||
@center Version 1.3, 3 November 2008
|
||||
|
||||
@c This file is intended to be included within another document,
|
||||
@c hence no sectioning command or @node.
|
||||
|
||||
@display
|
||||
Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
|
||||
@uref{http://fsf.org/}
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
@end display
|
||||
|
||||
@enumerate 0
|
||||
@item
|
||||
PREAMBLE
|
||||
|
||||
The purpose of this License is to make a manual, textbook, or other
|
||||
functional and useful document @dfn{free} in the sense of freedom: to
|
||||
assure everyone the effective freedom to copy and redistribute it,
|
||||
with or without modifying it, either commercially or noncommercially.
|
||||
Secondarily, this License preserves for the author and publisher a way
|
||||
to get credit for their work, while not being considered responsible
|
||||
for modifications made by others.
|
||||
|
||||
This License is a kind of ``copyleft'', which means that derivative
|
||||
works of the document must themselves be free in the same sense. It
|
||||
complements the GNU General Public License, which is a copyleft
|
||||
license designed for free software.
|
||||
|
||||
We have designed this License in order to use it for manuals for free
|
||||
software, because free software needs free documentation: a free
|
||||
program should come with manuals providing the same freedoms that the
|
||||
software does. But this License is not limited to software manuals;
|
||||
it can be used for any textual work, regardless of subject matter or
|
||||
whether it is published as a printed book. We recommend this License
|
||||
principally for works whose purpose is instruction or reference.
|
||||
|
||||
@item
|
||||
APPLICABILITY AND DEFINITIONS
|
||||
|
||||
This License applies to any manual or other work, in any medium, that
|
||||
contains a notice placed by the copyright holder saying it can be
|
||||
distributed under the terms of this License. Such a notice grants a
|
||||
world-wide, royalty-free license, unlimited in duration, to use that
|
||||
work under the conditions stated herein. The ``Document'', below,
|
||||
refers to any such manual or work. Any member of the public is a
|
||||
licensee, and is addressed as ``you''. You accept the license if you
|
||||
copy, modify or distribute the work in a way requiring permission
|
||||
under copyright law.
|
||||
|
||||
A ``Modified Version'' of the Document means any work containing the
|
||||
Document or a portion of it, either copied verbatim, or with
|
||||
modifications and/or translated into another language.
|
||||
|
||||
A ``Secondary Section'' is a named appendix or a front-matter section
|
||||
of the Document that deals exclusively with the relationship of the
|
||||
publishers or authors of the Document to the Document's overall
|
||||
subject (or to related matters) and contains nothing that could fall
|
||||
directly within that overall subject. (Thus, if the Document is in
|
||||
part a textbook of mathematics, a Secondary Section may not explain
|
||||
any mathematics.) The relationship could be a matter of historical
|
||||
connection with the subject or with related matters, or of legal,
|
||||
commercial, philosophical, ethical or political position regarding
|
||||
them.
|
||||
|
||||
The ``Invariant Sections'' are certain Secondary Sections whose titles
|
||||
are designated, as being those of Invariant Sections, in the notice
|
||||
that says that the Document is released under this License. If a
|
||||
section does not fit the above definition of Secondary then it is not
|
||||
allowed to be designated as Invariant. The Document may contain zero
|
||||
Invariant Sections. If the Document does not identify any Invariant
|
||||
Sections then there are none.
|
||||
|
||||
The ``Cover Texts'' are certain short passages of text that are listed,
|
||||
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
|
||||
the Document is released under this License. A Front-Cover Text may
|
||||
be at most 5 words, and a Back-Cover Text may be at most 25 words.
|
||||
|
||||
A ``Transparent'' copy of the Document means a machine-readable copy,
|
||||
represented in a format whose specification is available to the
|
||||
general public, that is suitable for revising the document
|
||||
straightforwardly with generic text editors or (for images composed of
|
||||
pixels) generic paint programs or (for drawings) some widely available
|
||||
drawing editor, and that is suitable for input to text formatters or
|
||||
for automatic translation to a variety of formats suitable for input
|
||||
to text formatters. A copy made in an otherwise Transparent file
|
||||
format whose markup, or absence of markup, has been arranged to thwart
|
||||
or discourage subsequent modification by readers is not Transparent.
|
||||
An image format is not Transparent if used for any substantial amount
|
||||
of text. A copy that is not ``Transparent'' is called ``Opaque''.
|
||||
|
||||
Examples of suitable formats for Transparent copies include plain
|
||||
ASCII without markup, Texinfo input format, La@TeX{} input
|
||||
format, SGML or XML using a publicly available
|
||||
DTD, and standard-conforming simple HTML,
|
||||
PostScript or PDF designed for human modification. Examples
|
||||
of transparent image formats include PNG, XCF and
|
||||
JPG. Opaque formats include proprietary formats that can be
|
||||
read and edited only by proprietary word processors, SGML or
|
||||
XML for which the DTD and/or processing tools are
|
||||
not generally available, and the machine-generated HTML,
|
||||
PostScript or PDF produced by some word processors for
|
||||
output purposes only.
|
||||
|
||||
The ``Title Page'' means, for a printed book, the title page itself,
|
||||
plus such following pages as are needed to hold, legibly, the material
|
||||
this License requires to appear in the title page. For works in
|
||||
formats which do not have any title page as such, ``Title Page'' means
|
||||
the text near the most prominent appearance of the work's title,
|
||||
preceding the beginning of the body of the text.
|
||||
|
||||
The ``publisher'' means any person or entity that distributes copies
|
||||
of the Document to the public.
|
||||
|
||||
A section ``Entitled XYZ'' means a named subunit of the Document whose
|
||||
title either is precisely XYZ or contains XYZ in parentheses following
|
||||
text that translates XYZ in another language. (Here XYZ stands for a
|
||||
specific section name mentioned below, such as ``Acknowledgements'',
|
||||
``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
|
||||
of such a section when you modify the Document means that it remains a
|
||||
section ``Entitled XYZ'' according to this definition.
|
||||
|
||||
The Document may include Warranty Disclaimers next to the notice which
|
||||
states that this License applies to the Document. These Warranty
|
||||
Disclaimers are considered to be included by reference in this
|
||||
License, but only as regards disclaiming warranties: any other
|
||||
implication that these Warranty Disclaimers may have is void and has
|
||||
no effect on the meaning of this License.
|
||||
|
||||
@item
|
||||
VERBATIM COPYING
|
||||
|
||||
You may copy and distribute the Document in any medium, either
|
||||
commercially or noncommercially, provided that this License, the
|
||||
copyright notices, and the license notice saying this License applies
|
||||
to the Document are reproduced in all copies, and that you add no other
|
||||
conditions whatsoever to those of this License. You may not use
|
||||
technical measures to obstruct or control the reading or further
|
||||
copying of the copies you make or distribute. However, you may accept
|
||||
compensation in exchange for copies. If you distribute a large enough
|
||||
number of copies you must also follow the conditions in section 3.
|
||||
|
||||
You may also lend copies, under the same conditions stated above, and
|
||||
you may publicly display copies.
|
||||
|
||||
@item
|
||||
COPYING IN QUANTITY
|
||||
|
||||
If you publish printed copies (or copies in media that commonly have
|
||||
printed covers) of the Document, numbering more than 100, and the
|
||||
Document's license notice requires Cover Texts, you must enclose the
|
||||
copies in covers that carry, clearly and legibly, all these Cover
|
||||
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
|
||||
the back cover. Both covers must also clearly and legibly identify
|
||||
you as the publisher of these copies. The front cover must present
|
||||
the full title with all words of the title equally prominent and
|
||||
visible. You may add other material on the covers in addition.
|
||||
Copying with changes limited to the covers, as long as they preserve
|
||||
the title of the Document and satisfy these conditions, can be treated
|
||||
as verbatim copying in other respects.
|
||||
|
||||
If the required texts for either cover are too voluminous to fit
|
||||
legibly, you should put the first ones listed (as many as fit
|
||||
reasonably) on the actual cover, and continue the rest onto adjacent
|
||||
pages.
|
||||
|
||||
If you publish or distribute Opaque copies of the Document numbering
|
||||
more than 100, you must either include a machine-readable Transparent
|
||||
copy along with each Opaque copy, or state in or with each Opaque copy
|
||||
a computer-network location from which the general network-using
|
||||
public has access to download using public-standard network protocols
|
||||
a complete Transparent copy of the Document, free of added material.
|
||||
If you use the latter option, you must take reasonably prudent steps,
|
||||
when you begin distribution of Opaque copies in quantity, to ensure
|
||||
that this Transparent copy will remain thus accessible at the stated
|
||||
location until at least one year after the last time you distribute an
|
||||
Opaque copy (directly or through your agents or retailers) of that
|
||||
edition to the public.
|
||||
|
||||
It is requested, but not required, that you contact the authors of the
|
||||
Document well before redistributing any large number of copies, to give
|
||||
them a chance to provide you with an updated version of the Document.
|
||||
|
||||
@item
|
||||
MODIFICATIONS
|
||||
|
||||
You may copy and distribute a Modified Version of the Document under
|
||||
the conditions of sections 2 and 3 above, provided that you release
|
||||
the Modified Version under precisely this License, with the Modified
|
||||
Version filling the role of the Document, thus licensing distribution
|
||||
and modification of the Modified Version to whoever possesses a copy
|
||||
of it. In addition, you must do these things in the Modified Version:
|
||||
|
||||
@enumerate A
|
||||
@item
|
||||
Use in the Title Page (and on the covers, if any) a title distinct
|
||||
from that of the Document, and from those of previous versions
|
||||
(which should, if there were any, be listed in the History section
|
||||
of the Document). You may use the same title as a previous version
|
||||
if the original publisher of that version gives permission.
|
||||
|
||||
@item
|
||||
List on the Title Page, as authors, one or more persons or entities
|
||||
responsible for authorship of the modifications in the Modified
|
||||
Version, together with at least five of the principal authors of the
|
||||
Document (all of its principal authors, if it has fewer than five),
|
||||
unless they release you from this requirement.
|
||||
|
||||
@item
|
||||
State on the Title page the name of the publisher of the
|
||||
Modified Version, as the publisher.
|
||||
|
||||
@item
|
||||
Preserve all the copyright notices of the Document.
|
||||
|
||||
@item
|
||||
Add an appropriate copyright notice for your modifications
|
||||
adjacent to the other copyright notices.
|
||||
|
||||
@item
|
||||
Include, immediately after the copyright notices, a license notice
|
||||
giving the public permission to use the Modified Version under the
|
||||
terms of this License, in the form shown in the Addendum below.
|
||||
|
||||
@item
|
||||
Preserve in that license notice the full lists of Invariant Sections
|
||||
and required Cover Texts given in the Document's license notice.
|
||||
|
||||
@item
|
||||
Include an unaltered copy of this License.
|
||||
|
||||
@item
|
||||
Preserve the section Entitled ``History'', Preserve its Title, and add
|
||||
to it an item stating at least the title, year, new authors, and
|
||||
publisher of the Modified Version as given on the Title Page. If
|
||||
there is no section Entitled ``History'' in the Document, create one
|
||||
stating the title, year, authors, and publisher of the Document as
|
||||
given on its Title Page, then add an item describing the Modified
|
||||
Version as stated in the previous sentence.
|
||||
|
||||
@item
|
||||
Preserve the network location, if any, given in the Document for
|
||||
public access to a Transparent copy of the Document, and likewise
|
||||
the network locations given in the Document for previous versions
|
||||
it was based on. These may be placed in the ``History'' section.
|
||||
You may omit a network location for a work that was published at
|
||||
least four years before the Document itself, or if the original
|
||||
publisher of the version it refers to gives permission.
|
||||
|
||||
@item
|
||||
For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
|
||||
the Title of the section, and preserve in the section all the
|
||||
substance and tone of each of the contributor acknowledgements and/or
|
||||
dedications given therein.
|
||||
|
||||
@item
|
||||
Preserve all the Invariant Sections of the Document,
|
||||
unaltered in their text and in their titles. Section numbers
|
||||
or the equivalent are not considered part of the section titles.
|
||||
|
||||
@item
|
||||
Delete any section Entitled ``Endorsements''. Such a section
|
||||
may not be included in the Modified Version.
|
||||
|
||||
@item
|
||||
Do not retitle any existing section to be Entitled ``Endorsements'' or
|
||||
to conflict in title with any Invariant Section.
|
||||
|
||||
@item
|
||||
Preserve any Warranty Disclaimers.
|
||||
@end enumerate
|
||||
|
||||
If the Modified Version includes new front-matter sections or
|
||||
appendices that qualify as Secondary Sections and contain no material
|
||||
copied from the Document, you may at your option designate some or all
|
||||
of these sections as invariant. To do this, add their titles to the
|
||||
list of Invariant Sections in the Modified Version's license notice.
|
||||
These titles must be distinct from any other section titles.
|
||||
|
||||
You may add a section Entitled ``Endorsements'', provided it contains
|
||||
nothing but endorsements of your Modified Version by various
|
||||
parties---for example, statements of peer review or that the text has
|
||||
been approved by an organization as the authoritative definition of a
|
||||
standard.
|
||||
|
||||
You may add a passage of up to five words as a Front-Cover Text, and a
|
||||
passage of up to 25 words as a Back-Cover Text, to the end of the list
|
||||
of Cover Texts in the Modified Version. Only one passage of
|
||||
Front-Cover Text and one of Back-Cover Text may be added by (or
|
||||
through arrangements made by) any one entity. If the Document already
|
||||
includes a cover text for the same cover, previously added by you or
|
||||
by arrangement made by the same entity you are acting on behalf of,
|
||||
you may not add another; but you may replace the old one, on explicit
|
||||
permission from the previous publisher that added the old one.
|
||||
|
||||
The author(s) and publisher(s) of the Document do not by this License
|
||||
give permission to use their names for publicity for or to assert or
|
||||
imply endorsement of any Modified Version.
|
||||
|
||||
@item
|
||||
COMBINING DOCUMENTS
|
||||
|
||||
You may combine the Document with other documents released under this
|
||||
License, under the terms defined in section 4 above for modified
|
||||
versions, provided that you include in the combination all of the
|
||||
Invariant Sections of all of the original documents, unmodified, and
|
||||
list them all as Invariant Sections of your combined work in its
|
||||
license notice, and that you preserve all their Warranty Disclaimers.
|
||||
|
||||
The combined work need only contain one copy of this License, and
|
||||
multiple identical Invariant Sections may be replaced with a single
|
||||
copy. If there are multiple Invariant Sections with the same name but
|
||||
different contents, make the title of each such section unique by
|
||||
adding at the end of it, in parentheses, the name of the original
|
||||
author or publisher of that section if known, or else a unique number.
|
||||
Make the same adjustment to the section titles in the list of
|
||||
Invariant Sections in the license notice of the combined work.
|
||||
|
||||
In the combination, you must combine any sections Entitled ``History''
|
||||
in the various original documents, forming one section Entitled
|
||||
``History''; likewise combine any sections Entitled ``Acknowledgements'',
|
||||
and any sections Entitled ``Dedications''. You must delete all
|
||||
sections Entitled ``Endorsements.''
|
||||
|
||||
@item
|
||||
COLLECTIONS OF DOCUMENTS
|
||||
|
||||
You may make a collection consisting of the Document and other documents
|
||||
released under this License, and replace the individual copies of this
|
||||
License in the various documents with a single copy that is included in
|
||||
the collection, provided that you follow the rules of this License for
|
||||
verbatim copying of each of the documents in all other respects.
|
||||
|
||||
You may extract a single document from such a collection, and distribute
|
||||
it individually under this License, provided you insert a copy of this
|
||||
License into the extracted document, and follow this License in all
|
||||
other respects regarding verbatim copying of that document.
|
||||
|
||||
@item
|
||||
AGGREGATION WITH INDEPENDENT WORKS
|
||||
|
||||
A compilation of the Document or its derivatives with other separate
|
||||
and independent documents or works, in or on a volume of a storage or
|
||||
distribution medium, is called an ``aggregate'' if the copyright
|
||||
resulting from the compilation is not used to limit the legal rights
|
||||
of the compilation's users beyond what the individual works permit.
|
||||
When the Document is included in an aggregate, this License does not
|
||||
apply to the other works in the aggregate which are not themselves
|
||||
derivative works of the Document.
|
||||
|
||||
If the Cover Text requirement of section 3 is applicable to these
|
||||
copies of the Document, then if the Document is less than one half of
|
||||
the entire aggregate, the Document's Cover Texts may be placed on
|
||||
covers that bracket the Document within the aggregate, or the
|
||||
electronic equivalent of covers if the Document is in electronic form.
|
||||
Otherwise they must appear on printed covers that bracket the whole
|
||||
aggregate.
|
||||
|
||||
@item
|
||||
TRANSLATION
|
||||
|
||||
Translation is considered a kind of modification, so you may
|
||||
distribute translations of the Document under the terms of section 4.
|
||||
Replacing Invariant Sections with translations requires special
|
||||
permission from their copyright holders, but you may include
|
||||
translations of some or all Invariant Sections in addition to the
|
||||
original versions of these Invariant Sections. You may include a
|
||||
translation of this License, and all the license notices in the
|
||||
Document, and any Warranty Disclaimers, provided that you also include
|
||||
the original English version of this License and the original versions
|
||||
of those notices and disclaimers. In case of a disagreement between
|
||||
the translation and the original version of this License or a notice
|
||||
or disclaimer, the original version will prevail.
|
||||
|
||||
If a section in the Document is Entitled ``Acknowledgements'',
|
||||
``Dedications'', or ``History'', the requirement (section 4) to Preserve
|
||||
its Title (section 1) will typically require changing the actual
|
||||
title.
|
||||
|
||||
@item
|
||||
TERMINATION
|
||||
|
||||
You may not copy, modify, sublicense, or distribute the Document
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense, or distribute it is void, and
|
||||
will automatically terminate your rights under this License.
|
||||
|
||||
However, if you cease all violation of this License, then your license
|
||||
from a particular copyright holder is reinstated (a) provisionally,
|
||||
unless and until the copyright holder explicitly and finally
|
||||
terminates your license, and (b) permanently, if the copyright holder
|
||||
fails to notify you of the violation by some reasonable means prior to
|
||||
60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, receipt of a copy of some or all of the same material does
|
||||
not give you any rights to use it.
|
||||
|
||||
@item
|
||||
FUTURE REVISIONS OF THIS LICENSE
|
||||
|
||||
The Free Software Foundation may publish new, revised versions
|
||||
of the GNU Free Documentation License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns. See
|
||||
@uref{http://www.gnu.org/copyleft/}.
|
||||
|
||||
Each version of the License is given a distinguishing version number.
|
||||
If the Document specifies that a particular numbered version of this
|
||||
License ``or any later version'' applies to it, you have the option of
|
||||
following the terms and conditions either of that specified version or
|
||||
of any later version that has been published (not as a draft) by the
|
||||
Free Software Foundation. If the Document does not specify a version
|
||||
number of this License, you may choose any version ever published (not
|
||||
as a draft) by the Free Software Foundation. If the Document
|
||||
specifies that a proxy can decide which future versions of this
|
||||
License can be used, that proxy's public statement of acceptance of a
|
||||
version permanently authorizes you to choose that version for the
|
||||
Document.
|
||||
|
||||
@item
|
||||
RELICENSING
|
||||
|
||||
``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
|
||||
World Wide Web server that publishes copyrightable works and also
|
||||
provides prominent facilities for anybody to edit those works. A
|
||||
public wiki that anybody can edit is an example of such a server. A
|
||||
``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
|
||||
site means any set of copyrightable works thus published on the MMC
|
||||
site.
|
||||
|
||||
``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
|
||||
license published by Creative Commons Corporation, a not-for-profit
|
||||
corporation with a principal place of business in San Francisco,
|
||||
California, as well as future copyleft versions of that license
|
||||
published by that same organization.
|
||||
|
||||
``Incorporate'' means to publish or republish a Document, in whole or
|
||||
in part, as part of another Document.
|
||||
|
||||
An MMC is ``eligible for relicensing'' if it is licensed under this
|
||||
License, and if all works that were first published under this License
|
||||
somewhere other than this MMC, and subsequently incorporated in whole
|
||||
or in part into the MMC, (1) had no cover texts or invariant sections,
|
||||
and (2) were thus incorporated prior to November 1, 2008.
|
||||
|
||||
The operator of an MMC Site may republish an MMC contained in the site
|
||||
under CC-BY-SA on the same site at any time before August 1, 2009,
|
||||
provided the MMC is eligible for relicensing.
|
||||
|
||||
@end enumerate
|
||||
|
||||
@page
|
||||
@heading ADDENDUM: How to use this License for your documents
|
||||
|
||||
To use this License in a document you have written, include a copy of
|
||||
the License in the document and put the following copyright and
|
||||
license notices just after the title page:
|
||||
|
||||
@smallexample
|
||||
@group
|
||||
Copyright (C) @var{year} @var{your name}.
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.3
|
||||
or any later version published by the Free Software Foundation;
|
||||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
||||
Texts. A copy of the license is included in the section entitled ``GNU
|
||||
Free Documentation License''.
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
||||
replace the ``with@dots{}Texts.''@: line with this:
|
||||
|
||||
@smallexample
|
||||
@group
|
||||
with the Invariant Sections being @var{list their titles}, with
|
||||
the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
|
||||
being @var{list}.
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
If you have Invariant Sections without Cover Texts, or some other
|
||||
combination of the three, merge those two alternatives to suit the
|
||||
situation.
|
||||
|
||||
If your document contains nontrivial examples of program code, we
|
||||
recommend releasing these examples in parallel under your choice of
|
||||
free software license, such as the GNU General Public License,
|
||||
to permit their use in free software.
|
||||
|
||||
@c Local Variables:
|
||||
@c ispell-local-pdict: "ispell-dict"
|
||||
@c End:
|
||||
-8717
File diff suppressed because it is too large
Load Diff
@@ -1,83 +0,0 @@
|
||||
# Obtained by running "nix-store --graph" on the first GCC derivation.
|
||||
|
||||
digraph G {
|
||||
"/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "black"];
|
||||
"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "red"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "green"];
|
||||
"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "blue"];
|
||||
"/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "magenta"];
|
||||
"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "burlywood"];
|
||||
"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "black"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "red"];
|
||||
"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "green"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" [label = "tar", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "blue"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "magenta"];
|
||||
"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "burlywood"];
|
||||
"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "black"];
|
||||
"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "red"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "green"];
|
||||
"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "blue"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" [label = "xz", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [label = "glibc-bootstrap-0-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [color = "magenta"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [color = "burlywood"];
|
||||
"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [label = "module-import.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "black"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "red"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "green"];
|
||||
"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [label = "module-import-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [color = "blue"];
|
||||
"/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [label = "gcc-4.7.2.tar.xz.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "magenta"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "burlywood"];
|
||||
"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "black"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "red"];
|
||||
"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" [label = "gcc-4.7.2.tar.xz-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" [label = "bash", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [label = "module-import.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "green"];
|
||||
"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "blue"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "magenta"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "burlywood"];
|
||||
"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "black"];
|
||||
"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" [label = "ftp-client.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" [label = "download.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" [label = "utils.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "red"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "green"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "blue"];
|
||||
"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [label = "gcc-bootstrap-0-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "magenta"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "burlywood"];
|
||||
"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "black"];
|
||||
"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [label = "glibc-2.17.tar.xz.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "red"];
|
||||
"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "green"];
|
||||
"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "blue"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "magenta"];
|
||||
"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" [label = "glibc-2.17.tar.xz-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" -> "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [color = "burlywood"];
|
||||
"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [color = "black"];
|
||||
"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [label = "build-bootstrap-guile.sh", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "red"];
|
||||
"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "green"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "blue"];
|
||||
"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "magenta"];
|
||||
"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" [label = "mkdir", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" [label = "guile-2.0.7.tar.xz", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "burlywood"];
|
||||
"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "black"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "red"];
|
||||
"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [label = "module-import-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "green"];
|
||||
"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "blue"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "magenta"];
|
||||
}
|
||||
@@ -1,215 +0,0 @@
|
||||
digraph "Guix bag-emerged" {
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" [label = "coreutils-8.24", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" [color = red];
|
||||
"/gnu/store/xpgn2qn54c323liliyqj6q11b5xnb1db-coreutils-8.24.drv" -> "/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" [label = "perl-5.16.1", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [label = "tar-1.28", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [label = "gzip-1.6", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [label = "bzip2-1.0.6", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [label = "xz-5.0.4", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [label = "file-5.22", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [label = "diffutils-3.3", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [label = "patch-2.7.5", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [label = "sed-4.2.2", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [label = "findutils-4.4.2", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [label = "gawk-4.1.3", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [label = "grep-2.21", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [label = "coreutils-8.24", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [label = "make-4.1", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [label = "bash-4.3.39", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [label = "ld-wrapper-0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [label = "binutils-2.25.1", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [label = "gcc-4.9.3", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [label = "glibc-2.22", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [label = "glibc-utf8-locales-2.22", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" [label = "acl-2.2.52", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/6i8brik0khb2s5r6ih7h6g22l9s2xmph-acl-2.2.52.drv" -> "/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" [label = "gettext-0.19.6", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" -> "/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" [label = "expat-2.1.0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/n3ix2bl79ijv1v1winwf4qj46hlhyrdv-expat-2.1.0.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" [label = "attr-2.4.46", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/a076d7ng0h3ynr1hsiyk4fmh3w1g4cv8-gettext-0.19.6.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" -> "/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" [label = "gmp-6.0.0a", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/wmvpskqsw6hgriy0vbmmm6c4wp8rxp2c-gmp-6.0.0a.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" [label = "m4-1.4.17", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/1mwk0rc4lfcy3vax50ss8x3qfa304g67-m4-1.4.17.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" [label = "libcap-2.24", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/mi4a8m41ssrp7lv3b8vibw0a7ahv2mmg-perl-5.16.1.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/0pr679inn5xj91z4d63scc7vgfji9vpp-tar-1.28.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/p3szkb87bp9fxhn715g88skry8g3jgkq-gzip-1.6.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/i398qn04cwvnzph7a0cckxqr9q0k3lyr-bzip2-1.0.6.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/wvnnsn89magnvn39zm3fv245s9m7yn5f-xz-5.0.4.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/sag0sx1zycnwixwfdrxwj1i9g2phxrh4-file-5.22.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/p61bsw6093x3wfg5vz3172wl9bzrlc3w-diffutils-3.3.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/rzsyx70vnfb8cm40r0b591vyvww2i5y6-patch-2.7.5.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/mc5fgclyr0v26242hmg30srv9ij27wyv-sed-4.2.2.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/ig9nr2f5hvr88br028r9nsdg4xpmmybg-findutils-4.4.2.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/jls1kj3pvqjpbmm7c09fhszfd3m61zif-gawk-4.1.3.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/vvlh6szjxr5iy192fsv9p4dwf39nhapf-grep-2.21.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/mysb2grsl1wc931xm08adncnqjwvdds7-coreutils-8.24.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/n0n20i1brmhmjvw9lx33f2l3dmzx873n-make-4.1.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/64cizlhq38x99dvjvza6c5ha226a9bf5-bash-4.3.39.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/mbshnjz590h3l1c3y2rxzqvn45bhx32b-ld-wrapper-0.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/hf62yhvyrr1rm5y8mq5afih12s9jasic-binutils-2.25.1.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/8mff0w2203h6m5s495knxg09is3qj15f-gcc-4.9.3.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/2pspbpclj4yq5dqd71fnqwa69s8xxryf-glibc-2.22.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/nflynk1n90yh41yfi91raczynka2mf86-glibc-utf8-locales-2.22.drv" [color = red];
|
||||
"/gnu/store/d7d6k5bhk7gz3pvhxdn2f33jzlxg4c5l-libcap-2.24.drv" -> "/gnu/store/3lq0fkjmjb917asbj9f24vcxxnq3kwai-attr-2.4.46.drv" [color = red];
|
||||
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
digraph "Guix package" {
|
||||
"70481600" [label = "coreutils-8.24", shape = box, fontname = Helvetica];
|
||||
"70481600" -> "50717824" [color = red];
|
||||
"70481600" -> "57499200" [color = red];
|
||||
"70481600" -> "57496320" [color = red];
|
||||
"70481600" -> "69877504" [color = red];
|
||||
"50717824" [label = "perl-5.16.1", shape = box, fontname = Helvetica];
|
||||
"57499200" [label = "acl-2.2.52", shape = box, fontname = Helvetica];
|
||||
"57499200" -> "70563904" [color = red];
|
||||
"57499200" -> "50717824" [color = red];
|
||||
"57499200" -> "70563520" [color = red];
|
||||
"70563904" [label = "gettext-0.19.6", shape = box, fontname = Helvetica];
|
||||
"70563904" -> "69316352" [color = red];
|
||||
"69316352" [label = "expat-2.1.0", shape = box, fontname = Helvetica];
|
||||
"70563520" [label = "attr-2.4.46", shape = box, fontname = Helvetica];
|
||||
"70563520" -> "70563904" [color = red];
|
||||
"70563520" -> "50717824" [color = red];
|
||||
"57496320" [label = "gmp-6.0.0a", shape = box, fontname = Helvetica];
|
||||
"57496320" -> "57498432" [color = red];
|
||||
"57498432" [label = "m4-1.4.17", shape = box, fontname = Helvetica];
|
||||
"69877504" [label = "libcap-2.24", shape = box, fontname = Helvetica];
|
||||
"69877504" -> "50717824" [color = red];
|
||||
"69877504" -> "70563520" [color = red];
|
||||
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.6 KiB |
@@ -1,75 +0,0 @@
|
||||
digraph "Guix dmd-service" {
|
||||
"user-file-systems" [label = "user-file-systems", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "user-file-systems" [color = red];
|
||||
"user-processes" [label = "user-processes", shape = box, fontname = Helvetica];
|
||||
"nscd" -> "user-processes" [color = red];
|
||||
"guix-daemon" -> "user-processes" [color = red];
|
||||
"syslogd" -> "user-processes" [color = red];
|
||||
"term-tty6" -> "user-processes" [color = red];
|
||||
"term-tty5" -> "user-processes" [color = red];
|
||||
"term-tty4" -> "user-processes" [color = red];
|
||||
"term-tty3" -> "user-processes" [color = red];
|
||||
"term-tty2" -> "user-processes" [color = red];
|
||||
"term-tty1" -> "user-processes" [color = red];
|
||||
"networking" -> "user-processes" [color = red];
|
||||
"nscd" [label = "nscd", shape = box, fontname = Helvetica];
|
||||
"guix-daemon" [label = "guix-daemon", shape = box, fontname = Helvetica];
|
||||
"syslogd" [label = "syslogd", shape = box, fontname = Helvetica];
|
||||
"ssh-daemon" -> "syslogd" [color = red];
|
||||
"ssh-daemon" [label = "ssh-daemon", shape = box, fontname = Helvetica];
|
||||
"term-tty6" [label = "term-tty6", shape = box, fontname = Helvetica];
|
||||
"console-font-tty6" -> "term-tty6" [color = red];
|
||||
"console-font-tty6" [label = "console-font-tty6", shape = box, fontname = Helvetica];
|
||||
"term-tty5" [label = "term-tty5", shape = box, fontname = Helvetica];
|
||||
"console-font-tty5" -> "term-tty5" [color = red];
|
||||
"console-font-tty5" [label = "console-font-tty5", shape = box, fontname = Helvetica];
|
||||
"term-tty4" [label = "term-tty4", shape = box, fontname = Helvetica];
|
||||
"console-font-tty4" -> "term-tty4" [color = red];
|
||||
"console-font-tty4" [label = "console-font-tty4", shape = box, fontname = Helvetica];
|
||||
"term-tty3" [label = "term-tty3", shape = box, fontname = Helvetica];
|
||||
"console-font-tty3" -> "term-tty3" [color = red];
|
||||
"console-font-tty3" [label = "console-font-tty3", shape = box, fontname = Helvetica];
|
||||
"term-tty2" [label = "term-tty2", shape = box, fontname = Helvetica];
|
||||
"console-font-tty2" -> "term-tty2" [color = red];
|
||||
"console-font-tty2" [label = "console-font-tty2", shape = box, fontname = Helvetica];
|
||||
"term-tty1" [label = "term-tty1", shape = box, fontname = Helvetica];
|
||||
"console-font-tty1" -> "term-tty1" [color = red];
|
||||
"console-font-tty1" [label = "console-font-tty1", shape = box, fontname = Helvetica];
|
||||
"networking" [label = "networking", shape = box, fontname = Helvetica];
|
||||
"ssh-daemon" -> "networking" [color = red];
|
||||
"root-file-system" [label = "root-file-system", shape = box, fontname = Helvetica];
|
||||
"file-system-/run/user" -> "root-file-system" [color = red];
|
||||
"file-system-/run/systemd" -> "root-file-system" [color = red];
|
||||
"file-system-/gnu/store" -> "root-file-system" [color = red];
|
||||
"file-system-/dev/shm" -> "root-file-system" [color = red];
|
||||
"file-system-/dev/pts" -> "root-file-system" [color = red];
|
||||
"user-processes" -> "root-file-system" [color = red];
|
||||
"udev" -> "root-file-system" [color = red];
|
||||
"file-system-/run/user" [label = "file-system-/run/user", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "file-system-/run/user" [color = red];
|
||||
"file-system-/run/systemd" [label = "file-system-/run/systemd", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "file-system-/run/systemd" [color = red];
|
||||
"file-system-/gnu/store" [label = "file-system-/gnu/store", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "file-system-/gnu/store" [color = red];
|
||||
"file-system-/dev/shm" [label = "file-system-/dev/shm", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "file-system-/dev/shm" [color = red];
|
||||
"file-system-/dev/pts" [label = "file-system-/dev/pts", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "file-system-/dev/pts" [color = red];
|
||||
"udev" [label = "udev", shape = box, fontname = Helvetica];
|
||||
"term-tty6" -> "udev" [color = red];
|
||||
"term-tty5" -> "udev" [color = red];
|
||||
"term-tty4" -> "udev" [color = red];
|
||||
"term-tty3" -> "udev" [color = red];
|
||||
"term-tty2" -> "udev" [color = red];
|
||||
"term-tty1" -> "udev" [color = red];
|
||||
"networking" -> "udev" [color = red];
|
||||
"host-name" [label = "host-name", shape = box, fontname = Helvetica];
|
||||
"term-tty6" -> "host-name" [color = red];
|
||||
"term-tty5" -> "host-name" [color = red];
|
||||
"term-tty4" -> "host-name" [color = red];
|
||||
"term-tty3" -> "host-name" [color = red];
|
||||
"term-tty2" -> "host-name" [color = red];
|
||||
"term-tty1" -> "host-name" [color = red];
|
||||
"loopback" [label = "loopback", shape = box, fontname = Helvetica];
|
||||
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
digraph "Service Type Dependencies" {
|
||||
dmd [shape = box, fontname = Helvetica];
|
||||
pam [shape = box, fontname = Helvetica];
|
||||
etc [shape = box, fontname = Helvetica];
|
||||
profile [shape = box, fontname = Helvetica];
|
||||
accounts [shape = box, fontname = Helvetica];
|
||||
activation [shape = box, fontname = Helvetica];
|
||||
boot [shape = box, fontname = Helvetica];
|
||||
system [shape = house, fontname = Helvetica];
|
||||
lshd -> dmd;
|
||||
lshd -> pam;
|
||||
udev -> dmd;
|
||||
nscd -> dmd [label = "extends"];
|
||||
"nss-mdns" -> nscd;
|
||||
"kvm-rules" -> udev;
|
||||
colord -> udev;
|
||||
dbus -> dmd;
|
||||
colord -> dbus;
|
||||
upower -> udev;
|
||||
upower -> dbus;
|
||||
polkit -> dbus;
|
||||
polkit -> pam;
|
||||
elogind -> dbus;
|
||||
elogind -> udev;
|
||||
elogind -> polkit [label = "extends"];
|
||||
dmd -> boot;
|
||||
colord -> accounts;
|
||||
accounts -> activation;
|
||||
accounts -> etc;
|
||||
etc -> activation;
|
||||
activation -> boot;
|
||||
pam -> etc;
|
||||
elogind -> pam;
|
||||
guix -> dmd;
|
||||
guix -> activation;
|
||||
guix -> accounts;
|
||||
boot -> system;
|
||||
etc -> system;
|
||||
profile -> system;
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
(use-modules (guix)
|
||||
(guix build-system gnu)
|
||||
(guix licenses))
|
||||
|
||||
(package
|
||||
(name "hello")
|
||||
(version "2.10")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "mirror://gnu/hello/hello-" version
|
||||
".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
|
||||
(build-system gnu-build-system)
|
||||
(synopsis "Hello, GNU world: An example GNU package")
|
||||
(description "Guess what GNU Hello prints!")
|
||||
(home-page "http://www.gnu.org/software/hello/")
|
||||
(license gpl3+))
|
||||
@@ -0,0 +1,30 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQENBFidi7gBCADEupvdH6woe3DfqSgC20nTVmLgKKjvHotuEry5BGm62lKsSzPa
|
||||
eyXT6UkM+MMRG6pYQ8ZgKiAZDZtiTw+fuulRA4bWXd9xBNPT+xYDGMzV8EXWlo6R
|
||||
ABq3InxJK6Bbl8c+Z8hMTeHF1WR4Ylp2N9BfIw3eQKqk4MSgPPY+NddxEQUdZ4E8
|
||||
3RNnWFJM08mjJJCfxHi9YmKncoUIua8Tj+SgYLt9yB2MOvm7BKoWg8k8PR1HtTMA
|
||||
2/wfOyhEETqToMA24Wpq+7ULiPMq52iSjpJMjlRFqtbnd8vTjKOnoIDDuF2SKFnn
|
||||
fnw/3rhiw10BYLsY/auF7AutovCFA0n+YuTPABEBAAG0HkRhdmlkIENyYXZlbiA8
|
||||
ZGF2aWRAY3JhdmVuLmNoPokBTgQTAQgAOBYhBF9DtoEENy9LqJimSzO56f3ijSwj
|
||||
BQJYnYu4AhsDBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDO56f3ijSwja/0I
|
||||
AJlTg+KyMRcppViv+TSWpNf9RcyEHWPMLJCtRuZLB3eGc8SliPGL1UX+nyo9Zaap
|
||||
MwFHdxyt80XWrRmtQHZB1MyRq7YJQBAaeK08UeXtomXnG/aSfr8Yk+pwlaLxGDGc
|
||||
bn8yz3k+Odfkla/i1JfwvznoG0Ck6x9DsNn1EZKgOyZvCDDSK8wv3Z5BRg5zdxER
|
||||
THyT+h56cPEFn1zZ75/gTuJZ6AP87m4B0n/zdwn0qxyCeV5C0Vqkq0/5ssKDO3ke
|
||||
KBe3iDjxpaAQTofgjdY/mUAg8Pl4/5gJLKL4VAM/M/sTMEWmwuIwQuaOzjPt7DOr
|
||||
D66jexWgs/jHptAKEfBvJ7y5AQ0EWJ2LuAEIAMR1IWIYgIGydlpvIe3+C99HB+Fw
|
||||
ok+LYRdcdTud0db8dByW/DTdVJlzDN7AHp6IzG/agNaQCQd4F5W0ovIlVY7zBOOR
|
||||
663XXA5vrdYWq6adFR+tN5bE9MM0xKovvKnx3kb1NXJiWG+nSqdmhd7L8ZG711R7
|
||||
uh6fk1faXGAbUFSriI2gNiFdOxgfW8mHXYknsuCEI2a//RiFoUQZgScfM7oPmVGq
|
||||
cCGsFGWTLj+TU5JY01BVSY7x+9lbNvb7WvyYQSUldQG8wfnuu+Xmr7cE3/5GHmMz
|
||||
fmWbmv8865eKjnG51cPp2LR0VUVxpHs6hwxaXi3BJ0T3NKexIWZQE5CsXb8AEQEA
|
||||
AYkBNgQYAQgAIBYhBF9DtoEENy9LqJimSzO56f3ijSwjBQJYnYu4AhsMAAoJEDO5
|
||||
6f3ijSwj6rAH/1jox9X3Pw1CUALihQaN7D8vWMFh3FiboO7SzBnghHkUvlz7LyJJ
|
||||
FjZkg+M4zIKckCLMVE8qPx1XR24fmFRCSiz2FvLe/FHe7FWltycpiXZzMCqh/8Ch
|
||||
b8CejLlKkyVbEbD+tPfp95VXM6giIEN2lFEoDvqaXmnYAWWmWBo3sl30oUGM+xvn
|
||||
e1DyWxbYhiUJ3z/P0URs2kOOl0USbx0uEprJce2vRVwij74swpmCq0K3CyYG9oWC
|
||||
8ID9UlKNpo4ar3Ni1hfwARjViUev8Xc+iKitkxnAJigsYqwa2qeMEvlheJsCKHFS
|
||||
eUVaVX/l+Od27ahlXPo54pU7Lc7QNmIkPlA=
|
||||
=eGxN
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -0,0 +1,62 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
N8KxEVauZxGaQ4T+xb0k3PWW2byfqQEyu4k=
|
||||
=lxuw
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
File diff suppressed because it is too large
Load Diff
+3668
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBGcvh/QBEACePF16wEeQaqfJNgeaSQB6ty6PzLaYtl8UVApPSCF1PYNEhDtx
|
||||
QOOpBXeuk6h68cjhRX7hmug8mAraXotw4aG4Z3kbUro4fzXOYW3rCi/mAm5NFXLU
|
||||
mBX3E1AV1pcD8hDA5s3LeGzfTo4xRGTW4zTzxGEyrvbChkVib7wTSk52a/WkFas6
|
||||
l3sXnepF8HmIEOWkwQcYdcuogaNDFP1kjZYvqfKJXmCZnY+lC8Zfe/vlD/x8FZQY
|
||||
BQ5xgXIfbSR0xlRz/XIHfJv6j+3myUUr2UKMku1dkjlkhNkyfw+RypQzmbJ0oJ4b
|
||||
k76/ju0nnlN65/LvyeTVUh/2O2VnPnZ49keL8sqrAPXF4di4pWT+/mPxfoEtiSDt
|
||||
jyzbr8+ajcwLa4SSKLlexqjZj8X6R4tt31Rf/Pliwe4TdPmd2leE3BIJl9bAuslE
|
||||
vd5tqZ1oa3Zfb62tvpaJCRYMtOEWuGkYdyrwTW7UXJPQpam4X7WoW2jWc5aTpAnp
|
||||
nqIPzaWJmua1lGQjEXgt4xvVdhVmZq32fkTy/rXw9l5a+XU7N4/Zz8AR/0xO+UBc
|
||||
Q1J+wHADjL8Q0v0tZLEaiWL72AsxN3GMWNPXWAplaTPUNPUlNK0JPHwhTX/cQVkI
|
||||
c9avSKc3BeUofC96d13I7QmRjQ0gcBaLtV9lMOuYwbC+6tb70x2fQsI3bwARAQAB
|
||||
tCJFa2FpdHogWmFycmFnYSA8ZWthaXR6QGVsZW5xLnRlY2g+iQJUBBMBCAA+FiEE
|
||||
Xb4j05BTZSZ/jMdq/blSvT9zVtYFAmcvh/QCGwMFCQPCZwAFCwkIBwIGFQoJCAsC
|
||||
BBYCAwECHgECF4AACgkQ/blSvT9zVtbWCRAAkbla35s8RKhQBweqwEcdYDV2Zpt1
|
||||
6OgENymjLs/qhh7Y9WgWZ0YraSNYDGCt6lemhiorvrXX48+yZC98c8ZgCrr4Hmt8
|
||||
i/6TvJqVhwlZ9//3W/z/YuYDtUPBzRHgwM8tejiXmNqYM8lFJg64pQaczmGAR29X
|
||||
f0WTQegSociBSUg9eC7BS74Uh7UbHCgytyretoKmqJAp8SKE/Czt5x4RlXKVgGaw
|
||||
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
|
||||
HNAytQ6h9cpUbg==
|
||||
=6go3
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,61 +0,0 @@
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
# GNU Guix is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or (at
|
||||
# your option) any later version.
|
||||
#
|
||||
# GNU Guix is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
AUTOLOADS = emacs/guix-autoloads.el
|
||||
|
||||
ELFILES = \
|
||||
emacs/guix-backend.el \
|
||||
emacs/guix-base.el \
|
||||
emacs/guix-build-log.el \
|
||||
emacs/guix-command.el \
|
||||
emacs/guix-devel.el \
|
||||
emacs/guix-emacs.el \
|
||||
emacs/guix-external.el \
|
||||
emacs/guix-geiser.el \
|
||||
emacs/guix-guile.el \
|
||||
emacs/guix-help-vars.el \
|
||||
emacs/guix-history.el \
|
||||
emacs/guix-info.el \
|
||||
emacs/guix-init.el \
|
||||
emacs/guix-list.el \
|
||||
emacs/guix-messages.el \
|
||||
emacs/guix-pcomplete.el \
|
||||
emacs/guix-popup.el \
|
||||
emacs/guix-prettify.el \
|
||||
emacs/guix-profiles.el \
|
||||
emacs/guix-read.el \
|
||||
emacs/guix-utils.el \
|
||||
emacs/guix.el
|
||||
|
||||
if HAVE_EMACS
|
||||
|
||||
dist_lisp_DATA = \
|
||||
$(ELFILES) \
|
||||
$(AUTOLOADS)
|
||||
|
||||
nodist_lisp_DATA = emacs/guix-config.el
|
||||
|
||||
$(AUTOLOADS): $(ELFILES)
|
||||
$(EMACS) --batch --eval \
|
||||
"(let ((backup-inhibited t) \
|
||||
(generated-autoload-file \
|
||||
(expand-file-name \"$(AUTOLOADS)\" \"$(srcdir)\"))) \
|
||||
(update-directory-autoloads \
|
||||
(expand-file-name \"emacs\" \"$(srcdir)\")))"
|
||||
|
||||
endif HAVE_EMACS
|
||||
@@ -1,338 +0,0 @@
|
||||
;;; guix-backend.el --- Making and using Guix REPL
|
||||
|
||||
;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides the code for interacting with Guile using Guix REPL
|
||||
;; (Geiser REPL with some guix-specific additions).
|
||||
|
||||
;; By default (if `guix-use-guile-server' is non-nil) 2 Guix REPLs are
|
||||
;; started. The main one (with "guile --listen" process) is used for
|
||||
;; "interacting" with a user - for showing a progress of
|
||||
;; installing/deleting Guix packages. The second (internal) REPL is
|
||||
;; used for synchronous evaluating, e.g. when information about
|
||||
;; packages/generations should be received for a list/info buffer.
|
||||
;;
|
||||
;; This "2 REPLs concept" makes it possible to have a running process of
|
||||
;; installing/deleting packages and to continue to search/list/get info
|
||||
;; about other packages at the same time. If you prefer to use a single
|
||||
;; Guix REPL, do not try to receive any information while there is a
|
||||
;; running code in the REPL (see
|
||||
;; <https://github.com/jaor/geiser/issues/28>).
|
||||
;;
|
||||
;; If you need to use "guix.el" in another Emacs (i.e. when there is
|
||||
;; a runnig "guile --listen..." REPL somewhere), you can either change
|
||||
;; `guix-default-port' in that Emacs instance or set
|
||||
;; `guix-use-guile-server' to t.
|
||||
;;
|
||||
;; Guix REPLs (unlike the usual Geiser REPLs) are not added to
|
||||
;; `geiser-repl--repls' variable, and thus cannot be used for evaluating
|
||||
;; while editing scm-files. The only purpose of Guix REPLs is to be an
|
||||
;; intermediate between "Guix/Guile level" and "Emacs interface level".
|
||||
;; That being said you can still want to use a Guix REPL while hacking
|
||||
;; auxiliary scheme-files for "guix.el". You can just use "M-x
|
||||
;; connect-to-guile" (connect to "localhost" and `guix-default-port') to
|
||||
;; have a usual Geiser REPL with all stuff defined by "guix.el" package.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'geiser-mode)
|
||||
(require 'geiser-guile)
|
||||
(require 'guix-geiser)
|
||||
(require 'guix-config)
|
||||
(require 'guix-external)
|
||||
(require 'guix-emacs)
|
||||
|
||||
(defvar guix-load-path guix-config-emacs-interface-directory
|
||||
"Directory with scheme files for \"guix.el\" package.")
|
||||
|
||||
(defvar guix-helper-file
|
||||
(expand-file-name "guix-helper.scm" guix-load-path)
|
||||
"Auxiliary scheme file for loading.")
|
||||
|
||||
|
||||
;;; REPL
|
||||
|
||||
(defgroup guix-repl nil
|
||||
"Settings for Guix REPLs."
|
||||
:prefix "guix-repl-"
|
||||
:group 'guix)
|
||||
|
||||
(defcustom guix-repl-startup-time 30000
|
||||
"Time, in milliseconds, to wait for Guix REPL to startup.
|
||||
Same as `geiser-repl-startup-time' but is used for Guix REPL.
|
||||
If you have a slow system, try to increase this time."
|
||||
:type 'integer
|
||||
:group 'guix-repl)
|
||||
|
||||
(defcustom guix-repl-buffer-name "*Guix REPL*"
|
||||
"Default name of a Geiser REPL buffer used for Guix."
|
||||
:type 'string
|
||||
:group 'guix-repl)
|
||||
|
||||
(defcustom guix-after-start-repl-hook ()
|
||||
"Hook called after Guix REPL is started."
|
||||
:type 'hook
|
||||
:group 'guix-repl)
|
||||
|
||||
(defcustom guix-use-guile-server t
|
||||
"If non-nil, start guile with '--listen' argument.
|
||||
This allows to receive information about packages using an additional
|
||||
REPL while some packages are being installed/removed in the main REPL."
|
||||
:type 'boolean
|
||||
:group 'guix-repl)
|
||||
|
||||
(defcustom guix-default-port 37246
|
||||
"Default port used if `guix-use-guile-server' is non-nil."
|
||||
:type 'integer
|
||||
:group 'guix-repl)
|
||||
|
||||
(defvar guix-repl-buffer nil
|
||||
"Main Geiser REPL buffer used for communicating with Guix.
|
||||
This REPL is used for processing package actions and for
|
||||
receiving information if `guix-use-guile-server' is nil.")
|
||||
|
||||
(defvar guix-internal-repl-buffer nil
|
||||
"Additional Geiser REPL buffer used for communicating with Guix.
|
||||
This REPL is used for receiving information only if
|
||||
`guix-use-guile-server' is non-nil.")
|
||||
|
||||
(defvar guix-internal-repl-buffer-name "*Guix Internal REPL*"
|
||||
"Default name of an internal Guix REPL buffer.")
|
||||
|
||||
(defvar guix-before-repl-operation-hook nil
|
||||
"Hook run before executing an operation in Guix REPL.")
|
||||
|
||||
(defvar guix-after-repl-operation-hook
|
||||
'(guix-emacs-load-autoloads-maybe
|
||||
guix-repl-operation-success-message)
|
||||
"Hook run after executing successful operation in Guix REPL.")
|
||||
|
||||
(defvar guix-repl-operation-p nil
|
||||
"Non-nil, if current operation is performed by `guix-eval-in-repl'.
|
||||
This internal variable is used to distinguish Guix operations
|
||||
from operations performed in Guix REPL by a user.")
|
||||
|
||||
(defvar guix-repl-operation-type nil
|
||||
"Type of the current operation performed by `guix-eval-in-repl'.
|
||||
This internal variable is used to define what actions should be
|
||||
executed after the current operation succeeds.
|
||||
See `guix-eval-in-repl' for details.")
|
||||
|
||||
(defun guix-repl-operation-success-message ()
|
||||
"Message telling about successful Guix operation."
|
||||
(message "Guix operation has been performed."))
|
||||
|
||||
(defun guix-get-guile-program (&optional internal)
|
||||
"Return a value suitable for `geiser-guile-binary'."
|
||||
(if (or internal
|
||||
(not guix-use-guile-server))
|
||||
guix-guile-program
|
||||
(append (if (listp guix-guile-program)
|
||||
guix-guile-program
|
||||
(list guix-guile-program))
|
||||
;; Guile understands "--listen=..." but not "--listen ..."
|
||||
(list (concat "--listen="
|
||||
(number-to-string guix-default-port))))))
|
||||
|
||||
(defun guix-start-process-maybe (&optional start-msg end-msg)
|
||||
"Start Geiser REPL configured for Guix if needed.
|
||||
START-MSG and END-MSG are strings displayed in the minibuffer in
|
||||
the beginning and in the end of the starting process. If nil,
|
||||
display default messages."
|
||||
(guix-start-repl-maybe nil
|
||||
(or start-msg "Starting Guix REPL ...")
|
||||
(or end-msg "Guix REPL has been started."))
|
||||
(if guix-use-guile-server
|
||||
(guix-start-repl-maybe 'internal)
|
||||
(setq guix-internal-repl-buffer guix-repl-buffer)))
|
||||
|
||||
(defun guix-start-repl-maybe (&optional internal start-msg end-msg)
|
||||
"Start Guix REPL if needed.
|
||||
If INTERNAL is non-nil, start an internal REPL.
|
||||
|
||||
START-MSG and END-MSG are strings displayed in the minibuffer in
|
||||
the beginning and in the end of the process. If nil, do not
|
||||
display messages."
|
||||
(let* ((repl-var (guix-get-repl-buffer-variable internal))
|
||||
(repl (symbol-value repl-var)))
|
||||
(unless (and (buffer-live-p repl)
|
||||
(get-buffer-process repl))
|
||||
(and start-msg (message start-msg))
|
||||
(setq guix-repl-operation-p nil)
|
||||
(let ((geiser-guile-binary (guix-get-guile-program internal))
|
||||
(geiser-guile-init-file (or internal guix-helper-file))
|
||||
(repl (get-buffer-create
|
||||
(guix-get-repl-buffer-name internal))))
|
||||
(condition-case err
|
||||
(guix-start-repl repl
|
||||
(and internal
|
||||
(geiser-repl--read-address
|
||||
"localhost" guix-default-port)))
|
||||
(text-read-only
|
||||
(error (concat "Couldn't start Guix REPL. Perhaps the port %s is busy.\n"
|
||||
"See buffer '%s' for details")
|
||||
guix-default-port (buffer-name repl))))
|
||||
(set repl-var repl)
|
||||
(and end-msg (message end-msg))
|
||||
(unless internal
|
||||
(run-hooks 'guix-after-start-repl-hook))))))
|
||||
|
||||
(defun guix-start-repl (buffer &optional address)
|
||||
"Start Guix REPL in BUFFER.
|
||||
If ADDRESS is non-nil, connect to a remote guile process using
|
||||
this address (it should be defined by
|
||||
`geiser-repl--read-address')."
|
||||
;; A mix of the code from `geiser-repl--start-repl' and
|
||||
;; `geiser-repl--to-repl-buffer'.
|
||||
(let ((impl 'guile)
|
||||
(geiser-guile-load-path (cons guix-load-path
|
||||
geiser-guile-load-path))
|
||||
(geiser-repl-startup-time guix-repl-startup-time))
|
||||
(with-current-buffer buffer
|
||||
(geiser-repl-mode)
|
||||
(geiser-impl--set-buffer-implementation impl)
|
||||
(geiser-repl--autodoc-mode -1)
|
||||
(goto-char (point-max))
|
||||
(let ((prompt (geiser-con--combined-prompt
|
||||
geiser-guile--prompt-regexp
|
||||
geiser-guile--debugger-prompt-regexp)))
|
||||
(geiser-repl--save-remote-data address)
|
||||
(geiser-repl--start-scheme impl address prompt)
|
||||
(geiser-repl--quit-setup)
|
||||
(geiser-repl--history-setup)
|
||||
(setq-local geiser-repl--repls (list buffer))
|
||||
(geiser-repl--set-this-buffer-repl buffer)
|
||||
(setq geiser-repl--connection
|
||||
(geiser-con--make-connection
|
||||
(get-buffer-process (current-buffer))
|
||||
geiser-guile--prompt-regexp
|
||||
geiser-guile--debugger-prompt-regexp))
|
||||
(geiser-repl--startup impl address)
|
||||
(geiser-repl--autodoc-mode 1)
|
||||
(geiser-company--setup geiser-repl-company-p)
|
||||
(add-hook 'comint-output-filter-functions
|
||||
'guix-repl-output-filter
|
||||
nil t)
|
||||
(set-process-query-on-exit-flag
|
||||
(get-buffer-process (current-buffer))
|
||||
geiser-repl-query-on-kill-p)))))
|
||||
|
||||
(defun guix-repl-output-filter (str)
|
||||
"Filter function suitable for `comint-output-filter-functions'.
|
||||
This is a replacement for `geiser-repl--output-filter'."
|
||||
(cond
|
||||
((string-match-p geiser-guile--prompt-regexp str)
|
||||
(geiser-autodoc--disinhibit-autodoc)
|
||||
(when guix-repl-operation-p
|
||||
(setq guix-repl-operation-p nil)
|
||||
(run-hooks 'guix-after-repl-operation-hook)
|
||||
;; Run hooks specific to the current operation type.
|
||||
(when guix-repl-operation-type
|
||||
(let ((type-hook (intern
|
||||
(concat "guix-after-"
|
||||
(symbol-name guix-repl-operation-type)
|
||||
"-hook"))))
|
||||
(setq guix-repl-operation-type nil)
|
||||
(and (boundp type-hook)
|
||||
(run-hooks type-hook))))))
|
||||
((string-match geiser-guile--debugger-prompt-regexp str)
|
||||
(setq guix-repl-operation-p nil)
|
||||
(geiser-con--connection-set-debugging geiser-repl--connection
|
||||
(match-beginning 0))
|
||||
(geiser-autodoc--disinhibit-autodoc))))
|
||||
|
||||
(defun guix-repl-exit (&optional internal no-wait)
|
||||
"Exit the current Guix REPL.
|
||||
If INTERNAL is non-nil, exit the internal REPL.
|
||||
If NO-WAIT is non-nil, do not wait for the REPL process to exit:
|
||||
send a kill signal to it and return immediately."
|
||||
(let ((repl (symbol-value (guix-get-repl-buffer-variable internal))))
|
||||
(when (get-buffer-process repl)
|
||||
(with-current-buffer repl
|
||||
(geiser-con--connection-deactivate geiser-repl--connection t)
|
||||
(comint-kill-subjob)
|
||||
(unless no-wait
|
||||
(while (get-buffer-process repl)
|
||||
(sleep-for 0.1)))))))
|
||||
|
||||
(defun guix-get-repl-buffer (&optional internal)
|
||||
"Return Guix REPL buffer; start REPL if needed.
|
||||
If INTERNAL is non-nil, return an additional internal REPL."
|
||||
(guix-start-process-maybe)
|
||||
(let ((repl (symbol-value (guix-get-repl-buffer-variable internal))))
|
||||
;; If a new Geiser REPL is started, `geiser-repl--repl' variable may
|
||||
;; be set to the new value in a Guix REPL, so set it back to a
|
||||
;; proper value here.
|
||||
(with-current-buffer repl
|
||||
(geiser-repl--set-this-buffer-repl repl))
|
||||
repl))
|
||||
|
||||
(defun guix-get-repl-buffer-variable (&optional internal)
|
||||
"Return the name of a variable with a REPL buffer."
|
||||
(if internal
|
||||
'guix-internal-repl-buffer
|
||||
'guix-repl-buffer))
|
||||
|
||||
(defun guix-get-repl-buffer-name (&optional internal)
|
||||
"Return the name of a REPL buffer."
|
||||
(if internal
|
||||
guix-internal-repl-buffer-name
|
||||
guix-repl-buffer-name))
|
||||
|
||||
(defun guix-switch-to-repl (&optional internal)
|
||||
"Switch to Guix REPL.
|
||||
If INTERNAL is non-nil (interactively with prefix), switch to the
|
||||
additional internal REPL if it exists."
|
||||
(interactive "P")
|
||||
(geiser-repl--switch-to-buffer (guix-get-repl-buffer internal)))
|
||||
|
||||
|
||||
;;; Evaluating expressions
|
||||
|
||||
(defvar guix-operation-buffer nil
|
||||
"Buffer from which the latest Guix operation was performed.")
|
||||
|
||||
(defun guix-eval (str)
|
||||
"Evaluate STR with guile expression using Guix REPL.
|
||||
See `guix-geiser-eval' for details."
|
||||
(guix-geiser-eval str (guix-get-repl-buffer 'internal)))
|
||||
|
||||
(defun guix-eval-read (str)
|
||||
"Evaluate STR with guile expression using Guix REPL.
|
||||
See `guix-geiser-eval-read' for details."
|
||||
(guix-geiser-eval-read str (guix-get-repl-buffer 'internal)))
|
||||
|
||||
(defun guix-eval-in-repl (str &optional operation-buffer operation-type)
|
||||
"Switch to Guix REPL and evaluate STR with guile expression there.
|
||||
If OPERATION-BUFFER is non-nil, it should be a buffer from which
|
||||
the current operation was performed.
|
||||
|
||||
If OPERATION-TYPE is non-nil, it should be a symbol. After
|
||||
successful executing of the current operation,
|
||||
`guix-after-OPERATION-TYPE-hook' is called."
|
||||
(run-hooks 'guix-before-repl-operation-hook)
|
||||
(setq guix-repl-operation-p t
|
||||
guix-repl-operation-type operation-type
|
||||
guix-operation-buffer operation-buffer)
|
||||
(guix-geiser-eval-in-repl str (guix-get-repl-buffer)))
|
||||
|
||||
(provide 'guix-backend)
|
||||
|
||||
;;; guix-backend.el ends here
|
||||
-1196
File diff suppressed because it is too large
Load Diff
@@ -1,371 +0,0 @@
|
||||
;;; guix-build-log.el --- Major and minor modes for build logs -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides a major mode (`guix-build-log-mode') and a minor mode
|
||||
;; (`guix-build-log-minor-mode') for highlighting Guix build logs.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defgroup guix-build-log nil
|
||||
"Settings for `guix-build-log-mode'."
|
||||
:group 'guix)
|
||||
|
||||
(defgroup guix-build-log-faces nil
|
||||
"Faces for `guix-build-log-mode'."
|
||||
:group 'guix-build-log
|
||||
:group 'guix-faces)
|
||||
|
||||
(defface guix-build-log-title-head
|
||||
'((t :inherit font-lock-keyword-face))
|
||||
"Face for '@' symbol of a log title."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-title-start
|
||||
'((t :inherit guix-build-log-title-head))
|
||||
"Face for a log title denoting a start of a process."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-title-success
|
||||
'((t :inherit guix-build-log-title-head))
|
||||
"Face for a log title denoting a successful end of a process."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-title-fail
|
||||
'((t :inherit error))
|
||||
"Face for a log title denoting a failed end of a process."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-title-end
|
||||
'((t :inherit guix-build-log-title-head))
|
||||
"Face for a log title denoting an undefined end of a process."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-phase-name
|
||||
'((t :inherit font-lock-function-name-face))
|
||||
"Face for a phase name."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-phase-start
|
||||
'((default :weight bold)
|
||||
(((class grayscale) (background light)) :foreground "Gray90")
|
||||
(((class grayscale) (background dark)) :foreground "DimGray")
|
||||
(((class color) (min-colors 16) (background light))
|
||||
:foreground "DarkGreen")
|
||||
(((class color) (min-colors 16) (background dark))
|
||||
:foreground "LimeGreen")
|
||||
(((class color) (min-colors 8)) :foreground "green"))
|
||||
"Face for the start line of a phase."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-phase-end
|
||||
'((((class grayscale) (background light)) :foreground "Gray90")
|
||||
(((class grayscale) (background dark)) :foreground "DimGray")
|
||||
(((class color) (min-colors 16) (background light))
|
||||
:foreground "ForestGreen")
|
||||
(((class color) (min-colors 16) (background dark))
|
||||
:foreground "LightGreen")
|
||||
(((class color) (min-colors 8)) :foreground "green")
|
||||
(t :weight bold))
|
||||
"Face for the end line of a phase."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-phase-success
|
||||
'((t))
|
||||
"Face for the 'succeeded' word of a phase line."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-phase-fail
|
||||
'((t :inherit error))
|
||||
"Face for the 'failed' word of a phase line."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defface guix-build-log-phase-seconds
|
||||
'((t :inherit font-lock-constant-face))
|
||||
"Face for the number of seconds for a phase."
|
||||
:group 'guix-build-log-faces)
|
||||
|
||||
(defcustom guix-build-log-minor-mode-activate t
|
||||
"If non-nil, then `guix-build-log-minor-mode' is automatically
|
||||
activated in `shell-mode' buffers."
|
||||
:type 'boolean
|
||||
:group 'guix-build-log)
|
||||
|
||||
(defcustom guix-build-log-mode-hook '()
|
||||
"Hook run after `guix-build-log-mode' is entered."
|
||||
:type 'hook
|
||||
:group 'guix-build-log)
|
||||
|
||||
(defvar guix-build-log-phase-name-regexp "`\\([^']+\\)'"
|
||||
"Regexp for a phase name.")
|
||||
|
||||
(defvar guix-build-log-phase-start-regexp
|
||||
(concat "^starting phase " guix-build-log-phase-name-regexp)
|
||||
"Regexp for the start line of a 'build' phase.")
|
||||
|
||||
(defun guix-build-log-title-regexp (&optional state)
|
||||
"Return regexp for the log title.
|
||||
STATE is a symbol denoting a state of the title. It should be
|
||||
`start', `fail', `success' or `nil' (for a regexp matching any
|
||||
state)."
|
||||
(let* ((word-rx (rx (1+ (any word "-"))))
|
||||
(state-rx (cond ((eq state 'start) (concat word-rx "started"))
|
||||
((eq state 'success) (concat word-rx "succeeded"))
|
||||
((eq state 'fail) (concat word-rx "failed"))
|
||||
(t word-rx))))
|
||||
(rx-to-string
|
||||
`(and bol (group "@") " " (group (regexp ,state-rx)))
|
||||
t)))
|
||||
|
||||
(defun guix-build-log-phase-end-regexp (&optional state)
|
||||
"Return regexp for the end line of a 'build' phase.
|
||||
STATE is a symbol denoting how a build phase was ended. It should be
|
||||
`fail', `success' or `nil' (for a regexp matching any state)."
|
||||
(let ((state-rx (cond ((eq state 'success) "succeeded")
|
||||
((eq state 'fail) "failed")
|
||||
(t (regexp-opt '("succeeded" "failed"))))))
|
||||
(rx-to-string
|
||||
`(and bol "phase " (regexp ,guix-build-log-phase-name-regexp)
|
||||
" " (group (regexp ,state-rx)) " after "
|
||||
(group (1+ (or digit "."))) " seconds")
|
||||
t)))
|
||||
|
||||
(defvar guix-build-log-phase-end-regexp
|
||||
;; For efficiency, it is better to have a regexp for the general line
|
||||
;; of the phase end, then to call the function all the time.
|
||||
(guix-build-log-phase-end-regexp)
|
||||
"Regexp for the end line of a 'build' phase.")
|
||||
|
||||
(defvar guix-build-log-font-lock-keywords
|
||||
`((,(guix-build-log-title-regexp 'start)
|
||||
(1 'guix-build-log-title-head)
|
||||
(2 'guix-build-log-title-start))
|
||||
(,(guix-build-log-title-regexp 'success)
|
||||
(1 'guix-build-log-title-head)
|
||||
(2 'guix-build-log-title-success))
|
||||
(,(guix-build-log-title-regexp 'fail)
|
||||
(1 'guix-build-log-title-head)
|
||||
(2 'guix-build-log-title-fail))
|
||||
(,(guix-build-log-title-regexp)
|
||||
(1 'guix-build-log-title-head)
|
||||
(2 'guix-build-log-title-end))
|
||||
(,guix-build-log-phase-start-regexp
|
||||
(0 'guix-build-log-phase-start)
|
||||
(1 'guix-build-log-phase-name prepend))
|
||||
(,(guix-build-log-phase-end-regexp 'success)
|
||||
(0 'guix-build-log-phase-end)
|
||||
(1 'guix-build-log-phase-name prepend)
|
||||
(2 'guix-build-log-phase-success prepend)
|
||||
(3 'guix-build-log-phase-seconds prepend))
|
||||
(,(guix-build-log-phase-end-regexp 'fail)
|
||||
(0 'guix-build-log-phase-end)
|
||||
(1 'guix-build-log-phase-name prepend)
|
||||
(2 'guix-build-log-phase-fail prepend)
|
||||
(3 'guix-build-log-phase-seconds prepend)))
|
||||
"A list of `font-lock-keywords' for `guix-build-log-mode'.")
|
||||
|
||||
(defvar guix-build-log-common-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map (kbd "M-n") 'guix-build-log-next-phase)
|
||||
(define-key map (kbd "M-p") 'guix-build-log-previous-phase)
|
||||
(define-key map (kbd "TAB") 'guix-build-log-phase-toggle)
|
||||
(define-key map (kbd "<tab>") 'guix-build-log-phase-toggle)
|
||||
(define-key map (kbd "<backtab>") 'guix-build-log-phase-toggle-all)
|
||||
(define-key map [(shift tab)] 'guix-build-log-phase-toggle-all)
|
||||
map)
|
||||
"Parent keymap for 'build-log' buffers.
|
||||
For `guix-build-log-mode' this map is used as is.
|
||||
For `guix-build-log-minor-mode' this map is prefixed with 'C-c'.")
|
||||
|
||||
(defvar guix-build-log-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(set-keymap-parent
|
||||
map (make-composed-keymap (list guix-build-log-common-map)
|
||||
special-mode-map))
|
||||
(define-key map (kbd "c") 'compilation-shell-minor-mode)
|
||||
(define-key map (kbd "v") 'view-mode)
|
||||
map)
|
||||
"Keymap for `guix-build-log-mode' buffers.")
|
||||
|
||||
(defvar guix-build-log-minor-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map (kbd "C-c") guix-build-log-common-map)
|
||||
map)
|
||||
"Keymap for `guix-build-log-minor-mode' buffers.")
|
||||
|
||||
(defun guix-build-log-phase-start (&optional with-header?)
|
||||
"Return the start point of the current build phase.
|
||||
If WITH-HEADER? is non-nil, do not skip 'starting phase ...' header.
|
||||
Return nil, if there is no phase start before the current point."
|
||||
(save-excursion
|
||||
(end-of-line)
|
||||
(when (re-search-backward guix-build-log-phase-start-regexp nil t)
|
||||
(unless with-header? (end-of-line))
|
||||
(point))))
|
||||
|
||||
(defun guix-build-log-phase-end ()
|
||||
"Return the end point of the current build phase."
|
||||
(save-excursion
|
||||
(beginning-of-line)
|
||||
(when (re-search-forward guix-build-log-phase-end-regexp nil t)
|
||||
(point))))
|
||||
|
||||
(defun guix-build-log-phase-hide ()
|
||||
"Hide the body of the current build phase."
|
||||
(interactive)
|
||||
(let ((beg (guix-build-log-phase-start))
|
||||
(end (guix-build-log-phase-end)))
|
||||
(when (and beg end)
|
||||
;; If not on the header line, move to it.
|
||||
(when (and (> (point) beg)
|
||||
(< (point) end))
|
||||
(goto-char (guix-build-log-phase-start t)))
|
||||
(remove-overlays beg end 'invisible t)
|
||||
(let ((o (make-overlay beg end)))
|
||||
(overlay-put o 'evaporate t)
|
||||
(overlay-put o 'invisible t)))))
|
||||
|
||||
(defun guix-build-log-phase-show ()
|
||||
"Show the body of the current build phase."
|
||||
(interactive)
|
||||
(let ((beg (guix-build-log-phase-start))
|
||||
(end (guix-build-log-phase-end)))
|
||||
(when (and beg end)
|
||||
(remove-overlays beg end 'invisible t))))
|
||||
|
||||
(defun guix-build-log-phase-hidden-p ()
|
||||
"Return non-nil, if the body of the current build phase is hidden."
|
||||
(let ((beg (guix-build-log-phase-start)))
|
||||
(and beg
|
||||
(cl-some (lambda (o)
|
||||
(overlay-get o 'invisible))
|
||||
(overlays-at beg)))))
|
||||
|
||||
(defun guix-build-log-phase-toggle-function ()
|
||||
"Return a function to toggle the body of the current build phase."
|
||||
(if (guix-build-log-phase-hidden-p)
|
||||
#'guix-build-log-phase-show
|
||||
#'guix-build-log-phase-hide))
|
||||
|
||||
(defun guix-build-log-phase-toggle ()
|
||||
"Show/hide the body of the current build phase."
|
||||
(interactive)
|
||||
(funcall (guix-build-log-phase-toggle-function)))
|
||||
|
||||
(defun guix-build-log-phase-toggle-all ()
|
||||
"Show/hide the bodies of all build phases."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
;; Some phases may be hidden, and some shown. Whether to hide or to
|
||||
;; show them, it is determined by the state of the first phase here.
|
||||
(goto-char (point-min))
|
||||
(let ((fun (save-excursion
|
||||
(re-search-forward guix-build-log-phase-start-regexp nil t)
|
||||
(guix-build-log-phase-toggle-function))))
|
||||
(while (re-search-forward guix-build-log-phase-start-regexp nil t)
|
||||
(funcall fun)))))
|
||||
|
||||
(defun guix-build-log-next-phase (&optional arg)
|
||||
"Move to the next build phase.
|
||||
With ARG, do it that many times. Negative ARG means move
|
||||
backward."
|
||||
(interactive "^p")
|
||||
(if arg
|
||||
(when (zerop arg) (user-error "Try again"))
|
||||
(setq arg 1))
|
||||
(let ((search-fun (if (> arg 0)
|
||||
#'re-search-forward
|
||||
#'re-search-backward))
|
||||
(n (abs arg))
|
||||
found last-found)
|
||||
(save-excursion
|
||||
(end-of-line (if (> arg 0) 1 0)) ; skip the current line
|
||||
(while (and (not (zerop n))
|
||||
(setq found
|
||||
(funcall search-fun
|
||||
guix-build-log-phase-start-regexp
|
||||
nil t)))
|
||||
(setq n (1- n)
|
||||
last-found found)))
|
||||
(when last-found
|
||||
(goto-char last-found)
|
||||
(forward-line 0))
|
||||
(or found
|
||||
(user-error (if (> arg 0)
|
||||
"No next build phase"
|
||||
"No previous build phase")))))
|
||||
|
||||
(defun guix-build-log-previous-phase (&optional arg)
|
||||
"Move to the previous build phase.
|
||||
With ARG, do it that many times. Negative ARG means move
|
||||
forward."
|
||||
(interactive "^p")
|
||||
(guix-build-log-next-phase (- (or arg 1))))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode guix-build-log-mode special-mode
|
||||
"Guix-Build-Log"
|
||||
"Major mode for viewing Guix build logs.
|
||||
|
||||
\\{guix-build-log-mode-map}"
|
||||
(setq font-lock-defaults '(guix-build-log-font-lock-keywords t)))
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode guix-build-log-minor-mode
|
||||
"Toggle Guix Build Log minor mode.
|
||||
|
||||
With a prefix argument ARG, enable Guix Build Log minor mode if
|
||||
ARG is positive, and disable it otherwise. If called from Lisp,
|
||||
enable the mode if ARG is omitted or nil.
|
||||
|
||||
When Guix Build Log minor mode is enabled, it highlights build
|
||||
log in the current buffer. This mode can be enabled
|
||||
programmatically using hooks:
|
||||
|
||||
(add-hook 'shell-mode-hook 'guix-build-log-minor-mode)
|
||||
|
||||
\\{guix-build-log-minor-mode-map}"
|
||||
:init-value nil
|
||||
:lighter " Guix-Build-Log"
|
||||
:keymap guix-build-log-minor-mode-map
|
||||
:group 'guix-build-log
|
||||
(if guix-build-log-minor-mode
|
||||
(font-lock-add-keywords nil guix-build-log-font-lock-keywords)
|
||||
(font-lock-remove-keywords nil guix-build-log-font-lock-keywords))
|
||||
(when font-lock-mode
|
||||
(font-lock-fontify-buffer)))
|
||||
|
||||
;;;###autoload
|
||||
(defun guix-build-log-minor-mode-activate-maybe ()
|
||||
"Activate `guix-build-log-minor-mode' depending on
|
||||
`guix-build-log-minor-mode-activate' variable."
|
||||
(when guix-build-log-minor-mode-activate
|
||||
(guix-build-log-minor-mode)))
|
||||
|
||||
;;;###autoload
|
||||
(add-to-list 'auto-mode-alist
|
||||
;; Regexp for log files (usually placed in /var/log/guix/...)
|
||||
(cons (rx "/guix/drvs/" (= 2 alnum) "/" (= 30 alnum)
|
||||
"-" (+ (any alnum "-+.")) ".drv" string-end)
|
||||
'guix-build-log-mode))
|
||||
|
||||
(provide 'guix-build-log)
|
||||
|
||||
;;; guix-build-log.el ends here
|
||||
@@ -1,720 +0,0 @@
|
||||
;;; guix-command.el --- Popup interface for guix commands -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides a magit-like popup interface for running guix
|
||||
;; commands in Guix REPL. The entry point is "M-x guix". When it is
|
||||
;; called the first time, "guix --help" output is parsed and
|
||||
;; `guix-COMMAND-action' functions are generated for each available guix
|
||||
;; COMMAND. Then a window with these commands is popped up. When a
|
||||
;; particular COMMAND is called, "guix COMMAND --help" output is parsed,
|
||||
;; and a user get a new popup window with available options for this
|
||||
;; command and so on.
|
||||
|
||||
;; To avoid hard-coding all guix options, actions, etc., as much data is
|
||||
;; taken from "guix ... --help" outputs as possible. But this data is
|
||||
;; still incomplete: not all long options have short analogs, also
|
||||
;; special readers should be used for some options (for example, to
|
||||
;; complete package names while prompting for a package). So after
|
||||
;; parsing --help output, the arguments are "improved". All arguments
|
||||
;; (switches, options and actions) are `guix-command-argument'
|
||||
;; structures.
|
||||
|
||||
;; Only "M-x guix" command is available after this file is loaded. The
|
||||
;; rest commands/actions/popups are generated on the fly only when they
|
||||
;; are needed (that's why there is a couple of `eval'-s in this file).
|
||||
|
||||
;; COMMANDS argument is used by many functions in this file. It means a
|
||||
;; list of guix commands without "guix" itself, e.g.: ("build"),
|
||||
;; ("import" "gnu"). The empty list stands for the plain "guix" without
|
||||
;; subcommands.
|
||||
|
||||
;; All actions in popup windows are divided into 2 groups:
|
||||
;;
|
||||
;; - 'Popup' actions - used to pop up another window. For example, every
|
||||
;; action in the 'guix' or 'guix import' window is a popup action. They
|
||||
;; are defined by `guix-command-define-popup-action' macro.
|
||||
;;
|
||||
;; - 'Execute' actions - used to do something with the command line (to
|
||||
;; run a command in Guix REPL or to copy it into kill-ring) constructed
|
||||
;; with the current popup. They are defined by
|
||||
;; `guix-command-define-execute-action' macro.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'cl-lib)
|
||||
(require 'guix-popup)
|
||||
(require 'guix-utils)
|
||||
(require 'guix-help-vars)
|
||||
(require 'guix-read)
|
||||
(require 'guix-base)
|
||||
(require 'guix-guile)
|
||||
(require 'guix-external)
|
||||
|
||||
(defgroup guix-commands nil
|
||||
"Settings for guix popup windows."
|
||||
:group 'guix)
|
||||
|
||||
(defvar guix-command-complex-with-shared-arguments
|
||||
'("system")
|
||||
"List of guix commands which have subcommands with shared options.
|
||||
I.e., 'guix foo --help' is the same as 'guix foo bar --help'.")
|
||||
|
||||
(defun guix-command-action-name (&optional commands &rest name-parts)
|
||||
"Return name of action function for guix COMMANDS."
|
||||
(guix-command-symbol (append commands name-parts (list "action"))))
|
||||
|
||||
|
||||
;;; Command arguments
|
||||
|
||||
(cl-defstruct (guix-command-argument
|
||||
(:constructor guix-command-make-argument)
|
||||
(:copier guix-command-copy-argument))
|
||||
name char doc fun switch? option? action?)
|
||||
|
||||
(cl-defun guix-command-modify-argument
|
||||
(argument &key
|
||||
(name nil name-bound?)
|
||||
(char nil char-bound?)
|
||||
(doc nil doc-bound?)
|
||||
(fun nil fun-bound?)
|
||||
(switch? nil switch?-bound?)
|
||||
(option? nil option?-bound?)
|
||||
(action? nil action?-bound?))
|
||||
"Return a modified version of ARGUMENT."
|
||||
(declare (indent 1))
|
||||
(let ((copy (guix-command-copy-argument argument)))
|
||||
(and name-bound? (setf (guix-command-argument-name copy) name))
|
||||
(and char-bound? (setf (guix-command-argument-char copy) char))
|
||||
(and doc-bound? (setf (guix-command-argument-doc copy) doc))
|
||||
(and fun-bound? (setf (guix-command-argument-fun copy) fun))
|
||||
(and switch?-bound? (setf (guix-command-argument-switch? copy) switch?))
|
||||
(and option?-bound? (setf (guix-command-argument-option? copy) option?))
|
||||
(and action?-bound? (setf (guix-command-argument-action? copy) action?))
|
||||
copy))
|
||||
|
||||
(defun guix-command-modify-argument-from-alist (argument alist)
|
||||
"Return a modified version of ARGUMENT or nil if it wasn't modified.
|
||||
Each assoc from ALIST have a form (NAME . PLIST). NAME is an
|
||||
argument name. PLIST is a property list of argument parameters
|
||||
to be modified."
|
||||
(let* ((name (guix-command-argument-name argument))
|
||||
(plist (guix-assoc-value alist name)))
|
||||
(when plist
|
||||
(apply #'guix-command-modify-argument
|
||||
argument plist))))
|
||||
|
||||
(defmacro guix-command-define-argument-improver (name alist)
|
||||
"Define NAME variable and function to modify an argument from ALIST."
|
||||
(declare (indent 1))
|
||||
`(progn
|
||||
(defvar ,name ,alist)
|
||||
(defun ,name (argument)
|
||||
(guix-command-modify-argument-from-alist argument ,name))))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-action-argument
|
||||
'(("graph" :char ?G)
|
||||
("environment" :char ?E)
|
||||
("publish" :char ?u)
|
||||
("pull" :char ?P)
|
||||
("size" :char ?z)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-common-argument
|
||||
'(("--help" :switch? nil)
|
||||
("--version" :switch? nil)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-target-argument
|
||||
'(("--target" :char ?T)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-system-type-argument
|
||||
'(("--system" :fun guix-read-system-type)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-load-path-argument
|
||||
'(("--load-path" :fun read-directory-name)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-search-paths-argument
|
||||
'(("--search-paths" :char ?P)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-substitute-urls-argument
|
||||
'(("--substitute-urls" :char ?U)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-hash-argument
|
||||
'(("--format" :fun guix-read-hash-format)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-key-policy-argument
|
||||
'(("--key-download" :fun guix-read-key-policy)))
|
||||
|
||||
(defvar guix-command-improve-common-build-argument
|
||||
'(("--no-substitutes" :char ?s)
|
||||
("--no-build-hook" :char ?h)
|
||||
("--max-silent-time" :char ?x)))
|
||||
|
||||
(defun guix-command-improve-common-build-argument (argument)
|
||||
(guix-command-modify-argument-from-alist
|
||||
argument
|
||||
(append guix-command-improve-load-path-argument
|
||||
guix-command-improve-substitute-urls-argument
|
||||
guix-command-improve-common-build-argument)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-archive-argument
|
||||
'(("--generate-key" :char ?k)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-build-argument
|
||||
'(("--no-grafts" :char ?g)
|
||||
("--root" :fun guix-read-file-name)
|
||||
("--sources" :char ?S :fun guix-read-source-type :switch? nil)
|
||||
("--with-source" :fun guix-read-file-name)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-environment-argument
|
||||
'(("--exec" :fun read-shell-command)
|
||||
("--load" :fun guix-read-file-name)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-gc-argument
|
||||
'(("--list-dead" :char ?D)
|
||||
("--list-live" :char ?L)
|
||||
("--referrers" :char ?f)
|
||||
("--verify" :fun guix-read-verify-options-string)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-graph-argument
|
||||
'(("--type" :fun guix-read-graph-type)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-import-argument
|
||||
'(("cran" :char ?r)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-import-elpa-argument
|
||||
'(("--archive" :fun guix-read-elpa-archive)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-lint-argument
|
||||
'(("--checkers" :fun guix-read-lint-checker-names-string)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-package-argument
|
||||
;; Unlike all other options, --install/--remove do not have a form
|
||||
;; '--install=foo,bar' but '--install foo bar' instead, so we need
|
||||
;; some tweaks.
|
||||
'(("--install"
|
||||
:name "--install " :fun guix-read-package-names-string
|
||||
:switch? nil :option? t)
|
||||
("--remove"
|
||||
:name "--remove " :fun guix-read-package-names-string
|
||||
:switch? nil :option? t)
|
||||
("--install-from-file" :fun guix-read-file-name)
|
||||
("--manifest" :fun guix-read-file-name)
|
||||
("--do-not-upgrade" :char ?U)
|
||||
("--roll-back" :char ?R)
|
||||
("--show" :char ?w :fun guix-read-package-name)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-refresh-argument
|
||||
'(("--select" :fun guix-read-refresh-subset)
|
||||
("--type" :fun guix-read-refresh-updater-names-string)
|
||||
("--key-server" :char ?S)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-size-argument
|
||||
'(("--map-file" :fun guix-read-file-name)))
|
||||
|
||||
(guix-command-define-argument-improver
|
||||
guix-command-improve-system-argument
|
||||
'(("disk-image" :char ?D)
|
||||
("vm-image" :char ?V)
|
||||
("--on-error" :char ?E)
|
||||
("--no-grub" :char ?g)
|
||||
("--full-boot" :char ?b)))
|
||||
|
||||
(defvar guix-command-argument-improvers
|
||||
'((()
|
||||
guix-command-improve-action-argument)
|
||||
(("archive")
|
||||
guix-command-improve-common-build-argument
|
||||
guix-command-improve-target-argument
|
||||
guix-command-improve-system-type-argument
|
||||
guix-command-improve-archive-argument)
|
||||
(("build")
|
||||
guix-command-improve-common-build-argument
|
||||
guix-command-improve-target-argument
|
||||
guix-command-improve-system-type-argument
|
||||
guix-command-improve-build-argument)
|
||||
(("download")
|
||||
guix-command-improve-hash-argument)
|
||||
(("hash")
|
||||
guix-command-improve-hash-argument)
|
||||
(("environment")
|
||||
guix-command-improve-common-build-argument
|
||||
guix-command-improve-search-paths-argument
|
||||
guix-command-improve-system-type-argument
|
||||
guix-command-improve-environment-argument)
|
||||
(("gc")
|
||||
guix-command-improve-gc-argument)
|
||||
(("graph")
|
||||
guix-command-improve-graph-argument)
|
||||
(("import")
|
||||
guix-command-improve-import-argument)
|
||||
(("import" "gnu")
|
||||
guix-command-improve-key-policy-argument)
|
||||
(("import" "elpa")
|
||||
guix-command-improve-import-elpa-argument)
|
||||
(("lint")
|
||||
guix-command-improve-lint-argument)
|
||||
(("package")
|
||||
guix-command-improve-common-build-argument
|
||||
guix-command-improve-search-paths-argument
|
||||
guix-command-improve-package-argument)
|
||||
(("refresh")
|
||||
guix-command-improve-key-policy-argument
|
||||
guix-command-improve-refresh-argument)
|
||||
(("size")
|
||||
guix-command-improve-system-type-argument
|
||||
guix-command-improve-substitute-urls-argument
|
||||
guix-command-improve-size-argument)
|
||||
(("system")
|
||||
guix-command-improve-common-build-argument
|
||||
guix-command-improve-system-argument))
|
||||
"Alist of guix commands and argument improvers for them.")
|
||||
|
||||
(defun guix-command-improve-argument (argument improvers)
|
||||
"Return ARGUMENT modified with IMPROVERS."
|
||||
(or (cl-some (lambda (improver)
|
||||
(funcall improver argument))
|
||||
improvers)
|
||||
argument))
|
||||
|
||||
(defun guix-command-improve-arguments (arguments commands)
|
||||
"Return ARGUMENTS for 'guix COMMANDS ...' modified for popup interface."
|
||||
(let ((improvers (cons 'guix-command-improve-common-argument
|
||||
(guix-assoc-value guix-command-argument-improvers
|
||||
commands))))
|
||||
(mapcar (lambda (argument)
|
||||
(guix-command-improve-argument argument improvers))
|
||||
arguments)))
|
||||
|
||||
(defun guix-command-parse-arguments (&optional commands)
|
||||
"Return a list of parsed 'guix COMMANDS ...' arguments."
|
||||
(with-temp-buffer
|
||||
(insert (guix-help-string commands))
|
||||
(let (args)
|
||||
(guix-while-search guix-help-parse-option-regexp
|
||||
(let* ((short (match-string-no-properties 1))
|
||||
(name (match-string-no-properties 2))
|
||||
(arg (match-string-no-properties 3))
|
||||
(doc (match-string-no-properties 4))
|
||||
(char (if short
|
||||
(elt short 1) ; short option letter
|
||||
(elt name 2))) ; first letter of the long option
|
||||
;; If "--foo=bar" or "--foo[=bar]" then it is 'option'.
|
||||
(option? (not (string= "" arg)))
|
||||
;; If "--foo" or "--foo[=bar]" then it is 'switch'.
|
||||
(switch? (or (string= "" arg)
|
||||
(eq ?\[ (elt arg 0)))))
|
||||
(push (guix-command-make-argument
|
||||
:name name
|
||||
:char char
|
||||
:doc doc
|
||||
:switch? switch?
|
||||
:option? option?)
|
||||
args)))
|
||||
(guix-while-search guix-help-parse-command-regexp
|
||||
(let* ((name (match-string-no-properties 1))
|
||||
(char (elt name 0)))
|
||||
(push (guix-command-make-argument
|
||||
:name name
|
||||
:char char
|
||||
:fun (guix-command-action-name commands name)
|
||||
:action? t)
|
||||
args)))
|
||||
args)))
|
||||
|
||||
(defun guix-command-rest-argument (&optional commands)
|
||||
"Return '--' argument for COMMANDS."
|
||||
(cl-flet ((argument (&rest args)
|
||||
(apply #'guix-command-make-argument
|
||||
:name "-- " :char ?= :option? t args)))
|
||||
(let ((command (car commands)))
|
||||
(cond
|
||||
((member command
|
||||
'("archive" "build" "challenge" "edit" "environment"
|
||||
"graph" "lint" "refresh"))
|
||||
(argument :doc "Packages" :fun 'guix-read-package-names-string))
|
||||
((string= command "download")
|
||||
(argument :doc "URL"))
|
||||
((string= command "gc")
|
||||
(argument :doc "Paths" :fun 'guix-read-file-name))
|
||||
((member command '("hash" "system"))
|
||||
(argument :doc "File" :fun 'guix-read-file-name))
|
||||
((string= command "size")
|
||||
(argument :doc "Package" :fun 'guix-read-package-name))
|
||||
((equal commands '("import" "nix"))
|
||||
(argument :doc "Nixpkgs Attribute"))
|
||||
;; Other 'guix import' subcommands, but not 'import' itself.
|
||||
((and (cdr commands)
|
||||
(string= command "import"))
|
||||
(argument :doc "Package name"))))))
|
||||
|
||||
(defun guix-command-additional-arguments (&optional commands)
|
||||
"Return additional arguments for COMMANDS."
|
||||
(let ((rest-arg (guix-command-rest-argument commands)))
|
||||
(and rest-arg (list rest-arg))))
|
||||
|
||||
;; Ideally only `guix-command-arguments' function should exist with the
|
||||
;; contents of `guix-command-all-arguments', but we need to make a
|
||||
;; special case for `guix-command-complex-with-shared-arguments' commands.
|
||||
|
||||
(defun guix-command-all-arguments (&optional commands)
|
||||
"Return list of all arguments for 'guix COMMANDS ...'."
|
||||
(let ((parsed (guix-command-parse-arguments commands)))
|
||||
(append (guix-command-improve-arguments parsed commands)
|
||||
(guix-command-additional-arguments commands))))
|
||||
|
||||
(guix-memoized-defalias guix-command-all-arguments-memoize
|
||||
guix-command-all-arguments)
|
||||
|
||||
(defun guix-command-arguments (&optional commands)
|
||||
"Return list of arguments for 'guix COMMANDS ...'."
|
||||
(let ((command (car commands)))
|
||||
(if (member command
|
||||
guix-command-complex-with-shared-arguments)
|
||||
;; Take actions only for 'guix system', and switches+options for
|
||||
;; 'guix system foo'.
|
||||
(funcall (if (null (cdr commands))
|
||||
#'cl-remove-if-not
|
||||
#'cl-remove-if)
|
||||
#'guix-command-argument-action?
|
||||
(guix-command-all-arguments-memoize (list command)))
|
||||
(guix-command-all-arguments commands))))
|
||||
|
||||
(defun guix-command-switch->popup-switch (switch)
|
||||
"Return popup switch from command SWITCH argument."
|
||||
(list (guix-command-argument-char switch)
|
||||
(or (guix-command-argument-doc switch)
|
||||
"Unknown")
|
||||
(guix-command-argument-name switch)))
|
||||
|
||||
(defun guix-command-option->popup-option (option)
|
||||
"Return popup option from command OPTION argument."
|
||||
(list (guix-command-argument-char option)
|
||||
(or (guix-command-argument-doc option)
|
||||
"Unknown")
|
||||
(let ((name (guix-command-argument-name option)))
|
||||
(if (string-match-p " \\'" name) ; ends with space
|
||||
name
|
||||
(concat name "=")))
|
||||
(or (guix-command-argument-fun option)
|
||||
'read-from-minibuffer)))
|
||||
|
||||
(defun guix-command-action->popup-action (action)
|
||||
"Return popup action from command ACTION argument."
|
||||
(list (guix-command-argument-char action)
|
||||
(or (guix-command-argument-doc action)
|
||||
(guix-command-argument-name action)
|
||||
"Unknown")
|
||||
(guix-command-argument-fun action)))
|
||||
|
||||
(defun guix-command-sort-arguments (arguments)
|
||||
"Sort ARGUMENTS by name in alphabetical order."
|
||||
(sort arguments
|
||||
(lambda (a1 a2)
|
||||
(let ((name1 (guix-command-argument-name a1))
|
||||
(name2 (guix-command-argument-name a2)))
|
||||
(cond ((null name1) nil)
|
||||
((null name2) t)
|
||||
(t (string< name1 name2)))))))
|
||||
|
||||
(defun guix-command-switches (arguments)
|
||||
"Return switches from ARGUMENTS."
|
||||
(cl-remove-if-not #'guix-command-argument-switch? arguments))
|
||||
|
||||
(defun guix-command-options (arguments)
|
||||
"Return options from ARGUMENTS."
|
||||
(cl-remove-if-not #'guix-command-argument-option? arguments))
|
||||
|
||||
(defun guix-command-actions (arguments)
|
||||
"Return actions from ARGUMENTS."
|
||||
(cl-remove-if-not #'guix-command-argument-action? arguments))
|
||||
|
||||
(defun guix-command-post-process-args (args)
|
||||
"Adjust appropriately command line ARGS returned from popup command."
|
||||
;; XXX We need to split "--install foo bar" and similar strings into
|
||||
;; lists of strings. But some commands (e.g., 'guix hash') accept a
|
||||
;; file name as the 'rest' argument, and as file names may contain
|
||||
;; spaces, splitting by spaces will break such names. For example, the
|
||||
;; following argument: "-- /tmp/file with spaces" will be transformed
|
||||
;; into the following list: ("--" "/tmp/file" "with" "spaces") instead
|
||||
;; of the wished ("--" "/tmp/file with spaces").
|
||||
(let* (rest
|
||||
(rx (rx string-start
|
||||
(or "-- " "--install " "--remove ")))
|
||||
(args (mapcar (lambda (arg)
|
||||
(if (string-match-p rx arg)
|
||||
(progn (push (split-string arg) rest)
|
||||
nil)
|
||||
arg))
|
||||
args)))
|
||||
(if rest
|
||||
(apply #'append (delq nil args) rest)
|
||||
args)))
|
||||
|
||||
|
||||
;;; 'Execute' actions
|
||||
|
||||
(defvar guix-command-default-execute-arguments
|
||||
(list
|
||||
(guix-command-make-argument
|
||||
:name "repl" :char ?r :doc "Run in Guix REPL")
|
||||
(guix-command-make-argument
|
||||
:name "shell" :char ?s :doc "Run in shell")
|
||||
(guix-command-make-argument
|
||||
:name "copy" :char ?c :doc "Copy command line"))
|
||||
"List of default 'execute' action arguments.")
|
||||
|
||||
(defvar guix-command-additional-execute-arguments
|
||||
(let ((graph-arg (guix-command-make-argument
|
||||
:name "view" :char ?v :doc "View graph")))
|
||||
`((("build")
|
||||
,(guix-command-make-argument
|
||||
:name "log" :char ?l :doc "View build log"))
|
||||
(("graph") ,graph-arg)
|
||||
(("size")
|
||||
,(guix-command-make-argument
|
||||
:name "view" :char ?v :doc "View map"))
|
||||
(("system" "dmd-graph") ,graph-arg)
|
||||
(("system" "extension-graph") ,graph-arg)))
|
||||
"Alist of guix commands and additional 'execute' action arguments.")
|
||||
|
||||
(defun guix-command-execute-arguments (commands)
|
||||
"Return a list of 'execute' action arguments for COMMANDS."
|
||||
(mapcar (lambda (arg)
|
||||
(guix-command-modify-argument arg
|
||||
:action? t
|
||||
:fun (guix-command-action-name
|
||||
commands (guix-command-argument-name arg))))
|
||||
(append guix-command-default-execute-arguments
|
||||
(guix-assoc-value
|
||||
guix-command-additional-execute-arguments commands))))
|
||||
|
||||
(defvar guix-command-special-executors
|
||||
'((("environment")
|
||||
("repl" . guix-run-environment-command-in-repl))
|
||||
(("pull")
|
||||
("repl" . guix-run-pull-command-in-repl))
|
||||
(("build")
|
||||
("log" . guix-run-view-build-log))
|
||||
(("graph")
|
||||
("view" . guix-run-view-graph))
|
||||
(("size")
|
||||
("view" . guix-run-view-size-map))
|
||||
(("system" "dmd-graph")
|
||||
("view" . guix-run-view-graph))
|
||||
(("system" "extension-graph")
|
||||
("view" . guix-run-view-graph)))
|
||||
"Alist of guix commands and alists of special executers for them.
|
||||
See also `guix-command-default-executors'.")
|
||||
|
||||
(defvar guix-command-default-executors
|
||||
'(("repl" . guix-run-command-in-repl)
|
||||
("shell" . guix-run-command-in-shell)
|
||||
("copy" . guix-copy-command-as-kill))
|
||||
"Alist of default executers for action names.")
|
||||
|
||||
(defun guix-command-executor (commands name)
|
||||
"Return function to run command line arguments for guix COMMANDS."
|
||||
(or (guix-assoc-value guix-command-special-executors commands name)
|
||||
(guix-assoc-value guix-command-default-executors name)))
|
||||
|
||||
(defun guix-run-environment-command-in-repl (args)
|
||||
"Run 'guix ARGS ...' environment command in Guix REPL."
|
||||
;; As 'guix environment' usually tries to run another process, it may
|
||||
;; be fun but not wise to run this command in Geiser REPL.
|
||||
(when (or (member "--dry-run" args)
|
||||
(member "--search-paths" args)
|
||||
(when (y-or-n-p
|
||||
(format "'%s' command will spawn an external process.
|
||||
Do you really want to execute this command in Geiser REPL? "
|
||||
(guix-command-string args)))
|
||||
(message "May \"M-x shell-mode\" be with you!")
|
||||
t))
|
||||
(guix-run-command-in-repl args)))
|
||||
|
||||
(defun guix-run-pull-command-in-repl (args)
|
||||
"Run 'guix ARGS ...' pull command in Guix REPL.
|
||||
Perform pull-specific actions after operation, see
|
||||
`guix-after-pull-hook' and `guix-update-after-pull'."
|
||||
(guix-eval-in-repl
|
||||
(apply #'guix-make-guile-expression 'guix-command args)
|
||||
nil 'pull))
|
||||
|
||||
(defun guix-run-view-build-log (args)
|
||||
"Add --log-file to ARGS, run 'guix ARGS ...' build command, and
|
||||
open the log file(s)."
|
||||
(let* ((args (if (member "--log-file" args)
|
||||
args
|
||||
(apply #'list (car args) "--log-file" (cdr args))))
|
||||
(output (guix-command-output args))
|
||||
(files (split-string output "\n" t)))
|
||||
(dolist (file files)
|
||||
(guix-find-file-or-url file)
|
||||
(guix-build-log-mode))))
|
||||
|
||||
(defun guix-run-view-graph (args)
|
||||
"Run 'guix ARGS ...' graph command, make the image and open it."
|
||||
(let* ((graph-file (guix-dot-file-name))
|
||||
(dot-args (guix-dot-arguments graph-file)))
|
||||
(if (guix-eval-read (guix-make-guile-expression
|
||||
'pipe-guix-output args dot-args))
|
||||
(guix-find-file graph-file)
|
||||
(error "Couldn't create a graph"))))
|
||||
|
||||
(defun guix-run-view-size-map (args)
|
||||
"Run 'guix ARGS ...' size command, and open the map file."
|
||||
(let* ((wished-map-file
|
||||
(cl-some (lambda (arg)
|
||||
(and (string-match "--map-file=\\(.+\\)" arg)
|
||||
(match-string 1 arg)))
|
||||
args))
|
||||
(map-file (or wished-map-file (guix-png-file-name)))
|
||||
(args (if wished-map-file
|
||||
args
|
||||
(apply #'list
|
||||
(car args)
|
||||
(concat "--map-file=" map-file)
|
||||
(cdr args)))))
|
||||
(guix-command-output args)
|
||||
(guix-find-file map-file)))
|
||||
|
||||
|
||||
;;; Generating popups, actions, etc.
|
||||
|
||||
(defmacro guix-command-define-popup-action (name &optional commands)
|
||||
"Define NAME function to generate (if needed) and run popup for COMMANDS."
|
||||
(declare (indent 1) (debug t))
|
||||
(let* ((popup-fun (guix-command-symbol `(,@commands "popup")))
|
||||
(doc (format "Call `%s' (generate it if needed)."
|
||||
popup-fun)))
|
||||
`(defun ,name (&optional arg)
|
||||
,doc
|
||||
(interactive "P")
|
||||
(unless (fboundp ',popup-fun)
|
||||
(guix-command-generate-popup ',popup-fun ',commands))
|
||||
(,popup-fun arg))))
|
||||
|
||||
(defmacro guix-command-define-execute-action (name executor
|
||||
&optional commands)
|
||||
"Define NAME function to execute the current action for guix COMMANDS.
|
||||
EXECUTOR function is called with the current command line arguments."
|
||||
(declare (indent 1) (debug t))
|
||||
(let* ((arguments-fun (guix-command-symbol `(,@commands "arguments")))
|
||||
(doc (format "Call `%s' with the current popup arguments."
|
||||
executor)))
|
||||
`(defun ,name (&rest args)
|
||||
,doc
|
||||
(interactive (,arguments-fun))
|
||||
(,executor (append ',commands
|
||||
(guix-command-post-process-args args))))))
|
||||
|
||||
(defun guix-command-generate-popup-actions (actions &optional commands)
|
||||
"Generate 'popup' commands from ACTIONS arguments for guix COMMANDS."
|
||||
(dolist (action actions)
|
||||
(let ((fun (guix-command-argument-fun action)))
|
||||
(unless (fboundp fun)
|
||||
(eval `(guix-command-define-popup-action ,fun
|
||||
,(append commands
|
||||
(list (guix-command-argument-name action)))))))))
|
||||
|
||||
(defun guix-command-generate-execute-actions (actions &optional commands)
|
||||
"Generate 'execute' commands from ACTIONS arguments for guix COMMANDS."
|
||||
(dolist (action actions)
|
||||
(let ((fun (guix-command-argument-fun action)))
|
||||
(unless (fboundp fun)
|
||||
(eval `(guix-command-define-execute-action ,fun
|
||||
,(guix-command-executor
|
||||
commands (guix-command-argument-name action))
|
||||
,commands))))))
|
||||
|
||||
(defun guix-command-generate-popup (name &optional commands)
|
||||
"Define NAME popup with 'guix COMMANDS ...' interface."
|
||||
(let* ((command (car commands))
|
||||
(man-page (concat "guix" (and command (concat "-" command))))
|
||||
(doc (format "Popup window for '%s' command."
|
||||
(guix-concat-strings (cons "guix" commands)
|
||||
" ")))
|
||||
(args (guix-command-arguments commands))
|
||||
(switches (guix-command-sort-arguments
|
||||
(guix-command-switches args)))
|
||||
(options (guix-command-sort-arguments
|
||||
(guix-command-options args)))
|
||||
(popup-actions (guix-command-sort-arguments
|
||||
(guix-command-actions args)))
|
||||
(execute-actions (unless popup-actions
|
||||
(guix-command-execute-arguments commands)))
|
||||
(actions (or popup-actions execute-actions)))
|
||||
(if popup-actions
|
||||
(guix-command-generate-popup-actions popup-actions commands)
|
||||
(guix-command-generate-execute-actions execute-actions commands))
|
||||
(eval
|
||||
`(guix-define-popup ,name
|
||||
,doc
|
||||
'guix-commands
|
||||
:man-page ,man-page
|
||||
:switches ',(mapcar #'guix-command-switch->popup-switch switches)
|
||||
:options ',(mapcar #'guix-command-option->popup-option options)
|
||||
:actions ',(mapcar #'guix-command-action->popup-action actions)
|
||||
:max-action-columns 4))))
|
||||
|
||||
;;;###autoload (autoload 'guix "guix-command" "Popup window for 'guix'." t)
|
||||
(guix-command-define-popup-action guix)
|
||||
|
||||
(defalias 'guix-edit-action #'guix-edit)
|
||||
|
||||
|
||||
(defvar guix-command-font-lock-keywords
|
||||
(eval-when-compile
|
||||
`((,(rx "("
|
||||
(group "guix-command-define-"
|
||||
(or "popup-action"
|
||||
"execute-action"
|
||||
"argument-improver"))
|
||||
symbol-end
|
||||
(zero-or-more blank)
|
||||
(zero-or-one
|
||||
(group (one-or-more (or (syntax word) (syntax symbol))))))
|
||||
(1 font-lock-keyword-face)
|
||||
(2 font-lock-function-name-face nil t)))))
|
||||
|
||||
(font-lock-add-keywords 'emacs-lisp-mode guix-command-font-lock-keywords)
|
||||
|
||||
(provide 'guix-command)
|
||||
|
||||
;;; guix-command.el ends here
|
||||
@@ -1,38 +0,0 @@
|
||||
;;; guix-config.el --- Compile-time configuration of Guix.
|
||||
|
||||
;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defconst guix-config-emacs-interface-directory
|
||||
(replace-regexp-in-string "${prefix}" "@prefix@" "@emacsuidir@"))
|
||||
|
||||
(defconst guix-config-state-directory
|
||||
;; This must match `NIX_STATE_DIR' as defined in `daemon.am'.
|
||||
(or (getenv "NIX_STATE_DIR") "@guix_localstatedir@/guix"))
|
||||
|
||||
(defconst guix-config-guile-program "@GUILE@"
|
||||
"Name of the 'guile' executable defined at configure time.")
|
||||
|
||||
(defconst guix-config-dot-program "@DOT_USER_PROGRAM@"
|
||||
"Name of the 'dot' executable defined at configure time.")
|
||||
|
||||
(provide 'guix-config)
|
||||
|
||||
;;; guix-config.el ends here
|
||||
@@ -1,377 +0,0 @@
|
||||
;;; guix-devel.el --- Development tools -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides commands useful for developing Guix (or even
|
||||
;; arbitrary Guile code) with Geiser.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'lisp-mode)
|
||||
(require 'guix-guile)
|
||||
(require 'guix-geiser)
|
||||
(require 'guix-utils)
|
||||
(require 'guix-base)
|
||||
|
||||
(defgroup guix-devel nil
|
||||
"Settings for Guix development utils."
|
||||
:group 'guix)
|
||||
|
||||
(defgroup guix-devel-faces nil
|
||||
"Faces for `guix-devel-mode'."
|
||||
:group 'guix-devel
|
||||
:group 'guix-faces)
|
||||
|
||||
(defface guix-devel-modify-phases-keyword
|
||||
'((t :inherit font-lock-preprocessor-face))
|
||||
"Face for a `modify-phases' keyword ('delete', 'replace', etc.)."
|
||||
:group 'guix-devel-faces)
|
||||
|
||||
(defface guix-devel-gexp-symbol
|
||||
'((t :inherit font-lock-keyword-face))
|
||||
"Face for gexp symbols ('#~', '#$', etc.).
|
||||
See Info node `(guix) G-Expressions'."
|
||||
:group 'guix-devel-faces)
|
||||
|
||||
(defcustom guix-devel-activate-mode t
|
||||
"If non-nil, then `guix-devel-mode' is automatically activated
|
||||
in Scheme buffers."
|
||||
:type 'boolean
|
||||
:group 'guix-devel)
|
||||
|
||||
(defun guix-devel-use-modules (&rest modules)
|
||||
"Use guile MODULES."
|
||||
(apply #'guix-geiser-call "use-modules" modules))
|
||||
|
||||
(defun guix-devel-use-module (&optional module)
|
||||
"Use guile MODULE in the current Geiser REPL.
|
||||
MODULE is a string with the module name - e.g., \"(ice-9 match)\".
|
||||
Interactively, use the module defined by the current scheme file."
|
||||
(interactive (list (guix-guile-current-module)))
|
||||
(guix-devel-use-modules module)
|
||||
(message "Using %s module." module))
|
||||
|
||||
(defun guix-devel-copy-module-as-kill ()
|
||||
"Put the name of the current guile module into `kill-ring'."
|
||||
(interactive)
|
||||
(guix-copy-as-kill (guix-guile-current-module)))
|
||||
|
||||
(defun guix-devel-setup-repl (&optional repl)
|
||||
"Setup REPL for using `guix-devel-...' commands."
|
||||
(guix-devel-use-modules "(guix monad-repl)"
|
||||
"(guix scripts)"
|
||||
"(guix store)"
|
||||
"(guix ui)")
|
||||
;; Without this workaround, the warning/build output disappears. See
|
||||
;; <https://github.com/jaor/geiser/issues/83> for details.
|
||||
(guix-geiser-eval-in-repl-synchronously
|
||||
"(begin
|
||||
(guix-warning-port (current-warning-port))
|
||||
(current-build-output-port (current-error-port)))"
|
||||
repl 'no-history 'no-display))
|
||||
|
||||
(defvar guix-devel-repl-processes nil
|
||||
"List of REPL processes configured by `guix-devel-setup-repl'.")
|
||||
|
||||
(defun guix-devel-setup-repl-maybe (&optional repl)
|
||||
"Setup (if needed) REPL for using `guix-devel-...' commands."
|
||||
(let ((process (get-buffer-process (or repl (guix-geiser-repl)))))
|
||||
(when (and process
|
||||
(not (memq process guix-devel-repl-processes)))
|
||||
(guix-devel-setup-repl repl)
|
||||
(push process guix-devel-repl-processes))))
|
||||
|
||||
(defmacro guix-devel-with-definition (def-var &rest body)
|
||||
"Run BODY with the current guile definition bound to DEF-VAR.
|
||||
Bind DEF-VAR variable to the name of the current top-level
|
||||
definition, setup the current REPL, use the current module, and
|
||||
run BODY."
|
||||
(declare (indent 1) (debug (symbolp body)))
|
||||
`(let ((,def-var (guix-guile-current-definition)))
|
||||
(guix-devel-setup-repl-maybe)
|
||||
(guix-devel-use-modules (guix-guile-current-module))
|
||||
,@body))
|
||||
|
||||
(defun guix-devel-build-package-definition ()
|
||||
"Build a package defined by the current top-level variable definition."
|
||||
(interactive)
|
||||
(guix-devel-with-definition def
|
||||
(when (or (not guix-operation-confirm)
|
||||
(guix-operation-prompt (format "Build '%s'?" def)))
|
||||
(guix-geiser-eval-in-repl
|
||||
(concat ",run-in-store "
|
||||
(guix-guile-make-call-expression
|
||||
"build-package" def
|
||||
"#:use-substitutes?" (guix-guile-boolean
|
||||
guix-use-substitutes)
|
||||
"#:dry-run?" (guix-guile-boolean guix-dry-run)))))))
|
||||
|
||||
(defun guix-devel-build-package-source ()
|
||||
"Build the source of the current package definition."
|
||||
(interactive)
|
||||
(guix-devel-with-definition def
|
||||
(when (or (not guix-operation-confirm)
|
||||
(guix-operation-prompt
|
||||
(format "Build '%s' package source?" def)))
|
||||
(guix-geiser-eval-in-repl
|
||||
(concat ",run-in-store "
|
||||
(guix-guile-make-call-expression
|
||||
"build-package-source" def
|
||||
"#:use-substitutes?" (guix-guile-boolean
|
||||
guix-use-substitutes)
|
||||
"#:dry-run?" (guix-guile-boolean guix-dry-run)))))))
|
||||
|
||||
(defun guix-devel-lint-package ()
|
||||
"Check the current package.
|
||||
See Info node `(guix) Invoking guix lint' for details."
|
||||
(interactive)
|
||||
(guix-devel-with-definition def
|
||||
(guix-devel-use-modules "(guix scripts lint)")
|
||||
(when (or (not guix-operation-confirm)
|
||||
(y-or-n-p (format "Lint '%s' package?" def)))
|
||||
(guix-geiser-eval-in-repl
|
||||
(format "(run-checkers %s)" def)))))
|
||||
|
||||
|
||||
;;; Font-lock
|
||||
|
||||
(defvar guix-devel-modify-phases-keyword-regexp
|
||||
(rx (+ word))
|
||||
"Regexp for a 'modify-phases' keyword ('delete', 'replace', etc.).")
|
||||
|
||||
(defun guix-devel-modify-phases-font-lock-matcher (limit)
|
||||
"Find a 'modify-phases' keyword.
|
||||
This function is used as a MATCHER for `font-lock-keywords'."
|
||||
(ignore-errors
|
||||
(down-list)
|
||||
(or (re-search-forward guix-devel-modify-phases-keyword-regexp
|
||||
limit t)
|
||||
(set-match-data nil))
|
||||
(up-list)
|
||||
t))
|
||||
|
||||
(defun guix-devel-modify-phases-font-lock-pre ()
|
||||
"Skip the next sexp, and return the end point of the current list.
|
||||
This function is used as a PRE-MATCH-FORM for `font-lock-keywords'
|
||||
to find 'modify-phases' keywords."
|
||||
(let ((in-comment? (nth 4 (syntax-ppss))))
|
||||
;; If 'modify-phases' is commented, do not try to search for its
|
||||
;; keywords.
|
||||
(unless in-comment?
|
||||
(ignore-errors (forward-sexp))
|
||||
(save-excursion (up-list) (point)))))
|
||||
|
||||
(defconst guix-devel-keywords
|
||||
'("call-with-compressed-output-port"
|
||||
"call-with-container"
|
||||
"call-with-decompressed-port"
|
||||
"call-with-derivation-narinfo"
|
||||
"call-with-derivation-substitute"
|
||||
"call-with-error-handling"
|
||||
"call-with-temporary-directory"
|
||||
"call-with-temporary-output-file"
|
||||
"define-enumerate-type"
|
||||
"define-gexp-compiler"
|
||||
"define-lift"
|
||||
"define-monad"
|
||||
"define-operation"
|
||||
"define-record-type*"
|
||||
"emacs-substitute-sexps"
|
||||
"emacs-substitute-variables"
|
||||
"mbegin"
|
||||
"mlet"
|
||||
"mlet*"
|
||||
"modify-services"
|
||||
"munless"
|
||||
"mwhen"
|
||||
"run-with-state"
|
||||
"run-with-store"
|
||||
"signature-case"
|
||||
"substitute*"
|
||||
"substitute-keyword-arguments"
|
||||
"test-assertm"
|
||||
"use-package-modules"
|
||||
"use-service-modules"
|
||||
"use-system-modules"
|
||||
"with-atomic-file-output"
|
||||
"with-atomic-file-replacement"
|
||||
"with-derivation-narinfo"
|
||||
"with-derivation-substitute"
|
||||
"with-directory-excursion"
|
||||
"with-error-handling"
|
||||
"with-monad"
|
||||
"with-mutex"
|
||||
"with-store"))
|
||||
|
||||
(defvar guix-devel-font-lock-keywords
|
||||
`((,(rx (or "#~" "#$" "#$@" "#+" "#+@")) .
|
||||
'guix-devel-gexp-symbol)
|
||||
(,(guix-guile-keyword-regexp (regexp-opt guix-devel-keywords))
|
||||
(1 'font-lock-keyword-face))
|
||||
(,(guix-guile-keyword-regexp "modify-phases")
|
||||
(1 'font-lock-keyword-face)
|
||||
(guix-devel-modify-phases-font-lock-matcher
|
||||
(guix-devel-modify-phases-font-lock-pre)
|
||||
nil
|
||||
(0 'guix-devel-modify-phases-keyword nil t))))
|
||||
"A list of `font-lock-keywords' for `guix-devel-mode'.")
|
||||
|
||||
|
||||
;;; Indentation
|
||||
|
||||
(defmacro guix-devel-scheme-indent (&rest rules)
|
||||
"Set `scheme-indent-function' according to RULES.
|
||||
Each rule should have a form (SYMBOL VALUE). See `put' for details."
|
||||
(declare (indent 0))
|
||||
`(progn
|
||||
,@(mapcar (lambda (rule)
|
||||
`(put ',(car rule) 'scheme-indent-function ,(cadr rule)))
|
||||
rules)))
|
||||
|
||||
(defun guix-devel-indent-package (state indent-point normal-indent)
|
||||
"Indentation rule for 'package' form."
|
||||
(let* ((package-eol (line-end-position))
|
||||
(count (if (and (ignore-errors (down-list) t)
|
||||
(< (point) package-eol)
|
||||
(looking-at "inherit\\>"))
|
||||
1
|
||||
0)))
|
||||
(lisp-indent-specform count state indent-point normal-indent)))
|
||||
|
||||
(defun guix-devel-indent-modify-phases-keyword (count)
|
||||
"Return indentation function for 'modify-phases' keywords."
|
||||
(lambda (state indent-point normal-indent)
|
||||
(when (ignore-errors
|
||||
(goto-char (nth 1 state)) ; start of keyword sexp
|
||||
(backward-up-list)
|
||||
(looking-at "(modify-phases\\>"))
|
||||
(lisp-indent-specform count state indent-point normal-indent))))
|
||||
|
||||
(defalias 'guix-devel-indent-modify-phases-keyword-1
|
||||
(guix-devel-indent-modify-phases-keyword 1))
|
||||
(defalias 'guix-devel-indent-modify-phases-keyword-2
|
||||
(guix-devel-indent-modify-phases-keyword 2))
|
||||
|
||||
(guix-devel-scheme-indent
|
||||
(bag 0)
|
||||
(build-system 0)
|
||||
(call-with-compressed-output-port 2)
|
||||
(call-with-container 1)
|
||||
(call-with-decompressed-port 2)
|
||||
(call-with-error-handling 0)
|
||||
(container-excursion 1)
|
||||
(emacs-batch-edit-file 1)
|
||||
(emacs-batch-eval 0)
|
||||
(emacs-substitute-sexps 1)
|
||||
(emacs-substitute-variables 1)
|
||||
(file-system 0)
|
||||
(graft 0)
|
||||
(manifest-entry 0)
|
||||
(manifest-pattern 0)
|
||||
(mbegin 1)
|
||||
(mlet 2)
|
||||
(mlet* 2)
|
||||
(modify-phases 1)
|
||||
(modify-services 1)
|
||||
(munless 1)
|
||||
(mwhen 1)
|
||||
(operating-system 0)
|
||||
(origin 0)
|
||||
(package 'guix-devel-indent-package)
|
||||
(run-with-state 1)
|
||||
(run-with-store 1)
|
||||
(signature-case 1)
|
||||
(substitute* 1)
|
||||
(substitute-keyword-arguments 1)
|
||||
(test-assertm 1)
|
||||
(with-atomic-file-output 1)
|
||||
(with-derivation-narinfo 1)
|
||||
(with-derivation-substitute 2)
|
||||
(with-directory-excursion 1)
|
||||
(with-error-handling 0)
|
||||
(with-monad 1)
|
||||
(with-mutex 1)
|
||||
(with-store 1)
|
||||
(wrap-program 1)
|
||||
|
||||
;; 'modify-phases' keywords:
|
||||
(replace 'guix-devel-indent-modify-phases-keyword-1)
|
||||
(add-after 'guix-devel-indent-modify-phases-keyword-2)
|
||||
(add-before 'guix-devel-indent-modify-phases-keyword-2))
|
||||
|
||||
|
||||
(defvar guix-devel-keys-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map (kbd "b") 'guix-devel-build-package-definition)
|
||||
(define-key map (kbd "s") 'guix-devel-build-package-source)
|
||||
(define-key map (kbd "l") 'guix-devel-lint-package)
|
||||
(define-key map (kbd "k") 'guix-devel-copy-module-as-kill)
|
||||
(define-key map (kbd "u") 'guix-devel-use-module)
|
||||
map)
|
||||
"Keymap with subkeys for `guix-devel-mode-map'.")
|
||||
|
||||
(defvar guix-devel-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map (kbd "C-c .") guix-devel-keys-map)
|
||||
map)
|
||||
"Keymap for `guix-devel-mode'.")
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode guix-devel-mode
|
||||
"Minor mode for `scheme-mode' buffers.
|
||||
|
||||
With a prefix argument ARG, enable the mode if ARG is positive,
|
||||
and disable it otherwise. If called from Lisp, enable the mode
|
||||
if ARG is omitted or nil.
|
||||
|
||||
When Guix Devel mode is enabled, it provides the following key
|
||||
bindings:
|
||||
|
||||
\\{guix-devel-mode-map}"
|
||||
:init-value nil
|
||||
:lighter " Guix"
|
||||
:keymap guix-devel-mode-map
|
||||
(if guix-devel-mode
|
||||
(progn
|
||||
(setq-local font-lock-multiline t)
|
||||
(font-lock-add-keywords nil guix-devel-font-lock-keywords))
|
||||
(setq-local font-lock-multiline nil)
|
||||
(font-lock-remove-keywords nil guix-devel-font-lock-keywords))
|
||||
(when font-lock-mode
|
||||
(font-lock-fontify-buffer)))
|
||||
|
||||
;;;###autoload
|
||||
(defun guix-devel-activate-mode-maybe ()
|
||||
"Activate `guix-devel-mode' depending on
|
||||
`guix-devel-activate-mode' variable."
|
||||
(when guix-devel-activate-mode
|
||||
(guix-devel-mode)))
|
||||
|
||||
|
||||
(defvar guix-devel-emacs-font-lock-keywords
|
||||
(eval-when-compile
|
||||
`((,(rx "(" (group "guix-devel-with-definition") symbol-end) . 1))))
|
||||
|
||||
(font-lock-add-keywords 'emacs-lisp-mode
|
||||
guix-devel-emacs-font-lock-keywords)
|
||||
|
||||
(provide 'guix-devel)
|
||||
|
||||
;;; guix-devel.el ends here
|
||||
@@ -1,103 +0,0 @@
|
||||
;;; guix-emacs.el --- Emacs packages installed with Guix
|
||||
|
||||
;; Copyright © 2014 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides auxiliary code for working with Emacs packages
|
||||
;; installed with Guix.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'guix-profiles)
|
||||
(require 'cl-lib)
|
||||
|
||||
(defcustom guix-emacs-activate-after-operation t
|
||||
"Activate Emacs packages after installing.
|
||||
If nil, do not load autoloads of the Emacs packages after
|
||||
they are successfully installed."
|
||||
:type 'boolean
|
||||
:group 'guix)
|
||||
|
||||
(defvar guix-emacs-autoloads nil
|
||||
"List of the last loaded Emacs autoloads.")
|
||||
|
||||
(defun guix-emacs-directory (&optional profile)
|
||||
"Return directory with Emacs packages installed in PROFILE.
|
||||
If PROFILE is nil, use `guix-user-profile'."
|
||||
(expand-file-name "share/emacs/site-lisp"
|
||||
(or profile guix-user-profile)))
|
||||
|
||||
(defun guix-emacs-find-autoloads-in-directory (directory)
|
||||
"Return list of Emacs 'autoloads' files in DIRECTORY."
|
||||
(directory-files directory 'full-name "-autoloads\\.el\\'" 'no-sort))
|
||||
|
||||
(defun guix-emacs-subdirs (directory)
|
||||
"Return list of DIRECTORY subdirectories."
|
||||
(cl-remove-if (lambda (file)
|
||||
(or (string-match-p (rx "/." string-end) file)
|
||||
(string-match-p (rx "/.." string-end) file)
|
||||
(not (file-directory-p file))))
|
||||
(directory-files directory 'full-name nil 'no-sort)))
|
||||
|
||||
(defun guix-emacs-find-autoloads (&optional profile)
|
||||
"Return list of autoloads of Emacs packages installed in PROFILE.
|
||||
If PROFILE is nil, use `guix-user-profile'.
|
||||
Return nil if there are no emacs packages installed in PROFILE."
|
||||
(let ((elisp-root-dir (guix-emacs-directory profile)))
|
||||
(if (file-directory-p elisp-root-dir)
|
||||
(let ((elisp-pkgs-dir (expand-file-name "guix.d" elisp-root-dir))
|
||||
(root-autoloads (guix-emacs-find-autoloads-in-directory
|
||||
elisp-root-dir)))
|
||||
(if (file-directory-p elisp-pkgs-dir)
|
||||
(let ((pkgs-autoloads
|
||||
(cl-mapcan #'guix-emacs-find-autoloads-in-directory
|
||||
(guix-emacs-subdirs elisp-pkgs-dir))))
|
||||
(append root-autoloads pkgs-autoloads))
|
||||
root-autoloads))
|
||||
(message "Directory '%s' does not exist." elisp-root-dir)
|
||||
nil)))
|
||||
|
||||
;;;###autoload
|
||||
(defun guix-emacs-load-autoloads (&optional all)
|
||||
"Load autoloads for Emacs packages installed in a user profile.
|
||||
Add autoloads directories to `load-path'.
|
||||
If ALL is nil, activate only those packages that were installed
|
||||
after the last activation, otherwise activate all Emacs packages
|
||||
installed in `guix-user-profile'."
|
||||
(interactive "P")
|
||||
(let* ((autoloads (guix-emacs-find-autoloads))
|
||||
(files (if all
|
||||
autoloads
|
||||
(cl-nset-difference autoloads guix-emacs-autoloads
|
||||
:test #'string=))))
|
||||
(dolist (file files)
|
||||
(cl-pushnew (file-name-directory file) load-path
|
||||
:test #'string=)
|
||||
(load file 'noerror))
|
||||
(setq guix-emacs-autoloads autoloads)))
|
||||
|
||||
(defun guix-emacs-load-autoloads-maybe ()
|
||||
"Load autoloads for Emacs packages if needed.
|
||||
See `guix-emacs-activate-after-operation' for details."
|
||||
(and guix-emacs-activate-after-operation
|
||||
(guix-emacs-load-autoloads)))
|
||||
|
||||
(provide 'guix-emacs)
|
||||
|
||||
;;; guix-emacs.el ends here
|
||||
@@ -1,88 +0,0 @@
|
||||
;;; guix-external.el --- External programs -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides auxiliary code for running external programs.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'guix-config)
|
||||
|
||||
(defgroup guix-external nil
|
||||
"Settings for external programs."
|
||||
:group 'guix)
|
||||
|
||||
(defcustom guix-guile-program guix-config-guile-program
|
||||
"Name of the 'guile' executable used for Guix REPL.
|
||||
May be either a string (the name of the executable) or a list of
|
||||
strings of the form:
|
||||
|
||||
(NAME . ARGS)
|
||||
|
||||
Where ARGS is a list of arguments to the guile program."
|
||||
:type 'string
|
||||
:group 'guix-external)
|
||||
|
||||
(defcustom guix-dot-program
|
||||
(if (file-name-absolute-p guix-config-dot-program)
|
||||
guix-config-dot-program
|
||||
(executable-find "dot"))
|
||||
"Name of the 'dot' executable."
|
||||
:type 'string
|
||||
:group 'guix-external)
|
||||
|
||||
(defcustom guix-dot-default-arguments
|
||||
'("-Tpng")
|
||||
"Default arguments for 'dot' program."
|
||||
:type '(repeat string)
|
||||
:group 'guix-external)
|
||||
|
||||
(defcustom guix-dot-file-name-function #'guix-png-file-name
|
||||
"Function used to define a file name of a temporary 'dot' file.
|
||||
The function is called without arguments."
|
||||
:type '(choice (function-item guix-png-file-name)
|
||||
(function :tag "Other function"))
|
||||
:group 'guix-external)
|
||||
|
||||
(defun guix-dot-arguments (output-file &rest args)
|
||||
"Return a list of dot arguments for writing a graph into OUTPUT-FILE.
|
||||
If ARGS is nil, use `guix-dot-default-arguments'."
|
||||
(or guix-dot-program
|
||||
(error (concat "Couldn't find 'dot'.\n"
|
||||
"Set guix-dot-program to a proper value")))
|
||||
(apply #'list
|
||||
guix-dot-program
|
||||
(concat "-o" output-file)
|
||||
(or args guix-dot-default-arguments)))
|
||||
|
||||
(defun guix-dot-file-name ()
|
||||
"Call `guix-dot-file-name-function'."
|
||||
(funcall guix-dot-file-name-function))
|
||||
|
||||
(defun guix-png-file-name ()
|
||||
"Return '.png' file name in the `temporary-file-directory'."
|
||||
(concat (make-temp-name
|
||||
(concat (file-name-as-directory temporary-file-directory)
|
||||
"guix-emacs-graph-"))
|
||||
".png"))
|
||||
|
||||
(provide 'guix-external)
|
||||
|
||||
;;; guix-external.el ends here
|
||||
@@ -1,114 +0,0 @@
|
||||
;;; guix-geiser.el --- Interacting with Geiser -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides functions to evaluate guile code using Geiser.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'geiser-mode)
|
||||
(require 'guix-guile)
|
||||
|
||||
(defun guix-geiser-repl ()
|
||||
"Return the current Geiser REPL."
|
||||
(or geiser-repl--repl
|
||||
(geiser-repl--repl/impl 'guile)
|
||||
(error "Geiser REPL not found")))
|
||||
|
||||
(defun guix-geiser-eval (str &optional repl)
|
||||
"Evaluate STR with guile expression using Geiser REPL.
|
||||
If REPL is nil, use the current Geiser REPL.
|
||||
Return a list of strings with result values of evaluation."
|
||||
(with-current-buffer (or repl (guix-geiser-repl))
|
||||
(let ((res (geiser-eval--send/wait `(:eval (:scm ,str)))))
|
||||
(if (geiser-eval--retort-error res)
|
||||
(error "Error in evaluating guile expression: %s"
|
||||
(geiser-eval--retort-output res))
|
||||
(cdr (assq 'result res))))))
|
||||
|
||||
(defun guix-geiser-eval-read (str &optional repl)
|
||||
"Evaluate STR with guile expression using Geiser REPL.
|
||||
Return elisp expression of the first result value of evaluation."
|
||||
;; Parsing scheme code with elisp `read' is probably not the best idea.
|
||||
(read (replace-regexp-in-string
|
||||
"#f\\|#<unspecified>" "nil"
|
||||
(replace-regexp-in-string
|
||||
"#t" "t" (car (guix-geiser-eval str repl))))))
|
||||
|
||||
(defun guix-repl-send (cmd &optional save-history)
|
||||
"Send CMD input string to the current REPL buffer.
|
||||
This is the same as `geiser-repl--send', but with SAVE-HISTORY
|
||||
argument. If SAVE-HISTORY is non-nil, save CMD in the REPL
|
||||
history."
|
||||
(when (and cmd (eq major-mode 'geiser-repl-mode))
|
||||
(geiser-repl--prepare-send)
|
||||
(goto-char (point-max))
|
||||
(comint-kill-input)
|
||||
(insert cmd)
|
||||
(let ((comint-input-filter (if save-history
|
||||
comint-input-filter
|
||||
'ignore)))
|
||||
(comint-send-input nil t))))
|
||||
|
||||
(defun guix-geiser-eval-in-repl (str &optional repl no-history no-display)
|
||||
"Switch to Geiser REPL and evaluate STR with guile expression there.
|
||||
If NO-HISTORY is non-nil, do not save STR in the REPL history.
|
||||
If NO-DISPLAY is non-nil, do not switch to the REPL buffer."
|
||||
(let ((repl (or repl (guix-geiser-repl))))
|
||||
(with-current-buffer repl
|
||||
;; XXX Since Geiser 0.8, `geiser-repl--send' has SAVE-HISTORY
|
||||
;; argument, so use this function eventually and remove
|
||||
;; `guix-repl-send'.
|
||||
(guix-repl-send str (not no-history)))
|
||||
(unless no-display
|
||||
(geiser-repl--switch-to-buffer repl))))
|
||||
|
||||
(defun guix-geiser-eval-in-repl-synchronously (str &optional repl
|
||||
no-history no-display)
|
||||
"Evaluate STR in Geiser REPL synchronously, i.e. wait until the
|
||||
REPL operation will be finished.
|
||||
See `guix-geiser-eval-in-repl' for the meaning of arguments."
|
||||
(let* ((repl (if repl (get-buffer repl) (guix-geiser-repl)))
|
||||
(running? nil)
|
||||
(filter (lambda (output)
|
||||
(setq running?
|
||||
(and (get-buffer-process repl)
|
||||
(not (guix-guile-prompt? output))))))
|
||||
(comint-output-filter-functions
|
||||
(cons filter comint-output-filter-functions)))
|
||||
(guix-geiser-eval-in-repl str repl no-history no-display)
|
||||
(while running?
|
||||
(sleep-for 0.1))))
|
||||
|
||||
(defun guix-geiser-call (proc &rest args)
|
||||
"Call (PROC ARGS ...) synchronously using the current Geiser REPL.
|
||||
PROC and ARGS should be strings."
|
||||
(guix-geiser-eval
|
||||
(apply #'guix-guile-make-call-expression proc args)))
|
||||
|
||||
(defun guix-geiser-call-in-repl (proc &rest args)
|
||||
"Call (PROC ARGS ...) in the current Geiser REPL.
|
||||
PROC and ARGS should be strings."
|
||||
(guix-geiser-eval-in-repl
|
||||
(apply #'guix-guile-make-call-expression proc args)))
|
||||
|
||||
(provide 'guix-geiser)
|
||||
|
||||
;;; guix-geiser.el ends here
|
||||
@@ -1,98 +0,0 @@
|
||||
;;; guix-guile.el --- Auxiliary tools for working with guile code -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides functions for parsing guile code, making guile
|
||||
;; expressions, etc.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'geiser-guile)
|
||||
|
||||
(defvar guix-guile-definition-regexp
|
||||
(rx bol "(define"
|
||||
(zero-or-one "*")
|
||||
(zero-or-one "-public")
|
||||
(one-or-more space)
|
||||
(zero-or-one "(")
|
||||
(group (one-or-more (or word (syntax symbol)))))
|
||||
"Regexp used to find the guile definition.")
|
||||
|
||||
(defun guix-guile-current-definition ()
|
||||
"Return string with name of the current top-level guile definition."
|
||||
(save-excursion
|
||||
(beginning-of-defun)
|
||||
(if (looking-at guix-guile-definition-regexp)
|
||||
(match-string-no-properties 1)
|
||||
(error "Couldn't find the current definition"))))
|
||||
|
||||
(defun guix-guile-current-module ()
|
||||
"Return a string with the current guile module.
|
||||
Return nil, if current buffer does not define a module."
|
||||
;; Modified version of `geiser-guile--get-module'.
|
||||
(save-excursion
|
||||
(geiser-syntax--pop-to-top)
|
||||
(when (or (re-search-backward geiser-guile--module-re nil t)
|
||||
(looking-at geiser-guile--library-re)
|
||||
(re-search-forward geiser-guile--module-re nil t))
|
||||
(match-string-no-properties 1))))
|
||||
|
||||
(defun guix-guile-boolean (arg)
|
||||
"Return a string with guile boolean value.
|
||||
Transform elisp ARG (nil or non-nil) to the guile boolean (#f or #t)."
|
||||
(concat "#" (prin1-to-string (if arg 't 'f))))
|
||||
|
||||
(defun guix-guile-keyword-regexp (keyword)
|
||||
"Return regexp to find guile KEYWORD."
|
||||
(format "(\\(%s\\)\\_>" keyword))
|
||||
|
||||
(defun guix-guile-make-call-expression (proc &rest args)
|
||||
"Return \"(PROC ARGS ...)\" string.
|
||||
PROC and ARGS should be strings."
|
||||
(format "(%s %s)"
|
||||
proc
|
||||
(mapconcat #'identity args " ")))
|
||||
|
||||
(defun guix-make-guile-expression (fun &rest args)
|
||||
"Return string containing a guile expression for calling FUN with ARGS."
|
||||
(format "(%S %s)" fun
|
||||
(mapconcat
|
||||
(lambda (arg)
|
||||
(cond
|
||||
((null arg) "'()")
|
||||
((or (eq arg t)
|
||||
;; An ugly hack to separate 'false' from nil.
|
||||
(equal arg 'f)
|
||||
(keywordp arg))
|
||||
(concat "#" (prin1-to-string arg t)))
|
||||
((or (symbolp arg) (listp arg))
|
||||
(concat "'" (prin1-to-string arg)))
|
||||
(t (prin1-to-string arg))))
|
||||
args
|
||||
" ")))
|
||||
|
||||
(defun guix-guile-prompt? (string)
|
||||
"Return non-nil, if STRING contains a Guile prompt."
|
||||
(or (string-match-p geiser-guile--prompt-regexp string)
|
||||
(string-match-p geiser-guile--debugger-prompt-regexp string)))
|
||||
|
||||
(provide 'guix-guile)
|
||||
|
||||
;;; guix-guile.el ends here
|
||||
@@ -1,108 +0,0 @@
|
||||
;;; guix-help-vars.el --- Variables related to --help output
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides regular expressions to parse various "guix
|
||||
;; ... --help" outputs and lists of non-receivable items (system types,
|
||||
;; hash formats, etc.).
|
||||
|
||||
;;; Code:
|
||||
|
||||
|
||||
;;; Regexps for parsing "guix ..." outputs
|
||||
|
||||
(defvar guix-help-parse-option-regexp
|
||||
(rx bol " "
|
||||
(zero-or-one (group "-" (not (any "- ")))
|
||||
",")
|
||||
(one-or-more " ")
|
||||
(group "--" (one-or-more (or wordchar "-")))
|
||||
(group (zero-or-one "[")
|
||||
(zero-or-one "="))
|
||||
(zero-or-more (not space))
|
||||
(one-or-more space)
|
||||
(group (one-or-more any)))
|
||||
"Common regexp used to find command options.")
|
||||
|
||||
(defvar guix-help-parse-command-regexp
|
||||
(rx bol " "
|
||||
(group wordchar (one-or-more (or wordchar "-"))))
|
||||
"Regexp used to find guix commands.
|
||||
'Command' means any option not prefixed with '-'. For example,
|
||||
guix subcommand, system action, importer, etc.")
|
||||
|
||||
(defvar guix-help-parse-long-option-regexp
|
||||
(rx (or " " ", ")
|
||||
(group "--" (one-or-more (or wordchar "-"))
|
||||
(zero-or-one "=")))
|
||||
"Regexp used to find long options.")
|
||||
|
||||
(defvar guix-help-parse-short-option-regexp
|
||||
(rx bol (one-or-more blank)
|
||||
"-" (group (not (any "- "))))
|
||||
"Regexp used to find short options.")
|
||||
|
||||
(defvar guix-help-parse-package-regexp
|
||||
(rx bol (group (one-or-more (not blank))))
|
||||
"Regexp used to find names of the packages.")
|
||||
|
||||
(defvar guix-help-parse-list-regexp
|
||||
(rx bol (zero-or-more blank) "- "
|
||||
(group (one-or-more (or wordchar "-"))))
|
||||
"Regexp used to find various lists (lint checkers, graph types).")
|
||||
|
||||
(defvar guix-help-parse-regexp-group 1
|
||||
"Parenthesized expression of regexps used to find commands and
|
||||
options.")
|
||||
|
||||
|
||||
;;; Non-receivable lists of system types, hash formats, etc.
|
||||
|
||||
(defvar guix-help-system-types
|
||||
'("x86_64-linux" "i686-linux" "armhf-linux" "mips64el-linux")
|
||||
"List of supported systems.")
|
||||
|
||||
(defvar guix-help-source-types
|
||||
'("package" "all" "transitive")
|
||||
"List of supported sources types.")
|
||||
|
||||
(defvar guix-help-hash-formats
|
||||
'("nix-base32" "base32" "base16" "hex" "hexadecimal")
|
||||
"List of supported hash formats.")
|
||||
|
||||
(defvar guix-help-refresh-subsets
|
||||
'("core" "non-core")
|
||||
"List of supported 'refresh' subsets.")
|
||||
|
||||
(defvar guix-help-key-policies
|
||||
'("interactive" "always" "never")
|
||||
"List of supported key download policies.")
|
||||
|
||||
(defvar guix-help-verify-options
|
||||
'("repair" "contents")
|
||||
"List of supported 'verify' options")
|
||||
|
||||
(defvar guix-help-elpa-archives
|
||||
'("gnu" "melpa" "melpa-stable")
|
||||
"List of supported ELPA archives.")
|
||||
|
||||
(provide 'guix-help-vars)
|
||||
|
||||
;;; guix-help-vars.el ends here
|
||||
@@ -1,65 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This is an auxiliary file for the Emacs UI. It is used to add Guix
|
||||
;; directories to path variables and to load the main code.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-modules (ice-9 regex)
|
||||
(srfi srfi-26))
|
||||
|
||||
(define %guix-dir)
|
||||
|
||||
;; The code is taken from ‘guix’ executable script
|
||||
(define (set-paths!)
|
||||
(define-syntax-rule (push! elt v) (set! v (cons elt v)))
|
||||
|
||||
(define config-lookup
|
||||
(let ((config '(("prefix" . "@prefix@")
|
||||
("guilemoduledir" . "@guilemoduledir@")))
|
||||
(var-ref-regexp (make-regexp "\\$\\{([a-z]+)\\}")))
|
||||
(define (expand-var-ref match)
|
||||
(lookup (match:substring match 1)))
|
||||
(define (expand str)
|
||||
(regexp-substitute/global #f var-ref-regexp str
|
||||
'pre expand-var-ref 'post))
|
||||
(define (lookup name)
|
||||
(expand (assoc-ref config name)))
|
||||
lookup))
|
||||
|
||||
(let ((module-dir (config-lookup "guilemoduledir"))
|
||||
(updates-dir (and=> (or (getenv "XDG_CONFIG_HOME")
|
||||
(and=> (getenv "HOME")
|
||||
(cut string-append <> "/.config")))
|
||||
(cut string-append <> "/guix/latest"))))
|
||||
(push! module-dir %load-path)
|
||||
(push! module-dir %load-compiled-path)
|
||||
(if (and updates-dir (file-exists? updates-dir))
|
||||
(begin
|
||||
(set! %guix-dir updates-dir)
|
||||
(push! updates-dir %load-path)
|
||||
(push! updates-dir %load-compiled-path))
|
||||
(set! %guix-dir module-dir))))
|
||||
|
||||
(set-paths!)
|
||||
|
||||
(load-from-path "guix-main")
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
;;; guix-history.el --- History of buffer information
|
||||
|
||||
;; Copyright © 2014 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides support for history of buffers similar to the
|
||||
;; history of a `help-mode' buffer.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'cl-macs)
|
||||
|
||||
(defvar-local guix-history-stack-item nil
|
||||
"Current item of the history.
|
||||
A list of the form (FUNCTION [ARGS ...]).
|
||||
The item is used by calling (apply FUNCTION ARGS).")
|
||||
(put 'guix-history-stack-item 'permanent-local t)
|
||||
|
||||
(defvar-local guix-history-back-stack nil
|
||||
"Stack (list) of visited items.
|
||||
Each element of the list has a form of `guix-history-stack-item'.")
|
||||
(put 'guix-history-back-stack 'permanent-local t)
|
||||
|
||||
(defvar-local guix-history-forward-stack nil
|
||||
"Stack (list) of items visited with `guix-history-back'.
|
||||
Each element of the list has a form of `guix-history-stack-item'.")
|
||||
(put 'guix-history-forward-stack 'permanent-local t)
|
||||
|
||||
(defvar guix-history-size 0
|
||||
"Maximum number of items saved in history.
|
||||
If 0, the history is disabled.")
|
||||
|
||||
(defun guix-history-add (item)
|
||||
"Add ITEM to history."
|
||||
(and guix-history-stack-item
|
||||
(push guix-history-stack-item guix-history-back-stack))
|
||||
(setq guix-history-forward-stack nil
|
||||
guix-history-stack-item item)
|
||||
(when (>= (length guix-history-back-stack)
|
||||
guix-history-size)
|
||||
(setq guix-history-back-stack
|
||||
(cl-loop for elt in guix-history-back-stack
|
||||
for i from 1 to guix-history-size
|
||||
collect elt))))
|
||||
|
||||
(defun guix-history-replace (item)
|
||||
"Replace current item in history with ITEM."
|
||||
(setq guix-history-stack-item item))
|
||||
|
||||
(defun guix-history-goto (item)
|
||||
"Go to the ITEM of history.
|
||||
ITEM should have the form of `guix-history-stack-item'."
|
||||
(or (listp item)
|
||||
(error "Wrong value of history element"))
|
||||
(setq guix-history-stack-item item)
|
||||
(apply (car item) (cdr item)))
|
||||
|
||||
(defun guix-history-back ()
|
||||
"Go back to the previous element of history in the current buffer."
|
||||
(interactive)
|
||||
(or guix-history-back-stack
|
||||
(user-error "No previous element in history"))
|
||||
(push guix-history-stack-item guix-history-forward-stack)
|
||||
(guix-history-goto (pop guix-history-back-stack)))
|
||||
|
||||
(defun guix-history-forward ()
|
||||
"Go forward to the next element of history in the current buffer."
|
||||
(interactive)
|
||||
(or guix-history-forward-stack
|
||||
(user-error "No next element in history"))
|
||||
(push guix-history-stack-item guix-history-back-stack)
|
||||
(guix-history-goto (pop guix-history-forward-stack)))
|
||||
|
||||
(provide 'guix-history)
|
||||
|
||||
;;; guix-history.el ends here
|
||||
@@ -1,886 +0,0 @@
|
||||
;;; guix-info.el --- Info buffers for displaying entries -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
|
||||
;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides a help-like buffer for displaying information
|
||||
;; about Guix packages and generations.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'guix-base)
|
||||
(require 'guix-utils)
|
||||
|
||||
(defgroup guix-info nil
|
||||
"General settings for info buffers."
|
||||
:prefix "guix-info-"
|
||||
:group 'guix)
|
||||
|
||||
(defgroup guix-info-faces nil
|
||||
"Faces for info buffers."
|
||||
:group 'guix-info
|
||||
:group 'guix-faces)
|
||||
|
||||
(defface guix-info-param-title
|
||||
'((t :inherit font-lock-type-face))
|
||||
"Face used for titles of parameters."
|
||||
:group 'guix-info-faces)
|
||||
|
||||
(defface guix-info-file-path
|
||||
'((t :inherit link))
|
||||
"Face used for file paths."
|
||||
:group 'guix-info-faces)
|
||||
|
||||
(defface guix-info-url
|
||||
'((t :inherit link))
|
||||
"Face used for URLs."
|
||||
:group 'guix-info-faces)
|
||||
|
||||
(defface guix-info-time
|
||||
'((t :inherit font-lock-constant-face))
|
||||
"Face used for timestamps."
|
||||
:group 'guix-info-faces)
|
||||
|
||||
(defface guix-info-action-button
|
||||
'((((type x w32 ns) (class color))
|
||||
:box (:line-width 2 :style released-button)
|
||||
:background "lightgrey" :foreground "black")
|
||||
(t :inherit button))
|
||||
"Face used for action buttons."
|
||||
:group 'guix-info-faces)
|
||||
|
||||
(defface guix-info-action-button-mouse
|
||||
'((((type x w32 ns) (class color))
|
||||
:box (:line-width 2 :style released-button)
|
||||
:background "grey90" :foreground "black")
|
||||
(t :inherit highlight))
|
||||
"Mouse face used for action buttons."
|
||||
:group 'guix-info-faces)
|
||||
|
||||
(defcustom guix-info-ignore-empty-vals nil
|
||||
"If non-nil, do not display parameters with nil values."
|
||||
:type 'boolean
|
||||
:group 'guix-info)
|
||||
|
||||
(defvar guix-info-param-title-format "%-18s: "
|
||||
"String used to format a title of a parameter.
|
||||
It should be a '%s'-sequence. After inserting a title formatted
|
||||
with this string, a value of the parameter is inserted.
|
||||
This string is used by `guix-info-insert-title-default'.")
|
||||
|
||||
(defvar guix-info-multiline-prefix (make-string 20 ?\s)
|
||||
"String used to format multi-line parameter values.
|
||||
If a value occupies more than one line, this string is inserted
|
||||
in the beginning of each line after the first one.
|
||||
This string is used by `guix-info-insert-val-default'.")
|
||||
|
||||
(defvar guix-info-indent 2
|
||||
"Number of spaces used to indent various parts of inserted text.")
|
||||
|
||||
(defvar guix-info-fill-column 60
|
||||
"Column used for filling (word wrapping) parameters with long lines.
|
||||
If a value is not multi-line and it occupies more than this
|
||||
number of characters, it will be split into several lines.")
|
||||
|
||||
(defvar guix-info-delimiter "\n\f\n"
|
||||
"String used to separate entries.")
|
||||
|
||||
(defvar guix-info-insert-methods
|
||||
'((package
|
||||
(name guix-package-info-name)
|
||||
(version guix-package-info-version)
|
||||
(license guix-package-info-license)
|
||||
(synopsis guix-package-info-synopsis)
|
||||
(description guix-package-info-insert-description
|
||||
guix-info-insert-title-simple)
|
||||
(outputs guix-package-info-insert-outputs
|
||||
guix-info-insert-title-simple)
|
||||
(source guix-package-info-insert-source
|
||||
guix-info-insert-title-simple)
|
||||
(home-url guix-info-insert-url)
|
||||
(inputs guix-package-info-insert-inputs)
|
||||
(native-inputs guix-package-info-insert-native-inputs)
|
||||
(propagated-inputs guix-package-info-insert-propagated-inputs)
|
||||
(location guix-package-info-insert-location))
|
||||
(installed
|
||||
(path guix-package-info-insert-output-path
|
||||
guix-info-insert-title-simple)
|
||||
(dependencies guix-package-info-insert-output-dependencies
|
||||
guix-info-insert-title-simple))
|
||||
(output
|
||||
(name guix-package-info-name)
|
||||
(version guix-output-info-insert-version)
|
||||
(output guix-output-info-insert-output)
|
||||
(source guix-package-info-insert-source
|
||||
guix-info-insert-title-simple)
|
||||
(path guix-package-info-insert-output-path
|
||||
guix-info-insert-title-simple)
|
||||
(dependencies guix-package-info-insert-output-dependencies
|
||||
guix-info-insert-title-simple)
|
||||
(license guix-package-info-license)
|
||||
(synopsis guix-package-info-synopsis)
|
||||
(description guix-package-info-insert-description
|
||||
guix-info-insert-title-simple)
|
||||
(home-url guix-info-insert-url)
|
||||
(inputs guix-package-info-insert-inputs)
|
||||
(native-inputs guix-package-info-insert-native-inputs)
|
||||
(propagated-inputs guix-package-info-insert-propagated-inputs)
|
||||
(location guix-package-info-insert-location))
|
||||
(generation
|
||||
(number guix-generation-info-insert-number)
|
||||
(current guix-generation-info-insert-current)
|
||||
(path guix-info-insert-file-path)
|
||||
(time guix-info-insert-time)))
|
||||
"Methods for inserting parameter values.
|
||||
Each element of the list should have a form:
|
||||
|
||||
(ENTRY-TYPE . ((PARAM INSERT-VALUE [INSERT-TITLE]) ...))
|
||||
|
||||
INSERT-VALUE may be either nil, a face name or a function. If it
|
||||
is nil or a face, `guix-info-insert-val-default' function is
|
||||
called with parameter value and INSERT-VALUE as arguments. If it
|
||||
is a function, this function is called with parameter value and
|
||||
entry info (alist of parameters and their values) as arguments.
|
||||
|
||||
INSERT-TITLE may be either nil, a face name or a function. If it
|
||||
is nil or a face, `guix-info-insert-title-default' function is
|
||||
called with parameter title and INSERT-TITLE as arguments. If it
|
||||
is a function, this function is called with parameter title as
|
||||
argument.")
|
||||
|
||||
(defvar guix-info-displayed-params
|
||||
'((package name version synopsis outputs source location home-url
|
||||
license inputs native-inputs propagated-inputs description)
|
||||
(output name version output synopsis source path dependencies location
|
||||
home-url license inputs native-inputs propagated-inputs
|
||||
description)
|
||||
(installed path dependencies)
|
||||
(generation number prev-number current time path))
|
||||
"List of displayed entry parameters.
|
||||
Each element of the list should have a form:
|
||||
|
||||
(ENTRY-TYPE . (PARAM ...))
|
||||
|
||||
The order of displayed parameters is the same as in this list.")
|
||||
|
||||
(defun guix-info-get-insert-methods (entry-type param)
|
||||
"Return list of insert methods for parameter PARAM of ENTRY-TYPE.
|
||||
See `guix-info-insert-methods' for details."
|
||||
(guix-assq-value guix-info-insert-methods
|
||||
entry-type param))
|
||||
|
||||
(defun guix-info-get-displayed-params (entry-type)
|
||||
"Return parameters of ENTRY-TYPE that should be displayed."
|
||||
(guix-assq-value guix-info-displayed-params
|
||||
entry-type))
|
||||
|
||||
(defun guix-info-get-indent (&optional level)
|
||||
"Return `guix-info-indent' \"multiplied\" by LEVEL spaces.
|
||||
LEVEL is 1 by default."
|
||||
(make-string (* guix-info-indent (or level 1)) ?\s))
|
||||
|
||||
(defun guix-info-insert-indent (&optional level)
|
||||
"Insert `guix-info-indent' spaces LEVEL times (1 by default)."
|
||||
(insert (guix-info-get-indent level)))
|
||||
|
||||
(defun guix-info-insert-entries (entries entry-type)
|
||||
"Display ENTRIES of ENTRY-TYPE in the current info buffer.
|
||||
ENTRIES should have a form of `guix-entries'."
|
||||
(guix-mapinsert (lambda (entry)
|
||||
(guix-info-insert-entry entry entry-type))
|
||||
entries
|
||||
guix-info-delimiter))
|
||||
|
||||
(defun guix-info-insert-entry-default (entry entry-type
|
||||
&optional indent-level)
|
||||
"Insert ENTRY of ENTRY-TYPE into the current info buffer.
|
||||
If INDENT-LEVEL is non-nil, indent displayed information by this
|
||||
number of `guix-info-indent' spaces."
|
||||
(let ((region-beg (point)))
|
||||
(mapc (lambda (param)
|
||||
(guix-info-insert-param param entry entry-type))
|
||||
(guix-info-get-displayed-params entry-type))
|
||||
(when indent-level
|
||||
(indent-rigidly region-beg (point)
|
||||
(* indent-level guix-info-indent)))))
|
||||
|
||||
(defun guix-info-insert-entry (entry entry-type &optional indent-level)
|
||||
"Insert ENTRY of ENTRY-TYPE into the current info buffer.
|
||||
Use `guix-info-insert-ENTRY-TYPE-function' or
|
||||
`guix-info-insert-entry-default' if it is nil."
|
||||
(let* ((var (intern (concat "guix-info-insert-"
|
||||
(symbol-name entry-type)
|
||||
"-function")))
|
||||
(fun (symbol-value var)))
|
||||
(if (functionp fun)
|
||||
(funcall fun entry)
|
||||
(guix-info-insert-entry-default entry entry-type indent-level))))
|
||||
|
||||
(defun guix-info-insert-param (param entry entry-type)
|
||||
"Insert title and value of a PARAM at point.
|
||||
ENTRY is alist with parameters and their values.
|
||||
ENTRY-TYPE is a type of ENTRY."
|
||||
(let ((val (guix-assq-value entry param)))
|
||||
(unless (and guix-info-ignore-empty-vals (null val))
|
||||
(let* ((title (guix-get-param-title entry-type param))
|
||||
(insert-methods (guix-info-get-insert-methods entry-type param))
|
||||
(val-method (car insert-methods))
|
||||
(title-method (cadr insert-methods)))
|
||||
(guix-info-method-funcall title title-method
|
||||
#'guix-info-insert-title-default)
|
||||
(guix-info-method-funcall val val-method
|
||||
#'guix-info-insert-val-default
|
||||
entry)
|
||||
(insert "\n")))))
|
||||
|
||||
(defun guix-info-method-funcall (val method default-fun &rest args)
|
||||
"Call METHOD or DEFAULT-FUN.
|
||||
|
||||
If METHOD is a function and VAL is non-nil, call this
|
||||
function by applying it to VAL and ARGS.
|
||||
|
||||
If METHOD is a face, propertize inserted VAL with this face."
|
||||
(cond ((or (null method)
|
||||
(facep method))
|
||||
(funcall default-fun val method))
|
||||
((functionp method)
|
||||
(apply method val args))
|
||||
(t (error "Unknown method '%S'" method))))
|
||||
|
||||
(defun guix-info-insert-title-default (title &optional face format)
|
||||
"Insert TITLE formatted with `guix-info-param-title-format' at point."
|
||||
(guix-format-insert title
|
||||
(or face 'guix-info-param-title)
|
||||
(or format guix-info-param-title-format)))
|
||||
|
||||
(defun guix-info-insert-title-simple (title &optional face)
|
||||
"Insert TITLE at point."
|
||||
(guix-info-insert-title-default title face "%s:"))
|
||||
|
||||
(defun guix-info-insert-val-default (val &optional face)
|
||||
"Format and insert parameter value VAL at point.
|
||||
|
||||
This function is intended to be called after
|
||||
`guix-info-insert-title-default'.
|
||||
|
||||
If VAL is a one-line string longer than `guix-info-fill-column',
|
||||
split it into several short lines. See also
|
||||
`guix-info-multiline-prefix'.
|
||||
|
||||
If FACE is non-nil, propertize inserted line(s) with this FACE."
|
||||
(guix-split-insert val face
|
||||
guix-info-fill-column
|
||||
(concat "\n" guix-info-multiline-prefix)))
|
||||
|
||||
(defun guix-info-insert-val-simple (val &optional face-or-fun)
|
||||
"Format and insert parameter value VAL at point.
|
||||
|
||||
This function is intended to be called after
|
||||
`guix-info-insert-title-simple'.
|
||||
|
||||
If VAL is a one-line string longer than `guix-info-fill-column',
|
||||
split it into several short lines and indent each line with
|
||||
`guix-info-indent' spaces.
|
||||
|
||||
If FACE-OR-FUN is a face, propertize inserted line(s) with this FACE.
|
||||
|
||||
If FACE-OR-FUN is a function, call it with VAL as argument. If
|
||||
VAL is a list, call the function on each element of this list."
|
||||
(if (null val)
|
||||
(progn (guix-info-insert-indent)
|
||||
(guix-format-insert nil))
|
||||
(let ((prefix (concat "\n" (guix-info-get-indent))))
|
||||
(insert prefix)
|
||||
(if (functionp face-or-fun)
|
||||
(guix-mapinsert face-or-fun
|
||||
(if (listp val) val (list val))
|
||||
prefix)
|
||||
(guix-split-insert val face-or-fun
|
||||
guix-info-fill-column prefix)))))
|
||||
|
||||
(defun guix-info-insert-time (seconds &optional _)
|
||||
"Insert formatted time string using SECONDS at point."
|
||||
(guix-info-insert-val-default (guix-get-time-string seconds)
|
||||
'guix-info-time))
|
||||
|
||||
|
||||
;;; Buttons
|
||||
|
||||
(defvar guix-info-button-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(set-keymap-parent map button-map)
|
||||
(define-key map (kbd "c") 'guix-info-button-copy-label)
|
||||
map)
|
||||
"Keymap for buttons in info buffers.")
|
||||
|
||||
(define-button-type 'guix
|
||||
'keymap guix-info-button-map
|
||||
'follow-link t)
|
||||
|
||||
(define-button-type 'guix-action
|
||||
:supertype 'guix
|
||||
'face 'guix-info-action-button
|
||||
'mouse-face 'guix-info-action-button-mouse)
|
||||
|
||||
(define-button-type 'guix-file
|
||||
:supertype 'guix
|
||||
'face 'guix-info-file-path
|
||||
'help-echo "Find file"
|
||||
'action (lambda (btn)
|
||||
(guix-find-file (button-label btn))))
|
||||
|
||||
(define-button-type 'guix-url
|
||||
:supertype 'guix
|
||||
'face 'guix-info-url
|
||||
'help-echo "Browse URL"
|
||||
'action (lambda (btn)
|
||||
(browse-url (button-label btn))))
|
||||
|
||||
(define-button-type 'guix-package-location
|
||||
:supertype 'guix
|
||||
'face 'guix-package-info-location
|
||||
'help-echo "Find location of this package"
|
||||
'action (lambda (btn)
|
||||
(guix-find-location (button-label btn))))
|
||||
|
||||
(define-button-type 'guix-package-name
|
||||
:supertype 'guix
|
||||
'face 'guix-package-info-name-button
|
||||
'help-echo "Describe this package"
|
||||
'action (lambda (btn)
|
||||
(guix-get-show-entries guix-profile 'info guix-package-info-type
|
||||
'name (button-label btn))))
|
||||
|
||||
(defun guix-info-button-copy-label (&optional pos)
|
||||
"Copy a label of the button at POS into kill ring.
|
||||
If POS is nil, use the current point position."
|
||||
(interactive)
|
||||
(let ((button (button-at (or pos (point)))))
|
||||
(when button
|
||||
(kill-new (button-label button)))))
|
||||
|
||||
(defun guix-info-insert-action-button (label action &optional message
|
||||
&rest properties)
|
||||
"Make action button with LABEL and insert it at point.
|
||||
ACTION is a function called when the button is pressed. It
|
||||
should accept button as the argument.
|
||||
MESSAGE is a button message.
|
||||
See `insert-text-button' for the meaning of PROPERTIES."
|
||||
(apply #'guix-insert-button
|
||||
label 'guix-action
|
||||
'action action
|
||||
'help-echo message
|
||||
properties))
|
||||
|
||||
(defun guix-info-insert-file-path (path &optional _)
|
||||
"Make button from file PATH and insert it at point."
|
||||
(guix-insert-button path 'guix-file))
|
||||
|
||||
(defun guix-info-insert-url (url &optional _)
|
||||
"Make button from URL and insert it at point."
|
||||
(guix-insert-button url 'guix-url))
|
||||
|
||||
|
||||
(defvar guix-info-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(set-keymap-parent
|
||||
map (make-composed-keymap (list guix-root-map button-buffer-map)
|
||||
special-mode-map))
|
||||
map)
|
||||
"Parent keymap for info buffers.")
|
||||
|
||||
(define-derived-mode guix-info-mode special-mode "Guix-Info"
|
||||
"Parent mode for displaying information in info buffers.")
|
||||
|
||||
|
||||
;;; Displaying packages
|
||||
|
||||
(guix-define-buffer-type info package
|
||||
:required (id installed non-unique))
|
||||
|
||||
(defface guix-package-info-heading
|
||||
'((((type tty pc) (class color)) :weight bold)
|
||||
(t :height 1.6 :weight bold :inherit variable-pitch))
|
||||
"Face for package name and version headings."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-name
|
||||
'((t :inherit font-lock-keyword-face))
|
||||
"Face used for a name of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-name-button
|
||||
'((t :inherit button))
|
||||
"Face used for a full name that can be used to describe a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-version
|
||||
'((t :inherit font-lock-builtin-face))
|
||||
"Face used for a version of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-synopsis
|
||||
'((((type tty pc) (class color)) :weight bold)
|
||||
(t :height 1.1 :weight bold :inherit variable-pitch))
|
||||
"Face used for a synopsis of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-description
|
||||
'((t))
|
||||
"Face used for a description of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-license
|
||||
'((t :inherit font-lock-string-face))
|
||||
"Face used for a license of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-location
|
||||
'((t :inherit link))
|
||||
"Face used for a location of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-installed-outputs
|
||||
'((default :weight bold)
|
||||
(((class color) (min-colors 88) (background light))
|
||||
:foreground "ForestGreen")
|
||||
(((class color) (min-colors 88) (background dark))
|
||||
:foreground "PaleGreen")
|
||||
(((class color) (min-colors 8))
|
||||
:foreground "green")
|
||||
(t :underline t))
|
||||
"Face used for installed outputs of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-uninstalled-outputs
|
||||
'((t :weight bold))
|
||||
"Face used for uninstalled outputs of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defface guix-package-info-obsolete
|
||||
'((t :inherit error))
|
||||
"Face used if a package is obsolete."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defvar guix-info-insert-package-function
|
||||
#'guix-package-info-insert-with-heading
|
||||
"Function used to insert a package information.
|
||||
It is called with a single argument - alist of package parameters.
|
||||
If nil, insert package in a default way.")
|
||||
|
||||
(defvar guix-package-info-heading-params '(synopsis description)
|
||||
"List of parameters displayed in a heading along with name and version.")
|
||||
|
||||
(defcustom guix-package-info-fill-heading t
|
||||
"If nil, insert heading parameters in a raw form, without
|
||||
filling them to fit the window."
|
||||
:type 'boolean
|
||||
:group 'guix-package-info)
|
||||
|
||||
(defun guix-package-info-insert-heading (entry)
|
||||
"Insert the heading for package ENTRY.
|
||||
Show package name, version, and `guix-package-info-heading-params'."
|
||||
(guix-format-insert (concat (guix-assq-value entry 'name) " "
|
||||
(guix-assq-value entry 'version))
|
||||
'guix-package-info-heading)
|
||||
(insert "\n\n")
|
||||
(mapc (lambda (param)
|
||||
(let ((val (guix-assq-value entry param))
|
||||
(face (guix-get-symbol (symbol-name param)
|
||||
'info 'package)))
|
||||
(when val
|
||||
(let* ((col (min (window-width) fill-column))
|
||||
(val (if guix-package-info-fill-heading
|
||||
(guix-get-filled-string val col)
|
||||
val)))
|
||||
(guix-format-insert val (and (facep face) face))
|
||||
(insert "\n\n")))))
|
||||
guix-package-info-heading-params))
|
||||
|
||||
(defun guix-package-info-insert-with-heading (entry)
|
||||
"Insert package ENTRY with its heading at point."
|
||||
(guix-package-info-insert-heading entry)
|
||||
(mapc (lambda (param)
|
||||
(unless (or (memq param '(name version))
|
||||
(memq param guix-package-info-heading-params))
|
||||
(guix-info-insert-param param entry 'package)))
|
||||
(guix-info-get-displayed-params 'package)))
|
||||
|
||||
(defun guix-package-info-insert-description (desc &optional _)
|
||||
"Insert description DESC at point."
|
||||
(guix-info-insert-val-simple desc 'guix-package-info-description))
|
||||
|
||||
(defun guix-package-info-insert-location (location &optional _)
|
||||
"Make button from file LOCATION and insert it at point."
|
||||
(guix-insert-button location 'guix-package-location))
|
||||
|
||||
(defmacro guix-package-info-define-insert-inputs (&optional type)
|
||||
"Define a face and a function for inserting package inputs.
|
||||
TYPE is a type of inputs.
|
||||
Function name is `guix-package-info-insert-TYPE-inputs'.
|
||||
Face name is `guix-package-info-TYPE-inputs'."
|
||||
(let* ((type-str (symbol-name type))
|
||||
(type-name (and type (concat type-str "-")))
|
||||
(type-desc (and type (concat type-str " ")))
|
||||
(face (intern (concat "guix-package-info-" type-name "inputs")))
|
||||
(btn (intern (concat "guix-package-" type-name "input")))
|
||||
(fun (intern (concat "guix-package-info-insert-" type-name "inputs"))))
|
||||
`(progn
|
||||
(defface ,face
|
||||
'((t :inherit guix-package-info-name-button))
|
||||
,(concat "Face used for " type-desc "inputs of a package.")
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(define-button-type ',btn
|
||||
:supertype 'guix-package-name
|
||||
'face ',face)
|
||||
|
||||
(defun ,fun (inputs &optional _)
|
||||
,(concat "Make buttons from " type-desc "INPUTS and insert them at point.")
|
||||
(guix-package-info-insert-full-names inputs ',btn)))))
|
||||
|
||||
(guix-package-info-define-insert-inputs)
|
||||
(guix-package-info-define-insert-inputs native)
|
||||
(guix-package-info-define-insert-inputs propagated)
|
||||
|
||||
(defun guix-package-info-insert-full-names (names button-type)
|
||||
"Make BUTTON-TYPE buttons from package NAMES and insert them at point.
|
||||
NAMES is a list of strings."
|
||||
(if names
|
||||
(guix-info-insert-val-default
|
||||
(with-temp-buffer
|
||||
(guix-mapinsert (lambda (name)
|
||||
(guix-insert-button name button-type))
|
||||
names
|
||||
guix-list-separator)
|
||||
(buffer-substring (point-min) (point-max))))
|
||||
(guix-format-insert nil)))
|
||||
|
||||
|
||||
;;; Inserting outputs and installed parameters
|
||||
|
||||
(defvar guix-package-info-output-format "%-10s"
|
||||
"String used to format output names of the packages.
|
||||
It should be a '%s'-sequence. After inserting an output name
|
||||
formatted with this string, an action button is inserted.")
|
||||
|
||||
(defvar guix-package-info-obsolete-string "(This package is obsolete)"
|
||||
"String used if a package is obsolete.")
|
||||
|
||||
(defvar guix-info-insert-installed-function nil
|
||||
"Function used to insert an installed information.
|
||||
It is called with a single argument - alist of installed
|
||||
parameters (`output', `path', `dependencies').
|
||||
If nil, insert installed info in a default way.")
|
||||
|
||||
(defun guix-package-info-insert-outputs (outputs entry)
|
||||
"Insert OUTPUTS from package ENTRY at point."
|
||||
(and (guix-assq-value entry 'obsolete)
|
||||
(guix-package-info-insert-obsolete-text))
|
||||
(and (guix-assq-value entry 'non-unique)
|
||||
(guix-assq-value entry 'installed)
|
||||
(guix-package-info-insert-non-unique-text
|
||||
(guix-get-full-name entry)))
|
||||
(insert "\n")
|
||||
(mapc (lambda (output)
|
||||
(guix-package-info-insert-output output entry))
|
||||
outputs))
|
||||
|
||||
(defun guix-package-info-insert-obsolete-text ()
|
||||
"Insert a message about obsolete package at point."
|
||||
(guix-info-insert-indent)
|
||||
(guix-format-insert guix-package-info-obsolete-string
|
||||
'guix-package-info-obsolete))
|
||||
|
||||
(defun guix-package-info-insert-non-unique-text (full-name)
|
||||
"Insert a message about non-unique package with FULL-NAME at point."
|
||||
(insert "\n")
|
||||
(guix-info-insert-indent)
|
||||
(insert "Installed outputs are displayed for a non-unique ")
|
||||
(guix-insert-button full-name 'guix-package-name)
|
||||
(insert " package."))
|
||||
|
||||
(defun guix-package-info-insert-output (output entry)
|
||||
"Insert OUTPUT at point.
|
||||
Make some fancy text with buttons and additional stuff if the
|
||||
current OUTPUT is installed (if there is such output in
|
||||
`installed' parameter of a package ENTRY)."
|
||||
(let* ((installed (guix-assq-value entry 'installed))
|
||||
(obsolete (guix-assq-value entry 'obsolete))
|
||||
(installed-entry (cl-find-if
|
||||
(lambda (entry)
|
||||
(string= (guix-assq-value entry 'output)
|
||||
output))
|
||||
installed))
|
||||
(action-type (if installed-entry 'delete 'install)))
|
||||
(guix-info-insert-indent)
|
||||
(guix-format-insert output
|
||||
(if installed-entry
|
||||
'guix-package-info-installed-outputs
|
||||
'guix-package-info-uninstalled-outputs)
|
||||
guix-package-info-output-format)
|
||||
(guix-package-info-insert-action-button action-type entry output)
|
||||
(when obsolete
|
||||
(guix-info-insert-indent)
|
||||
(guix-package-info-insert-action-button 'upgrade entry output))
|
||||
(insert "\n")
|
||||
(when installed-entry
|
||||
(guix-info-insert-entry installed-entry 'installed 2))))
|
||||
|
||||
(defun guix-package-info-insert-action-button (type entry output)
|
||||
"Insert button to process an action on a package OUTPUT at point.
|
||||
TYPE is one of the following symbols: `install', `delete', `upgrade'.
|
||||
ENTRY is an alist with package info."
|
||||
(let ((type-str (capitalize (symbol-name type)))
|
||||
(full-name (guix-get-full-name entry output)))
|
||||
(guix-info-insert-action-button
|
||||
type-str
|
||||
(lambda (btn)
|
||||
(guix-process-package-actions
|
||||
guix-profile
|
||||
`((,(button-get btn 'action-type) (,(button-get btn 'id)
|
||||
,(button-get btn 'output))))
|
||||
(current-buffer)))
|
||||
(concat type-str " '" full-name "'")
|
||||
'action-type type
|
||||
'id (or (guix-assq-value entry 'package-id)
|
||||
(guix-assq-value entry 'id))
|
||||
'output output)))
|
||||
|
||||
(defun guix-package-info-insert-output-path (path &optional _)
|
||||
"Insert PATH of the installed output."
|
||||
(guix-info-insert-val-simple path #'guix-info-insert-file-path))
|
||||
|
||||
(defalias 'guix-package-info-insert-output-dependencies
|
||||
'guix-package-info-insert-output-path)
|
||||
|
||||
|
||||
;;; Inserting a source
|
||||
|
||||
(defface guix-package-info-source
|
||||
'((t :inherit link :underline nil))
|
||||
"Face used for a source URL of a package."
|
||||
:group 'guix-package-info-faces)
|
||||
|
||||
(defcustom guix-package-info-auto-find-source nil
|
||||
"If non-nil, find a source file after pressing a \"Show\" button.
|
||||
If nil, just display the source file path without finding."
|
||||
:type 'boolean
|
||||
:group 'guix-package-info)
|
||||
|
||||
(defcustom guix-package-info-auto-download-source t
|
||||
"If nil, do not automatically download a source file if it doesn't exist.
|
||||
After pressing a \"Show\" button, a derivation of the package
|
||||
source is calculated and a store file path is displayed. If this
|
||||
variable is non-nil and the source file does not exist in the
|
||||
store, it will be automatically downloaded (with a possible
|
||||
prompt depending on `guix-operation-confirm' variable)."
|
||||
:type 'boolean
|
||||
:group 'guix-package-info)
|
||||
|
||||
(defvar guix-package-info-download-buffer nil
|
||||
"Buffer from which a current download operation was performed.")
|
||||
|
||||
(define-button-type 'guix-package-source
|
||||
:supertype 'guix
|
||||
'face 'guix-package-info-source
|
||||
'help-echo ""
|
||||
'action (lambda (_)
|
||||
;; As a source may not be a real URL (e.g., "mirror://..."),
|
||||
;; no action is bound to a source button.
|
||||
(message "Yes, this is the source URL. What did you expect?")))
|
||||
|
||||
(defun guix-package-info-insert-source-url (url &optional _)
|
||||
"Make button from source URL and insert it at point."
|
||||
(guix-insert-button url 'guix-package-source))
|
||||
|
||||
(defun guix-package-info-show-source (entry-id package-id)
|
||||
"Show file name of a package source in the current info buffer.
|
||||
Find the file if needed (see `guix-package-info-auto-find-source').
|
||||
ENTRY-ID is an ID of the current entry (package or output).
|
||||
PACKAGE-ID is an ID of the package which source to show."
|
||||
(let* ((entry (guix-get-entry-by-id entry-id guix-entries))
|
||||
(file (guix-package-source-path package-id)))
|
||||
(or file
|
||||
(error "Couldn't define file path of the package source"))
|
||||
(let* ((new-entry (cons (cons 'source-file file)
|
||||
entry))
|
||||
(entries (cl-substitute-if
|
||||
new-entry
|
||||
(lambda (entry)
|
||||
(equal (guix-assq-value entry 'id)
|
||||
entry-id))
|
||||
guix-entries
|
||||
:count 1)))
|
||||
(guix-redisplay-buffer :entries entries)
|
||||
(if (file-exists-p file)
|
||||
(if guix-package-info-auto-find-source
|
||||
(guix-find-file file)
|
||||
(message "The source store path is displayed."))
|
||||
(if guix-package-info-auto-download-source
|
||||
(guix-package-info-download-source package-id)
|
||||
(message "The source does not exist in the store."))))))
|
||||
|
||||
(defun guix-package-info-download-source (package-id)
|
||||
"Download a source of the package PACKAGE-ID."
|
||||
(setq guix-package-info-download-buffer (current-buffer))
|
||||
(guix-package-source-build-derivation
|
||||
package-id
|
||||
"The source does not exist in the store. Download it?"))
|
||||
|
||||
(defun guix-package-info-insert-source (source entry)
|
||||
"Insert SOURCE from package ENTRY at point.
|
||||
SOURCE is a list of URLs."
|
||||
(guix-info-insert-indent)
|
||||
(if (null source)
|
||||
(guix-format-insert nil)
|
||||
(let* ((source-file (guix-assq-value entry 'source-file))
|
||||
(entry-id (guix-assq-value entry 'id))
|
||||
(package-id (or (guix-assq-value entry 'package-id)
|
||||
entry-id)))
|
||||
(if (null source-file)
|
||||
(guix-info-insert-action-button
|
||||
"Show"
|
||||
(lambda (btn)
|
||||
(guix-package-info-show-source (button-get btn 'entry-id)
|
||||
(button-get btn 'package-id)))
|
||||
"Show the source store path of the current package"
|
||||
'entry-id entry-id
|
||||
'package-id package-id)
|
||||
(unless (file-exists-p source-file)
|
||||
(guix-info-insert-action-button
|
||||
"Download"
|
||||
(lambda (btn)
|
||||
(guix-package-info-download-source
|
||||
(button-get btn 'package-id)))
|
||||
"Download the source into the store"
|
||||
'package-id package-id))
|
||||
(guix-info-insert-val-simple source-file
|
||||
#'guix-info-insert-file-path))
|
||||
(guix-info-insert-val-simple source
|
||||
#'guix-package-info-insert-source-url))))
|
||||
|
||||
(defun guix-package-info-redisplay-after-download ()
|
||||
"Redisplay an 'info' buffer after downloading the package source.
|
||||
This function is used to hide a \"Download\" button if needed."
|
||||
(when (buffer-live-p guix-package-info-download-buffer)
|
||||
(guix-redisplay-buffer :buffer guix-package-info-download-buffer)
|
||||
(setq guix-package-info-download-buffer nil)))
|
||||
|
||||
(add-hook 'guix-after-source-download-hook
|
||||
'guix-package-info-redisplay-after-download)
|
||||
|
||||
|
||||
;;; Displaying outputs
|
||||
|
||||
(guix-define-buffer-type info output
|
||||
:buffer-name "*Guix Package Info*"
|
||||
:required (id package-id installed non-unique))
|
||||
|
||||
(defvar guix-info-insert-output-function nil
|
||||
"Function used to insert an output information.
|
||||
It is called with a single argument - alist of output parameters.
|
||||
If nil, insert output in a default way.")
|
||||
|
||||
(defun guix-output-info-insert-version (version entry)
|
||||
"Insert output VERSION and obsolete text if needed at point."
|
||||
(guix-info-insert-val-default version
|
||||
'guix-package-info-version)
|
||||
(and (guix-assq-value entry 'obsolete)
|
||||
(guix-package-info-insert-obsolete-text)))
|
||||
|
||||
(defun guix-output-info-insert-output (output entry)
|
||||
"Insert OUTPUT and action buttons at point."
|
||||
(let* ((installed (guix-assq-value entry 'installed))
|
||||
(obsolete (guix-assq-value entry 'obsolete))
|
||||
(action-type (if installed 'delete 'install)))
|
||||
(guix-info-insert-val-default
|
||||
output
|
||||
(if installed
|
||||
'guix-package-info-installed-outputs
|
||||
'guix-package-info-uninstalled-outputs))
|
||||
(guix-info-insert-indent)
|
||||
(guix-package-info-insert-action-button action-type entry output)
|
||||
(when obsolete
|
||||
(guix-info-insert-indent)
|
||||
(guix-package-info-insert-action-button 'upgrade entry output))))
|
||||
|
||||
|
||||
;;; Displaying generations
|
||||
|
||||
(guix-define-buffer-type info generation)
|
||||
|
||||
(defface guix-generation-info-number
|
||||
'((t :inherit font-lock-keyword-face))
|
||||
"Face used for a number of a generation."
|
||||
:group 'guix-generation-info-faces)
|
||||
|
||||
(defface guix-generation-info-current
|
||||
'((t :inherit guix-package-info-installed-outputs))
|
||||
"Face used if a generation is the current one."
|
||||
:group 'guix-generation-info-faces)
|
||||
|
||||
(defface guix-generation-info-not-current
|
||||
'((t nil))
|
||||
"Face used if a generation is not the current one."
|
||||
:group 'guix-generation-info-faces)
|
||||
|
||||
(defvar guix-info-insert-generation-function nil
|
||||
"Function used to insert a generation information.
|
||||
It is called with a single argument - alist of generation parameters.
|
||||
If nil, insert generation in a default way.")
|
||||
|
||||
(defun guix-generation-info-insert-number (number &optional _)
|
||||
"Insert generation NUMBER and action buttons."
|
||||
(guix-info-insert-val-default number 'guix-generation-info-number)
|
||||
(guix-info-insert-indent)
|
||||
(guix-info-insert-action-button
|
||||
"Packages"
|
||||
(lambda (btn)
|
||||
(guix-get-show-entries guix-profile 'list guix-package-list-type
|
||||
'generation (button-get btn 'number)))
|
||||
"Show installed packages for this generation"
|
||||
'number number)
|
||||
(guix-info-insert-indent)
|
||||
(guix-info-insert-action-button
|
||||
"Delete"
|
||||
(lambda (btn)
|
||||
(guix-delete-generations guix-profile (list (button-get btn 'number))
|
||||
(current-buffer)))
|
||||
"Delete this generation"
|
||||
'number number))
|
||||
|
||||
(defun guix-generation-info-insert-current (val entry)
|
||||
"Insert boolean value VAL showing whether this generation is current."
|
||||
(if val
|
||||
(guix-info-insert-val-default "Yes" 'guix-generation-info-current)
|
||||
(guix-info-insert-val-default "No" 'guix-generation-info-not-current)
|
||||
(guix-info-insert-indent)
|
||||
(guix-info-insert-action-button
|
||||
"Switch"
|
||||
(lambda (btn)
|
||||
(guix-switch-to-generation guix-profile (button-get btn 'number)
|
||||
(current-buffer)))
|
||||
"Switch to this generation (make it the current one)"
|
||||
'number (guix-assq-value entry 'number))))
|
||||
|
||||
(provide 'guix-info)
|
||||
|
||||
;;; guix-info.el ends here
|
||||
@@ -1,20 +0,0 @@
|
||||
(require 'guix-autoloads)
|
||||
(require 'guix-emacs)
|
||||
|
||||
(defcustom guix-package-enable-at-startup t
|
||||
"If non-nil, activate Emacs packages installed in a user profile.
|
||||
Set this variable to nil before requiring `guix-init' file to
|
||||
avoid loading autoloads of Emacs packages installed in
|
||||
`guix-user-profile'."
|
||||
:type 'boolean
|
||||
:group 'guix)
|
||||
|
||||
(add-to-list 'load-path (guix-emacs-directory))
|
||||
|
||||
(when guix-package-enable-at-startup
|
||||
(guix-emacs-load-autoloads 'all))
|
||||
|
||||
(add-hook 'scheme-mode-hook 'guix-devel-activate-mode-maybe)
|
||||
(add-hook 'shell-mode-hook 'guix-build-log-minor-mode-activate-maybe)
|
||||
|
||||
(provide 'guix-init)
|
||||
@@ -1,894 +0,0 @@
|
||||
;;; guix-list.el --- List buffers for displaying entries -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides a list-like buffer for displaying information
|
||||
;; about Guix packages and generations.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'cl-lib)
|
||||
(require 'tabulated-list)
|
||||
(require 'guix-info)
|
||||
(require 'guix-base)
|
||||
(require 'guix-utils)
|
||||
|
||||
(defgroup guix-list nil
|
||||
"General settings for list buffers."
|
||||
:prefix "guix-list-"
|
||||
:group 'guix)
|
||||
|
||||
(defgroup guix-list-faces nil
|
||||
"Faces for list buffers."
|
||||
:group 'guix-list
|
||||
:group 'guix-faces)
|
||||
|
||||
(defface guix-list-file-path
|
||||
'((t :inherit guix-info-file-path))
|
||||
"Face used for file paths."
|
||||
:group 'guix-list-faces)
|
||||
|
||||
(defcustom guix-list-describe-warning-count 10
|
||||
"The maximum number of entries for describing without a warning.
|
||||
If a user wants to describe more than this number of marked
|
||||
entries, he will be prompted for confirmation."
|
||||
:type 'integer
|
||||
:group 'guix-list)
|
||||
|
||||
(defvar guix-list-column-format
|
||||
`((package
|
||||
(name 20 t)
|
||||
(version 10 nil)
|
||||
(outputs 13 t)
|
||||
(installed 13 t)
|
||||
(synopsis 30 nil))
|
||||
(output
|
||||
(name 20 t)
|
||||
(version 10 nil)
|
||||
(output 9 t)
|
||||
(installed 12 t)
|
||||
(synopsis 30 nil))
|
||||
(generation
|
||||
(number 5
|
||||
,(lambda (a b) (guix-list-sort-numerically 0 a b))
|
||||
:right-align t)
|
||||
(current 10 t)
|
||||
(time 20 t)
|
||||
(path 30 t)))
|
||||
"Columns displayed in list buffers.
|
||||
Each element of the list has a form:
|
||||
|
||||
(ENTRY-TYPE . ((PARAM WIDTH SORT . PROPS) ...))
|
||||
|
||||
PARAM is the name of an entry parameter of ENTRY-TYPE. For the
|
||||
meaning of WIDTH, SORT and PROPS, see `tabulated-list-format'.")
|
||||
|
||||
(defvar guix-list-column-titles
|
||||
'((generation
|
||||
(number . "N.")))
|
||||
"Column titles for list buffers.
|
||||
Has the same structure as `guix-param-titles', but titles from
|
||||
this list have a priority.")
|
||||
|
||||
(defvar guix-list-column-value-methods
|
||||
'((package
|
||||
(name . guix-package-list-get-name)
|
||||
(synopsis . guix-list-get-one-line)
|
||||
(description . guix-list-get-one-line)
|
||||
(installed . guix-package-list-get-installed-outputs))
|
||||
(output
|
||||
(name . guix-package-list-get-name)
|
||||
(synopsis . guix-list-get-one-line)
|
||||
(description . guix-list-get-one-line))
|
||||
(generation
|
||||
(current . guix-generation-list-get-current)
|
||||
(time . guix-list-get-time)
|
||||
(path . guix-list-get-file-path)))
|
||||
"Methods for inserting parameter values in columns.
|
||||
Each element of the list has a form:
|
||||
|
||||
(ENTRY-TYPE . ((PARAM . FUN) ...))
|
||||
|
||||
PARAM is the name of an entry parameter of ENTRY-TYPE.
|
||||
|
||||
FUN is a function returning a value that will be inserted. The
|
||||
function is called with 2 arguments: the first one is the value
|
||||
of the parameter; the second argument is an entry info (alist of
|
||||
parameters and their values).")
|
||||
|
||||
(defun guix-list-get-param-title (entry-type param)
|
||||
"Return title of an ENTRY-TYPE entry parameter PARAM."
|
||||
(or (guix-assq-value guix-list-column-titles
|
||||
entry-type param)
|
||||
(guix-get-param-title entry-type param)))
|
||||
|
||||
(defun guix-list-get-column-format (entry-type)
|
||||
"Return column format for ENTRY-TYPE."
|
||||
(guix-assq-value guix-list-column-format entry-type))
|
||||
|
||||
(defun guix-list-get-displayed-params (entry-type)
|
||||
"Return list of parameters of ENTRY-TYPE that should be displayed."
|
||||
(mapcar #'car
|
||||
(guix-list-get-column-format entry-type)))
|
||||
|
||||
(defun guix-list-get-sort-key (entry-type param &optional invert)
|
||||
"Return suitable sort key for `tabulated-list-sort-key'.
|
||||
Define column title by ENTRY-TYPE and PARAM. If INVERT is
|
||||
non-nil, invert the sort."
|
||||
(when (memq param (guix-list-get-displayed-params entry-type))
|
||||
(cons (guix-list-get-param-title entry-type param) invert)))
|
||||
|
||||
(defun guix-list-sort-numerically (column a b)
|
||||
"Compare COLUMN of tabulated entries A and B numerically.
|
||||
It is a sort predicate for `tabulated-list-format'.
|
||||
Return non-nil, if B is bigger than A."
|
||||
(cl-flet ((num (entry)
|
||||
(string-to-number (aref (cadr entry) column))))
|
||||
(> (num b) (num a))))
|
||||
|
||||
(defun guix-list-make-tabulated-vector (entry-type fun)
|
||||
"Call FUN on each column specification for ENTRY-TYPE.
|
||||
|
||||
FUN is called with 2 argument: parameter name and column
|
||||
specification (see `guix-list-column-format').
|
||||
|
||||
Return a vector made of values of FUN calls."
|
||||
(apply #'vector
|
||||
(mapcar (lambda (col-spec)
|
||||
(funcall fun (car col-spec) (cdr col-spec)))
|
||||
(guix-list-get-column-format entry-type))))
|
||||
|
||||
(defun guix-list-get-list-format (entry-type)
|
||||
"Return ENTRY-TYPE list specification for `tabulated-list-format'."
|
||||
(guix-list-make-tabulated-vector
|
||||
entry-type
|
||||
(lambda (param spec)
|
||||
(cons (guix-list-get-param-title entry-type param)
|
||||
spec))))
|
||||
|
||||
(defun guix-list-insert-entries (entries entry-type)
|
||||
"Display ENTRIES of ENTRY-TYPE in the current list buffer.
|
||||
ENTRIES should have a form of `guix-entries'."
|
||||
(setq tabulated-list-entries
|
||||
(guix-list-get-tabulated-entries entries entry-type))
|
||||
(tabulated-list-print))
|
||||
|
||||
(defun guix-list-get-tabulated-entries (entries entry-type)
|
||||
"Return list of values of ENTRY-TYPE for `tabulated-list-entries'.
|
||||
Values are taken from ENTRIES which should have the form of
|
||||
`guix-entries'."
|
||||
(mapcar (lambda (entry)
|
||||
(list (guix-assq-value entry 'id)
|
||||
(guix-list-get-tabulated-entry entry entry-type)))
|
||||
entries))
|
||||
|
||||
(defun guix-list-get-tabulated-entry (entry entry-type)
|
||||
"Return array of values for `tabulated-list-entries'.
|
||||
Parameters are taken from ENTRY of ENTRY-TYPE."
|
||||
(guix-list-make-tabulated-vector
|
||||
entry-type
|
||||
(lambda (param _)
|
||||
(let ((val (guix-assq-value entry param))
|
||||
(fun (guix-assq-value guix-list-column-value-methods
|
||||
entry-type param)))
|
||||
(if fun
|
||||
(funcall fun val entry)
|
||||
(guix-get-string val))))))
|
||||
|
||||
(defun guix-list-get-one-line (val &optional _)
|
||||
"Return one-line string from a multi-line string VAL.
|
||||
VAL may be nil."
|
||||
(if val
|
||||
(guix-get-one-line val)
|
||||
(guix-get-string nil)))
|
||||
|
||||
(defun guix-list-get-time (seconds &optional _)
|
||||
"Return formatted time string from SECONDS."
|
||||
(guix-get-time-string seconds))
|
||||
|
||||
(defun guix-list-get-file-path (path &optional _)
|
||||
"Return PATH button specification for `tabulated-list-entries'."
|
||||
(list path
|
||||
'face 'guix-list-file-path
|
||||
'action (lambda (btn) (find-file (button-label btn)))
|
||||
'follow-link t
|
||||
'help-echo "Find file"))
|
||||
|
||||
(defun guix-list-current-id ()
|
||||
"Return ID of the current entry."
|
||||
(or (tabulated-list-get-id)
|
||||
(user-error "No entry here")))
|
||||
|
||||
(defun guix-list-current-entry ()
|
||||
"Return alist of the current entry info."
|
||||
(guix-get-entry-by-id (guix-list-current-id) guix-entries))
|
||||
|
||||
(defun guix-list-current-package-id ()
|
||||
"Return ID of the current package."
|
||||
(cl-ecase major-mode
|
||||
(guix-package-list-mode
|
||||
(guix-list-current-id))
|
||||
(guix-output-list-mode
|
||||
(guix-assq-value (guix-list-current-entry) 'package-id))))
|
||||
|
||||
(defun guix-list-for-each-line (fun &rest args)
|
||||
"Call FUN with ARGS for each entry line."
|
||||
(or (derived-mode-p 'guix-list-mode)
|
||||
(error "The current buffer is not in Guix List mode"))
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(apply fun args)
|
||||
(forward-line))))
|
||||
|
||||
(defun guix-list-fold-lines (fun init)
|
||||
"Fold over entry lines in the current list buffer.
|
||||
Call FUN with RESULT as argument for each line, using INIT as
|
||||
the initial value of RESULT. Return the final result."
|
||||
(let ((res init))
|
||||
(guix-list-for-each-line
|
||||
(lambda () (setq res (funcall fun res))))
|
||||
res))
|
||||
|
||||
|
||||
;;; Marking and sorting
|
||||
|
||||
(defvar-local guix-list-marked nil
|
||||
"List of the marked entries.
|
||||
Each element of the list has a form:
|
||||
|
||||
(ID MARK-NAME . ARGS)
|
||||
|
||||
ID is an entry ID.
|
||||
MARK-NAME is a symbol from `guix-list-mark-alist'.
|
||||
ARGS is a list of additional values.")
|
||||
|
||||
(defvar guix-list-mark-alist
|
||||
'((empty . ?\s)
|
||||
(general . ?*))
|
||||
"Alist of available mark names and mark characters.")
|
||||
|
||||
(defsubst guix-list-get-mark (name)
|
||||
"Return mark character by its NAME."
|
||||
(or (guix-assq-value guix-list-mark-alist name)
|
||||
(error "Mark '%S' not found" name)))
|
||||
|
||||
(defsubst guix-list-get-mark-string (name)
|
||||
"Return mark string by its NAME."
|
||||
(string (guix-list-get-mark name)))
|
||||
|
||||
(defun guix-list-current-mark ()
|
||||
"Return mark character of the current line."
|
||||
(char-after (line-beginning-position)))
|
||||
|
||||
(defun guix-list-get-marked (&rest mark-names)
|
||||
"Return list of specs of entries marked with any mark from MARK-NAMES.
|
||||
Entry specs are elements from `guix-list-marked' list.
|
||||
If MARK-NAMES are not specified, use all marks from
|
||||
`guix-list-mark-alist' except the `empty' one."
|
||||
(or mark-names
|
||||
(setq mark-names
|
||||
(delq 'empty
|
||||
(mapcar #'car guix-list-mark-alist))))
|
||||
(cl-remove-if-not (lambda (assoc)
|
||||
(memq (cadr assoc) mark-names))
|
||||
guix-list-marked))
|
||||
|
||||
(defun guix-list-get-marked-args (mark-name)
|
||||
"Return list of (ID . ARGS) elements from lines marked with MARK-NAME.
|
||||
See `guix-list-marked' for the meaning of ARGS."
|
||||
(mapcar (lambda (spec)
|
||||
(let ((id (car spec))
|
||||
(args (cddr spec)))
|
||||
(cons id args)))
|
||||
(guix-list-get-marked mark-name)))
|
||||
|
||||
(defun guix-list-get-marked-id-list (&rest mark-names)
|
||||
"Return list of IDs of entries marked with any mark from MARK-NAMES.
|
||||
See `guix-list-get-marked' for details."
|
||||
(mapcar #'car (apply #'guix-list-get-marked mark-names)))
|
||||
|
||||
(defun guix-list--mark (mark-name &optional advance &rest args)
|
||||
"Put a mark on the current line.
|
||||
Also add the current entry to `guix-list-marked' using its ID and ARGS.
|
||||
MARK-NAME is a symbol from `guix-list-mark-alist'.
|
||||
If ADVANCE is non-nil, move forward by one line after marking."
|
||||
(let ((id (guix-list-current-id)))
|
||||
(if (eq mark-name 'empty)
|
||||
(setq guix-list-marked (assq-delete-all id guix-list-marked))
|
||||
(let ((assoc (assq id guix-list-marked))
|
||||
(val (cons mark-name args)))
|
||||
(if assoc
|
||||
(setcdr assoc val)
|
||||
(push (cons id val) guix-list-marked)))))
|
||||
(tabulated-list-put-tag (guix-list-get-mark-string mark-name)
|
||||
advance))
|
||||
|
||||
(defun guix-list-mark (&optional arg)
|
||||
"Mark the current line and move to the next line.
|
||||
With ARG, mark all lines."
|
||||
(interactive "P")
|
||||
(if arg
|
||||
(guix-list-mark-all)
|
||||
(guix-list--mark 'general t)))
|
||||
|
||||
(defun guix-list-mark-all (&optional mark-name)
|
||||
"Mark all lines with MARK-NAME mark.
|
||||
MARK-NAME is a symbol from `guix-list-mark-alist'.
|
||||
Interactively, put a general mark on all lines."
|
||||
(interactive)
|
||||
(or mark-name (setq mark-name 'general))
|
||||
(guix-list-for-each-line #'guix-list--mark mark-name))
|
||||
|
||||
(defun guix-list-unmark (&optional arg)
|
||||
"Unmark the current line and move to the next line.
|
||||
With ARG, unmark all lines."
|
||||
(interactive "P")
|
||||
(if arg
|
||||
(guix-list-unmark-all)
|
||||
(guix-list--mark 'empty t)))
|
||||
|
||||
(defun guix-list-unmark-backward ()
|
||||
"Move up one line and unmark it."
|
||||
(interactive)
|
||||
(forward-line -1)
|
||||
(guix-list--mark 'empty))
|
||||
|
||||
(defun guix-list-unmark-all ()
|
||||
"Unmark all lines."
|
||||
(interactive)
|
||||
(guix-list-mark-all 'empty))
|
||||
|
||||
(defun guix-list-restore-marks ()
|
||||
"Put marks according to `guix-list-mark-alist'."
|
||||
(guix-list-for-each-line
|
||||
(lambda ()
|
||||
(let ((mark-name (car (guix-assq-value guix-list-marked
|
||||
(guix-list-current-id)))))
|
||||
(tabulated-list-put-tag
|
||||
(guix-list-get-mark-string (or mark-name 'empty)))))))
|
||||
|
||||
(defun guix-list-sort (&optional n)
|
||||
"Sort guix list entries by the column at point.
|
||||
With a numeric prefix argument N, sort the Nth column.
|
||||
Same as `tabulated-list-sort', but also restore marks after sorting."
|
||||
(interactive "P")
|
||||
(tabulated-list-sort n)
|
||||
(guix-list-restore-marks))
|
||||
|
||||
|
||||
(defvar guix-list-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(set-keymap-parent
|
||||
map (make-composed-keymap guix-root-map
|
||||
tabulated-list-mode-map))
|
||||
(define-key map (kbd "RET") 'guix-list-describe)
|
||||
(define-key map (kbd "m") 'guix-list-mark)
|
||||
(define-key map (kbd "*") 'guix-list-mark)
|
||||
(define-key map (kbd "u") 'guix-list-unmark)
|
||||
(define-key map (kbd "DEL") 'guix-list-unmark-backward)
|
||||
(define-key map [remap tabulated-list-sort] 'guix-list-sort)
|
||||
map)
|
||||
"Parent keymap for list buffers.")
|
||||
|
||||
(define-derived-mode guix-list-mode tabulated-list-mode "Guix-List"
|
||||
"Parent mode for displaying information in list buffers."
|
||||
(setq tabulated-list-padding 2))
|
||||
|
||||
(defmacro guix-list-define-entry-type (entry-type &rest args)
|
||||
"Define common stuff for displaying ENTRY-TYPE entries in list buffers.
|
||||
|
||||
Remaining argument (ARGS) should have a form [KEYWORD VALUE] ... The
|
||||
following keywords are available:
|
||||
|
||||
- `:sort-key' - default sort key for the tabulated list buffer.
|
||||
|
||||
- `:invert-sort' - if non-nil, invert initial sort.
|
||||
|
||||
- `:marks' - default value for the defined
|
||||
`guix-ENTRY-TYPE-mark-alist' variable.
|
||||
|
||||
This macro defines the following functions:
|
||||
|
||||
- `guix-ENTRY-TYPE-mark-MARK-NAME' functions for each mark
|
||||
specified in `:marks' argument."
|
||||
(let* ((entry-type-str (symbol-name entry-type))
|
||||
(prefix (concat "guix-" entry-type-str "-list"))
|
||||
(mode-str (concat prefix "-mode"))
|
||||
(init-fun (intern (concat prefix "-mode-initialize")))
|
||||
(marks-var (intern (concat prefix "-mark-alist")))
|
||||
(marks-val nil)
|
||||
(sort-key nil)
|
||||
(invert-sort nil))
|
||||
|
||||
;; Process the keyword args.
|
||||
(while (keywordp (car args))
|
||||
(pcase (pop args)
|
||||
(`:sort-key (setq sort-key (pop args)))
|
||||
(`:invert-sort (setq invert-sort (pop args)))
|
||||
(`:marks (setq marks-val (pop args)))
|
||||
(_ (pop args))))
|
||||
|
||||
`(progn
|
||||
(defvar ,marks-var ',marks-val
|
||||
,(concat "Alist of additional marks for `" mode-str "'.\n"
|
||||
"Marks from this list are added to `guix-list-mark-alist'."))
|
||||
|
||||
,@(mapcar (lambda (mark-spec)
|
||||
(let* ((mark-name (car mark-spec))
|
||||
(mark-name-str (symbol-name mark-name)))
|
||||
`(defun ,(intern (concat prefix "-mark-" mark-name-str "-simple")) ()
|
||||
,(concat "Put '" mark-name-str "' mark and move to the next line.\n"
|
||||
"Also add the current entry to `guix-list-marked'.")
|
||||
(interactive)
|
||||
(guix-list--mark ',mark-name t))))
|
||||
marks-val)
|
||||
|
||||
(defun ,init-fun ()
|
||||
,(concat "Initial settings for `" mode-str "'.")
|
||||
,(when sort-key
|
||||
`(setq tabulated-list-sort-key
|
||||
(guix-list-get-sort-key
|
||||
',entry-type ',sort-key ,invert-sort)))
|
||||
(setq tabulated-list-format
|
||||
(guix-list-get-list-format ',entry-type))
|
||||
(setq-local guix-list-mark-alist
|
||||
(append guix-list-mark-alist ,marks-var))
|
||||
(tabulated-list-init-header)))))
|
||||
|
||||
(put 'guix-list-define-entry-type 'lisp-indent-function 'defun)
|
||||
|
||||
(defun guix-list-describe-maybe (entry-type ids)
|
||||
"Describe ENTRY-TYPE entries in info buffer using list of IDS."
|
||||
(let ((count (length ids)))
|
||||
(when (or (<= count guix-list-describe-warning-count)
|
||||
(y-or-n-p (format "Do you really want to describe %d entries? "
|
||||
count)))
|
||||
(apply #'guix-get-show-entries
|
||||
guix-profile 'info entry-type 'id ids))))
|
||||
|
||||
(defun guix-list-describe (&optional arg)
|
||||
"Describe entries marked with a general mark.
|
||||
If no entries are marked, describe the current entry.
|
||||
With prefix (if ARG is non-nil), describe entries marked with any mark."
|
||||
(interactive "P")
|
||||
(let ((ids (or (apply #'guix-list-get-marked-id-list
|
||||
(unless arg '(general)))
|
||||
(list (guix-list-current-id)))))
|
||||
(guix-list-describe-maybe guix-entry-type ids)))
|
||||
|
||||
(defun guix-list-edit-package ()
|
||||
"Go to the location of the current package."
|
||||
(interactive)
|
||||
(guix-edit (guix-list-current-package-id)))
|
||||
|
||||
|
||||
;;; Displaying packages
|
||||
|
||||
(guix-define-buffer-type list package)
|
||||
|
||||
(guix-list-define-entry-type package
|
||||
:sort-key name
|
||||
:marks ((install . ?I)
|
||||
(upgrade . ?U)
|
||||
(delete . ?D)))
|
||||
|
||||
(defface guix-package-list-installed
|
||||
'((t :inherit guix-package-info-installed-outputs))
|
||||
"Face used if there are installed outputs for the current package."
|
||||
:group 'guix-package-list-faces)
|
||||
|
||||
(defface guix-package-list-obsolete
|
||||
'((t :inherit guix-package-info-obsolete))
|
||||
"Face used if a package is obsolete."
|
||||
:group 'guix-package-list-faces)
|
||||
|
||||
(defcustom guix-package-list-generation-marking-enabled nil
|
||||
"If non-nil, allow putting marks in a list with 'generation packages'.
|
||||
|
||||
By default this is disabled, because it may be confusing. For
|
||||
example a package is installed in some generation, so a user can
|
||||
mark it for deletion in the list of packages from this
|
||||
generation, but the package may not be installed in the latest
|
||||
generation, so actually it cannot be deleted.
|
||||
|
||||
If you managed to understand the explanation above or if you
|
||||
really know what you do or if you just don't care, you can set
|
||||
this variable to t. It should not do much harm anyway (most
|
||||
likely)."
|
||||
:type 'boolean
|
||||
:group 'guix-package-list)
|
||||
|
||||
(let ((map guix-package-list-mode-map))
|
||||
(define-key map (kbd "e") 'guix-list-edit-package)
|
||||
(define-key map (kbd "x") 'guix-package-list-execute)
|
||||
(define-key map (kbd "i") 'guix-package-list-mark-install)
|
||||
(define-key map (kbd "d") 'guix-package-list-mark-delete)
|
||||
(define-key map (kbd "U") 'guix-package-list-mark-upgrade)
|
||||
(define-key map (kbd "^") 'guix-package-list-mark-upgrades))
|
||||
|
||||
(defun guix-package-list-get-name (name entry)
|
||||
"Return NAME of the package ENTRY.
|
||||
Colorize it with `guix-package-list-installed' or
|
||||
`guix-package-list-obsolete' if needed."
|
||||
(guix-get-string name
|
||||
(cond ((guix-assq-value entry 'obsolete)
|
||||
'guix-package-list-obsolete)
|
||||
((guix-assq-value entry 'installed)
|
||||
'guix-package-list-installed))))
|
||||
|
||||
(defun guix-package-list-get-installed-outputs (installed &optional _)
|
||||
"Return string with outputs from INSTALLED entries."
|
||||
(guix-get-string
|
||||
(mapcar (lambda (entry)
|
||||
(guix-assq-value entry 'output))
|
||||
installed)))
|
||||
|
||||
(defun guix-package-list-marking-check ()
|
||||
"Signal an error if marking is disabled for the current buffer."
|
||||
(when (and (not guix-package-list-generation-marking-enabled)
|
||||
(or (derived-mode-p 'guix-package-list-mode)
|
||||
(derived-mode-p 'guix-output-list-mode))
|
||||
(eq guix-search-type 'generation))
|
||||
(error "Action marks are disabled for lists of 'generation packages'")))
|
||||
|
||||
(defun guix-package-list-mark-outputs (mark default
|
||||
&optional prompt available)
|
||||
"Mark the current package with MARK and move to the next line.
|
||||
If PROMPT is non-nil, use it to ask a user for outputs from
|
||||
AVAILABLE list, otherwise mark all DEFAULT outputs."
|
||||
(let ((outputs (if prompt
|
||||
(guix-completing-read-multiple
|
||||
prompt available nil t)
|
||||
default)))
|
||||
(apply #'guix-list--mark mark t outputs)))
|
||||
|
||||
(defun guix-package-list-mark-install (&optional arg)
|
||||
"Mark the current package for installation and move to the next line.
|
||||
With ARG, prompt for the outputs to install (several outputs may
|
||||
be separated with \",\")."
|
||||
(interactive "P")
|
||||
(guix-package-list-marking-check)
|
||||
(let* ((entry (guix-list-current-entry))
|
||||
(all (guix-assq-value entry 'outputs))
|
||||
(installed (guix-get-installed-outputs entry))
|
||||
(available (cl-set-difference all installed :test #'string=)))
|
||||
(or available
|
||||
(user-error "This package is already installed"))
|
||||
(guix-package-list-mark-outputs
|
||||
'install '("out")
|
||||
(and arg "Output(s) to install: ")
|
||||
available)))
|
||||
|
||||
(defun guix-package-list-mark-delete (&optional arg)
|
||||
"Mark the current package for deletion and move to the next line.
|
||||
With ARG, prompt for the outputs to delete (several outputs may
|
||||
be separated with \",\")."
|
||||
(interactive "P")
|
||||
(guix-package-list-marking-check)
|
||||
(let* ((entry (guix-list-current-entry))
|
||||
(installed (guix-get-installed-outputs entry)))
|
||||
(or installed
|
||||
(user-error "This package is not installed"))
|
||||
(guix-package-list-mark-outputs
|
||||
'delete installed
|
||||
(and arg "Output(s) to delete: ")
|
||||
installed)))
|
||||
|
||||
(defun guix-package-list-mark-upgrade (&optional arg)
|
||||
"Mark the current package for upgrading and move to the next line.
|
||||
With ARG, prompt for the outputs to upgrade (several outputs may
|
||||
be separated with \",\")."
|
||||
(interactive "P")
|
||||
(guix-package-list-marking-check)
|
||||
(let* ((entry (guix-list-current-entry))
|
||||
(installed (guix-get-installed-outputs entry)))
|
||||
(or installed
|
||||
(user-error "This package is not installed"))
|
||||
(when (or (guix-assq-value entry 'obsolete)
|
||||
(y-or-n-p "This package is not obsolete. Try to upgrade it anyway? "))
|
||||
(guix-package-list-mark-outputs
|
||||
'upgrade installed
|
||||
(and arg "Output(s) to upgrade: ")
|
||||
installed))))
|
||||
|
||||
(defun guix-list-mark-package-upgrades (fun)
|
||||
"Mark all obsolete packages for upgrading.
|
||||
Use FUN to perform marking of the current line. FUN should
|
||||
accept an entry as argument."
|
||||
(guix-package-list-marking-check)
|
||||
(let ((obsolete (cl-remove-if-not
|
||||
(lambda (entry)
|
||||
(guix-assq-value entry 'obsolete))
|
||||
guix-entries)))
|
||||
(guix-list-for-each-line
|
||||
(lambda ()
|
||||
(let* ((id (guix-list-current-id))
|
||||
(entry (cl-find-if
|
||||
(lambda (entry)
|
||||
(equal id (guix-assq-value entry 'id)))
|
||||
obsolete)))
|
||||
(when entry
|
||||
(funcall fun entry)))))))
|
||||
|
||||
(defun guix-package-list-mark-upgrades ()
|
||||
"Mark all obsolete packages for upgrading."
|
||||
(interactive)
|
||||
(guix-list-mark-package-upgrades
|
||||
(lambda (entry)
|
||||
(apply #'guix-list--mark
|
||||
'upgrade nil
|
||||
(guix-get-installed-outputs entry)))))
|
||||
|
||||
(defun guix-list-execute-package-actions (fun)
|
||||
"Perform actions on the marked packages.
|
||||
Use FUN to define actions suitable for `guix-process-package-actions'.
|
||||
FUN should accept action-type as argument."
|
||||
(let ((actions (delq nil
|
||||
(mapcar fun '(install delete upgrade)))))
|
||||
(if actions
|
||||
(guix-process-package-actions
|
||||
guix-profile actions (current-buffer))
|
||||
(user-error "No operations specified"))))
|
||||
|
||||
(defun guix-package-list-execute ()
|
||||
"Perform actions on the marked packages."
|
||||
(interactive)
|
||||
(guix-list-execute-package-actions #'guix-package-list-make-action))
|
||||
|
||||
(defun guix-package-list-make-action (action-type)
|
||||
"Return action specification for the packages marked with ACTION-TYPE.
|
||||
Return nil, if there are no packages marked with ACTION-TYPE.
|
||||
The specification is suitable for `guix-process-package-actions'."
|
||||
(let ((specs (guix-list-get-marked-args action-type)))
|
||||
(and specs (cons action-type specs))))
|
||||
|
||||
|
||||
;;; Displaying outputs
|
||||
|
||||
(guix-define-buffer-type list output
|
||||
:buffer-name "*Guix Package List*"
|
||||
:required (package-id))
|
||||
|
||||
(guix-list-define-entry-type output
|
||||
:sort-key name
|
||||
:marks ((install . ?I)
|
||||
(upgrade . ?U)
|
||||
(delete . ?D)))
|
||||
|
||||
(let ((map guix-output-list-mode-map))
|
||||
(define-key map (kbd "RET") 'guix-output-list-describe)
|
||||
(define-key map (kbd "e") 'guix-list-edit-package)
|
||||
(define-key map (kbd "x") 'guix-output-list-execute)
|
||||
(define-key map (kbd "i") 'guix-output-list-mark-install)
|
||||
(define-key map (kbd "d") 'guix-output-list-mark-delete)
|
||||
(define-key map (kbd "U") 'guix-output-list-mark-upgrade)
|
||||
(define-key map (kbd "^") 'guix-output-list-mark-upgrades))
|
||||
|
||||
(defun guix-output-list-mark-install ()
|
||||
"Mark the current output for installation and move to the next line."
|
||||
(interactive)
|
||||
(guix-package-list-marking-check)
|
||||
(let* ((entry (guix-list-current-entry))
|
||||
(installed (guix-assq-value entry 'installed)))
|
||||
(if installed
|
||||
(user-error "This output is already installed")
|
||||
(guix-list--mark 'install t))))
|
||||
|
||||
(defun guix-output-list-mark-delete ()
|
||||
"Mark the current output for deletion and move to the next line."
|
||||
(interactive)
|
||||
(guix-package-list-marking-check)
|
||||
(let* ((entry (guix-list-current-entry))
|
||||
(installed (guix-assq-value entry 'installed)))
|
||||
(if installed
|
||||
(guix-list--mark 'delete t)
|
||||
(user-error "This output is not installed"))))
|
||||
|
||||
(defun guix-output-list-mark-upgrade ()
|
||||
"Mark the current output for deletion and move to the next line."
|
||||
(interactive)
|
||||
(guix-package-list-marking-check)
|
||||
(let* ((entry (guix-list-current-entry))
|
||||
(installed (guix-assq-value entry 'installed)))
|
||||
(or installed
|
||||
(user-error "This output is not installed"))
|
||||
(when (or (guix-assq-value entry 'obsolete)
|
||||
(y-or-n-p "This output is not obsolete. Try to upgrade it anyway? "))
|
||||
(guix-list--mark 'upgrade t))))
|
||||
|
||||
(defun guix-output-list-mark-upgrades ()
|
||||
"Mark all obsolete package outputs for upgrading."
|
||||
(interactive)
|
||||
(guix-list-mark-package-upgrades
|
||||
(lambda (_) (guix-list--mark 'upgrade))))
|
||||
|
||||
(defun guix-output-list-execute ()
|
||||
"Perform actions on the marked outputs."
|
||||
(interactive)
|
||||
(guix-list-execute-package-actions #'guix-output-list-make-action))
|
||||
|
||||
(defun guix-output-list-make-action (action-type)
|
||||
"Return action specification for the outputs marked with ACTION-TYPE.
|
||||
Return nil, if there are no outputs marked with ACTION-TYPE.
|
||||
The specification is suitable for `guix-process-output-actions'."
|
||||
(let ((ids (guix-list-get-marked-id-list action-type)))
|
||||
(and ids (cons action-type
|
||||
(mapcar #'guix-get-package-id-and-output-by-output-id
|
||||
ids)))))
|
||||
|
||||
(defun guix-output-list-describe (&optional arg)
|
||||
"Describe outputs or packages marked with a general mark.
|
||||
If no entries are marked, describe the current output or package.
|
||||
With prefix (if ARG is non-nil), describe entries marked with any mark.
|
||||
Also see `guix-package-info-type'."
|
||||
(interactive "P")
|
||||
(if (eq guix-package-info-type 'output)
|
||||
(guix-list-describe arg)
|
||||
(let* ((oids (or (apply #'guix-list-get-marked-id-list
|
||||
(unless arg '(general)))
|
||||
(list (guix-list-current-id))))
|
||||
(pids (mapcar (lambda (oid)
|
||||
(car (guix-get-package-id-and-output-by-output-id
|
||||
oid)))
|
||||
oids)))
|
||||
(guix-list-describe-maybe 'package (cl-remove-duplicates pids)))))
|
||||
|
||||
|
||||
;;; Displaying generations
|
||||
|
||||
(guix-define-buffer-type list generation)
|
||||
|
||||
(guix-list-define-entry-type generation
|
||||
:sort-key number
|
||||
:invert-sort t
|
||||
:marks ((delete . ?D)))
|
||||
|
||||
(let ((map guix-generation-list-mode-map))
|
||||
(define-key map (kbd "RET") 'guix-generation-list-show-packages)
|
||||
(define-key map (kbd "+") 'guix-generation-list-show-added-packages)
|
||||
(define-key map (kbd "-") 'guix-generation-list-show-removed-packages)
|
||||
(define-key map (kbd "=") 'guix-generation-list-diff)
|
||||
(define-key map (kbd "D") 'guix-generation-list-diff)
|
||||
(define-key map (kbd "e") 'guix-generation-list-ediff)
|
||||
(define-key map (kbd "x") 'guix-generation-list-execute)
|
||||
(define-key map (kbd "i") 'guix-list-describe)
|
||||
(define-key map (kbd "s") 'guix-generation-list-switch)
|
||||
(define-key map (kbd "d") 'guix-generation-list-mark-delete))
|
||||
|
||||
(defun guix-generation-list-get-current (val &optional _)
|
||||
"Return string from VAL showing whether this generation is current.
|
||||
VAL is a boolean value."
|
||||
(if val "(current)" ""))
|
||||
|
||||
(defun guix-generation-list-switch ()
|
||||
"Switch current profile to the generation at point."
|
||||
(interactive)
|
||||
(let* ((entry (guix-list-current-entry))
|
||||
(current (guix-assq-value entry 'current))
|
||||
(number (guix-assq-value entry 'number)))
|
||||
(if current
|
||||
(user-error "This generation is already the current one")
|
||||
(guix-switch-to-generation guix-profile number (current-buffer)))))
|
||||
|
||||
(defun guix-generation-list-show-packages ()
|
||||
"List installed packages for the generation at point."
|
||||
(interactive)
|
||||
(guix-get-show-entries guix-profile 'list guix-package-list-type
|
||||
'generation (guix-list-current-id)))
|
||||
|
||||
(defun guix-generation-list-generations-to-compare ()
|
||||
"Return a sorted list of 2 marked generations for comparing."
|
||||
(let ((numbers (guix-list-get-marked-id-list 'general)))
|
||||
(if (/= (length numbers) 2)
|
||||
(user-error "2 generations should be marked for comparing")
|
||||
(sort numbers #'<))))
|
||||
|
||||
(defun guix-generation-list-show-added-packages ()
|
||||
"List package outputs added to the latest marked generation.
|
||||
If 2 generations are marked with \\[guix-list-mark], display
|
||||
outputs installed in the latest marked generation that were not
|
||||
installed in the other one."
|
||||
(interactive)
|
||||
(apply #'guix-get-show-entries
|
||||
guix-profile 'list 'output 'generation-diff
|
||||
(reverse (guix-generation-list-generations-to-compare))))
|
||||
|
||||
(defun guix-generation-list-show-removed-packages ()
|
||||
"List package outputs removed from the latest marked generation.
|
||||
If 2 generations are marked with \\[guix-list-mark], display
|
||||
outputs not installed in the latest marked generation that were
|
||||
installed in the other one."
|
||||
(interactive)
|
||||
(apply #'guix-get-show-entries
|
||||
guix-profile 'list 'output 'generation-diff
|
||||
(guix-generation-list-generations-to-compare)))
|
||||
|
||||
(defun guix-generation-list-compare (diff-fun gen-fun)
|
||||
"Run GEN-FUN on the 2 marked generations and run DIFF-FUN on the results."
|
||||
(cl-multiple-value-bind (gen1 gen2)
|
||||
(guix-generation-list-generations-to-compare)
|
||||
(funcall diff-fun
|
||||
(funcall gen-fun gen1)
|
||||
(funcall gen-fun gen2))))
|
||||
|
||||
(defun guix-generation-list-ediff-manifests ()
|
||||
"Run Ediff on manifests of the 2 marked generations."
|
||||
(interactive)
|
||||
(guix-generation-list-compare
|
||||
#'ediff-files
|
||||
#'guix-profile-generation-manifest-file))
|
||||
|
||||
(defun guix-generation-list-diff-manifests ()
|
||||
"Run Diff on manifests of the 2 marked generations."
|
||||
(interactive)
|
||||
(guix-generation-list-compare
|
||||
#'guix-diff
|
||||
#'guix-profile-generation-manifest-file))
|
||||
|
||||
(defun guix-generation-list-ediff-packages ()
|
||||
"Run Ediff on package outputs installed in the 2 marked generations."
|
||||
(interactive)
|
||||
(guix-generation-list-compare
|
||||
#'ediff-buffers
|
||||
#'guix-profile-generation-packages-buffer))
|
||||
|
||||
(defun guix-generation-list-diff-packages ()
|
||||
"Run Diff on package outputs installed in the 2 marked generations."
|
||||
(interactive)
|
||||
(guix-generation-list-compare
|
||||
#'guix-diff
|
||||
#'guix-profile-generation-packages-buffer))
|
||||
|
||||
(defun guix-generation-list-ediff (arg)
|
||||
"Run Ediff on package outputs installed in the 2 marked generations.
|
||||
With ARG, run Ediff on manifests of the marked generations."
|
||||
(interactive "P")
|
||||
(if arg
|
||||
(guix-generation-list-ediff-manifests)
|
||||
(guix-generation-list-ediff-packages)))
|
||||
|
||||
(defun guix-generation-list-diff (arg)
|
||||
"Run Diff on package outputs installed in the 2 marked generations.
|
||||
With ARG, run Diff on manifests of the marked generations."
|
||||
(interactive "P")
|
||||
(if arg
|
||||
(guix-generation-list-diff-manifests)
|
||||
(guix-generation-list-diff-packages)))
|
||||
|
||||
(defun guix-generation-list-mark-delete (&optional arg)
|
||||
"Mark the current generation for deletion and move to the next line.
|
||||
With ARG, mark all generations for deletion."
|
||||
(interactive "P")
|
||||
(if arg
|
||||
(guix-list-mark-all 'delete)
|
||||
(guix-list--mark 'delete t)))
|
||||
|
||||
(defun guix-generation-list-execute ()
|
||||
"Delete marked generations."
|
||||
(interactive)
|
||||
(let ((marked (guix-list-get-marked-id-list 'delete)))
|
||||
(or marked
|
||||
(user-error "No generations marked for deletion"))
|
||||
(guix-delete-generations guix-profile marked (current-buffer))))
|
||||
|
||||
(provide 'guix-list)
|
||||
|
||||
;;; guix-list.el ends here
|
||||
-1014
File diff suppressed because it is too large
Load Diff
@@ -1,208 +0,0 @@
|
||||
;;; guix-messages.el --- Minibuffer messages
|
||||
|
||||
;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides `guix-result-message' function used to show a
|
||||
;; minibuffer message after displaying packages/generations in a
|
||||
;; list/info buffer.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'cl-lib)
|
||||
(require 'guix-utils)
|
||||
|
||||
(defvar guix-messages
|
||||
`((package
|
||||
(id
|
||||
(0 "Packages not found.")
|
||||
(1 "")
|
||||
(many "%d packages." count))
|
||||
(name
|
||||
,(lambda (_ entries names)
|
||||
(guix-message-packages-by-name entries 'package names)))
|
||||
(regexp
|
||||
(0 "No packages matching '%s'." val)
|
||||
(1 "A single package matching '%s'." val)
|
||||
(many "%d packages matching '%s'." count val))
|
||||
(all-available
|
||||
(0 "No packages are available for some reason.")
|
||||
(1 "A single available package (that's strange).")
|
||||
(many "%d available packages." count))
|
||||
(newest-available
|
||||
(0 "No packages are available for some reason.")
|
||||
(1 "A single newest available package (that's strange).")
|
||||
(many "%d newest available packages." count))
|
||||
(installed
|
||||
(0 "No packages installed in profile '%s'." profile)
|
||||
(1 "A single package installed in profile '%s'." profile)
|
||||
(many "%d packages installed in profile '%s'." count profile))
|
||||
(obsolete
|
||||
(0 "No obsolete packages in profile '%s'." profile)
|
||||
(1 "A single obsolete package in profile '%s'." profile)
|
||||
(many "%d obsolete packages in profile '%s'." count profile))
|
||||
(generation
|
||||
(0 "No packages installed in generation %d of profile '%s'."
|
||||
val profile)
|
||||
(1 "A single package installed in generation %d of profile '%s'."
|
||||
val profile)
|
||||
(many "%d packages installed in generation %d of profile '%s'."
|
||||
count val profile)))
|
||||
|
||||
(output
|
||||
(id
|
||||
(0 "Package outputs not found.")
|
||||
(1 "")
|
||||
(many "%d package outputs." count))
|
||||
(name
|
||||
,(lambda (_ entries names)
|
||||
(guix-message-packages-by-name entries 'output names)))
|
||||
(regexp
|
||||
(0 "No package outputs matching '%s'." val)
|
||||
(1 "A single package output matching '%s'." val)
|
||||
(many "%d package outputs matching '%s'." count val))
|
||||
(all-available
|
||||
(0 "No package outputs are available for some reason.")
|
||||
(1 "A single available package output (that's strange).")
|
||||
(many "%d available package outputs." count))
|
||||
(newest-available
|
||||
(0 "No package outputs are available for some reason.")
|
||||
(1 "A single newest available package output (that's strange).")
|
||||
(many "%d newest available package outputs." count))
|
||||
(installed
|
||||
(0 "No package outputs installed in profile '%s'." profile)
|
||||
(1 "A single package output installed in profile '%s'." profile)
|
||||
(many "%d package outputs installed in profile '%s'." count profile))
|
||||
(obsolete
|
||||
(0 "No obsolete package outputs in profile '%s'." profile)
|
||||
(1 "A single obsolete package output in profile '%s'." profile)
|
||||
(many "%d obsolete package outputs in profile '%s'." count profile))
|
||||
(generation
|
||||
(0 "No package outputs installed in generation %d of profile '%s'."
|
||||
val profile)
|
||||
(1 "A single package output installed in generation %d of profile '%s'."
|
||||
val profile)
|
||||
(many "%d package outputs installed in generation %d of profile '%s'."
|
||||
count val profile))
|
||||
(generation-diff
|
||||
guix-message-outputs-by-diff))
|
||||
|
||||
(generation
|
||||
(id
|
||||
(0 "Generations not found.")
|
||||
(1 "")
|
||||
(many "%d generations." count))
|
||||
(last
|
||||
(0 "No generations in profile '%s'." profile)
|
||||
(1 "The last generation of profile '%s'." profile)
|
||||
(many "%d last generations of profile '%s'." count profile))
|
||||
(all
|
||||
(0 "No generations in profile '%s'." profile)
|
||||
(1 "A single generation available in profile '%s'." profile)
|
||||
(many "%d generations available in profile '%s'." count profile))
|
||||
(time
|
||||
guix-message-generations-by-time))))
|
||||
|
||||
(defun guix-message-string-name (name)
|
||||
"Return a quoted name string."
|
||||
(concat "'" name "'"))
|
||||
|
||||
(defun guix-message-string-entry-type (entry-type &optional plural)
|
||||
"Return a string denoting an ENTRY-TYPE."
|
||||
(cl-ecase entry-type
|
||||
(package
|
||||
(if plural "packages" "package"))
|
||||
(output
|
||||
(if plural "package outputs" "package output"))
|
||||
(generation
|
||||
(if plural "generations" "generation"))))
|
||||
|
||||
(defun guix-message-string-entries (count entry-type)
|
||||
"Return a string denoting the COUNT of ENTRY-TYPE entries."
|
||||
(cl-case count
|
||||
(0 (concat "No "
|
||||
(guix-message-string-entry-type
|
||||
entry-type 'plural)))
|
||||
(1 (concat "A single "
|
||||
(guix-message-string-entry-type
|
||||
entry-type)))
|
||||
(t (format "%d %s"
|
||||
count
|
||||
(guix-message-string-entry-type
|
||||
entry-type 'plural)))))
|
||||
|
||||
(defun guix-message-packages-by-name (entries entry-type names)
|
||||
"Display a message for packages or outputs searched by NAMES."
|
||||
(let* ((count (length entries))
|
||||
(str-beg (guix-message-string-entries count entry-type))
|
||||
(str-end (if (cdr names)
|
||||
(concat "matching the following names: "
|
||||
(mapconcat #'guix-message-string-name
|
||||
names ", "))
|
||||
(concat "with name "
|
||||
(guix-message-string-name (car names))))))
|
||||
(message "%s %s." str-beg str-end)))
|
||||
|
||||
(defun guix-message-generations-by-time (profile entries times)
|
||||
"Display a message for generations searched by TIMES."
|
||||
(let* ((count (length entries))
|
||||
(str-beg (guix-message-string-entries count 'generation))
|
||||
(time-beg (guix-get-time-string (car times)))
|
||||
(time-end (guix-get-time-string (cadr times))))
|
||||
(message (concat "%s of profile '%s'\n"
|
||||
"matching time period '%s' - '%s'.")
|
||||
str-beg profile time-beg time-end)))
|
||||
|
||||
(defun guix-message-outputs-by-diff (profile entries generations)
|
||||
"Display a message for outputs searched by GENERATIONS difference."
|
||||
(let* ((count (length entries))
|
||||
(str-beg (guix-message-string-entries count 'output))
|
||||
(gen1 (car generations))
|
||||
(gen2 (cadr generations)))
|
||||
(cl-multiple-value-bind (new old str-action)
|
||||
(if (> gen1 gen2)
|
||||
(list gen1 gen2 "added to")
|
||||
(list gen2 gen1 "removed from"))
|
||||
(message (concat "%s %s generation %d comparing with "
|
||||
"generation %d of profile '%s'.")
|
||||
str-beg str-action new old profile))))
|
||||
|
||||
(defun guix-result-message (profile entries entry-type
|
||||
search-type search-vals)
|
||||
"Display an appropriate message after displaying ENTRIES."
|
||||
(let* ((type-spec (guix-assq-value guix-messages
|
||||
entry-type search-type))
|
||||
(fun-or-count-spec (car type-spec)))
|
||||
(if (functionp fun-or-count-spec)
|
||||
(funcall fun-or-count-spec profile entries search-vals)
|
||||
(let* ((count (length entries))
|
||||
(count-key (if (> count 1) 'many count))
|
||||
(msg-spec (guix-assq-value type-spec count-key))
|
||||
(msg (car msg-spec))
|
||||
(args (cdr msg-spec)))
|
||||
(mapc (lambda (subst)
|
||||
(setq args (cl-substitute (cdr subst) (car subst) args)))
|
||||
`((count . ,count)
|
||||
(val . ,(car search-vals))
|
||||
(profile . ,profile)))
|
||||
(apply #'message msg args)))))
|
||||
|
||||
(provide 'guix-messages)
|
||||
|
||||
;;; guix-messages.el ends here
|
||||
@@ -1,367 +0,0 @@
|
||||
;;; guix-pcomplete.el --- Functions for completing guix commands -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides completions for "guix" command that may be used in
|
||||
;; `shell', `eshell' and wherever `pcomplete' works.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'pcomplete)
|
||||
(require 'pcmpl-unix)
|
||||
(require 'cl-lib)
|
||||
(require 'guix-utils)
|
||||
(require 'guix-help-vars)
|
||||
|
||||
|
||||
;;; Interacting with guix
|
||||
|
||||
(defcustom guix-pcomplete-guix-program (executable-find "guix")
|
||||
"Name of the 'guix' program.
|
||||
It is used to find guix commands, options, packages, etc."
|
||||
:type 'file
|
||||
:group 'pcomplete
|
||||
:group 'guix)
|
||||
|
||||
(defun guix-pcomplete-run-guix (&rest args)
|
||||
"Run `guix-pcomplete-guix-program' with ARGS.
|
||||
Insert the output to the current buffer."
|
||||
(apply #'call-process
|
||||
guix-pcomplete-guix-program nil t nil args))
|
||||
|
||||
(defun guix-pcomplete-run-guix-and-search (regexp &optional group
|
||||
&rest args)
|
||||
"Run `guix-pcomplete-guix-program' with ARGS and search for matches.
|
||||
Return a list of strings matching REGEXP.
|
||||
GROUP specifies a parenthesized expression used in REGEXP."
|
||||
(with-temp-buffer
|
||||
(apply #'guix-pcomplete-run-guix args)
|
||||
(let (result)
|
||||
(guix-while-search regexp
|
||||
(push (match-string-no-properties group) result))
|
||||
(nreverse result))))
|
||||
|
||||
(defmacro guix-pcomplete-define-options-finder (name docstring regexp
|
||||
&optional filter)
|
||||
"Define function NAME to receive guix options and commands.
|
||||
|
||||
The defined function takes an optional COMMAND argument. This
|
||||
function will run 'guix COMMAND --help' (or 'guix --help' if
|
||||
COMMAND is nil) using `guix-pcomplete-run-guix-and-search' and
|
||||
return its result.
|
||||
|
||||
If FILTER is specified, it should be a function. The result is
|
||||
passed to this FILTER as argument and the result value of this
|
||||
function call is returned."
|
||||
(declare (doc-string 2) (indent 1))
|
||||
`(guix-memoized-defun ,name (&optional command)
|
||||
,docstring
|
||||
(let* ((args '("--help"))
|
||||
(args (if command (cons command args) args))
|
||||
(res (apply #'guix-pcomplete-run-guix-and-search
|
||||
,regexp guix-help-parse-regexp-group args)))
|
||||
,(if filter
|
||||
`(funcall ,filter res)
|
||||
'res))))
|
||||
|
||||
(guix-pcomplete-define-options-finder guix-pcomplete-commands
|
||||
"If COMMAND is nil, return a list of available guix commands.
|
||||
If COMMAND is non-nil (it should be a string), return available
|
||||
subcommands, actions, etc. for this guix COMMAND."
|
||||
guix-help-parse-command-regexp)
|
||||
|
||||
(guix-pcomplete-define-options-finder guix-pcomplete-long-options
|
||||
"Return a list of available long options for guix COMMAND."
|
||||
guix-help-parse-long-option-regexp)
|
||||
|
||||
(guix-pcomplete-define-options-finder guix-pcomplete-short-options
|
||||
"Return a string with available short options for guix COMMAND."
|
||||
guix-help-parse-short-option-regexp
|
||||
(lambda (list)
|
||||
(guix-concat-strings list "")))
|
||||
|
||||
(guix-memoized-defun guix-pcomplete-all-packages ()
|
||||
"Return a list of all available Guix packages."
|
||||
(guix-pcomplete-run-guix-and-search
|
||||
guix-help-parse-package-regexp
|
||||
guix-help-parse-regexp-group
|
||||
"package" "--list-available"))
|
||||
|
||||
(guix-memoized-defun guix-pcomplete-installed-packages (&optional profile)
|
||||
"Return a list of Guix packages installed in PROFILE."
|
||||
(let* ((args (and profile
|
||||
(list (concat "--profile=" profile))))
|
||||
(args (append '("package" "--list-installed") args)))
|
||||
(apply #'guix-pcomplete-run-guix-and-search
|
||||
guix-help-parse-package-regexp
|
||||
guix-help-parse-regexp-group
|
||||
args)))
|
||||
|
||||
(guix-memoized-defun guix-pcomplete-lint-checkers ()
|
||||
"Return a list of all available lint checkers."
|
||||
(guix-pcomplete-run-guix-and-search
|
||||
guix-help-parse-list-regexp
|
||||
guix-help-parse-regexp-group
|
||||
"lint" "--list-checkers"))
|
||||
|
||||
(guix-memoized-defun guix-pcomplete-graph-types ()
|
||||
"Return a list of all available graph types."
|
||||
(guix-pcomplete-run-guix-and-search
|
||||
guix-help-parse-list-regexp
|
||||
guix-help-parse-regexp-group
|
||||
"graph" "--list-types"))
|
||||
|
||||
(guix-memoized-defun guix-pcomplete-refresh-updaters ()
|
||||
"Return a list of all available refresh updater types."
|
||||
(guix-pcomplete-run-guix-and-search
|
||||
guix-help-parse-list-regexp
|
||||
guix-help-parse-regexp-group
|
||||
"refresh" "--list-updaters"))
|
||||
|
||||
|
||||
;;; Completing
|
||||
|
||||
(defvar guix-pcomplete-option-regexp (rx string-start "-")
|
||||
"Regexp to match an option.")
|
||||
|
||||
(defvar guix-pcomplete-long-option-regexp (rx string-start "--")
|
||||
"Regexp to match a long option.")
|
||||
|
||||
(defvar guix-pcomplete-long-option-with-arg-regexp
|
||||
(rx string-start
|
||||
(group "--" (one-or-more any)) "="
|
||||
(group (zero-or-more any)))
|
||||
"Regexp to match a long option with its argument.
|
||||
The first parenthesized group defines the option and the second
|
||||
group - the argument.")
|
||||
|
||||
(defvar guix-pcomplete-short-option-with-arg-regexp
|
||||
(rx string-start
|
||||
(group "-" (not (any "-")))
|
||||
(group (zero-or-more any)))
|
||||
"Regexp to match a short option with its argument.
|
||||
The first parenthesized group defines the option and the second
|
||||
group - the argument.")
|
||||
|
||||
(defun guix-pcomplete-match-option ()
|
||||
"Return non-nil, if the current argument is an option."
|
||||
(pcomplete-match guix-pcomplete-option-regexp 0))
|
||||
|
||||
(defun guix-pcomplete-match-long-option ()
|
||||
"Return non-nil, if the current argument is a long option."
|
||||
(pcomplete-match guix-pcomplete-long-option-regexp 0))
|
||||
|
||||
(defun guix-pcomplete-match-long-option-with-arg ()
|
||||
"Return non-nil, if the current argument is a long option with value."
|
||||
(pcomplete-match guix-pcomplete-long-option-with-arg-regexp 0))
|
||||
|
||||
(defun guix-pcomplete-match-short-option-with-arg ()
|
||||
"Return non-nil, if the current argument is a short option with value."
|
||||
(pcomplete-match guix-pcomplete-short-option-with-arg-regexp 0))
|
||||
|
||||
(defun guix-pcomplete-long-option-arg (option args)
|
||||
"Return a long OPTION's argument from a list of arguments ARGS."
|
||||
(let* ((re (concat "\\`" option "=\\(.*\\)"))
|
||||
(args (cl-member-if (lambda (arg)
|
||||
(string-match re arg))
|
||||
args))
|
||||
(cur (car args)))
|
||||
(when cur
|
||||
(match-string-no-properties 1 cur))))
|
||||
|
||||
(defun guix-pcomplete-short-option-arg (option args)
|
||||
"Return a short OPTION's argument from a list of arguments ARGS."
|
||||
(let* ((re (concat "\\`" option "\\(.*\\)"))
|
||||
(args (cl-member-if (lambda (arg)
|
||||
(string-match re arg))
|
||||
args))
|
||||
(cur (car args)))
|
||||
(when cur
|
||||
(let ((arg (match-string-no-properties 1 cur)))
|
||||
(if (string= "" arg)
|
||||
(cadr args) ; take the next arg
|
||||
arg)))))
|
||||
|
||||
(defun guix-pcomplete-complete-comma-args (entries)
|
||||
"Complete comma separated arguments using ENTRIES."
|
||||
(let ((index pcomplete-index))
|
||||
(while (= index pcomplete-index)
|
||||
(let* ((args (if (or (guix-pcomplete-match-long-option-with-arg)
|
||||
(guix-pcomplete-match-short-option-with-arg))
|
||||
(pcomplete-match-string 2 0)
|
||||
(pcomplete-arg 0)))
|
||||
(input (if (string-match ".*,\\(.*\\)" args)
|
||||
(match-string-no-properties 1 args)
|
||||
args)))
|
||||
(pcomplete-here* entries input)))))
|
||||
|
||||
(defun guix-pcomplete-complete-command-arg (command)
|
||||
"Complete argument for guix COMMAND."
|
||||
(cond
|
||||
((member command
|
||||
'("archive" "build" "challenge" "edit" "environment"
|
||||
"graph" "lint" "refresh" "size"))
|
||||
(while t
|
||||
(pcomplete-here (guix-pcomplete-all-packages))))
|
||||
(t (pcomplete-here* (pcomplete-entries)))))
|
||||
|
||||
(defun guix-pcomplete-complete-option-arg (command option &optional input)
|
||||
"Complete argument for COMMAND's OPTION.
|
||||
INPUT is the current partially completed string."
|
||||
(cl-flet ((option? (short long)
|
||||
(or (string= option short)
|
||||
(string= option long)))
|
||||
(command? (&rest commands)
|
||||
(member command commands))
|
||||
(complete (entries)
|
||||
(pcomplete-here entries input nil t))
|
||||
(complete* (entries)
|
||||
(pcomplete-here* entries input t)))
|
||||
(cond
|
||||
((option? "-L" "--load-path")
|
||||
(complete* (pcomplete-dirs)))
|
||||
((string= "--key-download" option)
|
||||
(complete* guix-help-key-policies))
|
||||
|
||||
((command? "package")
|
||||
(cond
|
||||
;; For '--install[=]' and '--remove[=]', try to complete a package
|
||||
;; name (INPUT) after the "=" sign, and then the rest packages
|
||||
;; separated with spaces.
|
||||
((option? "-i" "--install")
|
||||
(complete (guix-pcomplete-all-packages))
|
||||
(while (not (guix-pcomplete-match-option))
|
||||
(pcomplete-here (guix-pcomplete-all-packages))))
|
||||
((option? "-r" "--remove")
|
||||
(let* ((profile (or (guix-pcomplete-short-option-arg
|
||||
"-p" pcomplete-args)
|
||||
(guix-pcomplete-long-option-arg
|
||||
"--profile" pcomplete-args)))
|
||||
(profile (and profile (expand-file-name profile))))
|
||||
(complete (guix-pcomplete-installed-packages profile))
|
||||
(while (not (guix-pcomplete-match-option))
|
||||
(pcomplete-here (guix-pcomplete-installed-packages profile)))))
|
||||
((string= "--show" option)
|
||||
(complete (guix-pcomplete-all-packages)))
|
||||
((option? "-p" "--profile")
|
||||
(complete* (pcomplete-dirs)))
|
||||
((option? "-m" "--manifest")
|
||||
(complete* (pcomplete-entries)))))
|
||||
|
||||
((and (command? "archive" "build" "size")
|
||||
(option? "-s" "--system"))
|
||||
(complete* guix-help-system-types))
|
||||
|
||||
((and (command? "build")
|
||||
(option? "-r" "--root"))
|
||||
(complete* (pcomplete-entries)))
|
||||
|
||||
((and (command? "graph")
|
||||
(option? "-t" "--type"))
|
||||
(complete* (guix-pcomplete-graph-types)))
|
||||
|
||||
((and (command? "environment")
|
||||
(option? "-l" "--load"))
|
||||
(complete* (pcomplete-entries)))
|
||||
|
||||
((and (command? "hash" "download")
|
||||
(option? "-f" "--format"))
|
||||
(complete* guix-help-hash-formats))
|
||||
|
||||
((and (command? "lint")
|
||||
(option? "-c" "--checkers"))
|
||||
(guix-pcomplete-complete-comma-args
|
||||
(guix-pcomplete-lint-checkers)))
|
||||
|
||||
((and (command? "publish")
|
||||
(option? "-u" "--user"))
|
||||
(complete* (pcmpl-unix-user-names)))
|
||||
|
||||
((command? "refresh")
|
||||
(cond
|
||||
((option? "-s" "--select")
|
||||
(complete* guix-help-refresh-subsets))
|
||||
((option? "-t" "--type")
|
||||
(guix-pcomplete-complete-comma-args
|
||||
(guix-pcomplete-refresh-updaters)))))
|
||||
|
||||
((and (command? "size")
|
||||
(option? "-m" "--map-file"))
|
||||
(complete* (pcomplete-entries))))))
|
||||
|
||||
(defun guix-pcomplete-complete-options (command)
|
||||
"Complete options (with their arguments) for guix COMMAND."
|
||||
(while (guix-pcomplete-match-option)
|
||||
(let ((index pcomplete-index))
|
||||
(if (guix-pcomplete-match-long-option)
|
||||
|
||||
;; Long options.
|
||||
(if (guix-pcomplete-match-long-option-with-arg)
|
||||
(let ((option (pcomplete-match-string 1 0))
|
||||
(arg (pcomplete-match-string 2 0)))
|
||||
(guix-pcomplete-complete-option-arg
|
||||
command option arg))
|
||||
|
||||
(pcomplete-here* (guix-pcomplete-long-options command))
|
||||
;; We support '--opt arg' style (along with '--opt=arg'),
|
||||
;; because 'guix package --install/--remove' may be used this
|
||||
;; way. So try to complete an argument after the option has
|
||||
;; been completed.
|
||||
(unless (guix-pcomplete-match-option)
|
||||
(guix-pcomplete-complete-option-arg
|
||||
command (pcomplete-arg 0 -1))))
|
||||
|
||||
;; Short options.
|
||||
(let ((arg (pcomplete-arg 0)))
|
||||
(if (> (length arg) 2)
|
||||
;; Support specifying an argument after a short option without
|
||||
;; spaces (for example, '-L/tmp/foo').
|
||||
(guix-pcomplete-complete-option-arg
|
||||
command
|
||||
(substring-no-properties arg 0 2)
|
||||
(substring-no-properties arg 2))
|
||||
(pcomplete-opt (guix-pcomplete-short-options command))
|
||||
(guix-pcomplete-complete-option-arg
|
||||
command (pcomplete-arg 0 -1)))))
|
||||
|
||||
;; If there were no completions, move to the next argument and get
|
||||
;; out if the last argument is achieved.
|
||||
(when (= index pcomplete-index)
|
||||
(if (= pcomplete-index pcomplete-last)
|
||||
(throw 'pcompleted nil)
|
||||
(pcomplete-next-arg))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun pcomplete/guix ()
|
||||
"Completion for `guix'."
|
||||
(let ((commands (guix-pcomplete-commands)))
|
||||
(pcomplete-here* (cons "--help" commands))
|
||||
(let ((command (pcomplete-arg 'first 1)))
|
||||
(when (member command commands)
|
||||
(guix-pcomplete-complete-options command)
|
||||
(let ((subcommands (guix-pcomplete-commands command)))
|
||||
(when subcommands
|
||||
(pcomplete-here* subcommands)))
|
||||
(guix-pcomplete-complete-options command)
|
||||
(guix-pcomplete-complete-command-arg command)))))
|
||||
|
||||
(provide 'guix-pcomplete)
|
||||
|
||||
;;; guix-pcomplete.el ends here
|
||||
@@ -1,48 +0,0 @@
|
||||
;;; guix-popup.el --- Popup windows library
|
||||
|
||||
;; Copyright © 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This file provides `guix-define-popup' macro which is just an alias
|
||||
;; to `magit-define-popup'. According to the manual (info
|
||||
;; "(magit-popup) Defining prefix and suffix commands") `magit-popup'
|
||||
;; library will eventually be superseded by a more general library.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'magit-popup)
|
||||
|
||||
(defalias 'guix-define-popup 'magit-define-popup)
|
||||
|
||||
(defvar guix-popup-font-lock-keywords
|
||||
(eval-when-compile
|
||||
`((,(rx "("
|
||||
(group "guix-define-popup")
|
||||
symbol-end
|
||||
(zero-or-more blank)
|
||||
(zero-or-one
|
||||
(group (one-or-more (or (syntax word) (syntax symbol))))))
|
||||
(1 font-lock-keyword-face)
|
||||
(2 font-lock-function-name-face nil t)))))
|
||||
|
||||
(font-lock-add-keywords 'emacs-lisp-mode guix-popup-font-lock-keywords)
|
||||
|
||||
(provide 'guix-popup)
|
||||
|
||||
;;; guix-popup.el ends here
|
||||
@@ -1,210 +0,0 @@
|
||||
;;; guix-prettify.el --- Prettify Guix store file names
|
||||
|
||||
;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This package provides minor-mode for prettifying Guix store file
|
||||
;; names — i.e., after enabling `guix-prettify-mode',
|
||||
;; '/gnu/store/72f54nfp6g1hz873w8z3gfcah0h4nl9p-foo-0.1' names will be
|
||||
;; replaced with '/gnu/store/…-foo-0.1' in the current buffer. There is
|
||||
;; also `global-guix-prettify-mode' for global prettifying.
|
||||
|
||||
;; To install, add the following to your emacs init file:
|
||||
;;
|
||||
;; (add-to-list 'load-path "/path/to/dir-with-guix-prettify")
|
||||
;; (autoload 'guix-prettify-mode "guix-prettify" nil t)
|
||||
;; (autoload 'global-guix-prettify-mode "guix-prettify" nil t)
|
||||
|
||||
;; If you want to enable/disable composition after "M-x font-lock-mode",
|
||||
;; use the following setting:
|
||||
;;
|
||||
;; (setq font-lock-extra-managed-props
|
||||
;; (cons 'composition font-lock-extra-managed-props))
|
||||
|
||||
;; Credits:
|
||||
;;
|
||||
;; Thanks to Ludovic Courtès for the idea of this package.
|
||||
;;
|
||||
;; Thanks to the authors of `prettify-symbols-mode' (part of Emacs 24.4)
|
||||
;; and "pretty-symbols.el" <http://github.com/drothlis/pretty-symbols>
|
||||
;; for the code. It helped to write this package.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'guix-utils)
|
||||
|
||||
(defgroup guix-prettify nil
|
||||
"Prettify Guix store file names."
|
||||
:prefix "guix-prettify-"
|
||||
:group 'guix
|
||||
:group 'font-lock
|
||||
:group 'convenience)
|
||||
|
||||
(defcustom guix-prettify-char ?…
|
||||
"Character used for prettifying."
|
||||
:type 'character
|
||||
:group 'guix-prettify)
|
||||
|
||||
(defcustom guix-prettify-decompose-force nil
|
||||
"If non-nil, remove any composition.
|
||||
|
||||
By default, after disabling `guix-prettify-mode',
|
||||
compositions (prettifying names with `guix-prettify-char') are
|
||||
removed only from strings matching `guix-prettify-regexp', so
|
||||
that compositions created by other modes are left untouched.
|
||||
|
||||
Set this variable to non-nil, if you want to remove any
|
||||
composition unconditionally (like `prettify-symbols-mode' does).
|
||||
Most likely it will do no harm and will make the process of
|
||||
disabling `guix-prettify-mode' a little faster."
|
||||
:type 'boolean
|
||||
:group 'guix-prettify)
|
||||
|
||||
(defcustom guix-prettify-regexp
|
||||
;; The following file names / URLs should be abbreviated:
|
||||
|
||||
;; /gnu/store/…-foo-0.1
|
||||
;; /nix/store/…-foo-0.1
|
||||
;; http://hydra.gnu.org/nar/…-foo-0.1
|
||||
;; http://hydra.gnu.org/log/…-foo-0.1
|
||||
|
||||
(rx "/" (or "store" "nar" "log") "/"
|
||||
;; Hash-parts do not include "e", "o", "u" and "t". See base32Chars
|
||||
;; at <https://github.com/NixOS/nix/blob/master/src/libutil/hash.cc>
|
||||
(group (= 32 (any "0-9" "a-d" "f-n" "p-s" "v-z"))))
|
||||
"Regexp matching file names for prettifying.
|
||||
|
||||
Disable `guix-prettify-mode' before modifying this variable and
|
||||
make sure to modify `guix-prettify-regexp-group' if needed.
|
||||
|
||||
Example of a \"deeper\" prettifying:
|
||||
|
||||
(setq guix-prettify-regexp \"store/[[:alnum:]]\\\\\\={32\\\\}\"
|
||||
guix-prettify-regexp-group 0)
|
||||
|
||||
This will transform
|
||||
'/gnu/store/72f54nfp6g1hz873w8z3gfcah0h4nl9p-foo-0.1' into
|
||||
'/gnu/…-foo-0.1'"
|
||||
:type 'regexp
|
||||
:group 'guix-prettify)
|
||||
|
||||
(defcustom guix-prettify-regexp-group 1
|
||||
"Regexp group in `guix-prettify-regexp' for prettifying."
|
||||
:type 'integer
|
||||
:group 'guix-prettify)
|
||||
|
||||
(defvar guix-prettify-special-modes
|
||||
'(guix-info-mode ibuffer-mode)
|
||||
"List of special modes that support font-locking.
|
||||
|
||||
By default, \\[global-guix-prettify-mode] enables prettifying in
|
||||
all buffers except the ones where `font-lock-defaults' is
|
||||
nil (see Info node `(elisp) Font Lock Basics'), because it may
|
||||
break the existing highlighting.
|
||||
|
||||
Modes from this list and all derived modes are exceptions
|
||||
\(`global-guix-prettify-mode' enables prettifying there).")
|
||||
|
||||
(defvar guix-prettify-flush-function
|
||||
(cond ((fboundp 'font-lock-flush) #'font-lock-flush)
|
||||
((fboundp 'jit-lock-refontify) #'jit-lock-refontify))
|
||||
"Function used to refontify buffer.
|
||||
This function is called without arguments after
|
||||
enabling/disabling `guix-prettify-mode'. If nil, do nothing.")
|
||||
|
||||
(defun guix-prettify-compose ()
|
||||
"Compose matching region in the current buffer."
|
||||
(let ((beg (match-beginning guix-prettify-regexp-group))
|
||||
(end (match-end guix-prettify-regexp-group)))
|
||||
(compose-region beg end guix-prettify-char 'decompose-region))
|
||||
;; Return nil because we're not adding any face property.
|
||||
nil)
|
||||
|
||||
(defun guix-prettify-decompose-buffer ()
|
||||
"Remove file names compositions from the current buffer."
|
||||
(with-silent-modifications
|
||||
(let ((inhibit-read-only t))
|
||||
(if guix-prettify-decompose-force
|
||||
(remove-text-properties (point-min)
|
||||
(point-max)
|
||||
'(composition nil))
|
||||
(guix-while-search guix-prettify-regexp
|
||||
(remove-text-properties
|
||||
(match-beginning guix-prettify-regexp-group)
|
||||
(match-end guix-prettify-regexp-group)
|
||||
'(composition nil)))))))
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode guix-prettify-mode
|
||||
"Toggle Guix Prettify mode.
|
||||
|
||||
With a prefix argument ARG, enable Guix Prettify mode if ARG is
|
||||
positive, and disable it otherwise. If called from Lisp, enable
|
||||
the mode if ARG is omitted or nil.
|
||||
|
||||
When Guix Prettify mode is enabled, hash-parts of the Guix store
|
||||
file names (see `guix-prettify-regexp') are prettified,
|
||||
i.e. displayed as `guix-prettify-char' character. This mode can
|
||||
be enabled programmatically using hooks:
|
||||
|
||||
(add-hook 'shell-mode-hook 'guix-prettify-mode)
|
||||
|
||||
It is possible to enable the mode in any buffer, however not any
|
||||
buffer's highlighting may survive after adding new elements to
|
||||
`font-lock-keywords' (see `guix-prettify-special-modes' for
|
||||
details).
|
||||
|
||||
Also you can use `global-guix-prettify-mode' to enable Guix
|
||||
Prettify mode for all modes that support font-locking."
|
||||
:init-value nil
|
||||
:lighter " …"
|
||||
(let ((keywords `((,guix-prettify-regexp
|
||||
(,guix-prettify-regexp-group
|
||||
(guix-prettify-compose))))))
|
||||
(if guix-prettify-mode
|
||||
;; Turn on.
|
||||
(font-lock-add-keywords nil keywords)
|
||||
;; Turn off.
|
||||
(font-lock-remove-keywords nil keywords)
|
||||
(guix-prettify-decompose-buffer))
|
||||
(and guix-prettify-flush-function
|
||||
(funcall guix-prettify-flush-function))))
|
||||
|
||||
(defun guix-prettify-supported-p ()
|
||||
"Return non-nil, if the mode can be harmlessly enabled in current buffer."
|
||||
(or font-lock-defaults
|
||||
(apply #'derived-mode-p guix-prettify-special-modes)))
|
||||
|
||||
(defun guix-prettify-turn-on ()
|
||||
"Enable `guix-prettify-mode' in the current buffer if needed.
|
||||
See `guix-prettify-special-modes' for details."
|
||||
(and (not guix-prettify-mode)
|
||||
(guix-prettify-supported-p)
|
||||
(guix-prettify-mode)))
|
||||
|
||||
;;;###autoload
|
||||
(define-globalized-minor-mode global-guix-prettify-mode
|
||||
guix-prettify-mode guix-prettify-turn-on)
|
||||
|
||||
;;;###autoload
|
||||
(defalias 'guix-prettify-global-mode 'global-guix-prettify-mode)
|
||||
|
||||
(provide 'guix-prettify)
|
||||
|
||||
;;; guix-prettify.el ends here
|
||||
@@ -1,64 +0,0 @@
|
||||
;;; guix-profiles.el --- Guix profiles
|
||||
|
||||
;; Copyright © 2014 Alex Kost <alezost@gmail.com>
|
||||
|
||||
;; This file is part of GNU Guix.
|
||||
|
||||
;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'guix-config)
|
||||
|
||||
(defvar guix-user-profile
|
||||
(expand-file-name "~/.guix-profile")
|
||||
"User profile.")
|
||||
|
||||
(defvar guix-default-profile
|
||||
(concat guix-config-state-directory
|
||||
"/profiles/per-user/"
|
||||
(getenv "USER")
|
||||
"/guix-profile")
|
||||
"Default Guix profile.")
|
||||
|
||||
(defvar guix-current-profile guix-default-profile
|
||||
"Current profile.")
|
||||
|
||||
(defun guix-profile-prompt (&optional default)
|
||||
"Prompt for profile and return it.
|
||||
Use DEFAULT as a start directory. If it is nil, use
|
||||
`guix-current-profile'."
|
||||
(let* ((path (read-file-name "Profile: "
|
||||
(file-name-directory
|
||||
(or default guix-current-profile))))
|
||||
(path (directory-file-name (expand-file-name path))))
|
||||
(if (string= path guix-user-profile)
|
||||
guix-default-profile
|
||||
path)))
|
||||
|
||||
(defun guix-set-current-profile (path)
|
||||
"Set `guix-current-profile' to PATH.
|
||||
Interactively, prompt for PATH. With prefix, use
|
||||
`guix-default-profile'."
|
||||
(interactive
|
||||
(list (if current-prefix-arg
|
||||
guix-default-profile
|
||||
(guix-profile-prompt))))
|
||||
(setq guix-current-profile path)
|
||||
(message "Current profile has been set to '%s'."
|
||||
guix-current-profile))
|
||||
|
||||
(provide 'guix-profiles)
|
||||
|
||||
;;; guix-profiles.el ends here
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user