Modular, context-aware and aspect-oriented dendritic Nix configurations. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/ den.oeiuwq.com
configurations den dendritic nix aspect oriented

Compare changes

Choose any two refs to compare.

+146
+29
templates/examples/flake.lock
··· 234 234 "type": "github" 235 235 } 236 236 }, 237 + "provider": { 238 + "inputs": { 239 + "den": [ 240 + "den" 241 + ], 242 + "flake-aspects": [ 243 + "flake-aspects" 244 + ], 245 + "flake-parts": [ 246 + "flake-parts" 247 + ], 248 + "import-tree": [ 249 + "import-tree" 250 + ], 251 + "nixpkgs": [ 252 + "nixpkgs" 253 + ] 254 + }, 255 + "locked": { 256 + "path": "./provider", 257 + "type": "path" 258 + }, 259 + "original": { 260 + "path": "./provider", 261 + "type": "path" 262 + }, 263 + "parent": [] 264 + }, 237 265 "root": { 238 266 "inputs": { 239 267 "darwin": "darwin", ··· 251 279 "nixpkgs" 252 280 ], 253 281 "nixpkgs-stable": "nixpkgs-stable", 282 + "provider": "provider", 254 283 "systems": "systems" 255 284 } 256 285 },
+10
templates/examples/flake.nix
··· 42 42 nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; 43 43 nixpkgs-lib.follows = "nixpkgs"; 44 44 nixpkgs-stable.url = "github:nixos/nixpkgs/release-25.05"; 45 + provider = { 46 + inputs = { 47 + den.follows = "den"; 48 + flake-aspects.follows = "flake-aspects"; 49 + flake-parts.follows = "flake-parts"; 50 + import-tree.follows = "import-tree"; 51 + nixpkgs.follows = "nixpkgs"; 52 + }; 53 + url = "path:./provider"; 54 + }; 45 55 systems.url = "github:nix-systems/default"; 46 56 }; 47 57
+67
templates/examples/modules/_example/ci/cross-flake-parametric.nix
··· 1 + { 2 + inputs, 3 + lib, 4 + provider, 5 + ... 6 + }: 7 + let 8 + providerModule.nixos.options.providerVars = lib.mkOption { 9 + type = lib.types.attrsOf lib.types.str; 10 + default = { }; 11 + }; 12 + in 13 + { 14 + flake-file.inputs.provider = { 15 + url = "path:./provider"; 16 + inputs.den.follows = "den"; 17 + inputs.flake-aspects.follows = "flake-aspects"; 18 + inputs.flake-parts.follows = "flake-parts"; 19 + inputs.import-tree.follows = "import-tree"; 20 + inputs.nixpkgs.follows = "nixpkgs"; 21 + }; 22 + 23 + imports = [ 24 + (inputs.den.namespace "provider" [ 25 + true 26 + inputs.provider 27 + ]) 28 + ]; 29 + 30 + provider.tools._.dev._.editors = { 31 + nixos.providerVars.LOCAL_EDITOR = "emacs"; 32 + }; 33 + 34 + den.aspects.rockhopper.includes = [ 35 + providerModule 36 + provider.tools._.dev._.editors 37 + provider.tools._.dev._.shells 38 + ]; 39 + 40 + perSystem = 41 + { checkCond, rockhopper, ... }: 42 + let 43 + vars = rockhopper.config.providerVars; 44 + env = rockhopper.config.environment.variables; 45 + in 46 + { 47 + checks.cross-flake-provider-editor = checkCond "provider editor var set" ( 48 + env.PROVIDER_EDITOR == "vim" 49 + ); 50 + 51 + checks.cross-flake-provider-shell = checkCond "provider shell var set" ( 52 + env.PROVIDER_SHELL == "fish" 53 + ); 54 + 55 + checks.cross-flake-local-editor = checkCond "local editor var set" (vars.LOCAL_EDITOR == "emacs"); 56 + 57 + checks.cross-flake-namespace-merged = checkCond "namespace merged from provider input" ( 58 + provider.tools._.dev._.editors == inputs.self.denful.provider.tools._.dev._.editors 59 + && provider.tools._.dev._.shells == inputs.self.denful.provider.tools._.dev._.shells 60 + ); 61 + 62 + checks.cross-flake-input-denful = checkCond "input provider denful accessible" ( 63 + inputs.provider.denful.provider.tools._.dev._.editors.description 64 + == "Editor configurations from provider flake" 65 + ); 66 + }; 67 + }
+12
templates/examples/provider/flake.nix
··· 1 + { 2 + outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules); 3 + 4 + inputs = { 5 + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; 6 + flake-parts.url = "github:hercules-ci/flake-parts"; 7 + flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; 8 + flake-aspects.url = "github:vic/flake-aspects"; 9 + import-tree.url = "github:vic/import-tree"; 10 + den.url = "github:vic/den"; 11 + }; 12 + }
+28
templates/examples/provider/modules/den.nix
··· 1 + { inputs, ... }: 2 + { 3 + systems = [ 4 + "x86_64-linux" 5 + "aarch64-darwin" 6 + ]; 7 + 8 + imports = [ 9 + inputs.den.flakeModule 10 + (inputs.den.namespace "provider" true) 11 + ]; 12 + 13 + provider.tools._.dev._.editors = { 14 + description = "Editor configurations from provider flake"; 15 + nixos.environment.variables.PROVIDER_EDITOR = "vim"; 16 + homeManager = 17 + { pkgs, ... }: 18 + { 19 + home.packages = [ pkgs.vim ]; 20 + }; 21 + }; 22 + 23 + provider.tools._.dev._.shells = { 24 + description = "Shell configurations from provider flake"; 25 + nixos.environment.variables.PROVIDER_SHELL = "fish"; 26 + nixos.environment.systemPackages = [ ]; 27 + }; 28 + }