Skip to content

dependency management system on top of use-package

License

Notifications You must be signed in to change notification settings

emacsorphanage/req-package

Repository files navigation

req-package

https://img.shields.io/badge/license-GPL_3-green.svg http://melpa.org/packages/req-package-badge.svg http://stable.melpa.org/packages/req-package-badge.svg https://travis-ci.org/edvorg/req-package.svg https://coveralls.io/repos/edvorg/req-package/badge.svg?branch=develop&service=github

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

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 reload req-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 and my-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.