repl-overlays: Provide an elaborate example
This is the repl overlay from my dotfiles, which I think provides a reasonable and ergonomic set of variables. We can iterate on this over time, or (perhaps?) provide a sentinel value like `repl-overlays = <DEFAULT>` to include a "suggested default" overlay like this one. Change-Id: I8eba3934c50fbac8367111103e66c7375b8d134e
This commit is contained in:
parent
02eb07cfd5
commit
fc4a160878
1 changed files with 48 additions and 0 deletions
|
@ -185,6 +185,54 @@ struct EvalSettings : Config
|
||||||
else
|
else
|
||||||
{ }
|
{ }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Here's a more elaborate `repl-overlay`, which provides the following
|
||||||
|
variables:
|
||||||
|
- The original, unmodified variables are aliased to `original`.
|
||||||
|
- `legacyPackages.${system}` (if it exists) or `packages.${system}`
|
||||||
|
(otherwise) is aliased to `pkgs`.
|
||||||
|
- All attribute set variables with a `${system}` attribute are
|
||||||
|
abbreviated in the same manner; e.g. `devShells.${system}` is
|
||||||
|
shortened to `devShells`.
|
||||||
|
|
||||||
|
For example, the following attribute set:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
info: final: attrs: let
|
||||||
|
# Equivalent to nixpkgs `lib.optionalAttrs`.
|
||||||
|
optionalAttrs = predicate: attrs:
|
||||||
|
if predicate
|
||||||
|
then attrs
|
||||||
|
else {};
|
||||||
|
|
||||||
|
# If `attrs.${oldName}.${info.currentSystem}` exists, alias `${newName}` to
|
||||||
|
# it.
|
||||||
|
collapseRenamed = oldName: newName:
|
||||||
|
optionalAttrs (builtins.hasAttr oldName attrs
|
||||||
|
&& builtins.hasAttr info.currentSystem attrs.${oldName})
|
||||||
|
{
|
||||||
|
${newName} = attrs.${oldName}.${info.currentSystem};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Alias `attrs.${oldName}.${info.currentSystem} to `${newName}`.
|
||||||
|
collapse = name: collapseRenamed name name;
|
||||||
|
|
||||||
|
# Alias all `attrs` keys with an `${info.currentSystem}` attribute.
|
||||||
|
collapseAll =
|
||||||
|
builtins.foldl'
|
||||||
|
(prev: name: prev // collapse name)
|
||||||
|
{}
|
||||||
|
(builtins.attrNames attrs);
|
||||||
|
in
|
||||||
|
# Preserve the original bindings as `original`.
|
||||||
|
(optionalAttrs (! attrs ? original)
|
||||||
|
{
|
||||||
|
original = attrs;
|
||||||
|
})
|
||||||
|
// (collapseRenamed "packages" "pkgs")
|
||||||
|
// (collapseRenamed "legacyPackages" "pkgs")
|
||||||
|
// collapseAll
|
||||||
|
```
|
||||||
)"};
|
)"};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue