Improve error messages for unfetchable packages

Split out the check for "pin" (which already had a dedicated check, but
it was mostly unreachable) from the check for "repo URL", and make both
error messages more useful.

Remove a TODO while I'm there, because it looks unachievable: we should
only hit these checks when using our generated derivation, which should
mean we're also generating `src`, which means we really do need a pin,
as Nix will otherwise refuse to fetch in pure evalution mode.

For #20
This commit is contained in:
Marien Zwart 2024-07-13 14:22:02 +10:00
parent ceaea0f0a7
commit 6ecd96edc3
No known key found for this signature in database

View file

@ -177,25 +177,25 @@ let
else customPackages.${name}
or (
assert lib.assertMsg
(isElpa || (p ? recipe && pin != null) || extraUrls ? ${name})
"${name}: not in epkgs, not elpa, no recipe or not pinned";
(isElpa || (p ? recipe) || extraUrls ? ${name}) ''
nix-doom-emacs-unstraightened: ${name}: unable to derive repository URL:
- no recipe provided
- not an ELPA package
- not in Unstraightened's fetch-overrides.nix
If this is a custom `package!` entry in packages.el, add a `:recipe`.
'';
# Assume we can safely ignore (pre-)build unless we're actually
# building our own package.
assert lib.assertMsg (!(p ? recipe.pre-build)) "${name}: pre-build not supported";
assert lib.assertMsg (!(p ? recipe.build)) "${name}: build not supported";
# TODO: lift "pin" requirement, if that turns out to be
# necessary or at least desirable. Requires figuring out why
# melpa2nix requires `commit`. Not a priority because if it's
# not in epkgs we'd need a recipe passed in, and it's uncommon
# for Doom to pass in a recipe without pinning.
#
# Doom does currently have unpinned packages with an explicit
# recipe, but they're in epkgs (popon and flymake-popon) so it
# should be ok. Users might do this to pull in a custom package
# they don't care about pinning, though: we may want to support
# that.
assert lib.assertMsg (pin != null)
"${name}: not in epkgs and not pinned. This is not yet supported.";
assert lib.assertMsg (pin != null) ''
nix-doom-emacs-unstraightened: ${name}: not in nixpkgs or emacs-overlay, not pinned.
All packages must be pinned so they can be fetched deterministically.
If this is a custom `package!` entry in your packages.el, add a `:pin`.
If it is a `package!` in Doom, add an entry to Unstraightened's fetch-overrides.nix.
'';
# epkgs.*Build helpers take an attrset, they do not support
# mkDerivation's fixed-point evaluation (`finalAttrs`).
# If they did, the buildInputs stuff should use finalAttrs.src.