diff --git a/templates/bogus/flake.lock b/templates/bogus/flake.lock index b770d8a..25ea5ec 100644 --- a/templates/bogus/flake.lock +++ b/templates/bogus/flake.lock @@ -18,11 +18,11 @@ }, "flake-aspects": { "locked": { - "lastModified": 1762465224, - "narHash": "sha256-jfXLTwngKXwFOCVfCupHGcCw/OIpgy5lMYIF8KPfMN8=", + "lastModified": 1763284357, + "narHash": "sha256-mPMHkhpOIsj2lg+KIcapFd4uj2N/9mZZ6RZBo/p5O1c=", "owner": "vic", "repo": "flake-aspects", - "rev": "4cbae79bc642311f45c211f9c20d20226544b6f9", + "rev": "6a6d47f531ad57ac854cee689e84f2e28861ec49", "type": "github" }, "original": { diff --git a/templates/default/flake.lock b/templates/default/flake.lock index a5041a2..d533b7a 100644 --- a/templates/default/flake.lock +++ b/templates/default/flake.lock @@ -37,11 +37,11 @@ }, "flake-aspects": { "locked": { - "lastModified": 1762465224, - "narHash": "sha256-jfXLTwngKXwFOCVfCupHGcCw/OIpgy5lMYIF8KPfMN8=", + "lastModified": 1763284357, + "narHash": "sha256-mPMHkhpOIsj2lg+KIcapFd4uj2N/9mZZ6RZBo/p5O1c=", "owner": "vic", "repo": "flake-aspects", - "rev": "4cbae79bc642311f45c211f9c20d20226544b6f9", + "rev": "6a6d47f531ad57ac854cee689e84f2e28861ec49", "type": "github" }, "original": { diff --git a/templates/default/modules/aspects/alice.nix b/templates/default/modules/aspects/alice.nix index 06d54f8..8628214 100644 --- a/templates/default/modules/aspects/alice.nix +++ b/templates/default/modules/aspects/alice.nix @@ -1,11 +1,14 @@ -{ den, ... }: +{ den, eg, ... }: { den.aspects.alice = { - # You can include other aspects, in this case some - # den included batteries that provide common configs. + + # Alice can include other aspects. + # For small, private one-shot aspects, use let-bindings like here. + # for more complex or re-usable ones, define on their own modules, + # as part of any aspect-subtree. includes = let - # deadnix: skip # demo: enable <> on lexical scope + # deadnix: skip # not required, showcasing angle-brackets syntax. inherit (den.lib) __findFile; customEmacs.homeManager = @@ -16,8 +19,14 @@ }; in [ + # from local bindings. customEmacs - + # from the aspect tree, cooper example is defined bellow + den.aspects.cooper + den.aspects.setHost + # from the `eg` namespace. + eg.autologin + # den included batteries that provide common configs. # alice is admin always. ( "fish") # default user shell ]; @@ -26,10 +35,7 @@ nixos = { pkgs, ... }: { - users.users.alice = { - description = "Alice Cooper"; - packages = [ pkgs.vim ]; - }; + users.users.alice.packages = [ pkgs.vim ]; }; # Alice home-manager. @@ -46,4 +52,19 @@ nixos.programs.nh.enable = host.name == "igloo"; }; }; + + # This is a context-aware aspect, that emits configurations + # **anytime** at least the `user` data is in context. + # read more at https://vic.github.io/den/context-aware.html + den.aspects.cooper = + { user, ... }: + { + nixos.users.users.${user.userName}.description = "Alice Cooper"; + }; + + den.aspects.setHost = + { host, ... }: + { + networking.hostName = host.hostName; + }; } diff --git a/templates/examples/flake.lock b/templates/examples/flake.lock index 9206300..8e69057 100644 --- a/templates/examples/flake.lock +++ b/templates/examples/flake.lock @@ -37,11 +37,11 @@ }, "flake-aspects": { "locked": { - "lastModified": 1762148645, - "narHash": "sha256-NfxjuuA1p7Sn+OX0HD+p6LepxRFYmahaybvN7+D3GZQ=", + "lastModified": 1763284357, + "narHash": "sha256-mPMHkhpOIsj2lg+KIcapFd4uj2N/9mZZ6RZBo/p5O1c=", "owner": "vic", "repo": "flake-aspects", - "rev": "895538b1372ecbe4966db85553b11eb64a72086c", + "rev": "6a6d47f531ad57ac854cee689e84f2e28861ec49", "type": "github" }, "original": { diff --git a/templates/examples/modules/_example/ci/top-level-parametric.nix b/templates/examples/modules/_example/ci/top-level-parametric.nix new file mode 100644 index 0000000..a4c2bf4 --- /dev/null +++ b/templates/examples/modules/_example/ci/top-level-parametric.nix @@ -0,0 +1,47 @@ +# it is possible for top-level aspects directly under +# den.aspects to take a context argument. +{ den, lib, ... }: +let + # A module to test that toplevel had context. + topLevel = name: { + config.tops = name; + options.tops = lib.mkOption { type = lib.types.str; }; + }; +in +{ + + den.aspects.toplevel-user = + { user, ... }: + { + nixos.imports = [ (topLevel user.name) ]; + }; + + den.aspects.toplevel-host = + { host, ... }: + { + homeManager.imports = [ (topLevel host.name) ]; + }; + + den.aspects.alice.includes = [ + den.aspects.toplevel-host + den.aspects.toplevel-user + ]; + + perSystem = + { + checkCond, + alice-at-rockhopper, + rockhopper, + ... + }: + { + checks.alice-toplevel-user = checkCond "alice toplevel param aspect" ( + rockhopper.config.tops == "alice" + ); + + checks.alice-toplevel-host = checkCond "alice toplevel param aspect" ( + alice-at-rockhopper.tops == "rockhopper" + ); + }; + +}