diff --git a/backends/on-machine.nix b/backends/on-machine.nix index a3f552e..df072b0 100644 --- a/backends/on-machine.nix +++ b/backends/on-machine.nix @@ -46,6 +46,12 @@ let fi '') (lib.attrValues gen.files)} + # outputs + out=$(mktemp -d) + trap 'rm -rf $out' EXIT + export out + mkdir -p "$out" + if [ $all_files_missing = false ] && [ $all_files_present = false ] ; then echo "Inconsistent state for generator: ${gen.name}" exit 1 @@ -80,12 +86,6 @@ let '') (lib.attrValues config.vars.generators.${input}.files)} '') gen.dependencies} - # outputs - out=$(mktemp -d) - trap 'rm -rf $out' EXIT - export out - mkdir -p "$out" - ( # prepare PATH unset PATH @@ -112,8 +112,15 @@ let mkdir -p "$(dirname "$OUT_FILE")" mv "$out"/${file.name} "$OUT_FILE" '') (lib.attrValues gen.files)} - rm -rf "$out" fi + + # move the files to the correct location + ${lib.concatMapStringsSep "\n" (file: '' + OUT_FILE="$OUT_DIR"/${if file.secret then "secret" else "public"}/${file.generator}/${file.name} + chown ${file.owner}:${file.group} "''${OUT_FILE}" + chmod ${file.mode} "''${OUT_FILE}" + '') (lib.attrValues gen.files)} + rm -rf "$out" '') sortedGenerators} ''; }; diff --git a/options.nix b/options.nix index 3c390d0..377b2d4 100644 --- a/options.nix +++ b/options.nix @@ -82,6 +82,19 @@ default = generator.config.name; defaultText = "Name of the generator"; }; + owner = lib.mkOption { + description = "The user name or id that will own the file."; + default = "root"; + }; + group = lib.mkOption { + description = "The group name or id that will own the file."; + default = "root"; + }; + mode = lib.mkOption { + type = lib.types.strMatching "^[0-7]{4}$"; + description = "The unix file mode of the file. Must be a 4-digit octal number."; + default = "0400"; + }; deploy = lib.mkOption { description = '' Whether the file should be deployed to the target machine.