Change:
Called from here: system: host os: multi-user?: sandbox: version: channels(root): channels(chris): nixpkgs:
I can reproduce this on system: host os: multi-user?: sandbox: version: channels(root): channels(addy): nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos
The problem seems to be, that already is a symlink. So it is no wonder that we can't edit it, as it is part of the original derivation. I'm not sure why that ever worked in the past, pkgs/build- hasn't been changed since there was an update to the dwarf-fortress derivation. I think the easiest way would to create the file in a separate derivation and add it to .

Discussion:
<del> { stdenv, lib, buildEnv, substituteAll </del> <ins> { stdenv, lib, buildEnv, substituteAll, runCommand </ins> , dwarf-fortress, dwarf-fortress-unfuck , dwarf-therapist , enableDFHack ? false, dfhack

++ lib.optional enableTWBT twbt.art ++ [ dwarf-fortress ]; <ins> fixup = lib.singleton (runCommand "fixup" {} '' mkdir -p $out/data/init cp ${dwarf-fortress}/data/init/init.txt $out/data/init/init.txt '' + lib.optionalString enableDFHack '' mkdir -p $out/hack # Patch the MD5 orig_md5=$(cat "${dwarf-fortress}/hash.md5.orig") patched_md5=$(cat "${dwarf-fortress}/hash.md5") input_file="${dfhack_}/hack/symbols.xml" output_file="$out/hack/symbols.xml" echo "[DFHack Wrapper] Fixing Dwarf Fortress MD5:" echo "  Input:   $input_file" echo "  Search:  $orig_md5" echo "  Output:  $output_file" echo "  Replace: $patched_md5" substitute "$input_file" "$output_file" --replace "$orig_md5" "$patched_md5" '' + lib.optionalString enableTWBT '' substituteInPlace $out/data/init/init.txt  --replace '[PRINT_MODE:2D]' '[PRINT_MODE:TWBT]' '' + '' substituteInPlace $out/data/init/init.txt  --replace '[INTRO:YES]' '[INTRO:${unBool enableIntro}]'  --replace '[TRUETYPE:YES]' '[TRUETYPE:${unBool enableTruetype}]'  --replace '[FPS:NO]' '[FPS:${unBool enableFPS}]' ''); </ins> env = buildEnv { name = "dwarf-fortress-env-${dwarf-fortress.dfVersion}"; <del> paths = themePkg ++ pkgs; </del> <ins> paths = fixup ++ themePkg ++ pkgs; </ins> pathsToLink = [ "/" "/hack" "/hack/scripts" ]; <del> postBuild = '' # De-symlink init.txt cp $out/data/init/init.txt init.txt rm -f $out/data/init/init.txt mv init.txt $out/data/init/init.txt '' + lib.optionalString enableDFHack '' # De-symlink symbols.xml rm $out/hack/symbols.xml # Patch the MD5 orig_md5=$(cat "${dwarf-fortress}/hash.md5.orig") patched_md5=$(cat "${dwarf-fortress}/hash.md5") input_file="${dfhack_}/hack/symbols.xml" output_file="$out/hack/symbols.xml" echo "[DFHack Wrapper] Fixing Dwarf Fortress MD5:" echo "  Input:   $input_file" echo "  Search:  $orig_md5" echo "  Output:  $output_file" echo "  Replace: $patched_md5" substitute "$input_file" "$output_file" --replace "$orig_md5" "$patched_md5" '' + lib.optionalString enableTWBT '' substituteInPlace $out/data/init/init.txt  --replace '[PRINT_MODE:2D]' '[PRINT_MODE:TWBT]' '' + '' substituteInPlace $out/data/init/init.txt  --replace '[INTRO:YES]' '[INTRO:${unBool enableIntro}]'  --replace '[TRUETYPE:YES]' '[TRUETYPE:${unBool enableTruetype}]'  --replace '[FPS:NO]' '[FPS:${unBool enableFPS}]' ''; </del> ignoreCollisions = true; }; in