aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/eval-settings.hh
diff options
context:
space:
mode:
authorRebecca Turner <rbt@sent.as>2024-09-01 15:28:59 -0700
committerRebecca Turner <rbt@sent.as>2024-09-01 15:30:58 -0700
commitfc4a160878986ac412c3991f55eab5bc139ce698 (patch)
treefdb7715cdda58c48373ad05c3d4bc71f0ca762e4 /src/libexpr/eval-settings.hh
parent02eb07cfd539c34c080cb1baf042e5e780c1fcc2 (diff)
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
Diffstat (limited to 'src/libexpr/eval-settings.hh')
-rw-r--r--src/libexpr/eval-settings.hh48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/libexpr/eval-settings.hh b/src/libexpr/eval-settings.hh
index 444e298a0..f7ad2d786 100644
--- a/src/libexpr/eval-settings.hh
+++ b/src/libexpr/eval-settings.hh
@@ -185,6 +185,54 @@ struct EvalSettings : Config
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
+ ```
)"};
};