2 @chapter Emacs Interface
5 GNU Guix comes with several useful modules (known as ``guix.el'') for
6 GNU@tie{}Emacs which are intended to make an Emacs user interaction with
7 Guix convenient and fun.
10 * Initial Setup: Emacs Initial Setup. Preparing @file{~/.emacs}.
11 * Package Management: Emacs Package Management. Managing packages and generations.
12 * Licenses: Emacs Licenses. Interface for licenses of Guix packages.
13 * Package Source Locations: Emacs Package Locations. Interface for package location files.
14 * Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
15 * Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
16 * Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
17 * Completions: Emacs Completions. Completing @command{guix} shell command.
18 * Development: Emacs Development. Tools for Guix developers.
19 * Hydra: Emacs Hydra. Interface for Guix build farm.
23 @node Emacs Initial Setup
24 @section Initial Setup
26 On the Guix System Distribution (@pxref{GNU Distribution}), ``guix.el''
27 is ready to use, provided Guix is installed system-wide, which is the
28 case by default. So if that is what you're using, you can happily skip
29 this section and read about the fun stuff.
31 If you're not yet a happy user of GuixSD, a little bit of setup is needed.
32 To be able to use ``guix.el'', you need to install the following
37 @uref{http://www.gnu.org/software/emacs/, GNU Emacs}, version 24.3 or
41 @uref{http://nongnu.org/geiser/, Geiser}, version 0.3 or later: it is
42 used for interacting with the Guile process.
45 @uref{https://github.com/magit/magit/, magit-popup library}. You
46 already have this library if you use Magit 2.1.0 or later. This library
47 is an optional dependency---it is required only for @kbd{M-x@tie{}guix}
48 command (@pxref{Emacs Popup Interface}).
52 When it is done, ``guix.el'' may be configured by requiring
53 @code{guix-autoloads} file. If you install Guix in your user profile,
54 this auto-loading is done automatically by our Emacs package
55 (@pxref{Application Setup}), so a universal recipe for configuring
56 ``guix.el'' is: @command{guix package -i guix}. If you do this, there
57 is no need to read further.
59 For the manual installation, you need to add the following code into
60 your init file (@pxref{Init File,,, emacs, The GNU Emacs Manual}):
63 (add-to-list 'load-path "/path/to/directory-with-guix.el")
64 (require 'guix-autoloads nil t)
67 So the only thing you need to figure out is where the directory with
68 elisp files for Guix is placed. It depends on how you installed Guix:
72 If it was installed by a package manager of your distribution or by a
73 usual @code{./configure && make && make install} command sequence, then
74 elisp files are placed in a standard directory with Emacs packages
75 (usually it is @file{/usr/share/emacs/site-lisp/}), which is already in
76 @code{load-path}, so there is no need to add that directory there. Note
77 that if you don't update this installation periodically, you may get an
78 outdated Emacs code which does not work with the current Guile code of
82 If you used a binary installation method (@pxref{Binary Installation}),
83 then Guix is installed somewhere in the store, so the elisp files are
84 placed in @file{/gnu/store/@dots{}-guix-0.8.2/share/emacs/site-lisp/} or
85 alike. However it is not recommended to refer directly to a store
86 directory, as it may be garbage-collected one day. So a better choice
87 would be to install Guix using Guix itself with @command{guix package -i
91 If you did not install Guix at all and prefer a hacking way
92 (@pxref{Running Guix Before It Is Installed}), along with augmenting
93 @code{load-path} you need to set @code{guix-load-path} variable to the
94 same directory, so your final configuration will look like this:
97 (let ((dir "/path/to/your-guix-git-tree/emacs"))
98 (add-to-list 'load-path dir)
99 (setq guix-load-path dir))
100 (require 'guix-autoloads nil t)
105 @node Emacs Package Management
106 @section Package Management
108 Once ``guix.el'' has been successfully configured, you should be able to
109 use a visual interface for routine package management tasks, pretty much
110 like the @command{guix package} command (@pxref{Invoking guix package}).
111 Specifically, it makes it easy to:
114 @item browse and display packages and generations;
115 @item search, install, upgrade and remove packages;
116 @item display packages from previous generations;
117 @item do some other useful things.
121 * Commands: Emacs Commands. @kbd{M-x guix-@dots{}}
122 * General information: Emacs General info. Common for both interfaces.
123 * ``List'' buffer: Emacs List buffer. List-like interface.
124 * ``Info'' buffer: Emacs Info buffer. Help-like interface.
125 * Configuration: Emacs Configuration. Configuring the interface.
131 All commands for displaying packages and generations use the current
132 profile, which can be changed with
133 @kbd{M-x@tie{}guix-set-current-profile}. Alternatively, if you call any
134 of these commands with prefix argument (@kbd{C-u}), you will be prompted
135 for a profile just for that command.
137 Commands for displaying packages:
141 @item M-x guix-all-available-packages
142 @itemx M-x guix-newest-available-packages
143 Display all/newest available packages.
145 @item M-x guix-installed-packages
146 @itemx M-x guix-installed-user-packages
147 @itemx M-x guix-installed-system-packages
148 Display installed packages. As described above, @kbd{M-x
149 guix-installed-packages} uses an arbitrary profile that you can specify,
150 while the other commands display packages installed in 2 special
151 profiles: @file{~/.guix-profile} and @file{/run/current-system/profile}
154 @item M-x guix-obsolete-packages
155 Display obsolete packages (the packages that are installed in a profile
156 but cannot be found among available packages).
158 @item M-x guix-packages-by-name
159 Display package(s) with the specified name.
161 @item M-x guix-packages-by-license
162 Display package(s) with the specified license.
164 @item M-x guix-packages-by-location
165 Display package(s) located in the specified file. These files usually
166 have the following form: @file{gnu/packages/emacs.scm}, but don't type
167 them manually! Press @key{TAB} to complete the file name.
169 @item M-x guix-package-from-file
170 Display package that the code within the specified file evaluates to.
171 @xref{Invoking guix package, @code{--install-from-file}}, for an example
172 of what such a file may look like.
174 @item M-x guix-search-by-regexp
175 Search for packages by a specified regexp. By default ``name'',
176 ``synopsis'' and ``description'' of the packages will be searched. This
177 can be changed by modifying @code{guix-package-search-params} variable.
179 @item M-x guix-search-by-name
180 Search for packages with names matching a specified regexp. This
181 command is the same as @code{guix-search-by-regexp}, except only a
182 package ``name'' is searched.
186 By default, these commands display each output on a separate line. If
187 you prefer to see a list of packages---i.e., a list with a package per
188 line, use the following setting:
191 (setq guix-package-list-type 'package)
194 Commands for displaying generations:
198 @item M-x guix-generations
199 List all the generations.
201 @item M-x guix-last-generations
202 List the @var{N} last generations. You will be prompted for the number
205 @item M-x guix-generations-by-time
206 List generations matching time period. You will be prompted for the
207 period using Org mode time prompt based on Emacs calendar (@pxref{The
208 date/time prompt,,, org, The Org Manual}).
212 Analogously on GuixSD you can also display system generations:
215 @item M-x guix-system-generations
216 @item M-x guix-last-system-generations
217 @item M-x guix-system-generations-by-time
220 You can also invoke the @command{guix pull} command (@pxref{Invoking
221 guix pull}) from Emacs using:
225 With @kbd{C-u}, make it verbose.
228 Once @command{guix pull} has succeeded, the Guix REPL is restarted. This
229 allows you to keep using the Emacs interface with the updated Guix.
232 @node Emacs General info
233 @subsection General information
235 The following keys are available for both ``list'' and ``info'' types of
241 Go backward/forward by the history of the displayed results (this
242 history is similar to the history of the Emacs @code{help-mode} or
246 Revert current buffer: update information about the displayed
247 packages/generations and redisplay it.
250 Redisplay current buffer (without updating information).
253 Apply manifest to the current profile or to a specified profile, if
254 prefix argument is used. This has the same meaning as @code{--manifest}
255 option (@pxref{Invoking guix package}).
259 @cindex read-eval-print loop
260 Go to the Guix REPL (@pxref{The REPL,,, geiser, Geiser User Manual}).
264 Describe current mode to see all available bindings.
268 @emph{Hint:} If you need several ``list'' or ``info'' buffers, you can
269 simply @kbd{M-x clone-buffer} them, and each buffer will have its own
272 @emph{Warning:} Name/version pairs cannot be used to identify packages
273 (because a name is not necessarily unique), so ``guix.el'' uses special
274 identifiers that live only during a guile session, so if the Guix REPL
275 was restarted, you may want to revert ``list'' buffer (by pressing
278 @node Emacs List buffer
279 @subsection ``List'' buffer
281 An interface of a ``list'' buffer is similar to the interface provided
282 by ``package.el'' (@pxref{Package Menu,,, emacs, The GNU Emacs Manual}).
284 Default key bindings available for both ``package-list'' and
285 ``generation-list'' buffers:
289 Mark the current entry (with prefix, mark all entries).
291 Unmark the current entry (with prefix, unmark all entries).
295 Sort entries by a specified column.
298 A ``package-list'' buffer additionally provides the following bindings:
302 Describe marked packages (display available information in a
303 ``package-info'' buffer).
305 Mark the current package for installation.
307 Mark the current package for deletion.
309 Mark the current package for upgrading.
311 Mark all obsolete packages for upgrading.
313 Edit the definition of the current package (go to its location). This is
314 similar to @command{guix edit} command (@pxref{Invoking guix edit}), but
315 for opening a package recipe in the current Emacs instance.
317 Execute actions on the marked packages.
319 Display latest builds of the current package (@pxref{Emacs Hydra}).
322 A ``generation-list'' buffer additionally provides the following
327 List packages installed in the current generation.
329 Describe marked generations (display available information in a
330 ``generation-info'' buffer).
332 Switch profile to the current generation.
334 Mark the current generation for deletion (with prefix, mark all
337 Execute actions on the marked generations---i.e., delete generations.
339 Run Ediff (@pxref{Top,,, ediff, The Ediff Manual}) on package outputs
340 installed in the 2 marked generations. With prefix argument, run Ediff
341 on manifests of the marked generations.
344 Run Diff (@pxref{Diff Mode,,, emacs, The GNU Emacs Manual}) on package
345 outputs installed in the 2 marked generations. With prefix argument,
346 run Diff on manifests of the marked generations.
348 List package outputs added to the latest marked generation comparing
349 with another marked generation.
351 List package outputs removed from the latest marked generation comparing
352 with another marked generation.
355 @node Emacs Info buffer
356 @subsection ``Info'' buffer
358 The interface of an ``info'' buffer is similar to the interface of
359 @code{help-mode} (@pxref{Help Mode,,, emacs, The GNU Emacs Manual}).
361 ``Info'' buffer contains some buttons (as usual you may use @key{TAB} /
362 @kbd{S-@key{TAB}} to move between buttons---@pxref{Mouse References,,,
363 emacs, The GNU Emacs Manual}) which can be used to:
366 @item (in a ``package-info'' buffer)
369 @item install/remove a package;
370 @item jump to a package location;
371 @item browse home page of a package;
372 @item browse license URL;
373 @item describe packages from ``Inputs'' fields.
376 @item (in a ``generation-info'' buffer)
379 @item remove a generation;
380 @item switch to a generation;
381 @item list packages installed in a generation;
382 @item jump to a generation directory.
387 It is also possible to copy a button label (a link to an URL or a file)
388 by pressing @kbd{c} on a button.
391 @node Emacs Configuration
392 @subsection Configuration
394 There are many variables you can modify to change the appearance or
395 behavior of Emacs user interface. Some of these variables are described
396 in this section. Also you can use Custom Interface (@pxref{Easy
397 Customization,,, emacs, The GNU Emacs Manual}) to explore/set variables
401 * Guile and Build Options: Emacs Build Options. Specifying how packages are built.
402 * Buffer Names: Emacs Buffer Names. Names of Guix buffers.
403 * Keymaps: Emacs Keymaps. Configuring key bindings.
404 * Appearance: Emacs Appearance. Settings for visual appearance.
407 @node Emacs Build Options
408 @subsubsection Guile and Build Options
411 @item guix-guile-program
412 If you have some special needs for starting a Guile process, you may set
413 this variable, for example:
416 (setq guix-guile-program '("/bin/guile" "--no-auto-compile"))
419 @item guix-use-substitutes
420 If nil, has the same meaning as @code{--no-substitutes} option
421 (@pxref{Invoking guix build}).
424 If non-nil, has the same meaning as @code{--dry-run} option
425 (@pxref{Invoking guix build}).
429 @node Emacs Buffer Names
430 @subsubsection Buffer Names
432 Default names of ``guix.el'' buffers (``*Guix@tie{}@dots{}*'') may be
433 changed with the following variables:
436 @item guix-package-list-buffer-name
437 @item guix-output-list-buffer-name
438 @item guix-generation-list-buffer-name
439 @item guix-package-info-buffer-name
440 @item guix-output-info-buffer-name
441 @item guix-generation-info-buffer-name
442 @item guix-repl-buffer-name
443 @item guix-internal-repl-buffer-name
446 By default, the name of a profile is also displayed in a ``list'' or
447 ``info'' buffer name. To change this behavior, use
448 @code{guix-ui-buffer-name-function} variable.
450 For example, if you want to display all types of results in a single
451 buffer (in such case you will probably use a history (@kbd{l}/@kbd{r})
452 extensively), you may do it like this:
455 (let ((name "Guix Universal"))
457 guix-package-list-buffer-name name
458 guix-output-list-buffer-name name
459 guix-generation-list-buffer-name name
460 guix-package-info-buffer-name name
461 guix-output-info-buffer-name name
462 guix-generation-info-buffer-name name))
466 @subsubsection Keymaps
468 If you want to change default key bindings, use the following keymaps
469 (@pxref{Init Rebinding,,, emacs, The GNU Emacs Manual}):
472 @item guix-buffer-map
473 Parent keymap with general keys for any buffer type.
476 Parent keymap with general keys for buffers used for Guix package
477 management (for packages, outputs and generations).
479 @item guix-list-mode-map
480 Parent keymap with general keys for ``list'' buffers.
482 @item guix-package-list-mode-map
483 Keymap with specific keys for ``package-list'' buffers.
485 @item guix-output-list-mode-map
486 Keymap with specific keys for ``output-list'' buffers.
488 @item guix-generation-list-mode-map
489 Keymap with specific keys for ``generation-list'' buffers.
491 @item guix-info-mode-map
492 Parent keymap with general keys for ``info'' buffers.
494 @item guix-package-info-mode-map
495 Keymap with specific keys for ``package-info'' buffers.
497 @item guix-output-info-mode-map
498 Keymap with specific keys for ``output-info'' buffers.
500 @item guix-generation-info-mode-map
501 Keymap with specific keys for ``generation-info'' buffers.
503 @item guix-info-button-map
504 Keymap with keys available when a point is placed on a button.
508 @node Emacs Appearance
509 @subsubsection Appearance
511 You can change almost any aspect of ``list'' / ``info'' buffers using
512 the following variables (@dfn{ENTRY-TYPE} means @code{package},
513 @code{output} or @code{generation}):
516 @item guix-ENTRY-TYPE-list-format
517 @itemx guix-ENTRY-TYPE-list-titles
518 Specify the columns, their names, what and how is displayed in ``list''
521 @item guix-ENTRY-TYPE-info-format
522 @itemx guix-ENTRY-TYPE-info-titles
523 @itemx guix-info-ignore-empty-values
524 @itemx guix-info-param-title-format
525 @itemx guix-info-multiline-prefix
526 @itemx guix-info-indent
527 @itemx guix-info-fill
528 @itemx guix-info-delimiter
529 Various settings for ``info'' buffers.
537 If you want to browse the URL of a particular license, or to look at a
538 list of licenses, you may use the following commands:
542 @item M-x guix-browse-license-url
543 Choose a license from a completion list to browse its URL using
544 @code{browse-url} function (@pxref{Browse-URL,,, emacs, The GNU Emacs
547 @item M-x guix-licenses
548 Display a list of available licenses. You can press @kbd{@key{RET}}
549 there to display packages with this license in the same way as @kbd{M-x
550 guix-packages-by-license} would do (@pxref{Emacs Commands}).
552 @item M-x guix-find-license-definition
553 Open @file{@dots{}/guix/licenses.scm} and move to the specified license.
558 @node Emacs Package Locations
559 @section Package Source Locations
561 As you know, package definitions are placed in Guile files, also known
562 as @dfn{package locations}. The following commands should help you not
563 get lost in these locations:
567 @item M-x guix-locations
568 Display a list of package locations. You can press @key{RET} there to
569 display packages placed in the current location in the same way as
570 @kbd{M-x guix-packages-by-location} would do (@pxref{Emacs Commands}).
571 Note that when the point is on a location button, @key{RET} will open
574 @item M-x guix-find-location
575 Open the given package definition source file (press @key{TAB} to choose
576 a location from a completion list).
579 Find location of a specified package. This is an Emacs analog of
580 @command{guix edit} command (@pxref{Invoking guix edit}). As with
581 @kbd{M-x guix-packages-by-name}, you can press @key{TAB} to complete a
586 If you are contributing to Guix, you may find it useful for @kbd{M-x
587 guix-find-location} and @kbd{M-x guix-edit} to open locations from your
588 Git checkout. This can be done by setting @code{guix-directory}
589 variable. For example, after this:
592 (setq guix-directory "~/src/guix")
595 @kbd{M-x guix-edit guix} opens
596 @file{~/src/guix/gnu/packages/package-management.scm} file.
598 Also you can use @kbd{C-u} prefix argument to specify a directory just
599 for the current @kbd{M-x guix-find-location} or @kbd{M-x guix-edit}
603 @node Emacs Popup Interface
604 @section Popup Interface
606 If you ever used Magit, you know what ``popup interface'' is
607 (@pxref{Top,,, magit-popup, Magit-Popup User Manual}). Even if you are
608 not acquainted with Magit, there should be no worries as it is very
611 So @kbd{M-x@tie{}guix} command provides a top-level popup interface for
612 all available guix commands. When you select an option, you'll be
613 prompted for a value in the minibuffer. Many values have completions,
614 so don't hesitate to press @key{TAB} key. Multiple values (for example,
615 packages or lint checkers) should be separated by commas.
617 After specifying all options and switches for a command, you may choose
618 one of the available actions. The following default actions are
619 available for all commands:
624 Run the command in the Guix REPL. It is faster than running
625 @code{guix@tie{}@dots{}} command directly in shell, as there is no
626 need to run another guile process and to load required modules there.
629 Run the command in a shell buffer. You can set
630 @code{guix-run-in-shell-function} variable to fine tune the shell buffer
634 Add the command line to the kill ring (@pxref{Kill Ring,,, emacs, The
639 Several commands (@command{guix graph}, @command{guix system shepherd-graph}
640 and @command{guix system extension-graph}) also have a ``View graph''
641 action, which allows you to view a generated graph using @command{dot}
642 command (specified by @code{guix-dot-program} variable). By default a
643 PNG file will be saved in @file{/tmp} directory and will be opened
644 directly in Emacs. This behavior may be changed with the following
649 @item guix-find-file-function
650 Function used to open a generated graph. If you want to open a graph in
651 an external program, you can do it by modifying this variable---for
652 example, you can use a functionality provided by the Org Mode
653 (@pxref{Top,,, org, The Org Manual}):
656 (setq guix-find-file-function 'org-open-file)
657 (add-to-list 'org-file-apps '("\\.png\\'" . "sxiv %s"))
660 @item guix-dot-default-arguments
661 Command line arguments to run @command{dot} command. If you change an
662 output format (for example, into @code{-Tpdf}), you also need to change
665 @item guix-dot-file-name-function
666 Function used to define a name of the generated graph file. Default
667 name is @file{/tmp/guix-emacs-graph-XXXXXX.png}.
671 So, for example, if you want to generate and open a PDF file in your
672 Emacs, you may change the settings like this:
675 (defun my-guix-pdf-graph ()
676 "/tmp/my-current-guix-graph.pdf")
678 (setq guix-dot-default-arguments '("-Tpdf")
679 guix-dot-file-name-function 'my-guix-pdf-graph)
684 @section Guix Prettify Mode
686 GNU@tie{}Guix also comes with ``guix-prettify.el''. It provides a minor
687 mode for abbreviating store file names by replacing hash sequences of
688 symbols with ``@dots{}'':
691 /gnu/store/72f54nfp6g1hz873w8z3gfcah0h4nl9p-foo-0.1
692 @result{} /gnu/store/…-foo-0.1
695 Once you set up ``guix.el'' (@pxref{Emacs Initial Setup}), the following
696 commands become available:
700 @item M-x guix-prettify-mode
701 Enable/disable prettifying for the current buffer.
703 @item M-x global-guix-prettify-mode
704 Enable/disable prettifying globally.
708 To automatically enable @code{guix-prettify-mode} globally on Emacs
709 start, add the following line to your init file:
712 (global-guix-prettify-mode)
715 If you want to enable it only for specific major modes, add it to the
716 mode hooks (@pxref{Hooks,,, emacs, The GNU Emacs Manual}), for example:
719 (add-hook 'shell-mode-hook 'guix-prettify-mode)
720 (add-hook 'dired-mode-hook 'guix-prettify-mode)
724 @node Emacs Build Log
725 @section Build Log Mode
727 GNU@tie{}Guix provides major and minor modes for highlighting build
728 logs. So when you have a file with a package build output---for
729 example, a file returned by @command{guix build --log-file @dots{}}
730 command (@pxref{Invoking guix build}), you may call @kbd{M-x
731 guix-build-log-mode} command in the buffer with this file. This major
732 mode highlights some lines specific to build output and provides the
733 following key bindings:
738 Move to the next build phase.
741 Move to the previous build phase.
744 Toggle (show/hide) the body of the current build phase.
747 Toggle (show/hide) the bodies of all build phases.
751 There is also @kbd{M-x guix-build-log-minor-mode} which also provides
752 the same highlighting and the same key bindings as the major mode, but
753 prefixed with @kbd{C-c}. By default, this minor mode is enabled in
754 shell buffers (@pxref{Interactive Shell,,, emacs, The GNU Emacs
755 Manual}). If you don't like it, set
756 @code{guix-build-log-minor-mode-activate} to nil.
759 @node Emacs Completions
760 @section Shell Completions
762 Another feature that becomes available after configuring Emacs interface
763 (@pxref{Emacs Initial Setup}) is completing of @command{guix}
764 subcommands, options, packages and other things in @code{shell}
765 (@pxref{Interactive Shell,,, emacs, The GNU Emacs Manual}) and
766 @code{eshell} (@pxref{Top,,, eshell, Eshell: The Emacs Shell}).
768 It works the same way as other completions do. Just press @key{TAB}
769 when your intuition tells you.
771 And here are some examples, where pressing @key{TAB} may complete
776 @item @code{guix pa}@key{TAB}
777 @item @code{guix package -}@key{TAB}
778 @item @code{guix package --}@key{TAB}
779 @item @code{guix package -i gei}@key{TAB}
780 @item @code{guix build -L/tm}@key{TAB}
781 @item @code{guix build --sy}@key{TAB}
782 @item @code{guix build --system=i}@key{TAB}
783 @item @code{guix system rec}@key{TAB}
784 @item @code{guix lint --checkers=sy}@key{TAB}
785 @item @code{guix lint --checkers=synopsis,des}@key{TAB}
790 @node Emacs Development
793 By default, when you open a Scheme file, @code{guix-devel-mode} will be
794 activated (if you don't want it, set @code{guix-devel-activate-mode} to
795 nil). This minor mode provides the following key bindings:
800 Copy the name of the current Guile module into kill ring
801 (@code{guix-devel-copy-module-as-kill}).
804 Use the current Guile module. Often after opening a Scheme file, you
805 want to use a module it defines, so you switch to the Geiser REPL and
806 write @code{,use (some module)} there. You may just use this command
807 instead (@code{guix-devel-use-module}).
810 Build a package defined by the current variable definition. The
811 building process is run in the current Geiser REPL. If you modified the
812 current package definition, don't forget to reevaluate it before calling
813 this command---for example, with @kbd{C-M-x} (@pxref{To eval or not to
814 eval,,, geiser, Geiser User Manual})
815 (@code{guix-devel-build-package-definition}).
818 Build a source derivation of the package defined by the current variable
819 definition. This command has the same meaning as @code{guix build -S}
820 shell command (@pxref{Invoking guix build})
821 (@code{guix-devel-build-package-source}).
824 Lint (check) a package defined by the current variable definition
825 (@pxref{Invoking guix lint}) (@code{guix-devel-lint-package}).
829 Unluckily, there is a limitation related to long-running REPL commands.
830 When there is a running process in a Geiser REPL, you are not supposed
831 to evaluate anything in a scheme buffer, because this will ``freeze''
832 the REPL: it will stop producing any output (however, the evaluating
833 process will continue---you will just not see any progress anymore). Be
834 aware: even moving the point in a scheme buffer may ``break'' the REPL
835 if Autodoc (@pxref{Autodoc and friends,,, geiser, Geiser User Manual})
836 is enabled (which is the default).
838 So you have to postpone editing your scheme buffers until the running
839 evaluation will be finished in the REPL.
841 Alternatively, to avoid this limitation, you may just run another Geiser
842 REPL, and while something is being evaluated in the previous REPL, you
843 can continue editing a scheme file with the help of the current one.
849 The continuous integration server at @code{hydra.gnu.org} builds all
850 the distribution packages on the supported architectures and serves
851 them as substitutes (@pxref{Substitutes}). Continuous integration is
852 currently orchestrated by @uref{https://nixos.org/hydra/, Hydra}.
854 This section describes an Emacs interface to query Hydra to know the
855 build status of specific packages, discover recent and ongoing builds,
856 view build logs, and so on. This interface is mostly the same as the
857 ``list''/``info'' interface for displaying packages and generations
858 (@pxref{Emacs Package Management}).
860 The following commands are available:
864 @item M-x guix-hydra-latest-builds
865 Display latest failed or successful builds (you will be prompted for a
866 number of builds). With @kbd{C-u}, you will also be prompted for other
867 parameters (project, jobset, job and system).
869 @item M-x guix-hydra-queued-builds
870 Display scheduled or currently running builds (you will be prompted for
873 @item M-x guix-hydra-jobsets
874 Display available jobsets (you will be prompted for a project).
878 In a list of builds you can press @kbd{L} key to display a build log of
879 the current build. Also both a list of builds and a list of jobsets
880 provide @kbd{B} key to display latest builds of the current job or
881 jobset (don't forget about @kbd{C-u}).