req-package
Description
req-package
provides dependency management for use-package.
This allows to write simple and modular configs.
Migration from use-package is simple and syntax is almost same.
Usage
Load req-package:
(require 'req-package)
(req-package use-package-el-get ;; prepare el-get support for use-package (optional)
:force t ;; load package immediately, no dependency resolution
:config
(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get/el-get/recipes")
(el-get 'sync)
(use-package-el-get-setup))
Define required packages with dependencies using :require
.
Use :force t
if you want to avoid dependency management and load right now.
Use :el-get t
or :el-get package-name
if you want to install from el-get
(Requires use-package-el-get
package setup like described above).
;; init-dired.el
(req-package dired) ;; this form is optional as it doesn't have any configuration
(req-package dired-single
:require dired ;; depends on dired
:config (...))
(req-package dired-isearch
:require dired ;; depends on dired
:config (...))
;; init-lua.el
(req-package lua-mode
:config (...))
(req-package flymake-lua
:require flymake lua-mode
:config (...))
;; init-flymake.el
(req-package flymake
:config (...))
(req-package flymake-cursor
:require flymake
:config (...))
(req-package flymake-custom
:require flymake
:load-path "/path/to/file/directory"
:config (...))
Solve dependencies, install and load packages in right order:
;; order doesn't matter here
(require 'init-dired)
(require 'init-lua)
(require 'init-flymake)
(req-package-finish)
Logging
You can use req-package--log-open-log
to see, what is happening with your configuration.
You can choose log level in req-package
group by req-package-log-level
custom.
These log levels are supported: fatal
, error
, warn
, info
, debug
, trace
.
Migrate from use-package
Just replace all (use-package ...)
with (req-package [:require DEPS] ...)
and add (req-package-finish)
at the end of your configuration file.
There is a :force
keyword which simulates plain old use-package behavior.
Note
More complex req-package usage example can be found at https://github.com/edvorg/emacs-configs.
Use load-dir
package to load all *.el
files in a dir (e.g ~/.emacs.d/init.d
)
Contribute
Please, pull-request your changes to develop
branch.
Master is used for automatic release package builds by travis-ci.
Changelog
v1.3
- :el-get keyword support moved to separate package use-package-el-get
v1.2
- add :el-get keyword
v1.1
- due to use-package being mature enough drop providers system. please refer to #52 for migration instructions.
v1.0
- once you called
req-package-finish
you are able reload package just by reloadreq-package
form - proper errors handling. see
req-package--log-open-log
for messages - smart add-hook which invokes function if mode is loaded
- refactor providers system
- no need to use progn in :init and :config sections
- no need to use list literal in :require section
:loader
keyword now accepts loaders as keywords or as functions. e.g.:el-get
,:elpa
,:built-in
,:path
andmy-loader-fn
req-package-force
replaced with:force
keyword
v0.9
:loader
keyword support
v0.8
- bugfixes
v0.7
- fixed some issues with packages installation. all packages will be installed at bootstrap time
- custom package providers support by
req-package-providers
- priority feature for cross provider packages loading. you can choose, what to try first - elpa, el-get, or something else
v0.6
el-get
support
v0.5
- Major system refactoring.
- Fixed bugs with defered loading.
- Significant performance optimization.
max-specpdl-size
,max-lisp-eval-depth
issues completely solved.- Flexible
:require
keyword parsing.
v0.4.2
- Bug fixes.
v0.4.1
- Various tweaks and bug fixes.
v0.4-all-cycles
- All cycles of your dependencies will be printed now.
- Also there are more handy log messages and some bug fixes.
v0.3-cycles
- There are nice error messages about cycled dependencies now.
- Cycles printed in a way:
pkg1 -> [pkg2 -> ...] pkg1
. - It means there is a cycle around
pkg1
.
v0.2-auto-fetch
- There is no need of explicit
:ensure
in your code now. - When you req-package it adds
:ensure
if package is available in your repos. - Also package deps
:ensure
‘d automatically too. - Just write
(req-package pkg1 :require pkg2)
and all you need will be installed.