150 lines
4.4 KiB
Org Mode
150 lines
4.4 KiB
Org Mode
|
* The Perfect Setup
|
||
|
|
||
|
The manual mentions a "Perfect Setup" which is a rather pompous title
|
||
|
considering the many shortcomings it currently has! :)
|
||
|
|
||
|
Let's list the main pain points below and some suggestions on how to fix them.
|
||
|
|
||
|
** Too Emacsy
|
||
|
|
||
|
Most tools for hacking Guix imply the use of Emacs. Even Guile-Studio is Emacs
|
||
|
under the hood. This is the source of a few problems:
|
||
|
|
||
|
- Emacs has a steep learning curve which may overwhelm newcomers and thus deter
|
||
|
Guix adoption.
|
||
|
|
||
|
- Non-Emacs users may want to stick to their favourite editor.
|
||
|
|
||
|
We need to work on integrating Guix with Vim, etc.
|
||
|
|
||
|
** Emacs-guix.el does not work with channels
|
||
|
|
||
|
https://github.com/alezost/guix.el/issues/34
|
||
|
|
||
|
** Recommended Emacs packages
|
||
|
|
||
|
We could add this to The Perfect Setup:
|
||
|
|
||
|
- Magit
|
||
|
|
||
|
- Yasnippet to automate the redaction of commit message.
|
||
|
Add this to your Emacs config:
|
||
|
|
||
|
#+begin_src elisp
|
||
|
(when (require 'yasnippet nil 'noerror)
|
||
|
(yas-global-mode 1)
|
||
|
(add-to-list 'yas-snippet-dirs
|
||
|
(expand-file-name "etc/snippets" "~/projects/guix")))
|
||
|
#+end_src
|
||
|
|
||
|
- guix.el
|
||
|
Try the development commands as well as the log modes.
|
||
|
|
||
|
- Helm / Ivy with =imenu= (fixed in Emacs 27) to browse package definitions
|
||
|
(fuzzy live search).
|
||
|
|
||
|
Fix for Emacs <27 here: https://github.com/alezost/emacs-config
|
||
|
|
||
|
- engine-mode.el to browse the mailing lists from Emacs:
|
||
|
|
||
|
#+begin_src elisp
|
||
|
(defun engine-eww-function (url &optional _)
|
||
|
(interactive)
|
||
|
(eww url))
|
||
|
|
||
|
(defengine guix-devel
|
||
|
"https://lists.gnu.org/archive/cgi-bin/namazu.cgi?idxname=guix-devel&submit=Search&query=%s"
|
||
|
:keybinding "gud"
|
||
|
:browser 'engine-eww-function)
|
||
|
|
||
|
(defengine guix-help
|
||
|
"https://lists.gnu.org/archive/cgi-bin/namazu.cgi?idxname=help-guix&submit=Search!&query=%s"
|
||
|
:keybinding "guh"
|
||
|
:browser 'engine-eww-function)
|
||
|
#+end_src
|
||
|
|
||
|
- debbugs.el to browse and apply patches from Emacs.
|
||
|
Try =debbugs-gnu-bugs= to go to a given bug number directly.
|
||
|
Also try =debbugs-org= and the following snippet:
|
||
|
|
||
|
#+begin_src elisp
|
||
|
(defun guix-debbugs-gnu (&optional severities packages archivedp suppress tags)
|
||
|
"Like `debbugs-gnu' but for the Guix project."
|
||
|
(interactive)
|
||
|
(let ((debbugs-gnu-default-packages '("guix-patches" "guix")))
|
||
|
(if (called-interactively-p)
|
||
|
(call-interactively 'debbugs-gnu)
|
||
|
(debbugs-gnu severities packages archivedp suppress tags))))
|
||
|
#+end_src
|
||
|
|
||
|
To apply patches, mark the corresponding emails then press press "|"
|
||
|
(gnus-summary-pipe-output) and type =cd ~/guix && git am= (change the path as
|
||
|
appropriate).
|
||
|
|
||
|
- Geiser for Guile hacking. You need to tell Emacs to add the checkouts of Guix
|
||
|
and the channels that you use in order to load hack a Guix-related module from
|
||
|
the REPL.
|
||
|
|
||
|
#+begin_src elisp
|
||
|
(dolist (dir '("~/projects/guix" "~/projects/my-guix-channel"))
|
||
|
(when (file-directory-p dir)
|
||
|
(add-to-list 'geiser-guile-load-path dir)))
|
||
|
#+end_src
|
||
|
|
||
|
Geiser needs more work, in particular:
|
||
|
|
||
|
https://gitlab.com/jaor/geiser/issues/293
|
||
|
https://gitlab.com/jaor/geiser/issues/294
|
||
|
https://gitlab.com/jaor/geiser/issues/295
|
||
|
https://gitlab.com/jaor/geiser/issues/296
|
||
|
|
||
|
Something that many Guix hackers didn't seem to know: on error you can display
|
||
|
the backtrace with all local values for all the frames with
|
||
|
|
||
|
#+begin_src scheme
|
||
|
,backtrace #:full? #t
|
||
|
#+end_src
|
||
|
|
||
|
or
|
||
|
|
||
|
#+begin_src scheme
|
||
|
,bt #:full? #t
|
||
|
#+end_src
|
||
|
|
||
|
It's cumbersome to write though and it would be nicer to implement
|
||
|
https://gitlab.com/jaor/geiser/issues/295.
|
||
|
|
||
|
- Paredit, Parinfer, Lispy, symex
|
||
|
|
||
|
While =paredit= is the most famous package for enhanced Lisp editing, the
|
||
|
other ones might be more modern and worth checking out.
|
||
|
For instance, have a look at the demos for Lisp:
|
||
|
|
||
|
https://github.com/abo-abo/lispy#demos
|
||
|
|
||
|
** Configuration sharing hub
|
||
|
|
||
|
We don't really have a way of sharing Guix tips and configurations.
|
||
|
|
||
|
For now, all we have is
|
||
|
|
||
|
- https://old.reddit.com/r/GUIX/
|
||
|
- https://gitlab.com/explore/projects?tag=guix
|
||
|
- https://github.com/topics/guix
|
||
|
|
||
|
** use-package.el Guix support
|
||
|
|
||
|
Currently Emacs' use-package.el installs from MELPA / ELPA when a package is
|
||
|
missing.
|
||
|
It would be nice to add a Guix backend so that the package is automatically
|
||
|
installed to the given profile when missing.
|
||
|
|
||
|
** Other considerations
|
||
|
|
||
|
Some remarks came up that are not directly related to the tooling.
|
||
|
|
||
|
*** Channel origin of a package
|
||
|
|
||
|
Currently there is no practical way to know from which channel a package comes.
|
||
|
We would need to add another field to =guix show= and =guix search=.
|