diff --git a/modules/system/etc/etc.nix b/modules/system/etc/etc.nix index da60108d7c9..4ae420017a5 100644 --- a/modules/system/etc/etc.nix +++ b/modules/system/etc/etc.nix @@ -36,11 +36,17 @@ let chmod ${mode} "$target" ''; - makeEtc = import ./make-etc.nix { - inherit (pkgs) stdenv; - configFiles = config.environment.etc; + makeEtc = pkgs.stdenv.mkDerivation { + name = "etc"; + + builder = ./make-etc.sh; + + /* !!! Use toXML. */ + sources = map (x: x.source) config.environment.etc; + targets = map (x: x.target) config.environment.etc; + modes = map (x: if x ? mode then x.mode else "symlink") config.environment.etc; }; - + in { diff --git a/modules/system/etc/make-etc.nix b/modules/system/etc/make-etc.nix deleted file mode 100644 index 94ea248f669..00000000000 --- a/modules/system/etc/make-etc.nix +++ /dev/null @@ -1,12 +0,0 @@ -{stdenv, configFiles}: - -stdenv.mkDerivation { - name = "etc"; - - builder = ./make-etc.sh; - - /* !!! Use toXML. */ - sources = map (x: x.source) configFiles; - targets = map (x: x.target) configFiles; - modes = map (x: if x ? mode then x.mode else "symlink") configFiles; -} diff --git a/modules/system/etc/make-etc.sh b/modules/system/etc/make-etc.sh index 4b7bb68be4b..f05d74b55fc 100644 --- a/modules/system/etc/make-etc.sh +++ b/modules/system/etc/make-etc.sh @@ -8,13 +8,13 @@ modes_=($modes) for ((i = 0; i < ${#targets_[@]}; i++)); do ensureDir $out/etc/$(dirname ${targets_[$i]}) if ! test -e $out/etc/${targets_[$i]}; then - ln -s ${sources_[$i]} $out/etc/${targets_[$i]}; + ln -s ${sources_[$i]} $out/etc/${targets_[$i]}; else - echo Duplicate entry "${targets_[$i]} -> ${sources_[$i]}" - if test "$(readlink "$targets_[$i]")" -ne "$sources_[$i]"; then - echo Mismatched duplicate entry "$(readlink "$targets_[$i]") "'<>'" $sources_[$i]" - exit 1 - fi + echo "Duplicate entry ${targets_[$i]} -> ${sources_[$i]}" + if test "$(readlink $out/etc/${targets_[$i]})" != "${sources_[$i]}"; then + echo "Mismatched duplicate entry $(readlink $out/etc/${targets_[$i]}) <-> ${sources_[$i]}" + exit 1 + fi fi; if test "${modes_[$i]}" != symlink; then echo "${modes_[$i]}" > $out/etc/${targets_[$i]}.mode