The :ensure
keyword makes use-package ask the Emacs package
manager to install a package if it is not already present on your
system.
For example:
(use-package magit :ensure t)
If you need to install a different package from the one named by
use-package
, you can use a symbol:
(use-package tex :ensure auctex)
You can customize the user option use-package-always-ensure
to
a non-nil
value if you want this behavior to be global for all
packages:
(require 'use-package-ensure) (setq use-package-always-ensure t)
You can override the above setting for a single package by adding
:ensure nil
to its declaration.
The :vc
keyword can be used to control how packages are
downloaded and/or installed. More specifically, it allows one to fetch
and update packages directly from a version control system. This is
especially convenient when wanting to install a package that is not on
any package archive.
The keyword accepts the same arguments as specified in
see Fetching Package Sources in GNU Emacs Manual, except
that a name need not explicitly be given: it is inferred from the
declaration. The accepted property list is augmented by a :rev
keyword, which has the same shape as the REV
argument to
package-vc-install
. Notably – even when not specified –
:rev
defaults to checking out the last release of the package.
You can use :rev :newest
to check out the latest commit. Note
that currently, you cannot upgrade built-in packages using :vc
.
For example,
(use-package bbdb :vc (:url "https://git.savannah.nongnu.org/git/bbdb.git" :rev :newest))
would try – by invoking package-vc-install
– to install the
latest commit of the package foo
from the specified remote.
Alternatively, the use-package-vc-prefer-newest
user option
exists to always prefer the latest commit.
The :vc
keyword can also be used for local packages, by
combining it with :load-path
(see Setting a custom load-path
):
;; Use a local copy of BBDB instead of the one from GNU ELPA. (use-package bbdb :vc t :load-path "/path/to/bbdb/dir/")
The above dispatches to package-vc-install-from-checkout
.