But, if we're using use-package to also manage installing the packages for us (:ensure t), then why shouldn't it know about the autoloads already and automagically imply a :defer t by default?
Package installation and activation are two seperate concerns.
:ensure
ensures the package is isntalled if it isn't already.
Users might want to ensure a package is installed and prefer it to be immediately required.
So, by default, we have to remember to either add :defer t or we have to remember that setting our own hooks, bindings, or commands will create autoloads for us.
I feel like you're misunderstanding what autoloads do.
Hooks do not autoload anything.
The :commands
use-package keyword does autolaod commands.
This is useful when a package author has not provided the autoload cookie in the package for a command, or when you wish to forgo loading all of the autoloads.
I know that you can configure use-package to behave as though :defer t is set by default, but that's just broken for packages that don't have any autoloads.
How is it broken? There are other ways to load a package. Namely, require
.
It feels like maybe use-package is doing too many things.
It only does what you tell it to do via user options and declarations.`
but that kind of sucks because there's no reason to load magit before I actually want to use it for anything. So, what we can do instead is to implement the project.el integration ourselves
Or (use-package project :ensure nil :defer t :config (require magit))
There are multiple ways to set this sort of thing up and use-package (which should have been named use-feature
) can be used to configure built-in features.
Either I'm a little dim or the tooling here is hard to use correctly.
Third option: You haven't taken the time to digest the use-package manual and/or expand the macro to see what it's doing. It's a DSL. You have to learn it to use it effectively.
Am I the only one?
You must be. Otherwise someone would've written "use-package alternatives", which has an almost searchable ring to it.
Ultimately, organization comes down to the user. Tools like use-package make it easier, but they do not guarantee it.
It's worth more than a bunch of other people's opinions.