summaryrefslogtreecommitdiff
path: root/modules/ledger-config.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
committerCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
commit754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch)
treef1190704f78f04a2b0b4c977d20fe96a828377f1 /modules/ledger-config.el
new repository
Diffstat (limited to 'modules/ledger-config.el')
-rw-r--r--modules/ledger-config.el74
1 files changed, 74 insertions, 0 deletions
diff --git a/modules/ledger-config.el b/modules/ledger-config.el
new file mode 100644
index 00000000..21f7fb81
--- /dev/null
+++ b/modules/ledger-config.el
@@ -0,0 +1,74 @@
+;;; ledger-config.el --- Ledger Configuration -*- lexical-binding: t; -*-
+
+;;; Commentary:
+
+;; Use C-c ? in ledger mode for discoverability.
+
+;; Unlike Mu4e and Elfeed (with Elfeed dashboard), there's no landing page for
+;; Ledger. You're thrown immediately into your financial data file in edit mode.
+;; Ok, but might be frightening for someone learning how to use Ledger. The
+;; added hydra is intended to show what actions are available, as well as their
+;; key bindings.
+
+
+;; -------------------------------- Ledger Mode --------------------------------
+;; edit files in ledger format
+
+(use-package ledger-mode
+ :mode ("\\.dat\\'"
+ "\\.ledger\\'"
+ "\\.journal\\'")
+ :preface
+ (defun cj/ledger-save ()
+ "Automatically clean the ledger buffer at each save."
+ (interactive)
+ (save-excursion
+ (when (buffer-modified-p)
+ (with-demoted-errors (ledger-mode-clean-buffer))
+ (save-buffer))))
+ :bind
+ (:map ledger-mode-map
+ ("C-x C-s" . cj/ledger-save))
+ :custom
+ (ledger-clear-whole-transactions t)
+ (ledger-reconcile-default-commodity "$")
+ (ledger-report-use-header-line nil)
+ (ledger-reports
+ '(("bal" "%(binary) --strict -f %(ledger-file) bal")
+ ("bal this month" "%(binary) --strict -f %(ledger-file) bal -p %(month) -S amount")
+ ("bal this year" "%(binary) --strict -f %(ledger-file) bal -p 'this year'")
+ ("net worth" "%(binary) --strict -f %(ledger-file) bal Assets Liabilities")
+ ("account" "%(binary) --strict -f %(ledger-file) reg %(account)"))))
+
+;; === Ledger Hydra ===
+;; menu available while in ledger-mode for common ledger commands
+
+(with-eval-after-load 'ledger-mode
+ (defhydra hydra-ledger (:color teal :timeout 10 :hint nil)
+ "Ledger common commands menu"
+ ("r" ledger-report "report" :column "report")
+ ("a" ledger-add-transaction "add transaction" :column "edit")
+ ("R" ledger-sort-region "sort region" :column "edit")
+ ("A" ledger-sort-buffer "sort all" :column "edit"))
+
+ (defun ledger-mode-hook-hydra-setup ()
+ "Create ledger hydra/menu keybinding when entering ledger mode."
+ (local-set-key (kbd "C-c ?") 'hydra-ledger/body))
+ (add-hook 'ledger-mode-hook 'ledger-mode-hook-hydra-setup))
+
+;; ------------------------------ Flycheck Ledger ------------------------------
+;; syntax and unbalanced transaction linting
+
+(use-package flycheck-ledger
+ :after ledger-mode)
+
+;; ------------------------------- Company Ledger ------------------------------
+;; autocompletion for ledger
+
+(use-package company-ledger
+ :after (company ledger-mode)
+ :config
+ (add-to-list 'company-backends 'company-ledger))
+
+(provide 'ledger-config)
+;;; ledger-config.el ends here.