From 749456496e59923b7ce3a1f625ddc898044c65c2 Mon Sep 17 00:00:00 2001 From: Kajetan Puchalski Date: Sat, 28 Sep 2024 18:40:44 +0100 Subject: [PATCH] feat(hledger): lang: Add hledger module --- modules/lang/hledger/README.org | 54 ++++++++++++++++++++++++++++++++ modules/lang/hledger/config.el | 24 ++++++++++++++ modules/lang/hledger/doctor.el | 4 +++ modules/lang/hledger/packages.el | 7 +++++ 4 files changed, 89 insertions(+) create mode 100644 modules/lang/hledger/README.org create mode 100644 modules/lang/hledger/config.el create mode 100644 modules/lang/hledger/doctor.el create mode 100644 modules/lang/hledger/packages.el diff --git a/modules/lang/hledger/README.org b/modules/lang/hledger/README.org new file mode 100644 index 000000000..2f4d18bfd --- /dev/null +++ b/modules/lang/hledger/README.org @@ -0,0 +1,54 @@ +#+title: :lang hledger +#+subtitle: ledger, but functional +#+created: September 28, 2024 +#+since: 3.0.0 (#COMMIT-OR-PR-REF) + +* Description :unfold: +This module adds support for [[https://hledger.org/][hledger]] files. hledger is a command line double-entry +accounting system that works with simple text files similar to [[https://ledger-cli.org/][ledger]]. + +This module enables the following features: +- Syntax and indentation support for hledger files +- Add, edit and delete transactions +- Generate reports +- Schedule transactions +- Sort transactions (with evil-ledger) + +** Maintainers +/This module has no dedicated maintainers./ [[doom-contrib-maintainer:][Become a maintainer?]] + +** Module flags +/This module has no flags./ + +** Packages +- [[doom-package:evil-ledger]] if [[doom-module::editor evil +everywhere]] +- [[doom-package:hledger-mode]] + +** Hacks +/No hacks documented for this module./ + +** TODO Changelog +/This module does not have a changelog yet./ + +* Installation +[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]] + +This module requires [[https://hledger.org/][hledger]] to generate reports from your ledgers. + +* Usage +Please refer to ~hledger-mode~'s documentation for information on how to use it. + +* Configuration +Set the [[var:hledger-jfile][hledger-jfile]] variable to the path to your main .journal file +that will be used by hledger for generating reports. + +* Troubleshooting +/There are no known problems with this module./ [[doom-report:][Report one?]] + +* Frequently asked questions +/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]] + +* TODO Appendix +#+begin_quote + 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]] +#+end_quote diff --git a/modules/lang/hledger/config.el b/modules/lang/hledger/config.el new file mode 100644 index 000000000..2cdd24805 --- /dev/null +++ b/modules/lang/hledger/config.el @@ -0,0 +1,24 @@ +;;; lang/hledger/config.el -*- lexical-binding: t; -*- + +(use-package! hledger-mode + :defer t + :mode ("\\.journal\\'" "\\.hledger\\'") + :init + (set-company-backend! 'hledger-mode 'hledger-company) + :config + (map! :map hledger-mode-map + :localleader + ("r" #'hledger-reschedule + "e" #'hledger-edit-amount + "s" #'hledger-toggle-star + "a" #'hledger-add-days-to-entry-date + "j" #'hledger-forward-entry + "k" #'hledger-backward-entry + "y" #'hledger-copy-to-clipboard + "i" #'hledger-increment-entry-date + "d" #'hledger-decrement-entry-date + "n" #'hledger-jentry))) + +(use-package! evil-ledger + :when (modulep! :editor evil +everywhere) + :hook (hledger-mode . evil-ledger-mode)) diff --git a/modules/lang/hledger/doctor.el b/modules/lang/hledger/doctor.el new file mode 100644 index 000000000..9e2c60a67 --- /dev/null +++ b/modules/lang/hledger/doctor.el @@ -0,0 +1,4 @@ +;;; lang/hledger/doctor.el -*- lexical-binding: t; -*- + +(unless (executable-find "hledger") + (warn! "hledger isn't installed")) diff --git a/modules/lang/hledger/packages.el b/modules/lang/hledger/packages.el new file mode 100644 index 000000000..a1db77ae1 --- /dev/null +++ b/modules/lang/hledger/packages.el @@ -0,0 +1,7 @@ +;; -*- no-byte-compile: t; -*- +;;; lang/hledger/packages.el + +(package! hledger-mode :pin "5492509a23047f0a1f05a112b47fa34eba7c5e1d") + +(when (modulep! :editor evil) + (package! evil-ledger :pin "7a9f9f5d39c42fffdba8004f8982642351f2b233"))