{ den, eg, ... }: { den.aspects.alice = { # 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 # not required, showcasing angle-brackets syntax. inherit (den.lib) __findFile; customEmacs.homeManager = { pkgs, ... }: { programs.emacs.enable = true; programs.emacs.package = pkgs.emacs30-nox; }; 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 ]; # Alice configures NixOS hosts it lives on. nixos = { pkgs, ... }: { users.users.alice.packages = [ pkgs.vim ]; }; # Alice home-manager. homeManager = { pkgs, ... }: { home.packages = [ pkgs.htop ]; }; # .provides., via eg/routes.nix provides.igloo = { host, ... }: { 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; }; }