#+TITLE: Finance layer

#+TAGS: layer|tool

[[file:img/ledger.png]]

* Table of Contents                     :TOC_5_gh:noexport:
- [[#description][Description]]
  - [[#features][Features:]]
- [[#install][Install]]
  - [[#layer][Layer]]
- [[#configuration][Configuration]]
  - [[#ledger][Ledger]]
- [[#key-bindings][Key bindings]]
  - [[#ledger-1][Ledger]]
  - [[#ledger-reconcile][Ledger-Reconcile]]

* Description
This layer integrates a full fledged accounting system into Spacemacs.

** Features:
- Support for maintaining a double-entry accounting system run by text files via [[https://www.emacswiki.org/emacs/LedgerMode][ledger-mode]].
- Display of finance reports directly within Emacs.
- Integration of Emacs calculator mode for editing post amounts.
- Support for easy account reconciliation via =Ledger-Reconcile=.
- Extended support for ~evil~ style editing with [[https://github.com/atheriel/evil-ledger][evil-ledger]].

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

For this layer to work properly you also need to install the native package [[https://github.com/ledger/ledger][ledger]].

* Configuration
** Ledger
You can set what column transaction posts are aligned to on
the right by setting the variable =ledger-post-amount-alignment-column= in
your =dotspacemacs/user-config=. The default value, set in the layer, is =62=.

#+BEGIN_SRC emacs-lisp
  (defun dotspacemacs/user-config ()
    (setq ledger-post-amount-alignment-column 68))
#+END_SRC

* Key bindings
** Ledger

| Key binding | Description                                   |
|-------------+-----------------------------------------------|
| ~SPC m a~   | add a transaction                             |
| ~SPC m b~   | edit a post amount with Emacs Calculator mode |
| ~SPC m c~   | toggle 'cleared' flag on transaction or post  |
| ~SPC m C~   | sort and align the entire buffer              |
| ~SPC m d~   | delete current transaction                    |
| ~SPC m p~   | display balance at point                      |
| ~SPC m q~   | align a single transaction's posts            |
| ~SPC m r~   | reconcile an account                          |
| ~SPC m R~   | display a report                              |
| ~SPC m t~   | append an effective date to a post            |
| ~g j~       | go to the next transaction                    |
| ~g k~       | go to the previous transaction                |

evil-ledger additionally adds a transaction text object, bound to ~x~, so you
can for example use ~dix~ or ~vax~ to delete or mark the transaction at point.

** Ledger-Reconcile

| Key binding | Description                                                               |
|-------------+---------------------------------------------------------------------------|
| ~SPC m ,~   | toggle the current transaction pending                                    |
| ~a~         | quickly add a transaction, without exiting the reconciliation buffer      |
| ~t~         | change the target amount for the selected account                         |
| ~q~         | quit reconciliation                                                       |
| ~SPC m RET~ | finalize the reconciliation, changing all pending transactions to cleared |
