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.
(require 'req-package) (req-package el-get ;; prepare el-get (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))
Define required packages with dependencies using
Optionally provide preferred installation source with
:force t if you want to avoid dependency management and load right now.
;; 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 :loader :elpa ;; installed from elpa :config (...)) (req-package flymake-lua :require flymake lua-mode :config (...)) ;; init-flymake.el (req-package flymake :loader :built-in ;; use emacs built-in version :config (...)) (req-package flymake-cursor :loader :el-get ;; installed from el-get :require flymake :config (...)) (req-package flymake-custom :require flymake :loader :path ;; use package that is on load-path :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)
req-package supports extensible package providers system.
This is alternative to
:ensure keyword in
:loader keyword with
req-package-providers-map if you want to introduce new provider.
Tweak provider priorities using
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
These log levels are supported:
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.
Do not use
:ensure keyword, use providers system that is more powerful.
There is a
:force keyword which simulates plain old use-package behavior.
More complex req-package usage example can be found at https://github.com/edvorg/emacs-configs.
load-dir package to load all
*.el files in a dir (e.g
Please, pull-request your changes to
Master is used for automatic release package builds by travis-ci.
- once you called
req-package-finishyou are able reload package just by reload
- proper errors handling. see
- 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
:loaderkeyword now accepts loaders as keywords or as functions. e.g.
- fixed some issues with packages installation. all packages will be installed at bootstrap time
- custom package providers support by
- priority feature for cross provider packages loading. you can choose, what to try first - elpa, el-get, or something else
- Major system refactoring.
- Fixed bugs with defered loading.
- Significant performance optimization.
max-lisp-eval-depthissues completely solved.
- Bug fixes.
- Various tweaks and bug fixes.
- All cycles of your dependencies will be printed now.
- Also there are more handy log messages and some bug fixes.
- There are nice error messages about cycled dependencies now.
- Cycles printed in a way:
pkg1 -> [pkg2 -> ...] pkg1.
- It means there is a cycle around
- There is no need of explicit
:ensurein your code now.
- When you req-package it adds
:ensureif 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.