Add Doom .config file

This commit is contained in:
Christopher Paris 2025-03-05 16:08:21 -05:00
parent d1c0b3bc8a
commit e3b5bed9dd
17 changed files with 3650 additions and 0 deletions

View File

@ -0,0 +1,142 @@
;;; $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. It is optional.
(setq user-full-name "Christopher Paris"
user-mail-address "christopherrparis1@gmail.com")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-unicode-font' -- for unicode glyphs
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; 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-one)
;; 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)
;; 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 "~/Nextcloud/Notes/Org")
(after! org (setq org-log-intodrawer t))
(after! org (setq org-capture-templates
'(("p" "Private templates")
("pt" "TODO entry" entry
(file+headline "~/Nextcloud/Notes/Org/org-roam/20240315100949-mylife_org.org" "Capture")
(file "~/Nextcloud/Notes/Org/tpl-todo.txt"))
("pj" "Journal entry" entry (file+olp+datetree
"~/Nextcloud/Notes/Org/org-roam/20241023165214-journal.org") "* %U - %^{Activity}")
("pb" "Add book to read" entry (file+headline "~/Nextcloud/Notes/Org/org-roam/20240315100949-mylife_org.org"
"Books To Read") (file "~/Nextcloud/Notes/Org/tpl-book.txt")
:empty-lines-after 2)
("w" "Work templates")
("wt" "TODO entry" entry
(file+headline "~/Nextcloud/Notes/Org/org-roam/20240315170859-mywork.org" "Capture")
(file "~/Nextcloud/Notes/Org/tpl-todo.txt"))
("wl" "Worklog entry" entry (file+olp+datetree
"~/Nextcloud/Notes/Org/org-roam/20241024113312-worklog.org") "* %U - %^{Activity}")
)))
(after! org (setq org-excalidraw-directory "~/Nextcloud/Notes/Org/excalidraw"))
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `load!' for loading external *.el files relative to this one
(load! "roam.el")
(load! "sword-to-org.el")
;; - `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.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
;; Transparency
(add-to-list 'default-frame-alist '(alpha-background . 90)) ;For all new frames henceforth
;;neotree
(use-package neotree
:config
(setq neo-smart-open t
neo-show-hidden-files t
neo-window-width 55
neo-window-fixed-size nil
inhibit-compacting-font-caches t
projectile-switch-project-action 'neotree-projectile-action)
;; tuncate long file names in neotree
(add-hook 'neo-after-create-hook'
#'(lambda (_)
(with-current-buffer (get-buffer neo-buffer-name)
(setq tuncate-lines t)
(setq word-wrap nil)
(make-local-variable 'auto-hscroll-mode)
(setq auto-hscroll-mode nil)))))
(map! :leader
(:prefix ("d" . "Directory")
:desc "Toggle neotree" "n" #'neotree-dir))
(map! :leader
(:prefix ("t" . "Toggle")
:desc "Toggle neotree shown in sidebar" "n" #'neotree-toggle))
;; iMenu
(setq imenu-list-focus-after-activation t)
(map! :leader
(:prefix ("s" . "Search")
:desc "Menu to jump to places in buffer" "i" #'counsel-imenu))
(map! :leader
(:prefix ("t" . "Toggle")
:desc "Toggle imenu shown in a sidebar" "i" #'imenu-list-smart-toggle))

View File

@ -0,0 +1,30 @@
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(magit-todos-insert-after '(bottom) nil nil "Changed by setter of obsolete option `magit-todos-insert-at'")
'(org-agenda-files
'("~/Nextcloud/Notes/Org/org-roam/20240315100949-mylife_org.org" "/home/christopher/Nextcloud/Notes/Org/org-roam/20240315170859-mywork.org" "/home/christopher/Nextcloud/Notes/Org/org-roam/20240309010204-work_tech.org" "/home/christopher/Nextcloud/Notes/Org/org-roam/20240313005225-tracysmith_1on1.org"))
'(package-selected-packages
'(org-modern org-timeblock notmuch devdocs embark helm-org-ql org-roam-ql-ql org-roam-timestamps citar-org-roam calfw-howm howm denote-menu google-contacts denote dtk jq-mode json-mode json-snatcher forecast hledger-mode org-contacts org-roam-ql org-roam-ui org-roam-bibtex org-roam)))
;; '(org-capture-templates
;; (quote
;; (("pt" "Private templates")
;; ("ptt" "TODO entry" entry
;; (file+headline "~/Nextcloud/Notes/Org/org-roam/20240315100949-mylife_org.org" "Capture")
;; (file "~/Nextcloud/Notes/Org/tpl-todo.txt"))
;; ("ptj" "Journal entry" entry (file+olp+datetree
;; "~/org/journal.org") "* %U - %^{Activity}")
;; ("ptb" "Add book to read" entry (file+headline "~/Nextcloud/Notes/Org/org-roam/20240315100949-mylife_org.org"
;; "Books to read") (file "~Nextcloud/Notes/Org/org/tpl-book.txt")
;; :empty-lines-after 2)
;; ))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)

View File

@ -0,0 +1,200 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a link to Doom's Module Index where all
;; of our modules are listed, including what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
;;chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
company ; the ultimate code completion backend
(corfu +oderless)
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
(ivy +fonts +childframe) ; a search engine for love and life
vertico ; the search engine of the future
: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
(emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;hydra
;;indent-guides ; highlighted indent columns
(ligatures +extras) ; 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
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
(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
: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
;;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
snippets ; my elves. They type so I don't have to
;;word-wrap ; soft wrapping with language-aware indent
:emacs
(dired +icons) ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
(ibuffer +icons) ; interactive buffer management
undo ; 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
:checkers
syntax ; tasing you for every semicolon you forget
(spell +flyspell) ; tasing you for misspelling mispelling
;;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
;;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
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
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
;;tree-sitter ; syntax and parsing, sitting in a tree...
;;upload ; map local to remote projects via ssh/ftp
:os
;;(:if IS-MAC macos) ; improve compatibility with macOS
tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
;;(cc +lsp) ; C > C++ == 1
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
;;data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;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
;;(graphql +lsp) ; Give queries a REST
(haskell +lsp +dante) ; 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
;;(java +lsp) ; the poster child for carpal tunnel syndrome
javascript ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
ledger ; be audit you can be
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!"
;;ocaml ; an objective camel
(org
+journal
+roam2
+pretty
+publish) ; organize your plain life in plain text
php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
python ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(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
;;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
;;zig ; C, but simpler
:email
(mu4e +org +gmail)
;;notmuch
;;(wanderlust +gmail)
:app
calendar
emms
;;everywhere ; *leave* Emacs!? You must be joking
irc ; how neckbeards socialize
(rss +org) ; emacs as an RSS reader
;;twitter ; twitter client https://twitter.com/vnought
:config
;;literate
(default +bindings +smartparens))

View File

@ -0,0 +1,89 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;(package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;(package! another-package
; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;(package! this-package
; :recipe (:host github :repo "username/repo"
; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;(package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;(package! builtin-package :recipe (:nonrecursive t))
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;(package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;(package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;(unpin! pinned-package)
;; ...or multiple packages
;(unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;(unpin! t)
;;(package! org-roam
;; :recipe (:host github :repo "org-roam/org-roam" :branch "main"))
(package! citar-org-roam)
(package! org-roam-ui)
;;(package! emacsql-sqlite-builtin)
(package! undo-tree)
(package! org-board)
(package! pacmacs)
(package! flycheck-aspell)
(package! calfw)
(package! calfw-org)
(package! dired-open)
(package! dired-subtree)
(package! dirvish)
(package! dmenu)
(package! ednc)
(package! emojify)
(package! evil-tutor)
(package! exwm)
(package! imenu-list)
(package! ivy-posframe)
(package! mw-thesaurus)
(package! org-auto-tangle)
(package! org-web-tools)
(package! ox-gemini)
(package! peep-dired)
(package! password-store)
(package! rainbow-mode)
(package! resize-window)
(package! tldr)
(package! wc-mode)
(package! beacon)
(package! clippy)
(package! minimap)
(package! olivetti)
(package! org-excalidraw
:recipe (:host github :repo "wdavew/org-excalidraw" :branch "main"))
(package! org-modern)

View File

@ -0,0 +1,122 @@
;; -*- lexical-binding: t; -*-
(use-package org-roam
:ensure t
:demand t ;; Ensure org-roam is loaded by default
:init
(setq org-roam-v2-ack t)
:custom
(org-roam-directory "/home/christopher/Nextcloud/Notes/Org/org-roam")
(org-roam-completion-everywhere t)
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert)
("C-c n I" . org-roam-node-insert-immediate)
("C-c n p" . my/org-roam-find-project)
("C-c n t" . my/org-roam-capture-task)
("C-c n b" . my/org-roam-capture-inbox)
:map org-mode-map
("C-M-i" . completion-at-point)
:map org-roam-dailies-map
("Y" . org-roam-dailies-capture-yesterday)
("T" . org-roam-dailies-capture-tomorrow))
:bind-keymap
("C-c n d" . org-roam-dailies-map)
:config
(require 'org-roam-dailies) ;; Ensure the keymap is available
(org-roam-db-autosync-mode))
(defun org-roam-node-insert-immediate (arg &rest args)
(interactive "P")
(let ((args (push arg args))
(org-roam-capture-templates (list (append (car org-roam-capture-templates)
'(:immediate-finish t)))))
(apply #'org-roam-node-insert args)))
(defun my/org-roam-filter-by-tag (tag-name)
(lambda (node)
(member tag-name (org-roam-node-tags node))))
(defun my/org-roam-list-notes-by-tag (tag-name)
(mapcar #'org-roam-node-file
(seq-filter
(my/org-roam-filter-by-tag tag-name)
(org-roam-node-list))))
(defun my/org-roam-refresh-agenda-list ()
(interactive)
(setq org-agenda-files (my/org-roam-list-notes-by-tag "Project")))
;; Build the agenda list the first time for the session
(my/org-roam-refresh-agenda-list)
(defun my/org-roam-project-finalize-hook ()
"Adds the captured project file to `org-agenda-files' if the
capture was not aborted."
;; Remove the hook since it was added temporarily
(remove-hook 'org-capture-after-finalize-hook #'my/org-roam-project-finalize-hook)
;; Add project file to the agenda list if the capture was confirmed
(unless org-note-abort
(with-current-buffer (org-capture-get :buffer)
(add-to-list 'org-agenda-files (buffer-file-name)))))
(defun my/org-roam-find-project ()
(interactive)
;; Add the project file to the agenda after capture is finished
(add-hook 'org-capture-after-finalize-hook #'my/org-roam-project-finalize-hook)
;; Select a project file to open, creating it if necessary
(org-roam-node-find
nil
nil
(my/org-roam-filter-by-tag "Project")
:templates
'(("p" "project" plain "* Goals\n\n%?\n\n* Tasks\n\n** TODO Add initial tasks\n\n* Dates\n\n"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+category: ${title}\n#+filetags: Project")
:unnarrowed t))))
(defun my/org-roam-capture-inbox ()
(interactive)
(org-roam-capture- :node (org-roam-node-create)
:templates '(("i" "inbox" plain "* %?"
:if-new (file+head "Inbox.org" "#+title: Inbox\n")))))
(defun my/org-roam-capture-task ()
(interactive)
;; Add the project file to the agenda after capture is finished
(add-hook 'org-capture-after-finalize-hook #'my/org-roam-project-finalize-hook)
;; Capture the new task, creating the project file if necessary
(org-roam-capture- :node (org-roam-node-read
nil
(my/org-roam-filter-by-tag "Project"))
:templates '(("p" "project" plain "** TODO %?"
:if-new (file+head+olp "%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n#+category: ${title}\n#+filetags: Project"
("Tasks"))))))
(defun my/org-roam-copy-todo-to-today ()
(interactive)
(let ((org-refile-keep t) ;; Set this to nil to delete the original!
(org-roam-dailies-capture-templates
'(("t" "tasks" entry "%?"
:if-new (file+head+olp "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n" ("Tasks")))))
(org-after-refile-insert-hook #'save-buffer)
today-file
pos)
(save-window-excursion
(org-roam-dailies--capture (current-time) t)
(setq today-file (buffer-file-name))
(setq pos (point)))
;; Only refile if the target file is different than the current file
(unless (equal (file-truename today-file)
(file-truename (buffer-file-name)))
(org-refile nil nil (list "Tasks" today-file nil pos)))))
(add-to-list 'org-after-todo-state-change-hook
(lambda ()
(when (equal org-state "DONE")
(my/org-roam-copy-todo-to-today))))

View File

@ -0,0 +1,224 @@
;;; sword-to-org.el --- Convert Sword modules to Org outlines
;; Author: Adam Porter <adam@alphapapa.net>
;; Url: http://github.com/alphapapa/sword-to-org
;; Version: 0.0.1-pre
;; Package-Requires: ((emacs "24.4") (dash "2.11") (s "1.10.0"))
;; Keywords: outlines, org-mode, sword, research, bible
;;; Commentary:
;; This package uses the `diatheke' program to convert Sword modules
;; to Org-mode outlines. For example, you can make an Org file
;; containing the entire text of the ESV module as an outline
;; structured by book/chapter/verse. Then you can add top-level
;; headings for Old/New Testaments, and then you have the whole Bible
;; as an Org file. Then you can do everything you can do in Org with
;; the text of the Bible! Add footnotes, links, tags, properties,
;; write your own commentaries under subheadings, organize research
;; with TODO items, export with `org-export', search with
;; `helm-org-rifle', etc. The list is endless.
;;; Usage:
;; First install `diatheke'. On Debian/Ubuntu it's in the `diatheke'
;; package.
;; Open a buffer and run the command `sword-to-org-insert-outline'.
;; Choose the module (e.g. Bible translation) to use, then input a
;; passage reference or range (e.g. "Gen 1", "Jn 1:1", or even
;; "Gen-Rev"--that last one will take a few moments), and an Org
;; outline will be inserted in book/chapter/verse/text structure.
;; You may customize `sword-to-org-default-module' so you don't have
;; to pick a module every time, and you can call the command with a
;; universal prefix (`C-u') to choose a different module.
;; You may also use any of the `sword-to-org--' support functions in
;; your own programs. Consult the docstrings for instructions and
;; examples.
;;; Code:
;;;; Requirements
(require 'cl-lib)
(require 'dash)
(require 's)
;;;; Variables
(defconst sword-to-org--diatheke-parse-line-regexp
(rx bol
;; Book name
(group-n 1 (minimal-match (1+ anything)))
space
;; chapter:verse
(group-n 2 (1+ digit)) ":" (group-n 3 (1+ digit)) ":"
;; Passage text (which may start with a newline, in which case
;; no text will be on the same line after chapter:verse)
(optional (1+ space)
(group-n 4 (1+ anything))))
"Regexp to parse each line of output from `diatheke'.")
(defgroup sword-to-org nil
"Settings for `sword-to-org'."
:link '(url-link "http://github.com/alphapapa/sword-to-org")
:group 'org)
(defcustom sword-to-org-default-module nil
"Default module (e.g. Bible translation, like \"ESV\") to use."
:type '(choice (const :tag "None" nil)
(string :tag "Module abbreviation (e.g. \"ESV\")")))
;;;; Functions
;;;;; Commands
;;;###autoload
(defun sword-to-org-insert-outline (module key)
"Insert Org outline in current buffer for Sword MODULE and KEY.
The buffer will be switched to `text-mode' before inserting, to
improve performance, and then switched back to `org-mode' if
it was active."
(interactive (list (if (or current-prefix-arg
(not sword-to-org-default-module))
(completing-read "Module: " (sword-to-org--diatheke-get-modules))
sword-to-org-default-module)
(substring (buffer-name) nil -4)))
(let ((was-org-mode (eq major-mode 'org-mode)))
(when was-org-mode
(text-mode))
(cl-loop with last-book
with last-chapter
for passage in (sword-to-org--diatheke-parse-text
(sword-to-org--diatheke-get-text module key))
do (-let (((&plist :book book :chapter chapter :verse verse :text text) passage))
;; (unless (equal book last-book)
;; (insert (format "%s\n\n" book))
;; (setq last-chapter nil)
;; (setq last-book book))
(unless (equal chapter last-chapter)
(insert (format "* %s %s\n\n" book chapter))
(setq last-chapter chapter))
(insert (format "** %s %s:%s\n\n%s\n\n" book chapter verse text))))
(when was-org-mode
(org-mode))))
;;;###autoload
(defun sword-to-org-insert-passage (key &optional separate-lines module)
"Insert passage for reference KEY as plain text.
With prefix, prompt for module, otherwise use default module.
With double-prefix, insert each verse on its own line with
reference; otherwise, insert as single paragraph with reference
at the end."
(interactive (list (read-from-minibuffer "Passage: ")
(equal current-prefix-arg '(16))
(if (or current-prefix-arg
(not sword-to-org-default-module))
(completing-read "Module: " (sword-to-org--diatheke-get-modules))
sword-to-org-default-module)))
(insert (sword-to-org--passage key :module module :paragraph (not separate-lines)))
(when (not separate-lines)
(insert " (" key ")")))
;;;;; Support
(cl-defun sword-to-org--passage (key &key module paragraph)
"Return string for passage reference KEY.
If MODULE is nil, use default module. If PARAGRAPH is non-nil,
join all verses into a paragraph; otherwise put each verse on its
own line with reference."
(unless module
(setq module sword-to-org-default-module))
(if paragraph
(s-join " " (cl-loop for passage in (sword-to-org--diatheke-parse-text (sword-to-org--diatheke-get-text module key))
collect (plist-get passage :text)))
;; NOTE: Using double-newline as verse separator so the verses
;; can appear separately in Org exports from Org Babel blocks
;; (for some reason, single newlines are replaced with spaces)
(s-join "\n\n" (cl-loop for passage in (sword-to-org--diatheke-parse-text (sword-to-org--diatheke-get-text module key))
collect (-let (((&plist :book book :chapter chapter :verse verse :text text) passage))
(format "%s %s:%s %s" book chapter verse text))))))
(defun sword-to-org--diatheke-get-modules ()
"Return list of Sword modules from diatheke.
Only the module abbreviation is returned."
(cl-loop for line in (s-lines (with-temp-buffer
(call-process "diatheke" nil '(t nil) nil
"-b" "system" "-k" "modulelist")
(buffer-string)))
when (string-match (rx (group-n 1 (minimal-match (1+ (not (any ":"))))) " : ") line)
collect (match-string 1 line)))
(defun sword-to-org--diatheke-get-text (module key)
"Return raw text from diatheke MODULE for KEY.
This simply calls `diatheke -b MODULE -k KEY' and returns the raw output.
Examples:
\(sword-to-org--diatheke-get-text \"ESV\" \"gen 1:1\")"
(with-temp-buffer
(call-process "diatheke" nil '(t nil) nil
"-b" module "-k" key)
(buffer-substring (point-min) (save-excursion
(goto-char (point-max))
(forward-line -2)
(end-of-line)
(point)))))
(defun sword-to-org--diatheke-parse-text (text &optional &key keep-newlines)
"Parse TEXT line-by-line, returning list of verse plists.
When KEEP-NEWLINES is non-nil, keep blank lines in text.
Plists are in format (:book \"Genesis\" :chapter 1 :verse 1
:text \"In the beginning...\").
Example:
\(sword-to-org--diatheke-parse-text
(sword-to-org--diatheke-get-text \"ESV\" \"Philemon 1:1-3\")
:keep-newlines t)"
(cl-loop with result
with new-verse
for line in (s-lines text)
for parsed = (sword-to-org--diatheke-parse-line line)
if parsed
do (progn
(push new-verse result)
(setq new-verse parsed))
else do (let* ((text (plist-get new-verse :text))
(new-text (concat text
(if (s-present? line)
line
(when keep-newlines "\n")))))
(plist-put new-verse :text new-text))
finally return (cdr (progn
(push new-verse result)
(nreverse result)))))
(defun sword-to-org--diatheke-parse-line (line)
"Return plist from LINE. If LINE is not the beginning of a verse, return nil.
You generally don't want to use this directly. Instead use
`sword-to-org--diatheke-parse-text'.
Plist is in format (:book \"Genesis\" :chapter 1 :verse 1
:text \"In the beginning...\").
For a complete example, see how
`sword-to-org--diatheke-parse-text' calls this function."
(if (s-present? line)
(when (string-match sword-to-org--diatheke-parse-line-regexp line)
(let ((book (match-string 1 line))
(chapter (string-to-number (match-string 2 line)))
(verse (string-to-number (match-string 3 line)))
;; Ensure text is present, which may not be the case if
;; a verse starts with a newline. See
;; <https://github.com/alphapapa/sword-to-org/issues/2>
(text (when (s-present? (match-string 4 line))
(s-trim (match-string 4 line)))))
(list :book book :chapter chapter :verse verse :text text)))))
(provide 'sword-to-org)
;;; sword-to-org.el ends here

10
.config/doom/bookmarks Normal file
View File

@ -0,0 +1,10 @@
;;;; Emacs Bookmark Format Version 1;;;; -*- coding: utf-8-emacs; mode: lisp-data -*-
;;; This format is meant to be slightly human-readable;
;;; nevertheless, you probably don't want to edit it.
;;; -*- End Of Bookmark File Format Version Stamp -*-
(("org-capture-last-stored"
(filename . "~/nc/Org/roam/20230110120652-start.org")
(front-context-string)
(rear-context-string . "\n#+title: start\n")
(position . 83))
)

934
.config/doom/config.el Normal file
View File

@ -0,0 +1,934 @@
(beacon-mode 1)
(setq bookmark-default-file "~/.config/doom/bookmarks")
(map! :leader
(:prefix ("b". "buffer")
:desc "List bookmarks" "L" #'list-bookmarks
:desc "Set bookmark" "m" #'bookmark-set
:desc "Delete bookmark" "M" #'bookmark-set
:desc "Save current bookmarks to bookmark file" "w" #'bookmark-save))
(global-auto-revert-mode 1)
(setq global-auto-revert-non-file-buffers t)
(evil-define-key 'normal ibuffer-mode-map
(kbd "f c") 'ibuffer-filter-by-content
(kbd "f d") 'ibuffer-filter-by-directory
(kbd "f f") 'ibuffer-filter-by-filename
(kbd "f m") 'ibuffer-filter-by-mode
(kbd "f n") 'ibuffer-filter-by-name
(kbd "f x") 'ibuffer-filter-disable
(kbd "g h") 'ibuffer-do-kill-lines
(kbd "g H") 'ibuffer-update)
;; https://stackoverflow.com/questions/9547912/emacs-calendar-show-more-than-3-months
(defun dt/year-calendar (&optional year)
(interactive)
(require 'calendar)
(let* (
(current-year (number-to-string (nth 5 (decode-time (current-time)))))
(month 0)
(year (if year year (string-to-number (format-time-string "%Y" (current-time))))))
(switch-to-buffer (get-buffer-create calendar-buffer))
(when (not (eq major-mode 'calendar-mode))
(calendar-mode))
(setq displayed-month month)
(setq displayed-year year)
(setq buffer-read-only nil)
(erase-buffer)
;; horizontal rows
(dotimes (j 4)
;; vertical columns
(dotimes (i 3)
(calendar-generate-month
(setq month (+ month 1))
year
;; indentation / spacing between months
(+ 5 (* 25 i))))
(goto-char (point-max))
(insert (make-string (- 10 (count-lines (point-min) (point-max))) ?\n))
(widen)
(goto-char (point-max))
(narrow-to-region (point-max) (point-max)))
(widen)
(goto-char (point-min))
(setq buffer-read-only t)))
(defun dt/scroll-year-calendar-forward (&optional arg event)
"Scroll the yearly calendar by year in a forward direction."
(interactive (list (prefix-numeric-value current-prefix-arg)
last-nonmenu-event))
(unless arg (setq arg 0))
(save-selected-window
(if (setq event (event-start event)) (select-window (posn-window event)))
(unless (zerop arg)
(let* (
(year (+ displayed-year arg)))
(dt/year-calendar year)))
(goto-char (point-min))
(run-hooks 'calendar-move-hook)))
(defun dt/scroll-year-calendar-backward (&optional arg event)
"Scroll the yearly calendar by year in a backward direction."
(interactive (list (prefix-numeric-value current-prefix-arg)
last-nonmenu-event))
(dt/scroll-year-calendar-forward (- (or arg 1)) event))
(map! :leader
:desc "Scroll year calendar backward" "<left>" #'dt/scroll-year-calendar-backward
:desc "Scroll year calendar forward" "<right>" #'dt/scroll-year-calendar-forward)
(defalias 'year-calendar 'dt/year-calendar)
(use-package! calfw)
(use-package! calfw-ical)
(use-package! calfw-org)
(setq centaur-tabs-set-bar 'over
centaur-tabs-set-icons t
centaur-tabs-gray-out-icons 'buffer
centaur-tabs-height 24
centaur-tabs-set-modified-marker t
centaur-tabs-style "bar"
centaur-tabs-modified-marker "")
(map! :leader
:desc "Toggle tabs globally" "t c" #'centaur-tabs-mode
:desc "Toggle tabs local display" "t C" #'centaur-tabs-local-mode)
(evil-define-key 'normal centaur-tabs-mode-map (kbd "g <right>") 'centaur-tabs-forward ; default Doom binding is 'g t'
(kbd "g <left>") 'centaur-tabs-backward ; default Doom binding is 'g T'
(kbd "g <down>") 'centaur-tabs-forward-group
(kbd "g <up>") 'centaur-tabs-backward-group)
(map! :leader
(:prefix ("c h" . "Help info from Clippy")
:desc "Clippy describes function under point" "f" #'clippy-describe-function
:desc "Clippy describes variable under point" "v" #'clippy-describe-variable))
(map! :leader
(:prefix ("d" . "dired")
:desc "Open dired" "d" #'dired
:desc "Dired jump to current" "j" #'dired-jump)
(:after dired
(:map dired-mode-map
:desc "Peep-dired image previews" "d p" #'peep-dired
:desc "Dired view file" "d v" #'dired-view-file)))
(evil-define-key 'normal dired-mode-map
(kbd "M-RET") 'dired-display-file
(kbd "h") 'dired-up-directory
(kbd "l") 'dired-open-file ; use dired-find-file instead of dired-open.
(kbd "m") 'dired-mark
(kbd "t") 'dired-toggle-marks
(kbd "u") 'dired-unmark
(kbd "C") 'dired-do-copy
(kbd "D") 'dired-do-delete
(kbd "J") 'dired-goto-file
(kbd "M") 'dired-do-chmod
(kbd "O") 'dired-do-chown
(kbd "P") 'dired-do-print
(kbd "R") 'dired-do-rename
(kbd "T") 'dired-do-touch
(kbd "Y") 'dired-copy-filenamecopy-filename-as-kill ; copies filename to kill ring.
(kbd "Z") 'dired-do-compress
(kbd "+") 'dired-create-directory
(kbd "-") 'dired-do-kill-lines
(kbd "% l") 'dired-downcase
(kbd "% m") 'dired-mark-files-regexp
(kbd "% u") 'dired-upcase
(kbd "* %") 'dired-mark-files-regexp
(kbd "* .") 'dired-mark-extension
(kbd "* /") 'dired-mark-directories
(kbd "; d") 'epa-dired-do-decrypt
(kbd "; e") 'epa-dired-do-encrypt)
;; Get file icons in dired
;;(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
;; With dired-open plugin, you can launch external programs for certain extensions
;; For example, I set all .png files to open in 'sxiv' and all .mp4 files to open in 'mpv'
(setq dired-open-extensions '(("gif" . "sxiv")
("jpg" . "sxiv")
("png" . "sxiv")
("mkv" . "mpv")
("mp4" . "mpv")))
(evil-define-key 'normal peep-dired-mode-map
(kbd "j") 'peep-dired-next-file
(kbd "k") 'peep-dired-prev-file)
(add-hook 'peep-dired-hook 'evil-normalize-keymaps)
(setq delete-by-moving-to-trash t
trash-directory "~/.local/share/Trash/files/")
(setq doom-theme 'doom-one)
(map! :leader
:desc "Load new theme" "h t" #'counsel-load-theme)
(ednc-mode 1)
(defun show-notification-in-buffer (old new)
(let ((name (format "Notification %d" (ednc-notification-id (or old new)))))
(with-current-buffer (get-buffer-create name)
(if new (let ((inhibit-read-only t))
(if old (erase-buffer) (ednc-view-mode))
(insert (ednc-format-notification new t))
(pop-to-buffer (current-buffer)))
(kill-buffer)))))
(add-hook 'ednc-notification-presentation-functions
#'show-notification-in-buffer)
(evil-define-key 'normal ednc-view-mode-map
(kbd "d") 'ednc-dismiss-notification
(kbd "RET") 'ednc-invoke-action
(kbd "e") 'ednc-toggle-expanded-view)
(setq elfeed-goodies/entry-pane-size 0.5)
(evil-define-key 'normal elfeed-show-mode-map
(kbd "J") 'elfeed-goodies/split-show-next
(kbd "K") 'elfeed-goodies/split-show-prev)
(evil-define-key 'normal elfeed-search-mode-map
(kbd "J") 'elfeed-goodies/split-show-next
(kbd "K") 'elfeed-goodies/split-show-prev)
(setq elfeed-feeds (quote
(("https://www.reddit.com/r/linux.rss" reddit linux)
("https://www.reddit.com/r/commandline.rss" reddit commandline)
("https://www.reddit.com/r/distrotube.rss" reddit distrotube)
("https://www.reddit.com/r/emacs.rss" reddit emacs)
("https://www.gamingonlinux.com/article_rss.php" gaming linux)
("https://hackaday.com/blog/feed/" hackaday linux)
("https://opensource.com/feed" opensource linux)
("https://linux.softpedia.com/backend.xml" softpedia linux)
("https://itsfoss.com/feed/" itsfoss linux)
("https://www.zdnet.com/topic/linux/rss.xml" zdnet linux)
("https://www.phoronix.com/rss.php" phoronix linux)
("http://feeds.feedburner.com/d0od" omgubuntu linux)
("https://www.computerworld.com/index.rss" computerworld linux)
("https://www.networkworld.com/category/linux/index.rss" networkworld linux)
("https://www.techrepublic.com/rssfeeds/topic/open-source/" techrepublic linux)
("https://betanews.com/feed" betanews linux)
("http://lxer.com/module/newswire/headlines.rss" lxer linux))))
(emms-all)
(emms-default-players)
(emms-mode-line 1)
(emms-playing-time 1)
(setq emms-source-file-default-directory "~/Music/"
emms-playlist-buffer-name "*Music*"
emms-info-asynchronously t
emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find)
(map! :leader
(:prefix ("a" . "EMMS audio player")
:desc "Go to emms playlist" "a" #'emms-playlist-mode-go
:desc "Emms pause track" "x" #'emms-pause
:desc "Emms stop track" "s" #'emms-stop
:desc "Emms play previous track" "p" #'emms-previous
:desc "Emms play next track" "n" #'emms-next))
(use-package emojify
:hook (after-init . global-emojify-mode))
(map! :leader
(:prefix ("e". "evaluate/ERC/EWW")
:desc "Launch ERC with TLS connection" "E" #'erc-tls))
(setq erc-prompt (lambda () (concat "[" (buffer-name) "]"))
erc-server "irc.libera.chat"
erc-nick "distrotube"
erc-user-full-name "Derek Taylor"
erc-track-shorten-start 24
erc-autojoin-channels-alist '(("irc.libera.chat" "#archlinux" "#linux" "#emacs"))
erc-kill-buffer-on-part t
erc-fill-column 100
erc-fill-function 'erc-fill-static
erc-fill-static-center 20
;; erc-auto-query 'bury
)
(map! :leader
(:prefix ("e". "evaluate/ERC/EWW")
:desc "Evaluate elisp in buffer" "b" #'eval-buffer
:desc "Evaluate defun" "d" #'eval-defun
:desc "Evaluate elisp expression" "e" #'eval-expression
:desc "Evaluate last sexpression" "l" #'eval-last-sexp
:desc "Evaluate elisp in region" "r" #'eval-region))
(setq browse-url-browser-function 'eww-browse-url)
(map! :leader
:desc "Search web for text between BEG/END"
"s w" #'eww-search-words
(:prefix ("e" . "evaluate/ERC/EWW")
:desc "Eww web browser" "w" #'eww
:desc "Eww reload page" "R" #'eww-reload))
(autoload 'exwm-enable "exwm-config.el")
(setq doom-font (font-spec :family "Fira Code" :size 15)
doom-variable-pitch-font (font-spec :family "Ubuntu" :size 15)
doom-big-font (font-spec :family "Fira Code" :size 24))
(after! doom-themes
(setq doom-themes-enable-bold t
doom-themes-enable-italic t))
(custom-set-faces!
'(font-lock-comment-face :slant italic)
'(font-lock-keyword-face :slant italic))
(setq imenu-list-focus-after-activation t)
(map! :leader
(:prefix ("s" . "Search")
:desc "Menu to jump to places in buffer" "i" #'counsel-imenu))
(map! :leader
(:prefix ("t" . "Toggle")
:desc "Toggle imenu shown in a sidebar" "i" #'imenu-list-smart-toggle))
(defun dt/insert-todays-date (prefix)
(interactive "P")
(let ((format (cond
((not prefix) "%A, %B %d, %Y")
((equal prefix '(4)) "%m-%d-%Y")
((equal prefix '(16)) "%Y-%m-%d"))))
(insert (format-time-string format))))
(require 'calendar)
(defun dt/insert-any-date (date)
"Insert DATE using the current locale."
(interactive (list (calendar-read-date)))
(insert (calendar-date-string date)))
(map! :leader
(:prefix ("i d" . "Insert date")
:desc "Insert any date" "a" #'dt/insert-any-date
:desc "Insert todays date" "t" #'dt/insert-todays-date))
(setq ivy-posframe-display-functions-alist
'((swiper . ivy-posframe-display-at-point)
(complete-symbol . ivy-posframe-display-at-point)
(counsel-M-x . ivy-display-function-fallback)
(counsel-esh-history . ivy-posframe-display-at-window-center)
(counsel-describe-function . ivy-display-function-fallback)
(counsel-describe-variable . ivy-display-function-fallback)
(counsel-find-file . ivy-display-function-fallback)
(counsel-recentf . ivy-display-function-fallback)
(counsel-register . ivy-posframe-display-at-frame-bottom-window-center)
(dmenu . ivy-posframe-display-at-frame-top-center)
(nil . ivy-posframe-display))
ivy-posframe-height-alist
'((swiper . 20)
(dmenu . 20)
(t . 10)))
(ivy-posframe-mode 1) ; 1 enables posframe-mode, 0 disables it.
(map! :leader
(:prefix ("v" . "Ivy")
:desc "Ivy push view" "v p" #'ivy-push-view
:desc "Ivy switch view" "v s" #'ivy-switch-view))
(setq display-line-numbers-type t)
(map! :leader
:desc "Comment or uncomment lines" "TAB TAB" #'comment-line
(:prefix ("t" . "toggle")
:desc "Toggle line numbers" "l" #'doom/toggle-line-numbers
:desc "Toggle line highlight in frame" "h" #'hl-line-mode
:desc "Toggle line highlight globally" "H" #'global-hl-line-mode
:desc "Toggle truncate lines" "t" #'toggle-truncate-lines))
(custom-set-faces
'(markdown-header-face ((t (:inherit font-lock-function-name-face :weight bold :family "variable-pitch"))))
'(markdown-header-face-1 ((t (:inherit markdown-header-face :height 1.7))))
'(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.6))))
'(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.5))))
'(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.4))))
'(markdown-header-face-5 ((t (:inherit markdown-header-face :height 1.3))))
'(markdown-header-face-6 ((t (:inherit markdown-header-face :height 1.2)))))
(setq minimap-window-location 'right)
(map! :leader
(:prefix ("t" . "toggle")
:desc "Toggle minimap-mode" "m" #'minimap-mode))
(set-face-attribute 'mode-line nil :font "Ubuntu Mono-13")
(setq doom-modeline-height 30 ;; sets modeline height
doom-modeline-bar-width 5 ;; sets right bar width
doom-modeline-persp-name t ;; adds perspective name to modeline
doom-modeline-persp-icon t) ;; adds folder icon next to persp name
(xterm-mouse-mode 1)
(require 'mu4e)
(set-email-account!
"gmail"
'((mu4e-sent-folder . "/[Gmail]/Sent Mail")
(mu4e-trash-folder . "/[Gmail]/Bin")
(mu4e-drafts-folder . "/[Gmail]/Drafts")
(mu4e-refile-folder . "/[Gmail]/All Mail")
;(smtpmail-smtp-server . "smtp.gmail.com")
;(smtpmail-default-smtp-server . "smtp.gmail.com")
(user-mail-address . "christopherrparis1@gmail.com")
(user-full-name . "Christopher Paris"))
;(smtpmail-smtp-service . 587)
;(smtpmail-stream-type . starttls))
;(smtpmail-smtp-user . "christopherrparis1@gmail.com"))
t)
(require 'mu4e-org)
(setq mu4e-get-mail-command "mbsync gmail"
mu4e-change-filenames-when-moving t
;; get emails and index every 5 minutes
mu4e-update-interval 300
;; send emails with format=flowed
mu4e-compose-format-flowed t
;; no need to run cleanup after indexing for gmail
mu4e-index-cleanup nil
mu4e-index-lazy-check t
;; more sensible date format
mu4e-headers-date-format "%d.%m.%y")
(require 'smtpmail)
(setq sendmail-program "msmtp"
message-sendmail-extra-arguments '("--read-envelope-from")
message-sendmail-f-is-evil 't
;message-send-mail-function 'smtpmail-send-it
message-send-mail-function 'message-send-mail-with-sendmail
smtpmail-smtp-service 587
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-default-smtp-server "smtp.gmail.com"
smtpmail-stream-type 'starttls)
;(smtpmail-smtp-user . "christopherrparis1@gmail.com"))
(defun efs/capture-mail-follow-up (msg)
(interactive)
(call-interactively 'org-store-link)
(org-capture nil "mf"))
(defun efs/capture-mail-read-later (msg)
(interactive)
(call-interactively 'org-store-link)
(org-capture nil "mr"))
;; Add custom actions for our capture templates
(add-to-list 'mu4e-headers-actions
'("follow up" . efs/capture-mail-follow-up) t)
(add-to-list 'mu4e-view-actions
'("follow up" . efs/capture-mail-follow-up) t)
(add-to-list 'mu4e-headers-actions
'("read later" . efs/capture-mail-read-later) t)
(add-to-list 'mu4e-view-actions
'("read later" . efs/capture-mail-read-later) t)
(defun efs/store-link-to-mu4e-query ()
(interactive)
(let ((org-mu4e-link-query-in-headers-mode t))
(call-interactively 'org-store-link)))
(after! neotree
(setq neo-smart-open t
neo-window-fixed-size nil))
(after! doom-themes
(setq doom-neotree-enable-variable-pitch t))
(map! :leader
:desc "Toggle neotree file viewer" "t n" #'neotree-toggle
:desc "Open directory in neotree" "d n" #'neotree-dir)
(map! :leader
(:prefix ("=" . "open file")
:desc "Edit agenda file" "=" #'(lambda () (interactive) (find-file "~/.config/doom/start.org"))
:desc "Edit agenda file" "a" #'(lambda () (interactive) (find-file "~/Nextcloud/Notes/Org/agenda.org"))
:desc "Edit doom config.org" "c" #'(lambda () (interactive) (find-file "~/.config/doom/config.org"))
:desc "Edit doom init.el" "i" #'(lambda () (interactive) (find-file "~/.config/doom/init.el"))
:desc "Edit doom packages.el" "p" #'(lambda () (interactive) (find-file "~/.config/doom/packages.el"))))
(map! :leader
(:prefix ("= e" . "open eshell files")
:desc "Edit eshell aliases" "a" #'(lambda () (interactive) (find-file "~/.config/doom/eshell/aliases"))
:desc "Edit eshell profile" "p" #'(lambda () (interactive) (find-file "~/.config/doom/eshell/profile"))))
(map! :leader
:desc "Org babel tangle" "m B" #'org-babel-tangle)
(after! org
(setq org-directory "~/Nextcloud/Notes/Org/"
org-default-notes-file (expand-file-name "notes.org" org-directory)
org-ellipsis ""
org-superstar-headline-bullets-list '("" "" "" "" "" "" "")
org-superstar-itembullet-alist '((?+ . ?➤) (?- . ?✦)) ; changes +/- symbols in item lists
org-log-done 'time
org-hide-emphasis-markers t
;; ex. of org-link-abbrev-alist in action
;; [[arch-wiki:Name_of_Page][Description]]
org-link-abbrev-alist ; This overwrites the default Doom org-link-abbrev-list
'(("google" . "http://www.google.com/search?q=")
("arch-wiki" . "https://wiki.archlinux.org/index.php/")
("ddg" . "https://duckduckgo.com/?q=")
("wiki" . "https://en.wikipedia.org/wiki/"))
org-table-convert-region-max-lines 20000
org-todo-keywords ; This overwrites the default Doom org-todo-keywords
'((sequence
"TODO(t)" ; A task that is ready to be tackled
"BLOG(b)" ; Blog writing assignments
"GYM(g)" ; Things to accomplish at the gym
"PROJ(p)" ; A project that contains other tasks
"VIDEO(v)" ; Video assignments
"WAIT(w)" ; Something is holding up this task
"|" ; The pipe necessary to separate "active" states and "inactive" states
"DONE(d)" ; Task has been completed
"CANCELLED(c)" )) ; Task has been cancelled
org-log-into-drawer t
org-capture-templates
'(("p" "Private templates")
("pt" "TODO entry" entry
(file+headline "~/Nextcloud/Notes/Org/org-roam/20240315100949-mylife_org.org" "Capture")
(file "~/Nextcloud/Notes/Org/tpl-todo.txt"))
("pj" "Journal entry" entry (file+olp+datetree
"~/Nextcloud/Notes/Org/org-roam/20241023165214-journal.org") "* %U - %^{Activity}")
("pb" "Add book to read" entry (file+headline "~/Nextcloud/Notes/Org/org-roam/20240315100949-mylife_org.org"
"Books To Read") (file "~/Nextcloud/Notes/Org/tpl-book.txt")
:empty-lines-after 2)
("w" "Work templates")
("wt" "TODO entry" entry
(file+headline "~/Nextcloud/Notes/Org/org-roam/20240315170859-mywork.org" "Capture")
(file "~/Nextcloud/Notes/Org/tpl-todo.txt"))
("wl" "Worklog entry" entry (file+olp+datetree
"~/Nextcloud/Notes/Org/org-roam/20241024113312-worklog.org") "* %U - %^{Activity}")
("m" "Email Workflow")
("mf" "Follow Up" entry (file+olp "~/Nextcloud/Notes/Org/Mail.org" "Follow Up")
"* TODO Follow up with %:fromname on %a\nSCHEDULED:%t\nDEADLINE: %(org-insert-time-stamp (org-read-date nil t \"+2d\"))\n\n%i" :immediate-finish t)
("mr" "Read Later" entry (file+olp "~/Nextcloud/Notes/Org/Mail.org" "Read Later")
"* TODO Read %:subject\nSCHEDULED:%t\nDEADLINE: %(org-insert-time-stamp (org-read-date nil t \"+2d\"))\n\n%a\n\n%i" :immediate-finish t))
org-excalidraw-directory "~/Nextcloud/Notes/Org/excalidraw"))
(after! org
(setq org-agenda-files
'(("~/Nextcloud/Notes/Org/agenda.org")
("~/Nextcloud/Notes/Org/Mail.org"))))
(setq
;; org-fancy-priorities-list '("[A]" "[B]" "[C]")
;; org-fancy-priorities-list '("❗" "[B]" "[C]")
org-fancy-priorities-list '("🟥" "🟧" "🟨")
org-priority-faces
'((?A :foreground "#ff6c6b" :weight bold)
(?B :foreground "#98be65" :weight bold)
(?C :foreground "#c678dd" :weight bold))
org-agenda-block-separator 8411)
(setq org-agenda-custom-commands
'(("v" "A better agenda view"
((tags "PRIORITY=\"A\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "High-priority unfinished tasks:")))
(tags "PRIORITY=\"B\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Medium-priority unfinished tasks:")))
(tags "PRIORITY=\"C\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Low-priority unfinished tasks:")))
(tags "customtag"
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Tasks marked with customtag:")))
(agenda "")
(alltodo "")))))
(use-package! org-auto-tangle
:defer t
:hook (org-mode . org-auto-tangle-mode)
:config
(setq org-auto-tangle-default t))
(defun dt/insert-auto-tangle-tag ()
"Insert auto-tangle tag in a literate config."
(interactive)
(evil-org-open-below 1)
(insert "#+auto_tangle: t ")
(evil-force-normal-state))
(map! :leader
:desc "Insert auto_tangle tag" "i a" #'dt/insert-auto-tangle-tag)
(defun dt/org-colors-doom-one ()
"Enable Doom One colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.175 "#51afef" ultra-bold)
(org-level-2 1.15 "#c678dd" extra-bold)
(org-level-3 1.125 "#98be65" bold)
(org-level-4 1.1 "#da8548" semi-bold)
(org-level-5 1.075 "#5699af" normal)
(org-level-6 1.05 "#a9a1e1" normal)
(org-level-7 1.025 "#46d9ff" normal)
(org-level-8 1.0 "#ff6c6b" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-dracula ()
"Enable Dracula colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#8be9fd" ultra-bold)
(org-level-2 1.6 "#bd93f9" extra-bold)
(org-level-3 1.5 "#50fa7b" bold)
(org-level-4 1.4 "#ff79c6" semi-bold)
(org-level-5 1.3 "#9aedfe" normal)
(org-level-6 1.2 "#caa9fa" normal)
(org-level-7 1.1 "#5af78e" normal)
(org-level-8 1.0 "#ff92d0" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-gruvbox-dark ()
"Enable Gruvbox Dark colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#458588" ultra-bold)
(org-level-2 1.6 "#b16286" extra-bold)
(org-level-3 1.5 "#98971a" bold)
(org-level-4 1.4 "#fb4934" semi-bold)
(org-level-5 1.3 "#83a598" normal)
(org-level-6 1.2 "#d3869b" normal)
(org-level-7 1.1 "#d79921" normal)
(org-level-8 1.0 "#8ec07c" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-monokai-pro ()
"Enable Monokai Pro colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#78dce8" ultra-bold)
(org-level-2 1.6 "#ab9df2" extra-bold)
(org-level-3 1.5 "#a9dc76" bold)
(org-level-4 1.4 "#fc9867" semi-bold)
(org-level-5 1.3 "#ff6188" normal)
(org-level-6 1.2 "#ffd866" normal)
(org-level-7 1.1 "#78dce8" normal)
(org-level-8 1.0 "#ab9df2" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-nord ()
"Enable Nord colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#81a1c1" ultra-bold)
(org-level-2 1.6 "#b48ead" extra-bold)
(org-level-3 1.5 "#a3be8c" bold)
(org-level-4 1.4 "#ebcb8b" semi-bold)
(org-level-5 1.3 "#bf616a" normal)
(org-level-6 1.2 "#88c0d0" normal)
(org-level-7 1.1 "#81a1c1" normal)
(org-level-8 1.0 "#b48ead" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-oceanic-next ()
"Enable Oceanic Next colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#6699cc" ultra-bold)
(org-level-2 1.6 "#c594c5" extra-bold)
(org-level-3 1.5 "#99c794" bold)
(org-level-4 1.4 "#fac863" semi-bold)
(org-level-5 1.3 "#5fb3b3" normal)
(org-level-6 1.2 "#ec5f67" normal)
(org-level-7 1.1 "#6699cc" normal)
(org-level-8 1.0 "#c594c5" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-palenight ()
"Enable Palenight colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#82aaff" ultra-bold)
(org-level-2 1.6 "#c792ea" extra-bold)
(org-level-3 1.5 "#c3e88d" bold)
(org-level-4 1.4 "#ffcb6b" semi-bold)
(org-level-5 1.3 "#a3f7ff" normal)
(org-level-6 1.2 "#e1acff" normal)
(org-level-7 1.1 "#f07178" normal)
(org-level-8 1.0 "#ddffa7" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-solarized-dark ()
"Enable Solarized Dark colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#268bd2" ultra-bold)
(org-level-2 1.6 "#d33682" extra-bold)
(org-level-3 1.5 "#859900" bold)
(org-level-4 1.4 "#b58900" semi-bold)
(org-level-5 1.3 "#cb4b16" normal)
(org-level-6 1.2 "#6c71c4" normal)
(org-level-7 1.1 "#2aa198" normal)
(org-level-8 1.0 "#657b83" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-solarized-light ()
"Enable Solarized Light colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#268bd2" ultra-bold)
(org-level-2 1.6 "#d33682" extra-bold)
(org-level-3 1.5 "#859900" bold)
(org-level-4 1.4 "#b58900" semi-bold)
(org-level-5 1.3 "#cb4b16" normal)
(org-level-6 1.2 "#6c71c4" normal)
(org-level-7 1.1 "#2aa198" normal)
(org-level-8 1.0 "#657b83" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
(defun dt/org-colors-tomorrow-night ()
"Enable Tomorrow Night colors for Org headers."
(interactive)
(dolist
(face
'((org-level-1 1.7 "#81a2be" ultra-bold)
(org-level-2 1.6 "#b294bb" extra-bold)
(org-level-3 1.5 "#b5bd68" bold)
(org-level-4 1.4 "#e6c547" semi-bold)
(org-level-5 1.3 "#cc6666" normal)
(org-level-6 1.2 "#70c0ba" normal)
(org-level-7 1.1 "#b77ee0" normal)
(org-level-8 1.0 "#9ec400" normal)))
(set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face)))
(set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf"))
;; Load our desired dt/org-colors-* theme on startup
(dt/org-colors-doom-one)
(use-package ox-man)
(use-package ox-gemini)
(setq org-journal-dir "~/Nextcloud/Notes/Org/journal/"
org-journal-date-prefix "* "
org-journal-time-prefix "** "
org-journal-date-format "%B %d, %Y (%A) "
org-journal-file-format "%Y-%m-%d.org")
(setq org-publish-use-timestamps-flag nil)
(setq org-export-with-broken-links t)
(setq org-publish-project-alist
'(("distro.tube without manpages"
:base-directory "~/nc/gitlab-repos/distro.tube/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/"
:recursive t
:exclude "org-html-themes/.*\\|man-org/man*"
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man0p"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man0p/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man0p/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man1"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man1/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man1/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man1p"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man1p/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man1p/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man2"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man2/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man2/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man3"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man3/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man3/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man3p"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man3p/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man3p/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man4"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man4/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man4/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man5"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man5/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man5/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man6"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man6/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man6/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man7"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man7/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man7/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("man8"
:base-directory "~/nc/gitlab-repos/distro.tube/man-org/man8/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/distro.tube/html/man-org/man8/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
("org-static"
:base-directory "~/Org/website"
:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
:publishing-directory "~/public_html/"
:recursive t
:exclude ".*/org-html-themes/.*"
:publishing-function org-publish-attachment)
("dtos.dev"
:base-directory "~/nc/gitlab-repos/dtos.dev/"
:base-extension "org"
:publishing-directory "~/nc/gitlab-repos/dtos.dev/html/"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4 ; Just the default for this project.
:auto-preamble t)
))
(after! org
(setq org-roam-directory "~/Nextcloud/Notes/Org/org-roam/"
org-roam-graph-viewer "/usr/bin/brave"
org-roam-completion-everywhere t))
(map! :leader
(:prefix ("n r" . "org-roam")
:desc "Completion at point" "c" #'completion-at-point
:desc "Find node" "f" #'org-roam-node-find
:desc "Show graph" "g" #'org-roam-graph
:desc "Insert node" "i" #'org-roam-node-insert
:desc "Capture to node" "n" #'org-roam-capture
:desc "Toggle roam buffer" "r" #'org-roam-buffer-toggle))
(use-package! password-store)
(map! :leader
:desc "Switch to perspective NAME" "DEL" #'persp-switch
:desc "Switch to buffer in perspective" "," #'persp-switch-to-buffer
:desc "Switch to next perspective" "]" #'persp-next
:desc "Switch to previous perspective" "[" #'persp-prev
:desc "Add a buffer current perspective" "+" #'persp-add-buffer
:desc "Remove perspective by name" "-" #'persp-remove-by-name)
(define-globalized-minor-mode global-rainbow-mode rainbow-mode
(lambda ()
(when (not (memq major-mode
(list 'org-agenda-mode)))
(rainbow-mode 1))))
(global-rainbow-mode 1 )
(map! :leader
(:prefix ("r" . "registers")
:desc "Copy to register" "c" #'copy-to-register
:desc "Frameset to register" "f" #'frameset-to-register
:desc "Insert contents of register" "i" #'insert-register
:desc "Jump to register" "j" #'jump-to-register
:desc "List registers" "l" #'list-registers
:desc "Number to register" "n" #'number-to-register
:desc "Interactively choose a register" "r" #'counsel-register
:desc "View a register" "v" #'view-register
:desc "Window configuration to register" "w" #'window-configuration-to-register
:desc "Increment register" "+" #'increment-register
:desc "Point to register" "SPC" #'point-to-register))
(setq shell-file-name "/bin/fish"
vterm-max-scrollback 5000)
(setq eshell-rc-script "~/.config/doom/eshell/profile"
eshell-aliases-file "~/.config/doom/eshell/aliases"
eshell-history-size 5000
eshell-buffer-maximum-lines 5000
eshell-hist-ignoredups t
eshell-scroll-to-bottom-on-input t
eshell-destroy-buffer-when-process-dies t
eshell-visual-commands'("bash" "fish" "htop" "ssh" "top" "zsh"))
(map! :leader
:desc "Eshell" "e s" #'eshell
:desc "Eshell popup toggle" "e t" #'+eshell/toggle
:desc "Counsel eshell history" "e h" #'counsel-esh-history
:desc "Vterm popup toggle" "v t" #'+vterm/toggle)
(defun prefer-horizontal-split ()
(set-variable 'split-height-threshold nil t)
(set-variable 'split-width-threshold 40 t)) ; make this as low as needed
(add-hook 'markdown-mode-hook 'prefer-horizontal-split)
(map! :leader
:desc "Clone indirect buffer other window" "b c" #'clone-indirect-buffer-other-window)
(setq initial-buffer-choice "~/.config/doom/start.org")
(define-minor-mode start-mode
"Provide functions for custom start page."
:lighter " start"
:keymap (let ((map (make-sparse-keymap)))
;;(define-key map (kbd "M-z") 'eshell)
(evil-define-key 'normal start-mode-map
(kbd "1") '(lambda () (interactive) (find-file "~/.config/doom/config.org"))
(kbd "2") '(lambda () (interactive) (find-file "~/.config/doom/init.el"))
(kbd "3") '(lambda () (interactive) (find-file "~/.config/doom/packages.el"))
(kbd "4") '(lambda () (interactive) (find-file "~/.config/doom/eshell/aliases"))
(kbd "5") '(lambda () (interactive) (find-file "~/.config/doom/eshell/profile")))
map))
(add-hook 'start-mode-hook 'read-only-mode) ;; make start.org read-only; use 'SPC t r' to toggle off read-only.
(provide 'start-mode)
(add-to-list 'default-frame-alist '(alpha-background . 95))
(map! :leader
(:prefix ("w" . "window")
:desc "Winner redo" "<right>" #'winner-redo
:desc "Winner undo" "<left>" #'winner-undo))
(map! :leader
:desc "Zap to char" "z" #'zap-to-char
:desc "Zap up to char" "Z" #'zap-up-to-char)

1540
.config/doom/config.org Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
# Aliases for emacs commands
alias ff find-file $1
# Aliasing standard shell commands to better emacs alternatives
alias less view-file $1
# Changing "ls" to "exa"
alias ls exa -al --color=always --group-directories-first $* # my preferred listing
alias la exa -a --color=always --group-directories-first $* # all files and dirs
alias ll exa -l --color=always --group-directories-first $* # long format
alias lt exa -aT --color=always --group-directories-first $* # tree listing
alias l. exa -a1 $* | grep "^\." # list hidden files
# Merge Xresources
alias merge xrdb -merge ~/.Xresources
# Aliases for doom emacs utilties
alias doomsync ~/.emacs.d/bin/doom sync
alias doomdoctor ~/.emacs.d/bin/doom doctor
alias doomupgrade ~/.emacs.d/bin/doom upgrade
alias doompurge ~/.emacs.d/bin/doom purge
# Confirm before overwriting something
alias cp cp -i $1
alias mv mv -i $1
alias rm rm -i $1
# Bare git repo alias for dotfiles
alias config /usr/bin/git --git-dir=$HOME/dotfiles --work-tree=$HOME $*

View File

@ -0,0 +1 @@
colorscript random

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

191
.config/doom/init.el Normal file
View File

@ -0,0 +1,191 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a "Module Index" link where you'll find
;; a comprehensive list of Doom's modules and what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
company ; the ultimate code completion backend
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
(ivy +fonts +childframe) ; a search engine for love and life
: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
(emoji +unicode) ; 🙂
;;fill-column ; a `fill-column' indicator
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;hydra
;;indent-guides ; highlighted indent columns
(ligatures +extras) ; 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
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
vc-gutter ; 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
: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
;;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
snippets ; my elves. They type so I don't have to
;;word-wrap ; soft wrapping with language-aware indent
:emacs
(dired +icons) ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
(ibuffer +icons) ; interactive buffer management
undo ; 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
:checkers
syntax ; tasing you for every semicolon you forget
(spell +aspell) ; tasing you for misspelling mispelling
;;grammar ; tasing grammar mistake every you make
:tools
;;ansible
;;debugger ; 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
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
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
;;upload ; map local to remote projects via ssh/ftp
:os
;;(:if IS-MAC macos) ; improve compatibility with macOS
tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;cc ; C/C++/Obj-C madness
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
;;data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;faust ; dsp, but you get to keep your soul
;;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
(haskell +dante) ; 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
;;(java +meghanada) ; the poster child for carpal tunnel syndrome
javascript ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
latex ; writing papers in Emacs has never been so fun
;;lean
;;factor
;;ledger ; an accounting system in Emacs
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!"
;;ocaml ; an objective camel
(org
+journal ; enable org journal
+roam2 ; create a personal wiki
+pretty ; replace asterisks with pretty org bullets
+publish) ; create static websites with org
php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
python ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;scheme ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;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
:email
mu4e
;;smtpmail
;;notmuch
;;(wanderlust +gmail)
:app
;;calendar
emms
;;everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize
rss ; emacs as an RSS reader
;;twitter ; twitter client https://twitter.com/vnought
:config
literate
(default +bindings +smartparens))

93
.config/doom/packages.el Normal file
View File

@ -0,0 +1,93 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;(package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/raxod502/straight.el#the-recipe-format
;(package! another-package
; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;(package! this-package
; :recipe (:host github :repo "username/repo"
; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;(package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;(package! builtin-package :recipe (:nonrecursive t))
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see raxod502/straight.el#279)
;(package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;(package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;(unpin! pinned-package)
;; ...or multiple packages
;(unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;(unpin! t)
;; (package! gitconfig-mode
;; :recipe (:host github :repo "magit/git-modes"
;; :files ("gitconfig-mode.el")))
;; (package! gitignore-mode
;; :recipe (:host github :repo "magit/git-modes"
;; :files ("gitignore-mode.el")))
(package! flycheck-aspell)
(package! calfw)
(package! calfw-org)
(package! calfw-ical)
;;(package! citar-org-roam hrr)
;;(package! dashboard)
(package! dired-open)
(package! dired-subtree)
(package! dirvish)
(package! dmenu)
(package! ednc)
(package! emojify)
(package! evil-tutor)
(package! exwm)
(package! imenu-list)
(package! ivy-posframe)
(package! mw-thesaurus)
(package! org-auto-tangle)
(package! org-web-tools)
(package! ox-gemini)
(package! peep-dired)
(package! password-store)
(package! rainbow-mode)
(package! resize-window)
(package! tldr)
(package! wc-mode)
(package! beacon)
(package! clippy)
(package! minimap)
(package! olivetti)
(package! beacon)
(package! ednc)
(package! org-noter)
(package! org-pdftools)
(package! all-the-icons)
(package! all-the-icons-dired)

45
.config/doom/start.org Normal file
View File

@ -0,0 +1,45 @@
#+STARTUP: inlineimages
[[file:./images/emacs-start-page.png]]
⦿ *IMPORTANT KEYBINDINGS*
|------------+---------------------+------------------------------------|
| M-x | [[elisp:(counsel-M-x)][counsel-M-x]] | Prompt for Emacs programs |
| SPC . | [[elisp:(counsel-find-file)][counsel-find-file]] | Find a file |
| SPC f r | [[elisp:(counsel-recentf)][counsel-recentf]] | Find a recent file |
| SPC d d | [[elisp:(dired (getenv "HOME"))][dired]] | Dired file manager |
| SPC h r r | [[elisp:(doom/reload)][doom/reload]] | Reload Doom Emacs |
| SPC f u | [[elisp:(doom/sudo-find-file nil)][doom/sudo-find-file]] | Find file and open as root |
| SPC f U | /doom/sudo-this-file/ | Open current file as root |
| SPC e t | [[elisp:(+eshell/toggle nil)][+eshell/toggle]] | Toggle the eshell |
| SPC v t | [[elisp:(+vterm/toggle nil)][+vterm/toggle]] | Toggle the vterm terminal emulator |
|------------+---------------------+------------------------------------|
⦿ *BUFFERS AND SPLITS*
|------------------------------+------------------------------+-----------------------------|
| (SPC b i) [[elisp:(ibuffer)][ibuffer]] | (SPC b p) [[elisp:(previous-buffer)][previous-buffer]] | (SPC b n) [[elisp:(next-buffer)][next-buffer]] |
| (SPC b k) [[elisp:(kill-buffer)][kill-buffer]] | (SPC b s) [[elisp:(save-buffer)][save-buffer]] | (SPC b u) /sudo-save-buffer/ |
| (SPC w s) [[elisp:(evil-window-split)][evil-window-split]] | (SPC w v) [[elisp:(evil-window-vsplit)][evil-window-vsplit]] | (SPC w w) [[elisp:(evil-window-next)][evil-window-next]] |
| (SPC w c) [[elisp:(evil-window-delete)][evil-window-delete]] | (SPC w l) [[elisp:(evil-window-left 1)][evil-window-left]] | (SPC w h) [[elisp:(evil-window-right 1)][evil-window-right]] |
|------------------------------+------------------------------+-----------------------------|
⦿ *HELP INFORMATION*
|-----------------------------+-----------------------------+-------------------------------|
| (SPC h d h) [[elisp:(doom/help)][doom/help]] | (SPC h d f) [[elisp:(doom/help-faq)][doom/help-faq]] | (SPC h i) [[elisp:(info)][info]] |
| (SPC h f) [[elisp:(counsel-describe-function)][describe-function]] | (SPC h v) [[elisp:(counsel-describe-variable)][describe-variable]] | (SPC h b b) [[elisp:(counsel-descbinds)][describe-bindings]] |
|-----------------------------+-----------------------------+-------------------------------|
⦿ *DOOM EMACS CONFIGS* (Press =1-5= to immediately open a file)
|---+----------------+------------------------------------------------------------|
| =1= | [[elisp:(find-file (concat (getenv "HOME") "/.config/doom/config.org"))][config.org]] | This is the main user configuration file for Doom Emacs. |
| =2= | [[elisp:(find-file (concat (getenv "HOME") "/.config/doom/init.el"))][init.el]] | Allows you to turn on/off the standard Doom modules. |
| =3= | [[elisp:(find-file (concat (getenv "HOME") "/.config/doom/packages.el"))][packages.el]] | Easily install extra packages by adding them to this file. |
| =4= | [[elisp:(find-file (concat (getenv "HOME") "/.config/doom/eshell/aliases"))][eshell/aliases]] | Aliases file for the eshell. |
| =5= | [[elisp:(find-file (concat (getenv "HOME") "/.config/doom/eshell/profile"))][eshell/profile]] | Profile for the eshell. |
|---+----------------+------------------------------------------------------------|
=NOTE=: 'SPC f p' [[elisp:(doom/find-file-in-private-config)][doom/find-file-in-private-config]])
;; Local Variables:
;; eval: (start-mode)
;; End: