guix-packaging (aka “guix-packaging.el”) provides tools to create and maintain Guix packages quickly and with confidence.
Vision:
Writing and maintaining Guix packages in Emacs should be a breeze. The information you need should be ready at your fingertips and any chores or guesswork that can be reasonably automated should be. In particular, maintainers of Emacs packages in Guix should be able to complete the entire cycle of package creation, testing, installation, updates, maintenance and discovery within Emacs.
Prompts for a set of package strings with completion, for example ruby@2.7.2
,
and inserts the corresponding Guix input form such as ("ruby@2.7.2"
,ruby-2.7)
.
Reads the Guile source code to find the appropriate symbol name, so it might not work with some packages that have unusual source code.
Saves the Guix hash to the kill ring for a git repository URL at a given tag.
Reads your mind to get the default URL: prefers the URL at point, falls back to
the URL following (url "
in the defun
at point, or as a last resort, uses
the next match in the buffer for goto-address-url-regexp
.
Refresh the cache of information about available Guix packages.
The guix-go
snippet creates the skeleton of a go module package and assists
you in quickly filling it out. You first provide the import path, from which the
snippet infers the symbol & package names, the repo URL, the hash, and the
homepage. All of these are presented in the snippet as default values that you
can change as you go for unusual cases.
The guix-go-noversion
snippet is similar but instead provides a package
skeleton suitable for those modules which don’t have any releases.
The guix-badge
snippet inserts the HTML for a Repology badge showing the
package status in Guix and linking to the project page in Repology, handy for
project status pages.
The guix-issue-url
snippet inserts a URL pointing to the Guix issue tracker.
Set guix-packaging-output-buffer
to control where status messages are sent,
and guix-packaging-error-buffer
for error messages. These can be the same if
you prefer them interleaved. (Default: *guix-packaging*
)
Set guix-packaging-guix-executable
to specify which executable file should be
used to invoke Guix commands. (Default: ~/.config/guix/current/bin/guix
)
Add extra Guile load paths to Guix commands that support them by putting them in
guix-packaging-extra-load-paths
.
Set guix-packaging-slug-dash-pattern
to control which characters will get
replaced with dashes when making a slug to use as a Guile symbol.
Structural transformation is an experimental feature. It assists you in changing the structure of a Guix package definition without affecting the content.
It is documented in TRANSFORM.ORG.
Some packages are complex due to a large number of transitive dependencies. I’ve found this to be true of software in the golang ecosystem where it’s not uncommon to see 50+ transitive dependencies, and occasionally many more.
guix-packaging provides some facilities to help track progress on complex packages.
Turns go module definitions into an org/markdown checklist, suitable to keep track of packaging progress.
Replace a single go module definition with a checkbox.