The main purpose of this harness is to provide a set of basic
functions to create home-manager loaders, include user configuration,
and provide an API surface to specify the active users on a system.
Adding the initial template for the device configuration for my
desktop computer (named after the ship in Mass Effect Andromeda),
which is taken from my old infrastructure repository. Some things
will have to be changed in this configuration, but at least this way I
don't have to start by creating device formatting modules.
Adding an empty directory and basic outline of libkookie, my personal
collection of nix expressions, and toolkit for building my system
configurations.
This project previously was part of kookienomicon, but was removed due
to technical debt in the way that it was structured. I deemed it a
better approach to start anew, to try to limit the exposure of past
mistakes.
What this allows us to do is much better relationship tracking between
sessions and invoices. The CASS file already has all the structure we
need, and it would be silly to replicate it via complicated time
association algorithms. This approach uses the linear nature of the
data file to track the position relative to other entries.
The timeline module is then responsible for making changes to the
internal representation (in case it is being used as a library for
multi-query commands), and emitting a `Delta` type that can be used to
easily patch the IR in question, because the mapping between the
timeline and IR representations is linear.
This commit does kind of a lot to get cass(1) over the finish line.
For one it implements all the CLI functions (well, almost all) with
their respective parameters, and also creates a new `gen` module which
uses the IR stream to generate a new file based on the old one, while
updating header fields that need to be updated (currently only
`version`).
This version does nothing with the actual header values, and probably
has a lot of bugs. More documentation will follow in future
cassiopeia commits.
This allows a few things: a, it's a persistant format that we can
mirror to disk again, AND can adapt because all type information is
known, and it allows for new entries to be added to the IR more
easily, without having to worry about exact formatting, or
re-inferring order from the TimeFile abstraction.