From a169dc29ca7edf03cb2692f557d8ceba15fccab4 Mon Sep 17 00:00:00 2001 From: James Patrick Date: Mon, 30 Jan 2023 14:47:45 -0500 Subject: [PATCH] An approximation of my previous emacs config. From this point on all changes should be incremental versioned commits. --- emacs/+keybinds.el | 14 + emacs/+orgmode.el | 139 +++++++++ emacs/{ => .resources}/doom.png | Bin emacs/.resources/fancy_blocks.png | Bin 0 -> 21303 bytes emacs/config.el | 31 ++ emacs/config.org | 467 +++++++++++++++++++++++++++--- emacs/init.el | 95 ++++-- 7 files changed, 671 insertions(+), 75 deletions(-) create mode 100644 emacs/+keybinds.el create mode 100644 emacs/+orgmode.el rename emacs/{ => .resources}/doom.png (100%) create mode 100644 emacs/.resources/fancy_blocks.png diff --git a/emacs/+keybinds.el b/emacs/+keybinds.el new file mode 100644 index 0000000..eb1abeb --- /dev/null +++ b/emacs/+keybinds.el @@ -0,0 +1,14 @@ +;;; +keybinds.el -*- lexical-binding: t; -*- + +(setq doom-localleader-key ",") + +(map! :leader + (:when (modulep! :lang org +roam2) + (:prefix-map ("r" . "roam") + :desc "Find node" "/" #'org-roam-node-find + :desc "Capture to node" "n" #'org-roam-capture + :desc "Capture Today" "c" #'org-roam-dailies-capture-today + :desc "Goto Today" "t" #'org-roam-dailies-goto-today + ) + ) + ) diff --git a/emacs/+orgmode.el b/emacs/+orgmode.el new file mode 100644 index 0000000..fe7d0f2 --- /dev/null +++ b/emacs/+orgmode.el @@ -0,0 +1,139 @@ +;;; +orgmode.el -*- lexical-binding: t; -*- + +(require 'org) + +(custom-set-variables '(org-directory "~/org/")) + +(setq + org-download-image-dir (concat org-directory ".attach/")) + +(setq + org-roam-directory (concat org-directory "Roam/")) + +(setq org-agenda-files (list (concat org-directory "Todos/" ))) + +(defvar-local +org-capture-work-todo + (expand-file-name "Work/todo.org" org-directory)) +(add-to-list 'org-capture-templates + '("w" "Work Todo" entry + (file+headline +org-capture-work-todo-file "Inbox") + "* [_] %?%i\n%a" :prepend t)) + +(add-hook! 'org-mode-hook #'mixed-pitch-mode) + +(add-hook! 'org-mode-hook #'+org-pretty-mode) + +(setq org-agenda-deadline-faces + '((1.001 . error) + (1.0 . org-warning) + (0.5 . org-upcoming-deadline) + (0.0 . org-upcoming-distant-deadline))) + +(add-hook 'org-mode-hook (lambda () + "Beautify Org Checkbox Symbol"` + (push '("[ ]" . "☐") prettify-symbols-alist) + (push '("[_]" . "☐") prettify-symbols-alist) + (push '("[X]" . "☑" ) prettify-symbols-alist) + (push '("[-]" . "⊟" ) prettify-symbols-alist) + (prettify-symbols-mode))) + +(setq prettify-symbols-unprettify-at-point 'right-edge) + +(with-eval-after-load 'org + (defvar-local rasmus/org-at-src-begin -1 + "Variable that holds whether last position was a ") + + (defvar rasmus/ob-header-symbol ?☰ + "Symbol used for babel headers") + + (defun rasmus/org-prettify-src--update () + (let ((case-fold-search t) + (re "^[ \t]*#\\+begin_src[ \t]+[^ \f\t\n\r\v]+[ \t]*") + found) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward re nil t) + (goto-char (match-end 0)) + (let ((args (org-trim + (buffer-substring-no-properties (point) + (line-end-position))))) + (when (org-string-nw-p args) + (let ((new-cell (cons args rasmus/ob-header-symbol))) + (cl-pushnew new-cell prettify-symbols-alist :test #'equal) + (cl-pushnew new-cell found :test #'equal))))) + (setq prettify-symbols-alist + (cl-set-difference prettify-symbols-alist + (cl-set-difference + (cl-remove-if-not + (lambda (elm) + (eq (cdr elm) rasmus/ob-header-symbol)) + prettify-symbols-alist) + found :test #'equal))) + ;; Clean up old font-lock-keywords. + (font-lock-remove-keywords nil prettify-symbols--keywords) + (setq prettify-symbols--keywords (prettify-symbols--make-keywords)) + (font-lock-add-keywords nil prettify-symbols--keywords) + (while (re-search-forward re nil t) + (font-lock-flush (line-beginning-position) (line-end-position)))))) + + (defun rasmus/org-prettify-src () + "Hide src options via `prettify-symbols-mode'. + + `prettify-symbols-mode' is used because it has uncollpasing. It's + may not be efficient." + (let* ((case-fold-search t) + (at-src-block (save-excursion + (beginning-of-line) + (looking-at "^[ \t]*#\\+begin_src[ \t]+[^ \f\t\n\r\v]+[ \t]*")))) + ;; Test if we moved out of a block. + (when (or (and rasmus/org-at-src-begin + (not at-src-block)) + ;; File was just opened. + (eq rasmus/org-at-src-begin -1)) + (rasmus/org-prettify-src--update)) + ;; Remove composition if at line; doesn't work properly. + ;; (when at-src-block + ;; (with-silent-modifications + ;; (remove-text-properties (match-end 0) + ;; (1+ (line-end-position)) + ;; '(composition)))) + (setq rasmus/org-at-src-begin at-src-block))) + + ;; This function helps to produce a single glyph out of a + ;; string. The glyph can then be used in prettify-symbols-alist. + ;; This function was provided by Ihor in the org-mode mailing list. + (defun yant/str-to-glyph (str) + "Transform string into glyph, displayed correctly." + (let ((composition nil)) + (dolist (char (string-to-list str) + (nreverse (cdr composition))) + (push char composition) + (push '(Br . Bl) composition)))) + + (defun rasmus/org-prettify-symbols () + (mapc (apply-partially 'add-to-list 'prettify-symbols-alist) + (cl-reduce 'append + (mapcar (lambda (x) (list x (cons (upcase (car x)) (cdr x)))) + `(("#+begin_src" . ?⎡) ;; ⎡ ➤ 🖝 ➟ ➤ ✎ + ;; multi-character strings can be used with something like this: + ;; ("#+begin_src" . ,(yant/str-to-glyph "```")) + ("#+end_src" . ?⎣) ;; ⎣ ✐ + ("#+header:" . ,rasmus/ob-header-symbol) + ("#+begin_quote" . ?«) + ("#+end_quote" . ?»))))) + (turn-on-prettify-symbols-mode) + (add-hook 'post-command-hook 'rasmus/org-prettify-src t t)) + (add-hook 'org-mode-hook #'rasmus/org-prettify-symbols)) + +(setq org-roam-dailies-capture-templates + '(("l" "Log" entry "* %T %?" + :target (file+head+olp "%<%Y-%m-%d>.org" + "#+title: %<%Y-%m-%d>\n#+filetags: %<:%Y:%B:>\n" + ("Log"))) + ("g" "Goal" entry "* TODO %? :mit:" + :target (file+head+olp "%<%Y-%m-%d>.org" + "#+title: %<%Y-%m-%d>\n#+filetags: %<:%Y:%B:>\n" + ("Goals"))))) + +;(add-hook! 'org-mode-hook #'solaire-mode) +;(add-hook 'mixed-pitch-mode-hook #'solaire-mode-reset) diff --git a/emacs/doom.png b/emacs/.resources/doom.png similarity index 100% rename from emacs/doom.png rename to emacs/.resources/doom.png diff --git a/emacs/.resources/fancy_blocks.png b/emacs/.resources/fancy_blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb5d76197cfe5a3eaff1a4256f7e22d99681a22 GIT binary patch literal 21303 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 K8)0sEJ^4RMYOVqR literal 0 HcmV?d00001 diff --git a/emacs/config.el b/emacs/config.el index c4d12ca..7bfa995 100644 --- a/emacs/config.el +++ b/emacs/config.el @@ -1 +1,32 @@ ;;; config.el -*- lexical-binding: t; -*- + +(setq which-key-idle-delay 0.1) + +(setq doom-fallback-buffer-name "Doom" + +doom-dashboard-name "Doom Dashboard") + +(setq frame-title-format + '("" + (:eval + (if (s-contains-p org-roam-directory (or buffer-file-name "")) + (replace-regexp-in-string + ".*/[0-9]*-?" "☰ " + (subst-char-in-string ?_ ? buffer-file-name)) + "%b")) + (:eval + (let ((project-name (projectile-project-name))) + (unless (string= "-" project-name) + (format (if (buffer-modified-p) " ♢ %s" " ♦ %s") project-name)))))) + +(setq doom-font (font-spec :family "Hasklig" :size 14 :height 1) + doom-variable-pitch-font (font-spec :family "Alegreya" :height 1.3) + doom-big-font (font-spec :family "Hasklig" :size 18)) + +(setq fancy-splash-image (concat doom-user-dir "./.resources/doom.png")) + +(setq ispell-dictionary "en" + ispell-personal-dictionary "~/org/.ispell.en.pws") + +(load! "+keybinds") + +(load! "+orgmode") diff --git a/emacs/config.org b/emacs/config.org index 66fd1c0..dea1ddc 100644 --- a/emacs/config.org +++ b/emacs/config.org @@ -1,17 +1,17 @@ #+title: Doom Emacs Configuration -I'll fill out the how and why of this all as I figure out what the hell I'm doing. My current Emacs Configuration is a mess of copy and pasted snippet loosely grouped together. There's a fair number of work around, to transient configuration issues that now no longer exist, and more of stuff cribbed off StackOverflow & held together with string & bubble gum. While not yet calling Configuration Bankrupty, I am going to try to see if I can restructure this technical debt. +I'll fill out the how and why of this all as I figure out what the hell I'm doing. My current Emacs Configuration is a mess of copy and pasted snippet loosely grouped together. There's a fair number of work around, to transient configuration issues that now no longer exist, and more of stuff cribbed off StackOverflow & held together with string & bubble gum. While not yet calling Configuration Bankrupt's, I am going to try to see if I can restructure this technical debt. This Emacs configuration is written using the [[https://en.wikipedia.org/wiki/Literate_programming][Literate Programming]] (sort of) paradigm (well sort of) proposed by [[https://en.wikipedia.org/wiki/Donald_Knuth][Donald Knuth]] in 1984, and uses Hlissner's awesome [[https://github.com/doomemacs/doomemacs][Doom Emacs]] configuration framework. -While I like Literate Programming, I kind of think that literate configuration is largely a mixed bag. Literate Programming produces often more words then code. For even medium size configurations discoveribility & readability of what is happening can be bogged down in the weight of prose explaining the backstory, current thought, moral ponderings, pros & cons, and deciding thoughts. This extra cruft potentially makes understanding more through, but at cost of readiblity & readability is king. As a compromise I'm going to version both to the verbose =config.org= file and all of the produced configuration files. As an example about that verbosity mentioned prior this entire paragram could have been skipped. +While I like Literate Programming, I kind of think that literate configuration is largely a mixed bag. Literate Programming produces often more words then code. For even medium size configurations discoverability & readability of what is happening can be bogged down in the weight of prose explaining the backstory, current thought, moral pondering, pros & cons, and deciding thoughts. This extra cruft potentially makes understanding more through, but at cost of readability & readability is king. As a compromise I'm going to version both to the verbose =config.org= file and all of the produced configuration files. As an example about that verbosity mentioned prior this entire paragraph could have been skipped. * Document Structure This section will be the what & how of things. There will no directly tangled code in this section. ** Doom Emacs -This is built on top of Hlissner's awesome [[https://github.com/doomemacs/doomemacs][Doom Emacs]] configuration frameworks. Configuraiton is divided into 150 modules, & fair number of convience functions. Rather than detailing stuff about I'll say to go read [[https://github.com/doomemacs/doomemacs/blob/master/docs/faq.org][FAQs]] & [[https://github.com/doomemacs/doomemacs/blob/master/docs/index.org][Index]]. +This is built on top of Hlissner's awesome [[https://github.com/doomemacs/doomemacs][Doom Emacs]] configuration frameworks. Configuration is divided into 150 modules, & fair number of convenience functions. Rather than detailing stuff about I'll say to go read [[https://github.com/doomemacs/doomemacs/blob/master/docs/faq.org][FAQs]] & [[https://github.com/doomemacs/doomemacs/blob/master/docs/index.org][Index]]. Configuration is located in the ~DOOMDIR~ directory. This is default value is located is the ~$HOME/.doom.d~ directory. Typically this directory contains: @@ -60,8 +60,8 @@ will produce NOTE: unless you explicitly turn off the named code block will be tangled into =config.el=. Use the no tangle option if you want to disable this. * Doom Configuration -** Misc -*** Lexical Bindings. +** Configuration +*** Lexical Bindings There [[https://nullprogram.com/blog/2016/12/22/][minor but non-zero start time benefits]] for using Lexical Bindings comments. All files created should start with #+BEGIN_SRC emacs-lisp @@ -70,8 +70,45 @@ There [[https://nullprogram.com/blog/2016/12/22/][minor but non-zero start time replace =config.el= with the filename being loaded. -** Modules -The configuration is below is pulled from the template init.example.el provided by doom. This one is based off commit [[https://github.com/doomemacs/doomemacs/blob/e96624926d724aff98e862221422cd7124a99c19/templates/init.example.el][e966249]]. +*** Speedup =whichkey= response +=whichkey= is slow to respond, lets make it a bit faster. + +#+begin_src emacs-lisp +(setq which-key-idle-delay 0.1) +#+end_src + +*** Window Titlebar +The titlebar display string will display =♢= if there exist unsaved buffer modifications & =♦= otherwise. + +#+begin_src emacs-lisp +(setq doom-fallback-buffer-name "Doom" + +doom-dashboard-name "Doom Dashboard") + +(setq frame-title-format + '("" + (:eval + (if (s-contains-p org-roam-directory (or buffer-file-name "")) + (replace-regexp-in-string + ".*/[0-9]*-?" "☰ " + (subst-char-in-string ?_ ? buffer-file-name)) + "%b")) + (:eval + (let ((project-name (projectile-project-name))) + (unless (string= "-" project-name) + (format (if (buffer-modified-p) " ♢ %s" " ♦ %s") project-name)))))) +#+end_src + +*** Fonts +I use the [[https://www.nerdfonts.com/][nerdfont]]'s [[https://github.com/i-tu/Hasklig][Hasklig]] for my monospace font & Huerta Tipografica's [[https://www.huertatipografica.com/en/fonts/alegreya-ht-pro][ Alegreya]] serif font. + +#+begin_src emacs-lisp +(setq doom-font (font-spec :family "Hasklig" :size 14 :height 1) + doom-variable-pitch-font (font-spec :family "Alegreya" :height 1.3) + doom-big-font (font-spec :family "Hasklig" :size 18)) +#+end_src + +** Doom Modules +The configuration is below is pulled from the template =init.example.el= provided by doom. This one is based off commit [[https://github.com/doomemacs/doomemacs/blob/e96624926d724aff98e862221422cd7124a99c19/templates/init.example.el][e966249]]. #+name: init.el #+attr_html: :collapsed t @@ -130,22 +167,26 @@ The configuration is below is pulled from the template init.example.el provided ) #+end_src -The code of these can be found in the [[https://github.com/doomemacs/doomemacs/tree/master/modules][modeules directory]], the readme for each module will list any additional configuration options. +The code of these can be found in the [[https://github.com/doomemacs/doomemacs/tree/master/modules][modeules directory]], the read me for each module will list any additional configuration options. *** Completion https://github.com/doomemacs/doomemacs/tree/master/modules/completion #+name:doom-completion #+begin_src emacs-lisp :tangle no -company ; the ultimate code completion backend -;;helm ; the *other* search engine for love and life +(company ; the ultimate code completion backend + +childframe ; not quite a window & not quite a frame +; +tng ; Use tab instead of ctrl+space + ) +;;helm ; the *other* search engine for love and lifes ;;ido ; the other *other* search engine... ;;ivy ; a search engine for love and life -vertico ; the search engine of the future +(vertico ; the search engine of the future + +icons ; make a little prettier +) #+end_src -=+childframe= exist for both company & vertico, ux is a bit jarring to use with vertico so I'm not using that. - +=+childframe= exists for both company & vertico, but looks a little weird with Vertico. We have for gone it for the time being. *** UI https://github.com/doomemacs/doomemacs/tree/master/modules/ui @@ -155,7 +196,7 @@ https://github.com/doomemacs/doomemacs/tree/master/modules/ui ;;deft ; notational velocity for Emacs doom ; what makes DOOM look the way it does doom-dashboard ; a nifty splash screen for Emacs -;;doom-quit ; DOOM quit-message prompts when you quit Emacs +doom-quit ; DOOM quit-message prompts when you quit Emacs ;;(emoji +unicode) ; 🙂 hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW ;;hydra @@ -163,20 +204,30 @@ hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW ;;ligatures ; ligatures and symbols to make your code pretty again ;;minimap ; show a map of the code on the side modeline ; snazzy, Atom-inspired modeline, plus API -;;nav-flash ; blink cursor line after big motions -;;neotree ; a project drawer, like NERDTree for vim +nav-flash ; blink cursor line after big motions +neotree ; a project drawer, like NERDTree for vim ophints ; highlight the region an operation acts on (popup +defaults) ; tame sudden yet inevitable temporary windows ;;tabs ; a tab bar for Emacs -;;treemacs ; a project drawer, like neotree but cooler -;;unicode ; extended unicode support for various languages +(treemacs ; a project drawer, like neotree but cooler + +lsp) +unicode ; extended unicode support for various languages (vc-gutter +pretty) ; vcs diff in the fringe vi-tilde-fringe ; fringe tildes to mark beyond EOB ;;window-select ; visually switch windows workspaces ; tab emulation, persistence & separate workspaces -;;zen ; distraction-free coding or writing +zen ; distraction-free coding or writing #+end_src +**** Fancy Welcome Image +Rather than the boring ascii doom logo. Lets some the one off the box art. This is enabled by the =doom-dashboard= module. + +#+CAPTION:Doom Welcome Icon +[[./.resources/doom.png]] + +#+begin_src emacs-lisp +(setq fancy-splash-image (concat doom-user-dir "./.resources/doom.png")) +#+end_src *** Editor https://github.com/doomemacs/doomemacs/tree/master/modules/editor @@ -185,26 +236,25 @@ https://github.com/doomemacs/doomemacs/tree/master/modules/editor (evil +everywhere); come to the dark side, we have cookies file-templates ; auto-snippets for empty files fold ; (nigh) universal code folding -;;(format +onsave) ; automated prettiness +(format +onsave) ; automated prettiness ;;god ; run Emacs commands without modifier keys ;;lispy ; vim for lisp, for people who don't like vim ;;multiple-cursors ; editing in many places at once ;;objed ; text object editing for the innocent ;;parinfer ; turn lisp into python, sort of -;;rotate-text ; cycle region at point between text candidates +rotate-text ; cycle region at point between text candidates snippets ; my elves. They type so I don't have to ;;word-wrap ; soft wrapping with language-aware indent #+end_src *** Emacs https://github.com/doomemacs/doomemacs/tree/master/modules/emacs - #+name:doom-emacs #+begin_src emacs-lisp :tangle no dired ; making dired pretty [functional] electric ; smarter, keyword-based electric-indent ;;ibuffer ; interactive buffer management -undo ; persistent, smarter undo for your inevitable mistakes +(undo +tree) ; persistent, smarter undo for your inevitable mistakes vc ; version-control and Emacs, sitting in a tree #+end_src @@ -216,19 +266,28 @@ https://github.com/doomemacs/doomemacs/tree/master/modules/term ;;eshell ; the elisp shell that works everywhere ;;shell ; simple shell REPL for Emacs ;;term ; basic terminal emulator for Emacs -;;vterm ; the best terminal emulation in Emacs +vterm ; the best terminal emulation in Emacs #+end_src +Vterm is great. It does require some additional configuration to work properly. See [[https://github.com/doomemacs/doomemacs/tree/master/modules/term/vterm][relavant doc]] for more. + *** Checker https://github.com/doomemacs/doomemacs/tree/master/modules/checker #+name:doom-checker #+begin_src emacs-lisp :tangle no -syntax ; tasing you for every semicolon you forget -;;(spell +flyspell) ; tasing you for misspelling mispelling -;;grammar ; tasing grammar mistake every you make +(syntax +childframe) ; tasing you for every semicolon you forget +(spell ; tasing you for misspelling mispelling + +aspell + +everywhere) +grammar ; tasing grammar mistake every you make #+end_src +**** Custom Dictionary +#+begin_src emacs-lisp +(setq ispell-dictionary "en" + ispell-personal-dictionary "~/org/.ispell.en.pws") +#+end_src *** Tools https://github.com/doomemacs/doomemacs/tree/master/modules/tools @@ -236,28 +295,32 @@ https://github.com/doomemacs/doomemacs/tree/master/modules/tools #+begin_src emacs-lisp :tangle no ;;ansible ;;biblio ; Writes a PhD for you (citation needed) -;;debugger ; FIXME stepping through code, to help you add bugs +(debugger +lsp) ; FIXME stepping through code, to help you add bugs ;;direnv ;;docker ;;editorconfig ; let someone else argue about tabs vs spaces ;;ein ; tame Jupyter notebooks with emacs (eval +overlay) ; run code, run (also, repls) ;;gist ; interacting with github gists -lookup ; navigate your code and its documentation -;;lsp ; M-x vscode +(lookup ; navigate your code and its documentation + +dictionary + +docset + +offline) +(lsp +peek) ; M-x vscode magit ; a git porcelain for Emacs ;;make ; run make tasks from Emacs ;;pass ; password manager for nerds ;;pdf ; pdf enhancements ;;prodigy ; FIXME managing external services & code builders ;;rgb ; creating color strings -;;taskrunner ; taskrunner for all your projects +taskrunner ; taskrunner for all your projects ;;terraform ; infrastructure as code ;;tmux ; an API for interacting with tmux -;;tree-sitter ; syntax and parsing, sitting in a tree... +tree-sitter ; syntax and parsing, sitting in a tree... ;;upload ; map local to remote projects via ssh/ftp #+end_src +NOTE: =:leader r= is currently being used by roam. See [[id:f9ffe9df-a417-45c4-8bf2-6ee655140648][Roam Keybinds]]. This conflicts with the =upload= module. If you wish to use this module in the future you will need to updated one of the keybinds to not conflict. *** Language https://github.com/doomemacs/doomemacs/tree/master/modules/lang @@ -271,7 +334,7 @@ https://github.com/doomemacs/doomemacs/tree/master/modules/lang ;;coq ; proofs-as-programs ;;crystal ; ruby at the speed of c ;;csharp ; unity, .NET, and mono shenanigans -;;data ; config/data formats +data ; config/data formats ;;(dart +flutter) ; paint ui and not much else ;;dhall ;;elixir ; erlang done right @@ -285,14 +348,20 @@ emacs-lisp ; drown in parentheses ;;fsharp ; ML stands for Microsoft's Language ;;fstar ; (dependent) types and (monadic) effects and Z3 ;;gdscript ; the language you waited for -;;(go +lsp) ; the hipster dialect +(go ; the hipster dialect + +lsp + +tree-sitter) ;;(graphql +lsp) ; Give queries a REST ;;(haskell +lsp) ; a language that's lazier than I am ;;hy ; readability of scheme w/ speed of python ;;idris ; a language you can depend on -;;json ; At least it ain't XML +(json ; At least it ain't XML + +lsp + +tree-sitter) ;;(java +lsp) ; the poster child for carpal tunnel syndrome -;;javascript ; all(hope(abandon(ye(who(enter(here)))))) +(javascript ; all(hope(abandon(ye(who(enter(here)))))) + +lsp + +tree-sitter) ;;julia ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) ;;latex ; writing papers in Emacs has never been so fun @@ -301,13 +370,23 @@ emacs-lisp ; drown in parentheses ;;lua ; one-based indices? one-based indices markdown ; writing docs for people to ignore ;;nim ; python + lisp at the speed of c -;;nix ; I hereby declare "nix geht mehr!" +(nix ; I hereby declare "nix geht mehr!" + +tree-sitter) ;;ocaml ; an objective camel -org ; organize your plain life in plain text +(org ; organize your plain life in plain text + +dragndrop + +journal + +pandoc + +pomodoro + +pretty + +roam2) ;;php ; perl's insecure younger brother ;;plantuml ; diagrams for confusing people more ;;purescript ; javascript, but functional -;;python ; beautiful is better than ugly +(python ; beautiful is better than ugly + +lsp + +poetry + +tree-sitter) ;;qt ; the 'cutest' gui framework ever ;;racket ; a DSL for DSLs ;;raku ; the artist formerly known as perl6 @@ -317,13 +396,17 @@ org ; organize your plain life in plain text ;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() ;;scala ; java, but good ;;(scheme +guile) ; a fully conniving family of lisps -sh ; she sells {ba,z,fi}sh shells on the C xor +(sh ; she sells {ba,z,fi}sh shells on the C xor + +lsp + +tree-sitter) ;;sml ;;solidity ; do you need a blockchain? No. ;;swift ; who asked for emoji variables? ;;terra ; Earth and Moon in alignment for performance. -;;web ; the tubes -;;yaml ; JSON, but readable +(web ; the tubes + +lsp + +tree-sitter) +(yaml +lsp) ; JSON, but readable ;;zig ; C, but simpler #+end_src @@ -355,13 +438,311 @@ https://github.com/doomemacs/doomemacs/tree/master/modules/config #+name:doom-config #+begin_src emacs-lisp :tangle no -;literate +literate (default +bindings +smartparens) #+end_src +** Additional Keybinds +Keybinds custom keybinds can be located at =$DOOMDIR/+keybinds.el=. + +#+begin_src emacs-lisp +(load! "+keybinds") +#+end_src + +Doom comes with some good keybind macros (see [[https://github.com/doomemacs/doomemacs/blob/master/docs/faq.org#bind-my-own-keys-or-change-existing-ones][here]] for why). Documentation for this can be found [[https://github.com/doomemacs/doomemacs/blob/master/docs/faq.org#bind-my-own-keys-or-change-existing-ones][here]], but in broad strokes: + +1. Start with a =map!= macro. You can use +2. When possible use =:when= to limit scope. +3. Use =:prefix= and =:prefix-map= where possible. +4. Always use =:desc= to describe what is being done. + +Below is a sample snippet from Rameez Khan's [[https://rameezkhan.me/posts/2020/2020-07-03--adding-keybindings-to-doom-emacs/][blog]] (first hit on "doom emacs keybind" using [[https://duckduckgo.com/][DDG]]): + #+begin_src emacs-lisp :tangle no +(map! :leader + (:prefix-map ("a" . "applications") + (:prefix ("j" . "journal") + :desc "New journal entry" "j" #'org-journal-new-entry + :desc "Search journal entry" "s" #'org-journal-search))) + #+end_src + +*** Add the lexical bindings magic comment +#+begin_src emacs-lisp :tangle "+keybinds.el" :noweb no-export :comments no +;;; +keybinds.el -*- lexical-binding: t; -*- +#+end_src + +*** Local Leader +Lets set the local leader to =,=. We may want to remap this to =;= later. Both of these seem to have issues with potential key conflicts with evil-snipe. This seems to primarily exists with regards to org-mode. Github issue can be found [[https://github.com/doomemacs/doomemacs/issues/4242][here]]. + +#+begin_src emacs-lisp :tangle "+keybinds.el" :noweb no-export :comments no +(setq doom-localleader-key ",") +#+end_src + +*** Roam Keybinds +:PROPERTIES: +:ID: f9ffe9df-a417-45c4-8bf2-6ee655140648 +:END: +The standard keybind for getting to Roam's daily capture is pretty long. To capture a Log entry I have to type =SPC n r d T l=. I want to capture as many logs and goals as possible, so lets shorten this up some. +#+begin_src emacs-lisp :tangle "+keybinds.el" :noweb no-export :comments no +(map! :leader + (:when (modulep! :lang org +roam2) + (:prefix-map ("r" . "roam") + :desc "Find node" "/" #'org-roam-node-find + :desc "Capture to node" "n" #'org-roam-capture + :desc "Capture Today" "c" #'org-roam-dailies-capture-today + :desc "Goto Today" "t" #'org-roam-dailies-goto-today + ) + ) + ) +#+end_src + +=:leader r= is used by =:tools upload= for "remote", but since I'm not using this lets just not care about that. +** Orgmode +This file will be needed for emacs batch automations, where its not reasonable to start up my entire working env. This file can be located at =$DOOMDIR/+orgmode.el=. + +#+begin_src emacs-lisp +(load! "+orgmode") +#+end_src + +*** Lexical bindings +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +;;; +orgmode.el -*- lexical-binding: t; -*- +#+end_src + +*** Importing org +This file may get consumed via emacs batch scripting, so we need ot make sure the orgmode is actually loaded. + +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(require 'org) +#+end_src + +*** Directories +My notes are stored via [[https://nextcloud.com/][NextCloud]] to sync multiple machines. The Nextcloud directory can be located in a couple different location based off the OS that the machine is running, but +Where the NextCloud general sync directory may vary based on machine but notes should always be stored at =$HOME/org=. + +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(custom-set-variables '(org-directory "~/org/")) +#+end_src + +I've tried to organize things based on purpose & this will likely change in the future. The current directory looks like this + +#+begin_example :tangle no +~/org +├── .archive +├── .attach +├── Projects +├── Roam +├── Todo +└── Work +#+end_example + +**** =.archive= +Where old files go. See =org-archive-subtree= for more. + +**** =.attach= +Stuff that is not an orgmode document. + +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(setq + org-download-image-dir (concat org-directory ".attach/")) +#+end_src + +**** =Projects= +I keep a =todo.org= at the root of each project. These are symlinked into the Projects directory. Nextcloud does not sync symlinked documents. + +**** =Roam= +All roam docs go here. This is my default note taking system. +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(setq + org-roam-directory (concat org-directory "Roam/")) +#+end_src +**** =Todo= +Another symlink dir. This is used to populate org agenda files. + +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(setq org-agenda-files (list (concat org-directory "Todos/" ))) +#+end_src + +**** =Work= +On my work machine I'll symlink this into my =Todo= +#+begin_src bash :tangle no +ln -s $HOME/org/Work/todo.org $HOME/org/Todo/work.org +#+end_src + +I still want to capture work related notes where ever I am though. + +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(defvar-local +org-capture-work-todo + (expand-file-name "Work/todo.org" org-directory)) +(add-to-list 'org-capture-templates + '("w" "Work Todo" entry + (file+headline +org-capture-work-todo-file "Inbox") + "* [_] %?%i\n%a" :prepend t)) +#+end_src + +*** A Prettier Orgmode +**** Use a serif variable font +This uses =doom-variable-pitch-font= as defined in the font section. +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(add-hook! 'org-mode-hook #'mixed-pitch-mode) +#+end_src + +**** Pretty mode +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(add-hook! 'org-mode-hook #'+org-pretty-mode) +#+end_src + +**** Agenda faces +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(setq org-agenda-deadline-faces + '((1.001 . error) + (1.0 . org-warning) + (0.5 . org-upcoming-deadline) + (0.0 . org-upcoming-distant-deadline))) +#+end_src +**** Prettify Symbols +There is a few of these built into the =orgmode='s =+pretty= module. Checkboxes are not included so lets include it. +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(add-hook 'org-mode-hook (lambda () + "Beautify Org Checkbox Symbol"` + (push '("[ ]" . "☐") prettify-symbols-alist) + (push '("[_]" . "☐") prettify-symbols-alist) + (push '("[X]" . "☑" ) prettify-symbols-alist) + (push '("[-]" . "⊟" ) prettify-symbols-alist) + (prettify-symbols-mode))) +#+end_src + +And when you hover over it, disable it. +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(setq prettify-symbols-unprettify-at-point 'right-edge) +#+end_src + +**** Fancy Source Blocks +This was grabbed from Rasmus Pank's [[https://pank.eu/blog/pretty-babel-src-blocks.html][blog]]. + +this makes the beginning / ending of both source and quote blocks, & headers for that display a little cleaner. + +#+begin_quote +[[./.resources/fancy_blocks.png]] +#+end_quote + +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(with-eval-after-load 'org + (defvar-local rasmus/org-at-src-begin -1 + "Variable that holds whether last position was a ") + + (defvar rasmus/ob-header-symbol ?☰ + "Symbol used for babel headers") + + (defun rasmus/org-prettify-src--update () + (let ((case-fold-search t) + (re "^[ \t]*#\\+begin_src[ \t]+[^ \f\t\n\r\v]+[ \t]*") + found) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward re nil t) + (goto-char (match-end 0)) + (let ((args (org-trim + (buffer-substring-no-properties (point) + (line-end-position))))) + (when (org-string-nw-p args) + (let ((new-cell (cons args rasmus/ob-header-symbol))) + (cl-pushnew new-cell prettify-symbols-alist :test #'equal) + (cl-pushnew new-cell found :test #'equal))))) + (setq prettify-symbols-alist + (cl-set-difference prettify-symbols-alist + (cl-set-difference + (cl-remove-if-not + (lambda (elm) + (eq (cdr elm) rasmus/ob-header-symbol)) + prettify-symbols-alist) + found :test #'equal))) + ;; Clean up old font-lock-keywords. + (font-lock-remove-keywords nil prettify-symbols--keywords) + (setq prettify-symbols--keywords (prettify-symbols--make-keywords)) + (font-lock-add-keywords nil prettify-symbols--keywords) + (while (re-search-forward re nil t) + (font-lock-flush (line-beginning-position) (line-end-position)))))) + + (defun rasmus/org-prettify-src () + "Hide src options via `prettify-symbols-mode'. + + `prettify-symbols-mode' is used because it has uncollpasing. It's + may not be efficient." + (let* ((case-fold-search t) + (at-src-block (save-excursion + (beginning-of-line) + (looking-at "^[ \t]*#\\+begin_src[ \t]+[^ \f\t\n\r\v]+[ \t]*")))) + ;; Test if we moved out of a block. + (when (or (and rasmus/org-at-src-begin + (not at-src-block)) + ;; File was just opened. + (eq rasmus/org-at-src-begin -1)) + (rasmus/org-prettify-src--update)) + ;; Remove composition if at line; doesn't work properly. + ;; (when at-src-block + ;; (with-silent-modifications + ;; (remove-text-properties (match-end 0) + ;; (1+ (line-end-position)) + ;; '(composition)))) + (setq rasmus/org-at-src-begin at-src-block))) + + ;; This function helps to produce a single glyph out of a + ;; string. The glyph can then be used in prettify-symbols-alist. + ;; This function was provided by Ihor in the org-mode mailing list. + (defun yant/str-to-glyph (str) + "Transform string into glyph, displayed correctly." + (let ((composition nil)) + (dolist (char (string-to-list str) + (nreverse (cdr composition))) + (push char composition) + (push '(Br . Bl) composition)))) + + (defun rasmus/org-prettify-symbols () + (mapc (apply-partially 'add-to-list 'prettify-symbols-alist) + (cl-reduce 'append + (mapcar (lambda (x) (list x (cons (upcase (car x)) (cdr x)))) + `(("#+begin_src" . ?⎡) ;; ⎡ ➤ 🖝 ➟ ➤ ✎ + ;; multi-character strings can be used with something like this: + ;; ("#+begin_src" . ,(yant/str-to-glyph "```")) + ("#+end_src" . ?⎣) ;; ⎣ ✐ + ("#+header:" . ,rasmus/ob-header-symbol) + ("#+begin_quote" . ?«) + ("#+end_quote" . ?»))))) + (turn-on-prettify-symbols-mode) + (add-hook 'post-command-hook 'rasmus/org-prettify-src t t)) + (add-hook 'org-mode-hook #'rasmus/org-prettify-symbols)) +#+end_src +*** Roam +I use =org-roam= v2 for most of my note taking. TODO expand this section. +**** Dailies Templates +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +(setq org-roam-dailies-capture-templates + '(("l" "Log" entry "* %T %?" + :target (file+head+olp "%<%Y-%m-%d>.org" + "#+title: %<%Y-%m-%d>\n#+filetags: %<:%Y:%B:>\n" + ("Log"))) + ("g" "Goal" entry "* TODO %? :mit:" + :target (file+head+olp "%<%Y-%m-%d>.org" + "#+title: %<%Y-%m-%d>\n#+filetags: %<:%Y:%B:>\n" + ("Goals"))))) +#+end_src + +We'll + +**** Keybinds +These were declared in [[id:f9ffe9df-a417-45c4-8bf2-6ee655140648][Roam Keybinds]] section above. See there for more details. +*** Solaire +#+begin_src emacs-lisp :tangle "+orgmode.el" :noweb no-export :comments no +;(add-hook! 'org-mode-hook #'solaire-mode) +;(add-hook 'mixed-pitch-mode-hook #'solaire-mode-reset) +#+end_src + * Content Stolen From + A large amount of the details listed here have been lifted from [[https://tecosaur.github.io/emacs-config/][tecosaur's literate configuration]]. +https://zzamboni.org/post/my-emacs-configuration-with-commentary/ + * Footnotes [fn:1] See [[https://github.com/doomemacs/doomemacs/tree/master/modules/config/literate#change-where-src-blocks-are-tangled-or-prevent-it-entirely][Doom FAQ on this for more.]] diff --git a/emacs/init.el b/emacs/init.el index 0859180..0e5724a 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -15,17 +15,22 @@ ;; directory (for easy access to its source code). (doom! :completion - company ; the ultimate code completion backend - ;;helm ; the *other* search engine for love and life + (company ; the ultimate code completion backend + +childframe ; not quite a window & not quite a frame + ; +tng ; Use tab instead of ctrl+space + ) + ;;helm ; the *other* search engine for love and lifes ;;ido ; the other *other* search engine... ;;ivy ; a search engine for love and life - vertico ; the search engine of the future + (vertico ; the search engine of the future + +icons ; make a little prettier + ) :ui ;;deft ; notational velocity for Emacs doom ; what makes DOOM look the way it does doom-dashboard ; a nifty splash screen for Emacs - ;;doom-quit ; DOOM quit-message prompts when you quit Emacs + doom-quit ; DOOM quit-message prompts when you quit Emacs ;;(emoji +unicode) ; 🙂 hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW ;;hydra @@ -33,30 +38,31 @@ ;;ligatures ; ligatures and symbols to make your code pretty again ;;minimap ; show a map of the code on the side modeline ; snazzy, Atom-inspired modeline, plus API - ;;nav-flash ; blink cursor line after big motions - ;;neotree ; a project drawer, like NERDTree for vim + nav-flash ; blink cursor line after big motions + neotree ; a project drawer, like NERDTree for vim ophints ; highlight the region an operation acts on (popup +defaults) ; tame sudden yet inevitable temporary windows ;;tabs ; a tab bar for Emacs - ;;treemacs ; a project drawer, like neotree but cooler - ;;unicode ; extended unicode support for various languages + (treemacs ; a project drawer, like neotree but cooler + +lsp) + unicode ; extended unicode support for various languages (vc-gutter +pretty) ; vcs diff in the fringe vi-tilde-fringe ; fringe tildes to mark beyond EOB ;;window-select ; visually switch windows workspaces ; tab emulation, persistence & separate workspaces - ;;zen ; distraction-free coding or writing + zen ; distraction-free coding or writing :editor (evil +everywhere); come to the dark side, we have cookies file-templates ; auto-snippets for empty files fold ; (nigh) universal code folding - ;;(format +onsave) ; automated prettiness + (format +onsave) ; automated prettiness ;;god ; run Emacs commands without modifier keys ;;lispy ; vim for lisp, for people who don't like vim ;;multiple-cursors ; editing in many places at once ;;objed ; text object editing for the innocent ;;parinfer ; turn lisp into python, sort of - ;;rotate-text ; cycle region at point between text candidates + rotate-text ; cycle region at point between text candidates snippets ; my elves. They type so I don't have to ;;word-wrap ; soft wrapping with language-aware indent @@ -64,42 +70,47 @@ dired ; making dired pretty [functional] electric ; smarter, keyword-based electric-indent ;;ibuffer ; interactive buffer management - undo ; persistent, smarter undo for your inevitable mistakes + (undo +tree) ; persistent, smarter undo for your inevitable mistakes vc ; version-control and Emacs, sitting in a tree :term ;;eshell ; the elisp shell that works everywhere ;;shell ; simple shell REPL for Emacs ;;term ; basic terminal emulator for Emacs - ;;vterm ; the best terminal emulation in Emacs + vterm ; the best terminal emulation in Emacs :checkers - syntax ; tasing you for every semicolon you forget - ;;(spell +flyspell) ; tasing you for misspelling mispelling - ;;grammar ; tasing grammar mistake every you make + (syntax +childframe) ; tasing you for every semicolon you forget + (spell ; tasing you for misspelling mispelling + +aspell + +everywhere) + grammar ; tasing grammar mistake every you make :tools ;;ansible ;;biblio ; Writes a PhD for you (citation needed) - ;;debugger ; FIXME stepping through code, to help you add bugs + (debugger +lsp) ; FIXME stepping through code, to help you add bugs ;;direnv ;;docker ;;editorconfig ; let someone else argue about tabs vs spaces ;;ein ; tame Jupyter notebooks with emacs (eval +overlay) ; run code, run (also, repls) ;;gist ; interacting with github gists - lookup ; navigate your code and its documentation - ;;lsp ; M-x vscode + (lookup ; navigate your code and its documentation + +dictionary + +docset + +offline) + (lsp +peek) ; M-x vscode magit ; a git porcelain for Emacs ;;make ; run make tasks from Emacs ;;pass ; password manager for nerds ;;pdf ; pdf enhancements ;;prodigy ; FIXME managing external services & code builders ;;rgb ; creating color strings - ;;taskrunner ; taskrunner for all your projects + taskrunner ; taskrunner for all your projects ;;terraform ; infrastructure as code ;;tmux ; an API for interacting with tmux - ;;tree-sitter ; syntax and parsing, sitting in a tree... + tree-sitter ; syntax and parsing, sitting in a tree... ;;upload ; map local to remote projects via ssh/ftp :os @@ -114,7 +125,7 @@ ;;coq ; proofs-as-programs ;;crystal ; ruby at the speed of c ;;csharp ; unity, .NET, and mono shenanigans - ;;data ; config/data formats + data ; config/data formats ;;(dart +flutter) ; paint ui and not much else ;;dhall ;;elixir ; erlang done right @@ -128,14 +139,20 @@ ;;fsharp ; ML stands for Microsoft's Language ;;fstar ; (dependent) types and (monadic) effects and Z3 ;;gdscript ; the language you waited for - ;;(go +lsp) ; the hipster dialect + (go ; the hipster dialect + +lsp + +tree-sitter) ;;(graphql +lsp) ; Give queries a REST ;;(haskell +lsp) ; a language that's lazier than I am ;;hy ; readability of scheme w/ speed of python ;;idris ; a language you can depend on - ;;json ; At least it ain't XML + (json ; At least it ain't XML + +lsp + +tree-sitter) ;;(java +lsp) ; the poster child for carpal tunnel syndrome - ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) + (javascript ; all(hope(abandon(ye(who(enter(here)))))) + +lsp + +tree-sitter) ;;julia ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) ;;latex ; writing papers in Emacs has never been so fun @@ -144,13 +161,23 @@ ;;lua ; one-based indices? one-based indices markdown ; writing docs for people to ignore ;;nim ; python + lisp at the speed of c - ;;nix ; I hereby declare "nix geht mehr!" + (nix ; I hereby declare "nix geht mehr!" + +tree-sitter) ;;ocaml ; an objective camel - org ; organize your plain life in plain text + (org ; organize your plain life in plain text + +dragndrop + +journal + +pandoc + +pomodoro + +pretty + +roam2) ;;php ; perl's insecure younger brother ;;plantuml ; diagrams for confusing people more ;;purescript ; javascript, but functional - ;;python ; beautiful is better than ugly + (python ; beautiful is better than ugly + +lsp + +poetry + +tree-sitter) ;;qt ; the 'cutest' gui framework ever ;;racket ; a DSL for DSLs ;;raku ; the artist formerly known as perl6 @@ -160,13 +187,17 @@ ;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() ;;scala ; java, but good ;;(scheme +guile) ; a fully conniving family of lisps - sh ; she sells {ba,z,fi}sh shells on the C xor + (sh ; she sells {ba,z,fi}sh shells on the C xor + +lsp + +tree-sitter) ;;sml ;;solidity ; do you need a blockchain? No. ;;swift ; who asked for emoji variables? ;;terra ; Earth and Moon in alignment for performance. - ;;web ; the tubes - ;;yaml ; JSON, but readable + (web ; the tubes + +lsp + +tree-sitter) + (yaml +lsp) ; JSON, but readable ;;zig ; C, but simpler :email @@ -183,6 +214,6 @@ ;;twitter ; twitter client https://twitter.com/vnought :config - ;literate + literate (default +bindings +smartparens) )