`doom-start` locates the profile init file relative to
`doom-profile-dir` when running interactively, which we customize (either
directly or by setting `doom-profile-data-dir`). But when running
noninteractively, it uses `doom-profile-init-file`, which always loads
relative to `doom-data-dir`.
We cannot point `doom-data-dir` into the store, so this breaks us.
Work around it by advicing `doom-profile-data-dir` to locate the init
file relative to `doom-profile-dir` too. Try to make this more safe by
erroring out if called on a non-default profile.
All of this feels questionable, but I really want `doom doctor` to
work...
It does not use them (although doomscripts themselves might).
Not forcing them seems more convenient for users (this should let me
test build-profile-loader) and helps me make the profile loader
optional.
Both approaches are about equivalent, but since I'm trying to make the
profile loader optional and there's no way I can make the wrapper
optional, let's move this around...
Instead of passing the path down from the profile loader to init.el,
just substitute the path into init.el.
This requires moving DOOMDIR generation into the same derivation as
profile build to avoid a circular dependency.
This unsets DOOMPROFILE from inside the profile loader, which should
result in Doom behaving as if we were not using profiles at all.
I'm marking this experimental in part because it feels like a hack, and
in part because this is not sufficient to fix `doom doctor`.
Although a completely empty DOOMDIR seems to work (at least for build
purposes), I doubt Doom actually supports this. And it requires some
extra checks on our side as well.
Just check in a trivial DOOMDIR and use that instead.
Add an (empty) straight.el build cache to the generated profile, and
load it when Doom calls `doom-initialize-core-packages` (which normally
does so by side effect).
Unfortunately requires adding to pre-init: Doom overrides
`straight-base-dir`, and we need to override that override.
Partially fixes package help.
Our cli.el ended up in the profile used at runtime. Although we could
have fixed overwriting a user's cli.el by appending to it, that still
would have leaked our build commands into the build.
This approach should be equivalent and reduces our profile modifications
to replacing packages.el (which is kind of the point) and prepending to
init.el (unfortunate, but seemingly necessary).
Removes the need to build a stage1 DOOMDIR, we can just use the user's
DOOMDIR directly.
The same approach should work for the next stage, removing the need to
leave our cli.el in the final DOOMDIR.
Although not used much with doomProfile set, the default (.local in the
Doom source tree) will not work.
Currently straight-base-dir ends up relative to this, although that may
change.
...by moving the existing hack from the CLI to init.el.
It's not really necessary to do this as early as init.el, but I'm coming
around to using init.el modifications as an alternative to using Doom's
profile loader. So we might as well do this in the same place.
This is not sufficient to make doom/help-packages work, but gets us one
step closer...
Having this empty only really makes sense for minimal/full test builds.
Also, /var/empty was not doing what it looks like (it's not accessible
from inside the build sandbox). Use nixpkgs's emptyDirectory instead.
Writing profiles.el was borderline unreadable.
`doom-profiles-autodetect` was effectively just reading in the entire
file: accepting the paths we want in the profile as individual args and
putting them together on the Emacs side is easy enough.
Accidentally fixes a bug: `user-emacs-directory` should end in a
directory separator. We now get the right value for free by using the
path we're running Doom CLI out of.
doom-profile-data-dir is for the current profile, naming it
"profiles" (plural) made no sense.
Also move the loader into its own subdir so it's more obvious what the
two init.29.elc files are.