Skip to content

edvorg/req-package

develop
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.