#
laura
is a (poor) attempt at emulating the wonderful lorri tool, but
for guix. Since guix is quite a bit different, laura
does not have
to deal with as many concerns as lorri
does.
Make sure GUILE_LOAD_PATH
and GUIX_EXTENSIONS_PATH
are set up
properly. Run guix laura init
to start living the good life. You
probably want to have direnv
and your favorite shell/editor
integrations set up as well.
You will most likely want to add the following files to version control:
- configured manifest file (default: “manifest.scm”)
- configured channels file (optional)
- your {generated,modified}
.envrc
file.
You will want to ignore the following in your version control system:
- configured guix-profile (default: “.guix-profile”)
Since it’s just me using this, I’d like most features to be
provided and supported by other folks; as such, laura
delegates
to built-in guix features for all of the offered functionality.
This is the aspect that most impressed me about lorri
: it makes
using nix to work on random projects fast and almost fun.
If it worked yesterday, it should keep working today.
Ideally, only the fool choosing to run this should be bothered by
it: at ‘runtime’, only standard tooling such as guix
and direnv
should be required to consume the files generated by laura
.
There is no claim or attempt at being even remotely compatible with
lorri
, nix
or anything of the sorts.
- Initially, a simple cronjob
- The future: A (shepherd) service that can react to pings/events/webhooks?
Currently, re-generating the environment might cause rebuilds of the inferior guix if it has been garbage collected in the meantime. We should look into having it be available as a gc-root. Current snippet, courtesy of abcdw:
guix pull -C channels.scm -p .guix-tmp-profile
Currently, there is one major command (sync
). Ideally, there is
a difference w.r.t. changing guix+channels, versus changing your
own code.
To simply rebuild the environment using the exact same guix, we could have a look at:
guix package --export-channels -p .guix-profile
Of course, we have channels.scm, which can offer to pin specific guix channels, but by default we just use ‘current’ guix, at the moment of init/sync. This seems like the usecase I would want most often as a developer.
Since our gcroots are registered in the repo, we can easily clobber them: perhaps we should have them somewhere else, e.g. centralized?