Skip to content

jellelicht/laura

Repository files navigation

#

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.

Getting started

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

Goals

Simple

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.

Fast

This is the aspect that most impressed me about lorri: it makes using nix to work on random projects fast and almost fun.

Reliable

If it worked yesterday, it should keep working today.

Optional

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.

Non-goals

Compatible with lorri

There is no claim or attempt at being even remotely compatible with lorri, nix or anything of the sorts.

Road map

“Unattended upgrades”

  • Initially, a simple cronjob
  • The future: A (shepherd) service that can react to pings/events/webhooks?

Tests :-)

Documentation :-)

double the amount of users

Figure out how to root the environment used to generate profiles

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

figure out semantics (rebuild/sync)

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.

figure out interactions with git branching

Since our gcroots are registered in the repo, we can easily clobber them: perhaps we should have them somewhere else, e.g. centralized?