spacemacs/layers/+tools/ansible/packages.el
Eivind Fonn 08561d8631 core: implement :depends for package declarations
This replaces the older pattern
:toggle (configuration-layer/package-usedp ..)

This implementation ensures that :disabled-for honors dependent packages, i.e.
if package a depends on package b, which is owned by layer c, and layer c is
disabled for layer d, then neither package a nor b will be configured for layer
d. Previously, this was only true for package a, but not b.

This commit also fixes:

- configuration-layer/describe-package now shows which post-init and pre-init
  functions are disabled, if any
- Does not recreate all layer objects unconditionally when calling
  configuration-layer/discover-layers. Previously, this led to all layers being
  recreated after e.g. `SPC h SPC`, without any of the dotfile information.
  Since this information is now necessary for
  configuration-layer/describe-package, it’s important that we don’t clear the
  indexed layers when invoking this function.
2017-06-22 11:53:05 +02:00

75 lines
2.5 KiB
EmacsLisp

;;; packages.el --- Ansible Layer packages File for Spacemacs
;;
;; Copyright (c) 2012-2017 Sylvain Benner & Contributors
;;
;; Author: Brian Hicks <brian@brianthicks.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
(setq ansible-packages
'(ansible
ansible-doc
company
(company-ansible :depends company)
jinja2-mode
yaml-mode))
(defun ansible/init-ansible ()
(use-package ansible
:defer t
:init
(progn
(add-hook 'yaml-mode-hook 'spacemacs/ansible-maybe-enable)
(put 'ansible::vault-password-file 'safe-local-variable #'stringp)
(if ansible-auto-encrypt-decrypt
;; add this hook to local-vars-hook to allow users to specify
;; a password file in directory local variables
(add-hook 'yaml-mode-local-vars-hook 'ansible::auto-decrypt-encrypt)
(remove-hook 'yaml-mode-local-vars-hook 'ansible::auto-decrypt-encrypt))
(with-eval-after-load 'ansible
(spacemacs/set-leader-keys-for-minor-mode 'ansible
"bd" 'ansible::decrypt-buffer
"be" 'ansible::encrypt-buffer)))))
(defun ansible/init-ansible-doc ()
(use-package ansible-doc
:defer t
:init
(progn
(add-hook 'yaml-mode-hook 'spacemacs/ansible-doc-maybe-enable)
(with-eval-after-load 'ansible-doc
(spacemacs/set-leader-keys-for-minor-mode 'ansible-doc-mode
"ha" 'ansible-doc)))
:config (spacemacs|hide-lighter ansible-doc-mode)))
(defun ansible/post-init-company ()
;; ansible-mode requires ac-user-dictionary-files. If the
;; config is using company-mode this variable will not be
;; set, so we set it to a dummy value.
;;
;; Tracking here:
;; https://github.com/k1LoW/emacs-ansible/issues/2
(defvar ac-user-dictionary-files nil))
(defun ansible/init-company-ansible ()
(use-package company-ansible
:defer t
:init
;; append this hook at the end to execute it last so `company-backends'
;; variable is buffer local
(add-hook 'yaml-mode-hook 'spacemacs/ansible-company-maybe-enable t)))
(defun ansible/init-jinja2-mode ()
(use-package jinja2-mode
:mode ("\\.j2\\'" . jinja2-mode)
:defer t))
(defun ansible/post-init-yaml-mode ()
;; maybe move it to the layer owning `yaml-mode' at some point
(spacemacs/declare-prefix-for-mode 'yaml-mode "mh" "help")
(spacemacs/declare-prefix-for-mode 'yaml-mode "mb" "buffer")
(add-to-list 'auto-mode-alist
'("\\(group_vars/.+\\|host_vars/.+\\)" . yaml-mode)))