emacs-guix.texi 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342
  1. \input texinfo
  2. @setfilename emacs-guix.info
  3. @documentencoding UTF-8
  4. @settitle Emacs-Guix Reference Manual
  5. @copying
  6. This document describes Emacs-Guix, the Emacs interface for the
  7. @uref{https://www.gnu.org/software/guix/, GNU Guix} package manager.
  8. @quotation
  9. Copyright @copyright{} 2014-2017 Alex Kost
  10. Permission is granted to copy, distribute and/or modify this document
  11. under the terms of the GNU Free Documentation License, Version 1.3
  12. or any later version published by the Free Software Foundation;
  13. with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
  14. A copy of the license is available at
  15. @url{http://www.gnu.org/licenses/fdl.html}.
  16. @end quotation
  17. @end copying
  18. @dircategory Emacs
  19. @direntry
  20. * Emacs-Guix: (Emacs-Guix). Emacs interface for GNU Guix
  21. @end direntry
  22. @titlepage
  23. @title Emacs-Guix User Manual
  24. @author Alex Kost
  25. @page
  26. @vskip 0pt plus 1filll
  27. @insertcopying
  28. @end titlepage
  29. @contents
  30. @c ----------------------------------------------------------------
  31. @node Top
  32. @top Emacs-Guix
  33. @insertcopying
  34. @menu
  35. * Introduction:: Quick overview.
  36. * Installation:: Installing Emacs-Guix.
  37. * Package Management:: Managing packages and profile generations.
  38. * Package Licenses:: Interface for licenses of packages.
  39. * Package Locations:: Interface for locations of package source files.
  40. * Popup Interface:: Magit-like interface for guix commands.
  41. * Prettify Mode:: Abbreviating @file{/gnu/store/@dots{}} file names.
  42. * Build Log Mode:: Highlighting Guix build logs.
  43. * Completions:: Completing @command{guix} shell command.
  44. * Development:: Highlighting and tools for Guix code.
  45. * Hydra:: Interface for the Guix build farm.
  46. * List/Info Interface:: Describing ``list''/''info'' buffers.
  47. * Configuration:: Configuring Emacs-Guix.
  48. * Help:: Help commands.
  49. Indexes
  50. * Concept Index:: Concepts.
  51. * Command Index:: Commands and functions.
  52. * Variable Index:: Variables.
  53. @end menu
  54. @c ----------------------------------------------------------------
  55. @node Introduction
  56. @chapter Introduction
  57. Emacs-Guix (also known as ``guix.el'') provides various interfaces and
  58. tools related to the GNU Guix package manager.
  59. @findex guix-about
  60. Call @kbd{M-x guix-about} to see a splash screen similar to
  61. @kbd{M-x@tie{}about-emacs}.
  62. Call @kbd{M-x guix-help} to get a summary of all the available
  63. commands (@pxref{Help}).
  64. In short, Emacs-Guix provides the following features:
  65. @itemize @bullet
  66. @item
  67. Interfaces for:
  68. @itemize @minus
  69. @item profiles (@pxref{Profiles})
  70. @item profile generations (@pxref{Generations})
  71. @item packages (@pxref{Packages})
  72. @item package licenses (@pxref{Package Licenses})
  73. @item package locations (@pxref{Package Locations})
  74. @item @uref{https://hydra.gnu.org, Hydra build farm} (@pxref{Hydra})
  75. @end itemize
  76. @item
  77. Magit-like popup interface for all guix shell commands
  78. (@pxref{Popup Interface}).
  79. @item
  80. Modes to view logs of package builds (@pxref{Build Log Mode}).
  81. @item
  82. Minor mode to ``prettify'' store file names (@pxref{Prettify Mode}).
  83. @item
  84. Shell completions for all guix commands and options
  85. (@pxref{Completions}).
  86. @item
  87. Minor mode with additional functionality for @code{scheme-mode} to
  88. work with Guix Scheme files (@pxref{Development}).
  89. @end itemize
  90. @c ----------------------------------------------------------------
  91. @node Installation
  92. @chapter Installation
  93. @cindex installation
  94. There are several ways to install Emacs-Guix:
  95. @itemize
  96. @item Installing using GNU Guix
  97. @example
  98. $ guix package -i emacs-guix
  99. @end example
  100. @item Installing from @uref{http://melpa.org/, MELPA}
  101. @item Using from a git checkout
  102. @end itemize
  103. For the first 2 options, you are all set, so you can skip this
  104. chapter. If you want to use Emacs-Guix from a git checkout, read
  105. further.
  106. @menu
  107. * Requirements:: Required and optional dependencies.
  108. * Using from Git:: Using without installation.
  109. @end menu
  110. @node Requirements
  111. @section Requirements
  112. Emacs-Guix depends on the following packages:
  113. @itemize
  114. @item
  115. @uref{http://www.gnu.org/software/emacs/, GNU Emacs}, version 24.3 or
  116. later.
  117. @item
  118. @uref{http://www.gnu.org/software/guix/, GNU Guix}, version 0.11.0 or
  119. later. You need it for the most features of Emacs-Guix, but not for
  120. all: Guix is not needed if you want to look at log files (@pxref{Build
  121. Log Mode}), to ``prettify'' store file names (@pxref{Prettify Mode}),
  122. or to receive some info from Hydra (@pxref{Hydra}).
  123. @item
  124. @uref{http://nongnu.org/geiser/, Geiser}, version 0.8 or later. It is
  125. used to communicate with the Guix daemon, and to receive various info
  126. from the Guix Guile code. So without Geiser, you can use the same
  127. features as without Guix.
  128. @item
  129. @uref{https://github.com/magnars/dash.el, dash library}, version
  130. 2.11.0 or later.
  131. @item
  132. @uref{https://github.com/alezost/bui.el, BUI library}, version 1.1.0
  133. or later. It is used to define various ``list''/``info'' interfaces
  134. (to display packages, generations, licenses, etc.).
  135. @item
  136. @uref{https://github.com/magit/magit, magit-popup library}. You
  137. already have this library if you use Magit 2.1.0 or later. This
  138. library is required only for @kbd{M-x@tie{}guix} command (@pxref{Popup
  139. Interface}).
  140. @end itemize
  141. To sum up, most likely, you'll need all the above dependencies except
  142. maybe @code{magit-popup}.
  143. @node Using from Git
  144. @section Using from Git
  145. You can use Emacs-Guix directly from a git checkout without any
  146. installation.
  147. At first, you need to clone the repository and to run
  148. @code{autogen.sh} script (it's just a wrapper for @code{autoreconf}
  149. command). If you don't have all dependencies installed, you may use
  150. @file{guix.scm} file to make an environment to build Emacs-Guix
  151. (@pxref{Invoking guix environment,,, guix, The GNU Guix Reference
  152. Manual}):
  153. @example
  154. $ git clone https://github.com/alezost/guix.el.git
  155. $ cd guix.el
  156. $ guix environment --pure --load=guix.scm
  157. $ ./autogen.sh
  158. @end example
  159. Now configure and make it (this will compile all Emacs-Lisp and Scheme
  160. files, and will generate @file{guix-autoloads.el} file):
  161. @example
  162. $ ./configure
  163. $ make
  164. @end example
  165. Now all you need, is to add @file{elisp} directory to the Emacs
  166. @code{load-path} and to load the generated autoloads. This can be
  167. done by adding the following code into your Emacs init file
  168. (@pxref{Init File,,, emacs, The GNU Emacs Manual}):
  169. @example
  170. (add-to-list 'load-path "/path/to/emacs-guix/elisp")
  171. (require 'guix-autoloads nil t)
  172. @end example
  173. Now, if you start Emacs, all @kbd{M-x guix-@dots{}} commands should
  174. become available.
  175. @node Using the Manual from Git
  176. @subsection Using the Manual from Git
  177. After ``make''-ing, the info manual is ready to use. You can run it,
  178. for example, with @kbd{C-u C-h i} command (the file is
  179. @file{doc/emacs-guix.info}). However it is not convenient. You may
  180. want to have this manual in the top info directory along with the
  181. other manuals. To make it possible, you need to do the following 2
  182. steps:
  183. @itemize
  184. @item
  185. At first, you need to add the doc directory to your Info path. One
  186. way to do it is to extend INFOPATH environment variable:
  187. @example
  188. export INFOPATH="/path/to/emacs-guix/doc$@{INFOPATH:+:@}$INFOPATH"
  189. @end example
  190. Alternatively, you can adjust Info path inside Emacs, like this:
  191. @example
  192. (with-eval-after-load 'info
  193. (info-initialize)
  194. (add-to-list 'Info-directory-list "/path/to/emacs-guix/doc"))
  195. @end example
  196. @item
  197. And secondly, the doc directory should contain @file{dir} file
  198. (@pxref{Directory File,,, texinfo, The GNU Texinfo Manual}). It can
  199. be generated simply by running the following command:
  200. @example
  201. make doc/dir
  202. @end example
  203. @end itemize
  204. Once the above 2 steps are done, @kbd{C-h i} should display the
  205. Emacs-Guix entry. Also you can use @kbd{M-x guix-info} command to run
  206. the manual (@pxref{Help}).
  207. @c ----------------------------------------------------------------
  208. @node Package Management
  209. @chapter Package Management
  210. Emacs-Guix provides a visual interface for routine package management
  211. tasks, pretty much like the @command{guix package} command
  212. (@pxref{Invoking guix package,,, guix, The GNU Guix Reference
  213. Manual}). Specifically, it makes it easy to:
  214. @itemize
  215. @item browse and display packages and generations;
  216. @item search, install, upgrade and remove packages;
  217. @item display packages from previous generations;
  218. @item do some other useful things.
  219. @end itemize
  220. @menu
  221. * Packages:: Interface for packages.
  222. * Profiles:: Interface for profiles.
  223. * Generations:: Interface for profile generations.
  224. * Miscellaneous Commands:: Other related commands.
  225. @end menu
  226. @node Packages
  227. @section Packages
  228. @cindex packages
  229. There are multiple commands to display a list of Guix packages. You
  230. can either perform some actions in such ``package-list'' buffer, or
  231. ``describe'' package(s) with @kbd{@key{RET}} and do what you need in
  232. ``info'' buffer.
  233. @menu
  234. * Package Commands:: @kbd{M-x guix-@dots{}} to show packages.
  235. * Package Keys:: Key bindings in ``package-list'' buffer.
  236. @end menu
  237. @node Package Commands
  238. @subsection Package Commands
  239. @vindex guix-current-profile
  240. @findex guix-set-current-profile
  241. All commands for displaying packages use the current profile
  242. (@code{guix-current-profile} variable), which can be changed with
  243. @kbd{M-x@tie{}guix-set-current-profile}. Alternatively, if you call
  244. any of the following commands with a prefix argument (@kbd{C-u}), you
  245. will be prompted for a profile just for that command.
  246. @table @kbd
  247. @findex guix-all-available-packages
  248. @item M-x guix-all-available-packages
  249. @findex guix-newest-available-packages
  250. @itemx M-x guix-newest-available-packages
  251. Display all/newest available packages.
  252. @findex guix-installed-packages
  253. @item M-x guix-installed-packages
  254. @findex guix-installed-user-packages
  255. @itemx M-x guix-installed-user-packages
  256. @findex guix-installed-system-packages
  257. @itemx M-x guix-installed-system-packages
  258. Display installed packages. As explained above, @kbd{M-x
  259. guix-installed-packages} uses an arbitrary profile that you can specify,
  260. while the other commands display packages installed in 2 special
  261. profiles: @file{~/.guix-profile} and @file{/run/current-system/profile}
  262. (only on GuixSD).
  263. @findex guix-obsolete-packages
  264. @item M-x guix-obsolete-packages
  265. Display obsolete packages (the packages that are installed in a profile
  266. but cannot be found among available packages).
  267. @findex guix-packages-by-name
  268. @item M-x guix-packages-by-name
  269. Display package(s) with the specified name.
  270. @findex guix-packages-by-license
  271. @item M-x guix-packages-by-license
  272. Display package(s) with the specified license.
  273. @findex guix-packages-by-location
  274. @item M-x guix-packages-by-location
  275. Display package(s) located in the specified file. These files usually
  276. have the following form: @file{gnu/packages/emacs.scm}, but don't type
  277. them manually! Press @kbd{@key{TAB}} to complete the file name.
  278. @findex guix-package-from-file
  279. @item M-x guix-package-from-file
  280. Display package that the code within the specified file evaluates to.
  281. @xref{Invoking guix package, @code{--install-from-file},, guix, The
  282. GNU Guix Reference Manual}, for an example of what such a file may
  283. look like.
  284. @findex guix-packages-from-system-config-file
  285. @item M-x guix-packages-from-system-config-file
  286. Display packages from the specified file with @code{operating-system}
  287. declaration (@pxref{Using the Configuration System,,, guix, The GNU
  288. Guix Reference Manual}).
  289. @findex guix-search-by-regexp
  290. @item M-x guix-search-by-regexp
  291. Search for packages by a specified regexp. By default ``name'',
  292. ``synopsis'' and ``description'' of the packages will be searched. This
  293. can be changed by modifying @code{guix-package-search-params} variable.
  294. @findex guix-search-by-name
  295. @item M-x guix-search-by-name
  296. Search for packages with names matching a specified regexp. This
  297. command is the same as @code{guix-search-by-regexp}, except only a
  298. package ``name'' is searched.
  299. @end table
  300. @vindex guix-package-list-type
  301. By default, these commands display each package @strong{output} on a
  302. separate line. If you prefer to see a list of packages---i.e., a list
  303. with a @strong{package} per line, use the following setting:
  304. @example
  305. (setq guix-package-list-type 'package)
  306. @end example
  307. @node Package Keys
  308. @subsection Package Keys
  309. @subsubsection List Buffer
  310. Along with the general ``list'' keys (@pxref{List buffer}), a
  311. ``package-list'' buffer additionally provides the following key
  312. bindings:
  313. @table @kbd
  314. @item i
  315. Mark the current package for installation.
  316. @item d
  317. Mark the current package for deletion.
  318. @item U
  319. Mark the current package for upgrading.
  320. @item ^
  321. Mark all obsolete packages for upgrading (with prefix, mark all
  322. installed packages for upgrading).
  323. @item x
  324. Execute actions on the marked packages.
  325. @item e
  326. Edit the definition of the current package (go to its location). This
  327. is similar to @command{guix edit} command (@pxref{Invoking guix
  328. edit,,, guix, The GNU Guix Reference Manual}), but for opening a
  329. package recipe in the current Emacs instance.
  330. @item G
  331. @cindex graph
  332. Show graph for the current package (@pxref{Graph Configuration}).
  333. @item z
  334. Show package size (@pxref{Invoking guix size,,, guix, The GNU Guix
  335. Reference Manual}).
  336. @item L
  337. Lint the current package (@pxref{Invoking guix lint,,, guix, The GNU
  338. Guix Reference Manual}). With prefix argument, you'll be prompted for
  339. checker names.
  340. @item B
  341. Display latest builds of the current package (@pxref{Hydra}).
  342. @end table
  343. @subsubsection Info Buffer
  344. Similarly, ``package-info'' buffer provides the following key bindings:
  345. @table @kbd
  346. @item i
  347. Install the current package.
  348. @item d
  349. Delete the current package.
  350. @item U
  351. Upgrade the current package.
  352. @item e
  353. Go to the package definition.
  354. @item G
  355. Show package graph.
  356. @item z
  357. Show package size.
  358. @item L
  359. Lint the package.
  360. @end table
  361. @node Profiles
  362. @section Profiles
  363. @cindex profiles
  364. @findex guix-profiles
  365. @vindex guix-profiles
  366. You can keep track of your Guix profiles with @kbd{M-x guix-profiles}
  367. command. By default, it displays only @file{~/.guix-profile} and a
  368. system profile (on GuixSD). But if you manage multiple profiles, you
  369. can add them by setting @code{guix-profiles} variable, for example,
  370. like this:
  371. @example
  372. (with-eval-after-load 'guix-ui-profile
  373. (setq guix-profiles
  374. (append '("/path/to/my-profile1"
  375. "/path/to/my-profile2")
  376. guix-profiles)))
  377. @end example
  378. Along with the general ``list'' keys (@pxref{List buffer}), a
  379. ``profile-list'' buffer additionally provides the following
  380. bindings:
  381. @table @kbd
  382. @item P
  383. Display packages installed in profile at point.
  384. @item G
  385. Display generations of profile at point.
  386. @item c
  387. Make profile at point the current profile for the package commands
  388. (@pxref{Packages}).
  389. @end table
  390. @node Generations
  391. @section Generations
  392. @cindex generations
  393. Each Guix profile may have generations and Emacs-Guix allows you to
  394. display these generations, to switch to a particular generation, to
  395. look at the packages installed in it and to compare generations.
  396. @menu
  397. * Generation Commands:: @kbd{M-x guix-@dots{}} to show generations.
  398. * Generation Keys:: Key bindings in ``generation-list'' buffer.
  399. @end menu
  400. @node Generation Commands
  401. @subsection Generation Commands
  402. As with commands for displaying packages (@pxref{Package Commands}),
  403. commands for displaying generations use the current profile and can be
  404. called with a prefix argument.
  405. @table @kbd
  406. @findex guix-generations
  407. @item M-x guix-generations
  408. List all the generations.
  409. @findex guix-last-generations
  410. @item M-x guix-last-generations
  411. List the @var{N} last generations. You will be prompted for the number
  412. of generations.
  413. @findex guix-generations-by-time
  414. @item M-x guix-generations-by-time
  415. List generations matching time period. You will be prompted for the
  416. period using Org mode time prompt based on Emacs calendar (@pxref{The
  417. date/time prompt,,, org, The Org Manual}).
  418. @end table
  419. Analogously, on GuixSD you can also display system generations:
  420. @table @kbd
  421. @findex guix-system-generations
  422. @item M-x guix-system-generations
  423. @findex guix-last-system-generations
  424. @item M-x guix-last-system-generations
  425. @findex guix-system-generations-by-time
  426. @item M-x guix-system-generations-by-time
  427. @end table
  428. @node Generation Keys
  429. @subsection Generation Keys
  430. Along with the general ``list'' keys (@pxref{List buffer}), a
  431. ``generation-list'' buffer additionally provides the following
  432. bindings:
  433. @table @kbd
  434. @item P
  435. List packages installed in the current generation.
  436. @item c
  437. Switch profile to the current generation.
  438. @item d
  439. Mark the current generation for deletion (with prefix, mark all
  440. generations).
  441. @item x
  442. Execute actions on the marked generations---i.e., delete generations.
  443. @item e
  444. Run Ediff (@pxref{Top,,, ediff, The Ediff Manual}) on package outputs
  445. installed in the 2 marked generations. With prefix argument, run Ediff
  446. on manifests of the marked generations.
  447. @item =
  448. Run Diff (@pxref{Diff Mode,,, emacs, The GNU Emacs Manual}) on package
  449. outputs installed in the 2 marked generations. With prefix argument,
  450. run Diff on manifests of the marked generations.
  451. @item +
  452. List package outputs added to the latest marked generation comparing
  453. with another marked generation.
  454. @item -
  455. List package outputs removed from the latest marked generation comparing
  456. with another marked generation.
  457. @end table
  458. @node Miscellaneous Commands
  459. @section Miscellaneous Commands
  460. And some more commands related to profiles and packages:
  461. @table @kbd
  462. @cindex graph
  463. @findex guix-package-graph
  464. @item M-x guix-package-graph
  465. Show a package graph. You'll be prompted for a package name, graph
  466. backend and graph node type (everything can be completed with
  467. @kbd{@key{TAB}} key). @xref{Graph Configuration}, if you want to set
  468. an external graph viewer.
  469. @findex guix-package-size
  470. @item M-x guix-package-size
  471. Show a package size (@pxref{Invoking guix size,,, guix, The GNU Guix
  472. Reference Manual}). You'll be prompted for a package name and a size
  473. type (it should be either ``text'' or ``image'').
  474. @findex guix-lint
  475. @item M-x guix-lint
  476. Lint a package (@pxref{Invoking guix lint,,, guix, The GNU Guix
  477. Reference Manual}). You'll be prompted for a package name. With
  478. prefix argument, you'll be also prompted for checker names.
  479. @findex guix-apply-manifest
  480. @item M-x guix-apply-manifest
  481. Apply manifest file to the current profile or to a specified profile,
  482. if prefix argument is used. This has the same meaning as
  483. @code{--manifest} option (@pxref{Invoking guix package,,, guix, The
  484. GNU Guix Reference Manual}).
  485. @findex guix-pull
  486. @item M-x guix-pull
  487. It is the same as @command{guix pull} shell command (@pxref{Invoking
  488. guix pull,,, guix, The GNU Guix Reference Manual}). With @kbd{C-u},
  489. make it verbose.
  490. @cindex Guix REPL
  491. Once @command{guix pull} has succeeded, the Guix REPL is
  492. restarted@footnote{Note that name/version pairs cannot be used to
  493. identify packages (because a name is not necessarily unique), so
  494. Emacs-Guix uses special identifiers that live only during a guile
  495. session, so if the Guix REPL was restarted, you may want to revert
  496. ``list'' buffer (by pressing @kbd{g}).}. This allows you to keep
  497. using the Emacs interface with the updated Guix code.
  498. @end table
  499. @c ----------------------------------------------------------------
  500. @node Package Licenses
  501. @chapter Package Licenses
  502. @cindex package licenses
  503. If you want to browse the URL of a particular license, or to look at a
  504. list of licenses, you may use the following commands:
  505. @table @kbd
  506. @findex guix-browse-license-url
  507. @item M-x guix-browse-license-url
  508. Choose a license from a completion list to browse its URL using
  509. @code{browse-url} function (@pxref{Browse-URL,,, emacs, The GNU Emacs
  510. Manual}).
  511. @findex guix-licenses
  512. @item M-x guix-licenses
  513. Display a list of available licenses. You can press @kbd{P} key
  514. there to display packages with this license in the same way as
  515. @kbd{M-x@tie{}guix-packages-by-license} would do (@pxref{Package
  516. Commands}).
  517. @findex guix-find-license-definition
  518. @item M-x guix-find-license-definition
  519. Open @file{@dots{}/guix/licenses.scm} and move to the specified license.
  520. @end table
  521. @c ----------------------------------------------------------------
  522. @node Package Locations
  523. @chapter Package Locations
  524. @cindex package locations
  525. As you know, package definitions are placed in Guile files, also known
  526. as @dfn{package locations}. The following commands should help you not
  527. get lost in these locations:
  528. @table @kbd
  529. @findex guix-locations
  530. @item M-x guix-locations
  531. Display a list of package locations. You can press @kbd{P} or
  532. @kbd{@key{RET}} there to display packages placed in the current
  533. location in the same way as @kbd{M-x@tie{}guix-packages-by-location}
  534. would do (@pxref{Package Commands}). Note that when the point is on a
  535. location button, @kbd{@key{RET}} will open this location file.
  536. @findex guix-find-location
  537. @item M-x guix-find-location
  538. Open the given package definition source file (press @kbd{@key{TAB}}
  539. to choose a location from a completion list).
  540. @findex guix-edit
  541. @item M-x guix-edit
  542. Find location of a specified package. This is an Emacs analog of
  543. @command{guix edit} command (@pxref{Invoking guix edit,,, guix, The
  544. GNU Guix Reference Manual}). As with
  545. @kbd{M-x@tie{}guix-packages-by-name}, you can press @kbd{@key{TAB}} to
  546. complete a package name.
  547. @end table
  548. @vindex guix-directory
  549. If you are contributing to Guix, you may find it useful for
  550. @kbd{M-x@tie{}guix-find-location} and @kbd{M-x@tie{}guix-edit} to open
  551. locations from your Git checkout. This can be done by setting
  552. @code{guix-directory} variable. For example, after this:
  553. @example
  554. (setq guix-directory "~/src/guix")
  555. @end example
  556. @kbd{M-x guix-edit guix} opens
  557. @file{~/src/guix/gnu/packages/package-management.scm} file.
  558. Also you can use @kbd{C-u} prefix argument to specify a directory just
  559. for the current @kbd{M-x@tie{}guix-find-location} or
  560. @kbd{M-x@tie{}guix-edit} command.
  561. @c ----------------------------------------------------------------
  562. @node Popup Interface
  563. @chapter Popup Interface
  564. If you ever used Magit, you know what ``popup interface'' is
  565. (@pxref{Top,,, magit-popup, Magit-Popup User Manual}). Even if you are
  566. not acquainted with Magit, there should be no worries as it is very
  567. intuitive.
  568. @findex guix
  569. So @kbd{M-x@tie{}guix} command provides a top-level popup interface
  570. for all available guix commands. When you select an option, you'll be
  571. prompted for a value in the minibuffer. Many values have completions,
  572. so don't hesitate to press @kbd{@key{TAB}} key. Multiple values (for
  573. example, packages or lint checkers) should be separated by commas.
  574. After specifying all options and switches for a command, you may choose
  575. one of the available actions. The following default actions are
  576. available for all commands:
  577. @itemize
  578. @item
  579. Run the command in the Guix REPL. It is faster than running
  580. @code{guix@tie{}@dots{}} command directly in shell, as there is no
  581. need to run another guile process and to load required modules there.
  582. @item
  583. @vindex guix-run-in-shell-function
  584. Run the command in a shell buffer. You can set
  585. @code{guix-run-in-shell-function} variable to fine tune the shell buffer
  586. you want to use.
  587. @item
  588. Add the command line to the kill ring (@pxref{Kill Ring,,, emacs, The
  589. GNU Emacs Manual}).
  590. @end itemize
  591. @cindex graph
  592. Several commands (@command{guix graph}, @command{guix system
  593. shepherd-graph} and @command{guix system extension-graph}) also have a
  594. ``View graph'' action, which allows you to view a generated graph
  595. (@pxref{Graph Configuration}).
  596. @c ----------------------------------------------------------------
  597. @node Prettify Mode
  598. @chapter Guix Prettify Mode
  599. Emacs-Guix also comes with ``guix-prettify.el''. It provides a minor
  600. mode for abbreviating store file names by replacing hash sequences of
  601. symbols with ``@dots{}'':
  602. @example
  603. /gnu/store/72f54nfp6g1hz873w8z3gfcah0h4nl9p-foo-0.1
  604. @result{} /gnu/store/…-foo-0.1
  605. @end example
  606. @table @kbd
  607. @findex guix-prettify-mode
  608. @item M-x guix-prettify-mode
  609. Enable/disable prettifying for the current buffer.
  610. @findex global-guix-prettify-mode
  611. @item M-x global-guix-prettify-mode
  612. Enable/disable prettifying globally.
  613. @end table
  614. To automatically enable @code{guix-prettify-mode} globally on Emacs
  615. start, add the following line to your init file:
  616. @example
  617. (global-guix-prettify-mode)
  618. @end example
  619. If you want to enable it only for specific major modes, add it to the
  620. mode hooks (@pxref{Hooks,,, emacs, The GNU Emacs Manual}), for example:
  621. @example
  622. (add-hook 'shell-mode-hook 'guix-prettify-mode)
  623. (add-hook 'dired-mode-hook 'guix-prettify-mode)
  624. @end example
  625. @c ----------------------------------------------------------------
  626. @node Build Log Mode
  627. @chapter Build Log Mode
  628. @cindex build log
  629. @findex guix-build-log-mode
  630. Emacs-Guix provides major and minor modes for highlighting build logs.
  631. So when you have a file with a package build output---for example, a
  632. file returned by @command{guix build --log-file @dots{}} command
  633. (@pxref{Invoking guix build,,, guix, The GNU Guix Reference Manual}),
  634. you may call @kbd{M-x@tie{}guix-build-log-mode} command in the buffer
  635. with this file. This major mode highlights some lines specific to
  636. build output and provides the following key bindings:
  637. @table @kbd
  638. @item M-n
  639. Move to the next build phase.
  640. @item M-p
  641. Move to the previous build phase.
  642. @item @key{TAB}
  643. Toggle (show/hide) the body of the current build phase.
  644. @item S-@key{TAB}
  645. Toggle (show/hide) the bodies of all build phases.
  646. @end table
  647. @findex guix-build-log-minor-mode
  648. There is also @kbd{M-x@tie{}guix-build-log-minor-mode} which also
  649. provides the same highlighting and the same key bindings as the major
  650. mode, but prefixed with @kbd{C-c}. You may find this minor mode
  651. useful for shell buffers (@pxref{Interactive Shell,,, emacs, The GNU
  652. Emacs Manual}). It can be enabled there like this:
  653. @example
  654. (add-hook 'shell-mode-hook 'guix-build-log-minor-mode)
  655. @end example
  656. @c ----------------------------------------------------------------
  657. @node Completions
  658. @chapter Shell Completions
  659. @cindex shell
  660. @cindex completions
  661. Another available feature is completing @command{guix} subcommands,
  662. options, packages and other things in @code{shell} (@pxref{Interactive
  663. Shell,,, emacs, The GNU Emacs Manual}) and @code{eshell}
  664. (@pxref{Top,,, eshell, Eshell: The Emacs Shell}) buffers.
  665. It works the same way as other completions do. Just press
  666. @kbd{@key{TAB}} when your intuition tells you.
  667. And here are some examples, where pressing @kbd{@key{TAB}} may
  668. complete something:
  669. @itemize @w{}
  670. @item @code{guix pa}@kbd{@key{TAB}}
  671. @item @code{guix package -}@kbd{@key{TAB}}
  672. @item @code{guix package --}@kbd{@key{TAB}}
  673. @item @code{guix package -i gei}@kbd{@key{TAB}}
  674. @item @code{guix build -L/tm}@kbd{@key{TAB}}
  675. @item @code{guix build --sy}@kbd{@key{TAB}}
  676. @item @code{guix build --system=i}@kbd{@key{TAB}}
  677. @item @code{guix system rec}@kbd{@key{TAB}}
  678. @item @code{guix lint --checkers=sy}@kbd{@key{TAB}}
  679. @item @code{guix lint --checkers=synopsis,des}@kbd{@key{TAB}}
  680. @item @code{guix graph --backend=}@kbd{@key{TAB}}
  681. @end itemize
  682. @c ----------------------------------------------------------------
  683. @node Development
  684. @chapter Development
  685. @findex guix-devel-mode
  686. If you often work with Guix package files, you may want to see some
  687. highlighting and to have some indentation rules specific for Guix
  688. keywords. There is a minor mode to help
  689. you---@kbd{M-x@tie{}guix-devel-mode}. It can be enabled in Scheme
  690. buffers like this:
  691. @example
  692. (add-hook 'scheme-mode-hook 'guix-devel-mode)
  693. @end example
  694. Along with highlighting and indentation, this minor mode provides the
  695. following key bindings:
  696. @table @kbd
  697. @item C-c . k
  698. Copy the name of the current Guile module into kill ring
  699. (@code{guix-devel-copy-module-as-kill}).
  700. @item C-c . u
  701. Use the current Guile module. Often after opening a Scheme file, you
  702. want to use a module it defines, so you switch to the Geiser REPL and
  703. write @code{,use (some module)} there. You may just use this command
  704. instead (@code{guix-devel-use-module}).
  705. @item C-c . b
  706. Build a package defined by the current variable definition. The
  707. building process is run in the current Geiser REPL. If you modified the
  708. current package definition, don't forget to reevaluate it before calling
  709. this command---for example, with @kbd{C-M-x} (@pxref{To eval or not to
  710. eval,,, geiser, Geiser User Manual})
  711. (@code{guix-devel-build-package-definition}).
  712. @item C-c . s
  713. Build a source derivation of the package defined by the current
  714. variable definition. This command has the same meaning as @code{guix
  715. build -S} shell command (@pxref{Invoking guix build,,, guix, The GNU
  716. Guix Reference Manual}) (@code{guix-devel-build-package-source}).
  717. @item C-c . d
  718. Download a source of the package defined by the current variable
  719. definition. This command is the same as running @code{guix download}
  720. shell command on the package source (@pxref{Invoking guix download,,,
  721. guix, The GNU Guix Reference Manual})
  722. (@code{guix-devel-download-package-source}).
  723. @item C-c . l
  724. Lint (check) a package defined by the current variable definition
  725. (@pxref{Invoking guix lint,,, guix, The GNU Guix Reference Manual})
  726. (@code{guix-devel-lint-package}).
  727. @end table
  728. Unluckily, there is a limitation related to long-running REPL commands.
  729. When there is a running process in a Geiser REPL, you are not supposed
  730. to evaluate anything in a scheme buffer, because this will ``freeze''
  731. the REPL: it will stop producing any output (however, the evaluating
  732. process will continue---you will just not see any progress anymore). Be
  733. aware: even moving the point in a scheme buffer may ``break'' the REPL
  734. if Autodoc (@pxref{Autodoc and friends,,, geiser, Geiser User Manual})
  735. is enabled (which is the default).
  736. So you have to postpone editing your scheme buffers until the running
  737. evaluation will be finished in the REPL.
  738. Alternatively, to avoid this limitation, you may just run another Geiser
  739. REPL, and while something is being evaluated in the previous REPL, you
  740. can continue editing a scheme file with the help of the current one.
  741. @c ----------------------------------------------------------------
  742. @node Hydra
  743. @chapter Hydra
  744. @cindex hydra
  745. The continuous integration server at @code{hydra.gnu.org} builds all
  746. the distribution packages on the supported architectures and serves
  747. them as substitutes (@pxref{Substitutes,,, guix, The GNU Guix
  748. Reference Manual}). Continuous integration is currently orchestrated
  749. by @uref{https://nixos.org/hydra/, Hydra}.
  750. This section describes an Emacs interface to query Hydra to know the
  751. build status of specific packages, discover recent and ongoing builds,
  752. view build logs, and so on. This interface is mostly the same as the
  753. ``list''/``info'' interface for displaying packages and generations
  754. (@pxref{Package Management}).
  755. The following commands are available:
  756. @table @kbd
  757. @findex guix-hydra-latest-builds
  758. @item M-x guix-hydra-latest-builds
  759. Display latest failed or successful builds (you will be prompted for a
  760. number of builds). With @kbd{C-u}, you will also be prompted for other
  761. parameters (project, jobset, job and system).
  762. @findex guix-hydra-queued-builds
  763. @item M-x guix-hydra-queued-builds
  764. Display scheduled or currently running builds (you will be prompted for
  765. a number of builds).
  766. @findex guix-hydra-jobsets
  767. @item M-x guix-hydra-jobsets
  768. Display available jobsets (you will be prompted for a project).
  769. @end table
  770. In a list of builds you can press @kbd{L} key to display a build log of
  771. the current build. Also both a list of builds and a list of jobsets
  772. provide @kbd{B} key to display latest builds of the current job or
  773. jobset (don't forget about @kbd{C-u}).
  774. @c ----------------------------------------------------------------
  775. @node List/Info Interface
  776. @chapter List/Info Interface
  777. As you probably already know, there are multiple commands that display
  778. various lists (of packages, licenses, etc.). This is so-called
  779. ``list'' interface. Also you can get the same data displayed in
  780. ``info'' interface. This chapter describes these interfaces.
  781. @menu
  782. * List/Info Keys:: Common keys for both interfaces.
  783. * ``List'' buffer: List buffer. List-like interface.
  784. * ``Info'' buffer: Info buffer. Help-like interface.
  785. @end menu
  786. @node List/Info Keys
  787. @section List/Info Keys
  788. The following keys are available for both ``list'' and ``info''
  789. interfaces:
  790. @table @kbd
  791. @item h
  792. Show ``hint'' (a message with available key bindings).
  793. @item l
  794. @itemx r
  795. Go backward/forward by the history of the displayed results (this
  796. history is similar to the history of the Emacs @code{help-mode} or
  797. @code{Info-mode}).
  798. @item g
  799. Revert current buffer: update (receive it again) the currently
  800. displayed data and redisplay it.
  801. @item R
  802. Redisplay current buffer (without updating the data).
  803. @item ?
  804. Describe current mode.
  805. @end table
  806. Also some buffers provide the following keys:
  807. @table @kbd
  808. @item M
  809. Apply manifest file to the current profile (@pxref{Miscellaneous
  810. Commands, @code{guix-apply-manifest}}).
  811. @item C-c C-z
  812. @cindex Guix REPL
  813. Go to the Guix REPL (@pxref{The REPL,,, geiser, Geiser User Manual}).
  814. @end table
  815. @emph{Hint:} If you need several ``list'' or ``info'' buffers, you can
  816. simply @kbd{M-x@tie{}clone-buffer} them, and each buffer will have its
  817. own history.
  818. @node List buffer
  819. @section ``List'' buffer
  820. An interface of a ``list'' buffer is similar to the interface provided
  821. by ``package.el'' (@pxref{Package Menu,,, emacs, The GNU Emacs Manual}).
  822. And here are the default key bindings (some of them may be rebound
  823. to more specific commands):
  824. @table @kbd
  825. @item m
  826. Mark the current entry (with prefix, mark all entries).
  827. @item u
  828. Unmark the current entry (with prefix, unmark all entries).
  829. @item @key{DEL}
  830. Unmark backward.
  831. @item @key{RET}
  832. @itemx i
  833. Display ``info'' interface for the marked entries (or the current
  834. entry if nothing is marked).
  835. @item s
  836. Sort entries by column specified by the prefix argument (counting from
  837. 0).
  838. @end table
  839. @node Info buffer
  840. @section ``Info'' buffer
  841. The interface of an ``info'' buffer is similar to the interface of
  842. @code{help-mode} (@pxref{Help Mode,,, emacs, The GNU Emacs Manual}),
  843. or rather @code{Custom-mode} (@pxref{Easy Customization,,, emacs, The
  844. GNU Emacs Manual}), as it is full of various buttons that can be used
  845. to open files, browse URLs, do some actions (like installing/removing
  846. packages), etc.
  847. @cindex buttons
  848. As always, you may use @kbd{@key{TAB}} / @kbd{S-@key{TAB}} to move
  849. between buttons and @kbd{@key{RET}} to press a button, or you can just
  850. use mouse (@pxref{Mouse References,,, emacs, The GNU Emacs Manual}).
  851. Finally, you can copy any button label (a link to an URL or a file) by
  852. pressing @kbd{c} on a button.
  853. @c ----------------------------------------------------------------
  854. @node Configuration
  855. @chapter Configuration
  856. @cindex customization group
  857. There are many variables you can modify to change the appearance or
  858. behavior of Emacs-Guix. Some of these variables are described in this
  859. section. Also you can use Custom Interface (@pxref{Easy
  860. Customization,,, emacs, The GNU Emacs Manual}) to explore/set
  861. variables and faces---@kbd{M-x@tie{}customize-group @key{RET} guix}.
  862. @vindex guix-ENTRY-TYPE-BUFFER-TYPE-format
  863. If you wish to change the appearance of ``list'' / ``info'' buffers,
  864. look at @code{guix-ENTRY-TYPE-BUFFER-TYPE-format} variables
  865. (@dfn{ENTRY-TYPE} can be @code{package}, @code{output},
  866. @code{profile}, @code{generation} @code{system-generation},
  867. @code{license}, @code{location}, @code{hydra-build},
  868. @code{hydra-jobset}; @dfn{BUFFER-TYPE} is either @code{list} or
  869. @code{info}).
  870. @menu
  871. * Graph Configuration:: Set external viewer for graphs, etc.
  872. * Guile and Build Options:: Settings for Guix REPL, Guile, etc.
  873. * Buffer Names:: Names of Guix buffers.
  874. * Keymaps:: Configuring key bindings.
  875. @end menu
  876. @node Graph Configuration
  877. @section Graph Configuration
  878. @cindex graph
  879. Some commands may display a graph image. Currently Guix provides 2
  880. graph backends (@pxref{Invoking guix graph,,, guix, The GNU Guix
  881. Reference Manual}):
  882. @table @code
  883. @item d3js
  884. Such graph will be displayed in your browser using @code{browse-url}
  885. function (@pxref{Browse-URL,,, emacs, The GNU Emacs Manual}).
  886. @item graphviz
  887. Such graph will be displayed inside Emacs by default, but this can be
  888. configured @dots{}
  889. @end table
  890. @vindex guix-find-file-function
  891. @dots{} Graphs are opened using @code{guix-find-file-function}, so if
  892. you want to use an external viewer, you need to set this variable.
  893. Probably the easiest way to set an external viewer is to use a
  894. functionality provided by the Org Mode. For example, if you want to
  895. open the generated graphs (PNG files) with @code{sxiv} image viewer,
  896. you can do it like this:
  897. @example
  898. (setq guix-find-file-function 'org-open-file)
  899. (add-to-list 'org-file-apps '("\\.png\\'" . "sxiv %s"))
  900. @end example
  901. Now some deeper details and configuration options.
  902. @vindex guix-dot-program
  903. @vindex guix-dot-default-arguments
  904. @vindex guix-dot-file-name-function
  905. The @code{graphviz} graph is converted into an image file using
  906. @command{dot} command specified by @code{guix-dot-program} and
  907. @code{guix-dot-default-arguments} variables. By default, a PNG file is
  908. generated and saved as @file{/tmp/emacs-guix-XXXXXX/graph-XXXXXX.png}.
  909. If you want to change an output format (for example, into PDF), you also
  910. need to change @code{guix-dot-file-name-function} (to make @code{.pdf}
  911. extension of the output file). This can be done like this:
  912. @example
  913. (defun my-guix-pdf-graph ()
  914. "/tmp/my-current-guix-graph.pdf")
  915. (setq guix-dot-default-arguments '("-Tpdf")
  916. guix-dot-file-name-function 'my-guix-pdf-graph)
  917. @end example
  918. @node Guile and Build Options
  919. @section Guile and Build Options
  920. @table @code
  921. @vindex guix-guile-program
  922. @item guix-guile-program
  923. If you have some special needs for starting a Guile process, you may set
  924. this variable, for example:
  925. @example
  926. (setq guix-guile-program '("/bin/guile" "--no-auto-compile"))
  927. @end example
  928. If you use Guix via @file{pre-inst-env} script (@pxref{Running Guix
  929. Before It Is Installed,,, guix, The GNU Guix Reference Manual}), you
  930. may customize this variable like this:
  931. @example
  932. (setq guix-guile-program '("/path/to/guix/pre-inst-env" "guile"))
  933. @end example
  934. @vindex guix-use-substitutes
  935. @item guix-use-substitutes
  936. Has the same meaning as @code{--no-substitutes} option
  937. (@pxref{Invoking guix build,,, guix, The GNU Guix Reference
  938. Manual})---i.e., when non-nil, substitutes are enabled.
  939. @vindex guix-dry-run
  940. @item guix-dry-run
  941. Has the same meaning as @code{--dry-run} option (@pxref{Invoking guix
  942. build,,, guix, The GNU Guix Reference Manual})---i.e., when non-nil,
  943. do not build the derivations.
  944. @cindex Guix REPL
  945. @vindex guix-repl-use-server
  946. @item guix-repl-use-server
  947. By default, along with the main Guix REPL, an additional (internal)
  948. REPL is started. This allows you to display packages, generations and
  949. to receive other info from the Scheme side, while there is some active
  950. process in the main Guix REPL (e.g., while downloading or building
  951. packages). If you don't want to have the second REPL, set this
  952. variable to nil.
  953. @vindex guix-repl-use-latest
  954. @item guix-repl-use-latest
  955. Set this variable to nil, if you don't want to use the latest Guix
  956. code received with @code{guix pull} command (@pxref{Invoking guix
  957. pull,,, guix, The GNU Guix Reference Manual}).
  958. @end table
  959. @node Buffer Names
  960. @section Buffer Names
  961. Default names of various Emacs-Guix buffers (``*Guix@tie{}@dots{}*'')
  962. may be changed with the following variables:
  963. @table @code
  964. @vindex guix-ENTRY-TYPE-BUFFER-TYPE-buffer-name
  965. @item guix-ENTRY-TYPE-BUFFER-TYPE-buffer-name
  966. @xref{Configuration}, for the meaning of @code{ENTRY-TYPE} and
  967. @code{BUFFER-TYPE}.
  968. @vindex guix-ui-buffer-name-function
  969. @item guix-ui-buffer-name-function
  970. By default, many Guix buffers contain profile name (e.g., @code{*Guix
  971. Packages: <profile>*}). This variable allows you to control how this
  972. profile name is displayed. If you want to remove profile name from
  973. the buffer names, you can do it like this:
  974. @example
  975. (setq guix-ui-buffer-name-function 'guix-ui-buffer-name-simple)
  976. @end example
  977. @vindex guix-repl-buffer-name
  978. @item guix-repl-buffer-name
  979. @vindex guix-internal-repl-buffer-name
  980. @item guix-internal-repl-buffer-name
  981. @vindex guix-help-buffer-name
  982. @item guix-help-buffer-name
  983. @end table
  984. @node Keymaps
  985. @section Keymaps
  986. If you want to change default key bindings, look at the following
  987. keymaps (@pxref{Init Rebinding,,, emacs, The GNU Emacs Manual}):
  988. @table @code
  989. @vindex guix-ui-map
  990. @item guix-ui-map
  991. Parent keymap with general keys for buffers used for Guix package
  992. management.
  993. @vindex guix-ENTRY-TYPE-BUFFER-TYPE-mode-map
  994. @item guix-ENTRY-TYPE-BUFFER-TYPE-mode-map
  995. @xref{Configuration}, for the meaning of @code{ENTRY-TYPE} and
  996. @code{BUFFER-TYPE}.
  997. @vindex guix-build-log-common-map
  998. @item guix-build-log-common-map
  999. @vindex guix-build-log-mode-map
  1000. @item guix-build-log-mode-map
  1001. @vindex guix-build-log-minor-mode-map
  1002. @item guix-build-log-minor-mode-map
  1003. @vindex guix-devel-keys-map
  1004. @item guix-devel-keys-map
  1005. @vindex guix-devel-mode-map
  1006. @item guix-devel-mode-map
  1007. @end table
  1008. @c ----------------------------------------------------------------
  1009. @node Help
  1010. @chapter Help
  1011. So many commands, so many buffers! This chapter describes few more
  1012. commands that should help you not to get lost.
  1013. @table @kbd
  1014. @findex guix-help
  1015. @item M-x guix-help
  1016. Display a buffer with the summary of the available Emacs-Guix
  1017. commands. Buttons in this buffer allow you to run commands and to
  1018. look at their docstrings and manual entries.
  1019. @findex guix-info
  1020. @item M-x guix-info
  1021. Show this Emacs-Guix info manual. With prefix argument, show the Guix
  1022. info manual.
  1023. @findex guix-switch-to-buffer
  1024. @item M-x guix-switch-to-buffer
  1025. Switch to one of the Emacs-Guix buffers. This is like a usual
  1026. @code{switch-to-buffer} (bound to @kbd{C-x b} by default), except it
  1027. completes only Guix buffers names. If you are going to use this
  1028. command, it is probably better to bind it to some key, for example:
  1029. @example
  1030. (global-set-key (kbd "C-x B") 'guix-switch-to-buffer)
  1031. @end example
  1032. @findex guix-extended-command
  1033. @item M-x guix-extended-command
  1034. Run Emacs-Guix command. This is like @kbd{M-x} (@pxref{M-x,,, emacs,
  1035. The GNU Emacs Manual}), except it completes only Guix command names.
  1036. And again, this is not a very useful command unless it is bound to
  1037. some key, for example:
  1038. @example
  1039. (global-set-key (kbd "M-X") 'guix-extended-command)
  1040. @end example
  1041. @end table
  1042. @c ----------------------------------------------------------------
  1043. @node Concept Index
  1044. @unnumbered Concept Index
  1045. @printindex cp
  1046. @node Command Index
  1047. @unnumbered Command Index
  1048. @printindex fn
  1049. @node Variable Index
  1050. @unnumbered Variable Index
  1051. @printindex vr
  1052. @bye