commit ddf23d702719461294455d6070bf14551f34686a parent 1385df35f3c2c62038e61165b0038acd1adb388e Author: Jan Pobříslo <ccx@te2000.cz> Date: Thu, 23 Jun 2022 02:18:49 +0200 Try to resolve profile directory without chrooting Diffstat:
M | zsh-functions/confz_containers_init | | | 18 | +++++++++++++++++- |
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/zsh-functions/confz_containers_init b/zsh-functions/confz_containers_init @@ -1032,6 +1032,11 @@ confz_container_nix_image_check() { require container_nix_image_installed :filename :root :image_name \ :svscan_dir :uid :gid :containers_dir :user + + require fs_l filename="$vars[root]/nix/var/nix/profiles/default" \ + destination="per-user/root/profile" + require fs_o filename="$vars[root]/nix/var/nix/profiles/default" \ + owner=$vars[uid]:$vars[gid] } confz_container_nix_packages_installed_check() { @@ -1041,9 +1046,20 @@ confz_container_nix_packages_installed_check() { :image_name local root=$vars[containers_dir]/systems/$vars[image_name] + local profile_dir=$root/nix/var/nix/profiles/per-user/root/profile + local -A stat_info + zstat -H stat_info $profile_dir + # while it's a symlink + while (( $fileset_stat_cur[mode] >> 12 == 10 )); do + if [[ $stat_info[link] == /* ]]; then + profile_dir=$root$stat_info[link] + else + die "TODO? relative symlink: ${(qqq)profile_dir}" + fi + done local -a world=( "${(@f)$( grep -o 'outPath = "[^"]*"' \ - $root/var/lib/nix/profiles/default/manifest.nix \ + $profile_dir/manifest.nix \ | uniq | sed 's|^outPath = "/nix/store/[^-]*-||;s|"$||' )}" ) local -a missing