Open lf- opened 8 months ago
This is due to https://github.com/NixOS/nix/issues/6767, where builtins.getFlake doesn't work on subdirectories.
The solution here, I think, is to use the top level of the repository with ?dir=blah/blah.
?dir=blah/blah
Output:
configs/nix » nix-update -F packages.x86_64-linux.jellyfin-plugin-sso main $ nix eval --json --impure --expr let inherit (builtins) getFlake stringLength substring; currentSystem = builtins.currentSystem; flake = getFlake "/home/jade/.dotfiles/configs/nix"; pkg = flake.packages.${currentSystem}."packages"."x86_64-linux"."jellyfin-plugin-sso" or flake."packages"."x86_64-linux"."jellyfin-plugin-sso"; inherit (flake) outPath; outPathLen = stringLength outPath; sanitizePosition = { file, ... }@pos: assert substring 0 outPathLen file != outPath -> throw "${file} is not in ${outPath}"; pos // { file = "/home/jade/.dotfiles/configs/nix" + substring outPathLen (stringLength file - outPathLen) file; }; raw_version_position = sanitizePosition (builtins.unsafeGetAttrPos "version" pkg); position = if pkg ? isRubyGem then raw_version_position else if pkg ? isPhpExtension then raw_version_position else sanitizePosition (builtins.unsafeGetAttrPos "src" pkg); in { name = pkg.name; old_version = pkg.version or (builtins.parseDrvName pkg.name).version; inherit raw_version_position; filename = position.file; line = position.line; urls = pkg.src.urls or null; url = pkg.src.url or null; rev = pkg.src.rev or null; hash = pkg.src.outputHash or null; go_modules = pkg.goModules.outputHash or null; go_modules_old = pkg.go-modules.outputHash or null; cargo_deps = pkg.cargoDeps.outputHash or null; raw_cargo_lock = if pkg ? cargoDeps.lockFile then let inherit (pkg.cargoDeps) lockFile; res = builtins.tryEval (sanitizePosition { file = toString lockFile; }); in if res.success then res.value.file else false else null; npm_deps = pkg.npmDeps.outputHash or null; yarn_deps = pkg.offlineCache.outputHash or null; tests = builtins.attrNames (pkg.passthru.tests or {}); has_update_script = false; src_homepage = pkg.src.meta.homepage or null; changelog = pkg.meta.changelog or null; } --extra-experimental-features flakes nix-command error: … while evaluating attribute 'cargo_deps' at «string»:35:3: 34| go_modules_old = pkg.go-modules.outputHash or null; 35| cargo_deps = pkg.cargoDeps.outputHash or null; | ^ 36| raw_cargo_lock = … while evaluating the attribute 'packages.x86_64-linux.packages.x86_64-linux.jellyfin-plugin-sso' at /nix/store/kv5iqddpycxr6ydknp30qfdsl4a8zsr5-source/flake.nix:129:7: 128| 129| packages.x86_64-linux = | ^ 130| let (stack trace truncated; use '--show-trace' to show the full trace) error: getting status of '/nix/programs/hsutils/overlay.nix': No such file or directory Traceback (most recent call last): File "/nix/store/yq22dg22s0f21jfqzi26937z96w749pr-nix-update-1.0.0/bin/.nix-update-wrapped", line 9, in <module> sys.exit(main()) ^^^^^^ File "/nix/store/yq22dg22s0f21jfqzi26937z96w749pr-nix-update-1.0.0/lib/python3.11/site-packages/nix_update/__init__.py", line 287, in main package = update(options) ^^^^^^^^^^^^^^^ File "/nix/store/yq22dg22s0f21jfqzi26937z96w749pr-nix-update-1.0.0/lib/python3.11/site-packages/nix_update/update.py", line 322, in update package = eval_attr(opts) ^^^^^^^^^^^^^^^ File "/nix/store/yq22dg22s0f21jfqzi26937z96w749pr-nix-update-1.0.0/lib/python3.11/site-packages/nix_update/eval.py", line 181, in eval_attr res = run(cmd) ^^^^^^^^ File "/nix/store/yq22dg22s0f21jfqzi26937z96w749pr-nix-update-1.0.0/lib/python3.11/site-packages/nix_update/utils.py", line 37, in run return subprocess.run( ^^^^^^^^^^^^^^^ File "/nix/store/y027d3bvlaizbri04c1bzh28hqd6lj01-python3-3.11.7/lib/python3.11/subprocess.py", line 571, in run raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError: Command '['nix', 'eval', '--json', '--impure', '--expr', '\nlet\n \n inherit (builtins) getFlake stringLength substring;\n currentSystem = builtins.currentSystem;\n flake = getFlake "/home/jade/.dotfiles/configs/nix";\n pkg = flake.packages.${currentSystem}."packages"."x86_64-linux"."jellyfin-plugin-sso" or flake."packages"."x86_64-linux"."jellyfin-plugin-sso";\n inherit (flake) outPath;\n outPathLen = stringLength outPath;\n sanitizePosition = { file, ... }@pos:\n assert substring 0 outPathLen file != outPath\n -> throw "${file} is not in ${outPath}";\n pos // { file = "/home/jade/.dotfiles/configs/nix" + substring outPathLen (stringLength file - outPathLen) file; };\n\n raw_version_position = sanitizePosition (builtins.unsafeGetAttrPos "version" pkg);\n\n position = if pkg ? isRubyGem then\n raw_version_position\n else if pkg ? isPhpExtension then\n raw_version_position\n else\n sanitizePosition (builtins.unsafeGetAttrPos "src" pkg);\nin {\n name = pkg.name;\n old_version = pkg.version or (builtins.parseDrvName pkg.name).version;\n inherit raw_version_position;\n filename = position.file;\n line = position.line;\n urls = pkg.src.urls or null;\n url = pkg.src.url or null;\n rev = pkg.src.rev or null;\n hash = pkg.src.outputHash or null;\n go_modules = pkg.goModules.outputHash or null;\n go_modules_old = pkg.go-modules.outputHash or null;\n cargo_deps = pkg.cargoDeps.outputHash or null;\n raw_cargo_lock =\n if pkg ? cargoDeps.lockFile then\n let\n inherit (pkg.cargoDeps) lockFile;\n res = builtins.tryEval (sanitizePosition {\n file = toString lockFile;\n });\n in\n if res.success then res.value.file else false\n else\n null;\n npm_deps = pkg.npmDeps.outputHash or null;\n yarn_deps = pkg.offlineCache.outputHash or null;\n tests = builtins.attrNames (pkg.passthru.tests or {});\n has_update_script = false;\n src_homepage = pkg.src.meta.homepage or null;\n changelog = pkg.meta.changelog or null;\n}', '--extra-experimental-features', 'flakes nix-command']' returned non-zero exit status 1.
This is due to https://github.com/NixOS/nix/issues/6767, where builtins.getFlake doesn't work on subdirectories.
The solution here, I think, is to use the top level of the repository with
?dir=blah/blah
.Output: