;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- ;; Place your private configuration here! Remember, you do not need to run 'doom ;; sync' after modifying this file! ;; Some functionality uses this to identify you, e.g. GPG configuration, email ;; clients, file templates and snippets. (setq user-full-name "Alexander Kobjolke" user-mail-address "me@failco.de") ;; Doom exposes five (optional) variables for controlling fonts in Doom. Here ;; are the three important ones: ;; ;; + `doom-font' ;; + `doom-variable-pitch-font' ;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for ;; presentations or streaming. ;; ;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd ;; font string. You generally only need these two: ;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light) ;; doom-variable-pitch-font (font-spec :family "sans" :size 13)) ;; There are two ways to load a theme. Both assume the theme is installed and ;; available. You can either set `doom-theme' or manually load a theme with the ;; `load-theme' function. This is the default: (setq doom-theme 'doom-gruvbox) (require 're-builder) (setq reb-re-syntax 'string) ;; If you use `org' and don't want your org files in the default location below, ;; change `org-directory'. It must be set before org loads! (setq org-directory "~/org/" org-roam-directory (file-truename "~/org/notes")) ;; do not create a new workspace for each emacsclient (after! persp-mode   (setq persp-emacsclient-init-frame-behaviour-override "main")) (defun my/org-id-update-org-roam-files () "Update Org-ID locations for all Org-roam files." (interactive) (org-id-update-id-locations (org-roam-list-files))) (defun my/org-id-update-id-current-file () "Scan the current buffer for Org-ID locations and update them." (interactive) (org-id-update-id-locations (list (buffer-file-name (current-buffer))))) (setq undo-limit 80000000 ; Raise undo-limit to 80Mb evil-want-fine-undo t ; By default while in insert all changes are one big blob. Be more granular auto-save-default t ; Nobody likes to loose work, I certainly don't ) ;; This determines the style of line numbers in effect. If set to `nil', line ;; numbers are disabled. For relative line numbers, set this to `relative'. (setq display-line-numbers-type t) ;; mouse ;; enable mouse reporting for terminal emulators (unless window-system (xterm-mouse-mode 1) (global-set-key [mouse-4] (lambda () (interactive) (scroll-down 1))) (global-set-key [mouse-5] (lambda () (interactive) (scroll-up 1)))) ;; disable highlight lines ;(remove-hook 'doom-first-buffer-hook #'global-hl-line-mode) (setq haskell-process-type 'cabal-new-repl) (setq evil-snipe-override-evil-repeat-keys nil) (setq doom-localleader-key ",") (setq doom-localleader-alt-key "M-,") (use-package! org :config (setq org-log-into-drawer t org-todo-keywords '( (sequence "NEXT(n)" "TODO(t)" "WAIT(w@/!)" "|" "DONE(d!)" "CNCL(k@)") (sequence "[ ](T)" "[-](S)" "[?](W)" "|" "[X](D)") ))) (setq ak/bibliography (list (concat org-directory "references.bib"))) ;(setq org-cite-global-bibliography (list (concat org-directory "references.bib"))) (setq! bibtex-completion-bibliography ak/bibliography) (setq! citar-bibliography ak/bibliography) ;; Use an ISO date format for ledger entries (setq ledger-default-date-format "%Y-%m-%d" ledger-binary-path "hledger" ledger-report-auto-width nil ledger-mode-should-check-version nil ledger-init-file-name " " ledger-post-amount-alignment-column 58 ledger-report-native-highlighting-arguments '("--color=always") ledger-highlight-xact-under-point t) (setq ledger-reports '(("bal" "%(binary) -f %(ledger-file) bal -B") ("reg" "%(binary) -f %(ledger-file) reg -B") ("payee" "%(binary) -f %(ledger-file) reg -B @%(payee)") ("account" "%(binary) -f %(ledger-file) reg -B %(account)"))) ;; (use-package! ormolu ;; :hook (haskell-mode . ormolu-format-on-save-mode) ;; :bind ;; (:map haskell-mode-map (after! lsp-haskell (setq lsp-haskell-formatting-provider "fourmolu")) ;; tweak some VI defaults (after! evil (setq evil-ex-substitute-global t ; I like my s/../.. to by global by default evil-move-cursor-back nil ; Don't move the block cursor when toggling insert mode evil-kill-on-visual-paste nil)) ; Don't put overwritten text in the kill ring (setq org-gtd-update-ack "3.0.0") ;; Org GTD support (use-package! org-gtd :after org :demand t :config (setq org-gtd-directory "~/org") (setq org-gtd-default-file-name "actionable") (setq org-edna-use-inheritance t) ;(setq org-gtd-areas-of-focus '("house" "haskell" "foss")) ;(setq org-gtd-organize-hooks '(org-gtd-set-area-of-focus org-set-tags-command)) (org-edna-mode) (map! :leader :desc "Capture" "X" #'org-gtd-capture (:prefix ("d" . "org-gtd") :desc "Capture" "c" #'org-gtd-capture :desc "Engage" "e" #'org-gtd-engage-grouped-by-context :desc "Process inbox" "p" #'org-gtd-process-inbox :desc "Show all next" "n" #'org-gtd-show-all-next (:prefix ("r" . "Review") :desc "Stuck projects" "p" #'org-gtd-review-stuck-projects :desc "Stuck actions" "a" #'org-gtd-review-stuck-single-action-items :desc "Stuck habits" "h" #'org-gtd-review-stuck-habit-items ) )) (map! :map org-gtd-clarify-map :desc "Organize this item" "C-c C-c" #'org-gtd-organize) :bind (("C-c d c" . #'org-gtd-capture) ("C-c d e" . #'org-gtd-engage-grouped-by-context) ("C-c d p" . #'org-gtd-process-inbox) ("C-c d n" . #'org-gtd-show-all-next) ("C-c d r p" . #'org-gtd-review-stuck-projects)) ) (defun ak/org-roam-node-insert-immediate (arg &rest args) (interactive "P") (let ((args (cons arg args)) (org-roam-capture-templates (list (append (car org-capture-templates) '(:immediate-finish t)))) ) (apply #'org-roam-node-insert args))) (use-package! org-habit :after org :config (setq org-habit-show-habits t org-habit-preceding-days 35 org-habit-following-days 7 ) ) (use-package! org-edna :after org-gtd :init (setq org-edna-use-inheritance t) :config (org-edna-mode 1) ) (use-package! emacsql-sqlite3 :custom (org-roam-database-connector 'sqlite3)) (use-package! nov :mode ("\\.epub\\'" . nov-mode) :config (setq nov-save-place-file (concat doom-cache-dir "nov-places"))) (use-package! org-present :after org) (use-package! denote :after org :config (setq denote-directory (concat org-directory "/notes") ) (map! :leader (:prefix ("n" . "notes") :desc "Denote" "d" #'denote-open-or-create-with-command )) :bind (("C-c n d" . #'denote-open-or-create-with-command)) ) (use-package! org-super-agenda :after org-agenda :init (setq org-agenda-skip-deadline-if-done t org-agenda-skip-scheduled-if-done t org-agenda-include-deadlines t org-agenda-block-separator nil org-agenda-compact-blocks t org-agenda-start-day nil org-agenda-span 1 org-agenda-start-on-weekday nil ) (setq org-agenda-custom-commands '(("a" "Getting Things done" ((agenda "" ((org-agenda-overriding-header "") (org-super-agenda-groups '((:name "Today" :time-grid t :date today :order 1))))) (alltodo "" ((org-agenda-overriding-header "") (org-super-agenda-groups '(;(:log t) (:name "Waiting for..." :todo "WAIT" :order 1) (:discard (:not (:todo ("NEXT" "START")))) (:name "Next actions" :auto-parent (:todo ("NEXT" "STRT")) :order 2 ) (:discard (:anything t) :order 99) )))) )))) :config (org-super-agenda-mode) ) (use-package! org-fc :after org :init (setq org-fc-directories (concat org-directory "/cards")) ) (use-package! vterm :config (setq vterm-min-window-width 50) ) (map! :desc "Move workspace to the left" :leader :n "TAB <" #'+workspace/swap-left) (map! :desc "Move workspace to the left" :leader :n "TAB >" #'+workspace/swap-right) (map! :desc "Denote" :leader :n "n d" #'denote) ;; Here are some additional functions/macros that could help you configure Doom: ;; ;; - `load!' for loading external *.el files relative to this one ;; - `use-package!' for configuring packages ;; - `after!' for running code after a package has loaded ;; - `add-load-path!' for adding directories to the `load-path', relative to ;; this file. Emacs searches the `load-path' when you load packages with ;; `require' or `use-package'. ;; - `map!' for binding new keys ;; ;; To get information about any of these functions/macros, move the cursor over ;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). ;; This will open documentation for it, including demos of how they are used. ;; ;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how ;; they are implemented.