Add: CFEngine config-files layer

This commit is contained in:
Nick Anderson 2016-04-14 16:48:33 -05:00 committed by syl20bnr
parent 14d3529ae2
commit dcc3f2d5d9
4 changed files with 180 additions and 0 deletions

View file

@ -0,0 +1,118 @@
#+TITLE: CFEngine layer
#+HTML_HEAD_EXTRA: <link rel="stylesheet" type="text/css" href="../css/readtheorg.css" />
#+CAPTION: logo
# The maximum height of the logo should be 200 pixels.
[[file:./img/agent.png]]
* Table of Contents :TOC_4_org:noexport:
- [[Description][Description]]
- [[Install & Configuration][Install & Configuration]]
- [[Key bindings][Key bindings]]
* Description
This layer makes working with CFEngine policy easier:
- Syntax highlighting
- On the fly syntax checks
- Auto completion
* Install & Configuration
Add =cfengine= to the =dotspacemacs-configuration-layers= in your =~/.spacemacs=
to use this layer.
For working with CFEngine policy I highly recommend the =syntax-checking=, and
=auto-completion= layers.
Here is an example:
#+begin_src emacs-lisp
(defun dotspacemacs/layers ()
"Configuration Layers declaration.
You should not put any user code in this function besides modifying the variable
values."
(setq-default
dotspacemacs-configuration-layers
'(
;; ----------------------------------------------------------------
;; Example of useful layers you may want to use right away.
;; Uncomment some layer names and press <SPC f e R> (Vim style) or
;; <M-m f e R> (Emacs style) to install them.
;; ----------------------------------------------------------------
;; ----------------------------------------------------------------
;; CFEngine Related Layers
;; ----------------------------------------------------------------
cfengine
syntax-checking
auto-completion
;; ----------------------------------------------------------------
;; Other Userful Layers
;; ----------------------------------------------------------------
git
github
markdown
org
spell-checking
)
;; Delete whitespace while saving buffer. Possible values are `all'
;; to aggressively delete empty line and long sequences of whitespace,
;; `trailing' to delete only the whitespace at end of lines, `changed'to
;; delete only whitespace for changed lines or `nil' to disable cleanup.
;; (default nil)
;;
;; ----------------------------------------------------------------
;; This is conservative, if you want to cleanup traling whitespace
;; left by the efforts from others consider setting it to `trailing'.
;; ----------------------------------------------------------------
dotspacemacs-whitespace-cleanup 'changed
;; ----------------------------------------------------------------)
(defun dotspacemacs/user-config ()
"Configuration function for user code.
This function is called at the very end of Spacemacs initialization after
layers configuration. You are free to put any user code."
;; ----------------------------------------------------------------
;; Enable line numbering for CFEngine policy files
;; ----------------------------------------------------------------
(add-hook 'cfengine3-mode-hook
(lambda ()
(linum-mode 1)))
;; ----------------------------------------------------------------
;; "Easy template" for quickly inserting cfengine3 code blocks in
;; org-mode. Simply type =<cfe= and then press TAB
;; ----------------------------------------------------------------
(eval-after-load 'org
'(progn
(add-to-list 'org-structure-template-alist
'("cfe" "#+begin_src cfengine3\n?\n#+end_src"))))
;; ----------------------------------------------------------------)
#+end_src
Use =M-x customize-group RET cfengine= to customize CFEngine Mode.
If you like attributes to be intended from the promiser set =Indentation amount
from anchor= to =2=. For example:
#+begin_src cfengine3
bundle agent main
{
vars:
"promiser"
string => "value",
comment => "Indented 2 spaces from promiser";
}
#+end_src
* Key bindings
| Key Binding | Description |
|-------------+-----------------------|
| ~<SPC> m j~ | Reformats JSON string |

View file

@ -0,0 +1,15 @@
;; Figure out which cfengine mode (cfengine2 or cfengine3) to use for =.cf=
;; files based on file content.
;; (add-to-list 'auto-mode-alist '("\\.cf\\'" . cfengine-auto-mode))
(add-to-list 'auto-mode-alist '("\\.cf\\'" . cfengine3-mode))
;; Perhaps we should bind this to something some day.
;; (global-set-key [(control f4)] 'cfengine3-reformat-json-string)
;; Enable eldoc-mode for cfengine
;; This puts function prototypes into the minibuffer when hovering
;; over the function.
(add-hook 'cfengine3-mode-hook 'eldoc-mode)
;; Enable auto completion for cfengine
(spacemacs|defvar-company-backends cfengine3-mode)

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View file

@ -0,0 +1,47 @@
;;; packages.el --- cfengine layer packages file for Spacemacs.
;;
;; Copyright (c) 2012-2016 Sylvain Benner & Contributors
;;
;; Author: Nick Anderson <nick@cmdln.org>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
;;; Commentary:
;; See the Spacemacs documentation and FAQs for instructions on how to implement
;; a new layer:
;;
;; SPC h SPC layers RET
;;
;;
;; Briefly, each package to be installed or configured by this layer should be
;; added to `cfengine-packages'. Then, for each package PACKAGE:
;;
;; - If PACKAGE is not referenced by any other Spacemacs layer, define a
;; function `cfengine/init-PACKAGE' to load and initialize the package.
;; - Otherwise, PACKAGE is already referenced by another Spacemacs layer, so
;; define the functions `cfengine/pre-init-PACKAGE' and/or
;; `cfengine/post-init-PACKAGE' to customize the package as it is loaded.
(setq cfengine-packages
'(
flycheck
company))
;; cfengine3-mode is included in emacs itself.
(defun cfengine/init-cfengine()
(use-package cfengine3-mode
:init
(progn
(spacemacs/set-leader-keys-for-major-mode 'cfengine3-mode
"j" 'cfengine3-reformat-json-string))))
(defun cfengine/post-init-company ()
(spacemacs|add-company-hook cfengine3-mode))
(defun cfengine/post-init-flycheck ()
(spacemacs/add-flycheck-hook 'cfengine3-mode-hook))