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
at noflake 54 lines 1.2 kB view raw
1{ lib, den, ... }: 2let 3 description = '' 4 Defines a user at OS and Home levels. 5 6 Works in NixOS/Darwin and standalone Home-Manager 7 8 ## Usage 9 10 # for NixOS/Darwin 11 den.aspects.my-user.includes = [ den._.define-user ] 12 13 # for standalone home-manager 14 den.aspects.my-home.includes = [ den._.define-user ] 15 16 or globally (automatically applied depending on context): 17 18 den.default.includes = [ den._.define-user ] 19 ''; 20 21 homeDir = 22 host: user: 23 if lib.hasSuffix "darwin" host.system then "/Users/${user.userName}" else "/home/${user.userName}"; 24 25 userContext = 26 { host, user, ... }: 27 { 28 nixos.users.users.${user.userName}.isNormalUser = true; 29 darwin.users.users.${user.userName} = { 30 name = user.userName; 31 home = homeDir host user; 32 }; 33 homeManager = { 34 home.username = user.userName; 35 home.homeDirectory = homeDir host user; 36 }; 37 }; 38 39 hmContext = 40 { home, ... }: 41 userContext { 42 host.system = home.system; 43 user.userName = home.userName; 44 }; 45in 46{ 47 den.provides.define-user = den.lib.parametric { 48 inherit description; 49 includes = [ 50 userContext 51 hmContext 52 ]; 53 }; 54}