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.
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)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.
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.
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)
Please, pull-request your changes to develop branch.
Master is used for automatic release package builds by travis-ci.
- :el-get keyword support moved to separate package use-package-el-get
- add :el-get keyword
- due to use-package being mature enough drop providers system. please refer to #52 for migration instructions.
- once you called
req-package-finishyou are able reload package just by reloadreq-packageform - proper errors handling. see
req-package--log-open-logfor 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
:loaderkeyword now accepts loaders as keywords or as functions. e.g.:el-get,:elpa,:built-in,:pathandmy-loader-fnreq-package-forcereplaced with:forcekeyword
:loaderkeyword support
- bugfixes
- 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
el-getsupport
- Major system refactoring.
- Fixed bugs with defered loading.
- Significant performance optimization.
max-specpdl-size,max-lisp-eval-depthissues completely solved.- Flexible
:requirekeyword parsing.
- 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
pkg1.
- 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.