Skip to content

ryanprior/emacs-guix-packaging

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Creating & maintaining Guix packages

Commands

M-x guix-packaging-insert-input

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.

M-x guix-packaging-hash-git

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.

M-x guix-packaging-refresh-packages

Refresh the cache of information about available Guix packages.


Snippets

scheme mode

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.

sgml, web, markdown, and org modes

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.

text mode

The guix-issue-url snippet inserts a URL pointing to the Guix issue tracker.


Configuration

Output & error buffers

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*)

Guix

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.

Snippets

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

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.

Tracking packaging progress

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.

Commands

M-x guix-packaging-go-mod-to-checklist-dwim

Turns go module definitions into an org/markdown checklist, suitable to keep track of packaging progress.

M-x guix-packaging-go-mod-to-checkbox

Replace a single go module definition with a checkbox.