{lib, ...}: with builtins; with lib; let fn = import (toString ./fn.nix) {inherit lib;}; # Cannot use here as those evaluations only work with existing paths >.< # hostName and secretPtah can be set with -I hostName=$HOSTNAME and -I secretPath=$SECRETPATH respectively # , defaults to the contents of /secret/hostName secretPath = fn.ifelse (tryEval (toString )).value (toString ) (toString /secret); hostName = ( findFirst (elem: elem.prefix == "hostName") {path = fileContents "${secretPath}/hostName";} nixPath ) .path; machinePath = builtins.toPath (./machines + ("/" + hostName)); machineFiles = fn.lst { p = machinePath; b = true; }; configFiles = fn.lst { p = toString ./config; b = true; }; pkgsFiles = fn.lst { p = toString ./pkgs; b = true; }; serviceFiles = fn.lst { p = toString ./services; b = true; }; in { imports = [ ./options/machine.nix ./services/mailserver/default.nix ] ++ machineFiles ++ configFiles ++ pkgsFiles ++ serviceFiles; }