#+TITLE: Puppet layer

#+TAGS: layer|tool

[[file:img/puppet.png]]

* Table of Contents                     :TOC_5_gh:noexport:
- [[#description][Description]]
  - [[#features][Features:]]
- [[#install][Install]]
- [[#key-bindings][Key bindings]]

* Description
This layer provides support for the Puppet DSL to Spacemacs.

** Features:
- Syntax highlighting via [[https://github.com/voxpupuli/puppet-mode][puppet-mode]]
- Syntax-checking via [[http://puppet-lint.com/][puppet-lint]]
- Navigation commands to jump between blocks
- Applying the content of the current manifest directly from Emacs

* Install
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =puppet= to the existing =dotspacemacs-configuration-layers= list in this
file.

To get syntax checking to work you will also need to install =puppet-lint= by executing:

#+BEGIN_SRC sh
  $ gem install puppet-lint
#+END_SRC

* Key bindings
The following key bindings are available in Puppet Mode:

| Key binding | Description                                       |
|-------------+---------------------------------------------------|
| ~SPC m {~   | Move to the beginning of the current block        |
| ~SPC m }~   | Move to the end of the current block              |
| ~SPC m a~   | Align parameters in the current block             |
| ~SPC m '​~   | Toggle string quoting between single and double   |
| ~SPC m ;~   | Blank the string at point                         |
| ~SPC m j~   | Jump to a =class=, =define=, variable or resource |
| ~SPC m c~   | Apply the current manifest in dry-run mode        |
| ~SPC m v~   | Validate the syntax of the current manifest       |
| ~SPC m l~   | Check the current manifest for semantic issues    |
| ~SPC m $~   | Interpolate with ${} in double quoted strings     |

Use =M-x customize-group RET puppet= to customize Puppet Mode.
