#+TITLE: CFEngine layer
[[file:./img/agent.png]]
* Table of Contents :TOC_4_gh:noexport:
- [[#description][Description]]
- [[#install][Install]]
- [[#configuration][Configuration]]
- [[#set-file-permission-on-save][Set file permission on save]]
- [[#indendation][Indendation]]
- [[#key-bindings][Key bindings]]
* Description
This layer makes working with CFEngine policy easier:
- Syntax highlighting
- On the fly syntax checks (via =syntax-checking= layer)
- Auto completion (via =auto-completion= layer)
* Install
Add =cfengine= to the =dotspacemacs-configuration-layers= in your =~/.spacemacs=
to use this layer.
* Configuration
** Set file permission on save
Here is a function to set permissions to 600 on save, this can help avoid
errors like:
=File ./example.cf (owner 1000) is writable by others (security exception)=
#+BEGIN_SRC elisp
(defun cfengine-permissions-policy-owner-only ()
"If file starts with a shebang, make `buffer-file-name' executable"
(save-excursion
(set-file-modes buffer-file-name #o600)
(message (concat "Made " buffer-file-name " accessibly only by the owner (600)."))))
(add-hook 'after-save-hook 'cfengine-permissions-policy-owner-only nil 'make-it-local)
#+END_SRC
** Indendation
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 |