diff --git a/.doom.d/config.el b/.doom.d/config.el
new file mode 100644
index 00000000..a23f8ba0
--- /dev/null
+++ b/.doom.d/config.el
@@ -0,0 +1,309 @@
+;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
+
+;; DO NOT EDIT THIS FILE DIRECTLY
+;; This is a file generated from a literate programing source file located at
+;; https://github.com/starr-dusT/dotfiles/blob/master/.doom.d/doomed.org
+;; You should make any changes there and regenerate it from Emacs org-mode
+;; using org-babel-tangle (C-c C-v t)
+
+;; Place your private configuration here! Remember, you do not need to run 'doom
+;; sync' after modifying this file!
+
+;; Some functionality uses this to identify you, e.g. GPG configuration, email
+;; clients, file templates and snippets.
+;; (setq user-full-name "John Doe"
+;; user-mail-address "john@doe.com")
+
+;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
+;; are the three important ones:
+;;
+;; + `doom-font'
+;; + `doom-variable-pitch-font'
+;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
+;; presentations or streaming.
+;;
+;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
+;; font string. You generally only need these two:
+;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light)
+;; doom-variable-pitch-font (font-spec :family "sans" :size 13))
+
+;; There are two ways to load a theme. Both assume the theme is installed and
+;; available. You can either set `doom-theme' or manually load a theme with the
+;; `load-theme' function. This is the default:
+;; (setq doom-theme 'doom-one)
+
+;; If you use `org' and don't want your org files in the default location below,
+;; change `org-directory'. It must be set before org loads!
+;; (setq org-directory "~/org/")
+
+;; 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)
+
+;; Here are some additional functions/macros that could help you configure Doom:
+;;
+;; - `load!' for loading external *.el files relative to this one
+;; - `use-package!' for configuring packages
+;; - `after!' for running code after a package has loaded
+;; - `add-load-path!' for adding directories to the `load-path', relative to
+;; this file. Emacs searches the `load-path' when you load packages with
+;; `require' or `use-package'.
+;; - `map!' for binding new keys
+;;
+;; To get information about any of these functions/macros, move the cursor over
+;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
+;; This will open documentation for it, including demos of how they are used.
+;;
+;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
+;; they are implemented.
+
+(setq this-system "kestrel")
+(setq all-systems '("kestrel" "basilisk" "adjudicator"))
+(setq only-kestrel '("kestrel"))
+(setq only-basilisk '("basilisk"))
+
+(setq user-full-name "Tyler Starr"
+ user-mail-address "starrtyler88@gmail.com")
+
+;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
+;; are the three important ones:
+;;
+;; + `doom-font'
+;; + `doom-variable-pitch-font'
+;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
+;; presentations or streaming.
+;;
+;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
+;; font string. You generally only need these two:
+;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light)
+;; doom-variable-pitch-font (font-spec :family "sans" :size 13))
+;; There are two ways to load a theme. Both assume the theme is installed and
+;; available. You can either set `doom-theme' or manually load a theme with the
+;; `load-theme' function. This is the default:
+(setq doom-theme 'doom-gruvbox)
+
+;; 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 'relative)
+
+(map! :leader
+ ; Add to the "open" menu in Doom
+ (:prefix-map ("o" . "open")
+ (:prefix-map ("o" . "org-ql")
+ :desc "views" "v" #'org-ql-view
+ :desc "Weekly Agenda" "w" (cmd! (org-ql-view "Weekly Agenda"))
+ :desc "Tasks to Refile" "r" (cmd! (org-ql-view "Tasks to Refile"))
+ :desc "This Weeks Progress" "p" (cmd! (org-ql-view "This Weeks Progress")))))
+
+(setq org-directory "~/documents/org/")
+(setq org-capture (directory-files-recursively
+ (concat org-directory "gtd/capture/") "\.org$"))
+(setq org-agenda (directory-files-recursively
+ (concat org-directory "gtd/agenda/") "\.org$"))
+(setq org-todo (directory-files-recursively
+ (concat org-directory "gtd/todo/") "\.org$"))
+(setq org-agenda-files (append org-capture org-agenda org-todo))
+
+(setq org-roam-directory (concat org-directory "roam"))
+(setq org-roam-db-location (concat org-directory "roam/org-roam.db"))
+
+(after! org
+ (setq org-todo-keywords
+ '((sequence "TODO(t)" "NEXT(n)" "CHASE(c)" "WIP(p)" "WAIT(w@/!)"
+ "GAVE(g@/!)" "|" "KILL(k@/!)" "DONE(d)")))
+ ; TODO add (1)...(10) numbers for task ordering (replacing "next")
+ (setq org-todo-keyword-faces
+ (quote (("TODO" :foreground "red" :weight bold)
+ ("CHASE" :foreground "red" :weight bold)
+ ("WIP" :foreground "blue" :weight bold)
+ ("NEXT" :foreground "orange" :weight bold)
+ ("GAVE" :foreground "orange" :weight bold)
+ ("WAIT" :foreground "orange" :weight bold)
+ ("KILL" :foreground "forest green" :weight bold)
+ ("DONE" :foreground "forest green" :weight bold))))
+
+ (setq org-use-tag-inheritance t)
+ (setq org-tags-exclude-from-inheritance '("prj" "prg" "subprj"))
+ (setq org-tag-alist
+ '((:startgroup)
+ ; Put mutually exclusive tags here
+ (:endgroup)
+ ("@home" . ?h)
+ ("@work" . ?w)
+ ("question" . ?q)
+ ("exclude" . ?e)
+ ("prj" . ?p)
+ ("subprj" . ?s)
+ ("prg" . ?P)
+ ("habit" . ?h)
+ ("me" . ?m)
+ ("Aaron" . ?a)
+ ("Landon" . ?l)
+ ("Valerie" . ?v)
+ ("David" . ?d)))
+
+ (setq org-capture-todo (concat org-directory "gtd/capture/inbox.org"))
+
+ (setq org-capture-templates
+ (doct '(("todo" :keys "t"
+ :file org-capture-todo
+ :template ("* TODO %?" "%U"))
+ ("question" :keys "q"
+ :file org-capture-todo
+ :template ("* TODO Find out %? :question:"
+ "%U"))
+ ("habit" :keys "h"
+ :file org-capture-todo
+ :template ("* NEXT %? :habit:exclude:" "%U"
+ "SCHEDULED: %(format-time-string
+ \"%<<%Y-%m-%d %a .+1d/3d>>\")"
+ ":PROPERTIES:" ":STYLE: habit"
+ ":REPEAT_TO_STATE: NEXT" ":END:"))
+ ("meeting" :keys "m"
+ :file org-capture-todo
+ :template ("* NEXT %? :meeting:exclude:"
+ "%U")))))
+
+ (setq org-refile-targets (quote ((nil :maxlevel . 3)
+ (org-agenda-files :maxlevel . 3))))
+ (advice-add 'org-refile :after 'org-save-all-org-buffers)
+
+ (setq org-agenda-start-day "0d")
+ (setq org-agenda-show-future-repeats 'next)
+ (setq org-agenda-custom-commands
+ '(("w" "Super awesome work agenda"
+ ((agenda "" ((org-agenda-overriding-header "")
+ (org-super-agenda-groups
+ '((:name "SCHEDULED"
+ :time-grid t
+ :date today
+ :todo "TODAY"
+ :scheduled today
+ :not (:todo "WIP"))
+ (:name "DUE"
+ :deadline today)
+ (:name "OVERDUE"
+ :deadline past)
+ (:name "DUE SOON"
+ :deadline future)
+ (:name "PAST SCHEDULED"
+ :scheduled past
+ :not (:todo "WIP"))
+ (:name "SCHEDULED SOON"
+ :scheduled future
+ :not (:todo "WIP"))
+ (:discard (:anything t))))))
+ (alltodo "" ((org-agenda-overriding-header "")
+ (org-super-agenda-groups
+ '((:name "TASK TO REFILE"
+ :file-path "gtd/capture")
+ (:name "IN PROGRESS"
+ :todo "WIP")
+ (:name "IMPORTANT"
+ :priority "A")
+ (:name "QUESTION"
+ :tag "question")
+ (:name "STANDALONE TASKS"
+ :and (:todo "TODO"
+ :not (:tag "exclude")))
+ (:name "WAITING"
+ :and (:todo "WAIT"
+ :not (:tag "exclude")))
+ (:name "DELEGATED"
+ :and (:todo "GAVE"
+ :not (:tag "exclude")))
+ (:discard (:anything t))))))))))
+
+ (setq org-ql-weekly-agenda
+ (cons "Weekly Agenda"
+ (lambda ()
+ "Open agenda for week."
+ (interactive)
+ (org-agenda nil "t"))))
+
+ (setq org-ql-refile-tasks
+ (cons "Tasks to Refile"
+ (lambda ()
+ "Find tasks to refile."
+ (interactive)
+ (org-ql-search (list org-capture-todo)
+ '(or (not (done))
+ (done))
+ :title "Tasks to Refile"
+ :sort '(date priority todo)
+ :super-groups '((:name "Todos"
+ :not (:tag "note")))))))
+
+ (setq org-ql-weeks-progress
+ (cons "This Weeks Progress"
+ (lambda ()
+ "launch an agenda-like view at the specified date."
+ (interactive)
+ (let* ((ts (ts-now))
+ (beg-of-week (->> ts
+ (ts-adjust 'day (- (ts-dow (ts-now))))
+ (ts-apply :hour 0 :minute 0 :second 0)))
+ (end-of-week (->> ts
+ (ts-adjust 'day (- 6 (ts-dow (ts-now))))
+ (ts-apply :hour 23 :minute 59 :second 59))))
+ (org-ql-search (org-agenda-files)
+ '(ts-active :from beg-of-week :to end-of-week)
+ :title "Week Overview"
+ :sort '(date priority todo)
+ :super-groups '((:name "Late"
+ :scheduled past
+ :deadline past)
+ (:name "Today"
+ :time-grid t
+ :scheduled today
+ :deadline today)
+ (:name "Coming Up"
+ :scheduled future
+ :deadline future)))))))
+
+ (defun open-org-ql-project (program)
+ (org-ql-search (list program)
+ '(and (todo)
+ (not (children)))
+ :super-groups '((:auto-outline-path t))))
+
+ (setq org-ql-project-view
+ (cons "Project View"
+ (lambda ()
+ "launch a project view for a given program."
+ (interactive)
+ (ivy-read "Project: "
+ (org-agenda-files)
+ :require-match t
+ :action #'open-org-ql-project))))
+
+ (setq org-super-agenda-header-map (make-sparse-keymap))
+ (setq org-ql-views
+ (list org-ql-weekly-agenda
+ org-ql-refile-tasks
+ org-ql-weeks-progress
+ org-ql-project-view))
+ (after! org-agenda
+ (org-super-agenda-mode))
+
+(setq org-startup-folded t)
+(setq org-src-preserve-indentation t)) ; Close the after! org expression
+
+(add-hook 'haskell-mode-hook #'hindent-mode)
+(setq lsp-enable-on-type-formatting nil)
+
+(defun ts/next-fixme()
+ "Move cursor and delete next FIXME in beancount file."
+ (interactive)
+ (re-search-forward "FIXME" nil t)
+ (delete-char -5))
+
+(defun ts/next-fixme-replace()
+ "Move cursor, delete next FIXME, and insert account in beancount file."
+ (interactive)
+ (ts/next-fixme)
+ (call-interactively 'beancount-insert-account)
+ (call-interactively 'beancount-align-numbers))
+(beancount-mode)
+(define-key beancount-mode-map (kbd "C-c F") #'ts/next-fixme)
+(define-key beancount-mode-map (kbd "C-c f") #'ts/next-fixme-replace)
diff --git a/.doom.d/doomed.org b/.doom.d/doomed.org
new file mode 100644
index 00000000..b71f38ba
--- /dev/null
+++ b/.doom.d/doomed.org
@@ -0,0 +1,738 @@
+#+title: Doomed - Personal Doom Emacs Config
+#+author: Tyler Starr
+#+email: tyler@tstarr.us
+#+keywords: org-mode Emacs Doom config
+* References
+Configuring Emacs can be an obsession. I have bounced back and forth between my from [[https://github.com/starr-dusT/scratch][scratch]] config and doom. In the end I find it hard to give up all the amazing work [[https://github.com/hlissner][hlissner]] has put into doom. Doom really simpifies the process of configuring Emacs with lots of pre-made bits and a nice framework for configuration. As much as it annoys me to not completelty control the config of the whole system I must comprimise to maintain my sanity. Find some useful references below:
+
+- [[https://github.com/hlissner/doom-emacs][Doom Emacs Github]]
+- [[https://github.com/zzamboni/dot-doom][zzamboni's nice config]]
+
+* Doom config file overview
+
+Doom Emacs uses three config files:
+
+- =init.el= defines which of the existing Doom [[https://github.com/hlissner/doom-emacs/blob/develop/docs/getting_started.org#modules][modules]] are loaded. A Doom module is a bundle of packages, configuration and commands, organized into a unit that can be toggled easily from this file.
+- =packages.el= defines which [[https://github.com/hlissner/doom-emacs/blob/develop/docs/getting_started.org#package-management][packages]] should be installed, beyond those that are installed and loaded as part of the enabled modules.
+- =config.el= contains all [[https://github.com/hlissner/doom-emacs/blob/develop/docs/getting_started.org#configuring-doom][custom configuration]] and code.
+
+There are other files that can be loaded, but theses are the main ones. The load order of different files is [[https://github.com/hlissner/doom-emacs/blob/develop/docs/getting_started.org#load-order][defined depending on the type of session]] being started.
+
+All the config files are generated from this Org file, to try and make its meaning as clear as possible. All =package!= declarations are written to =packages.el=, all other LISP code is written to =config.el=.
+
+** Config file headers
+
+We start by simply defining the standard headers used by the three files. These headers come from the initial files generated by =doom install=, and contain either some Emacs-LISP relevant indicators like =lexical-binding=, or instructions about the contents of the file.
+
+#+html: init.el
+#+begin_src emacs-lisp :tangle init.el
+;;; init.el -*- lexical-binding: t; -*-
+
+;; DO NOT EDIT THIS FILE DIRECTLY
+;; This is a file generated from a literate programing source file located at
+;; https://github.com/starr-dusT/dotfiles/blob/master/.doom.d/doomed.org
+;; You should make any changes there and regenerate it from Emacs org-mode
+;; using org-babel-tangle (C-c C-v 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).
+#+end_src
+
+#+RESULTS:
+
+#+html:
+
+#+html: packages.el
+#+begin_src emacs-lisp :tangle packages.el
+;; -*- no-byte-compile: t; -*-
+;;; $DOOMDIR/packages.el
+
+;; DO NOT EDIT THIS FILE DIRECTLY
+;; This is a file generated from a literate programing source file located at
+;; https://github.com/starr-dusT/dotfiles/blob/master/.doom.d/doomed.org
+;; You should make any changes there and regenerate it from Emacs org-mode
+;; using org-babel-tangle (C-c C-v t)
+
+;; 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)
+#+end_src
+#+html:
+
+#+html: config.el
+#+begin_src emacs-lisp :tangle config.el
+;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
+
+;; DO NOT EDIT THIS FILE DIRECTLY
+;; This is a file generated from a literate programing source file located at
+;; https://github.com/starr-dusT/dotfiles/blob/master/.doom.d/doomed.org
+;; You should make any changes there and regenerate it from Emacs org-mode
+;; using org-babel-tangle (C-c C-v t)
+
+;; Place your private configuration here! Remember, you do not need to run 'doom
+;; sync' after modifying this file!
+
+;; Some functionality uses this to identify you, e.g. GPG configuration, email
+;; clients, file templates and snippets.
+;; (setq user-full-name "John Doe"
+;; user-mail-address "john@doe.com")
+
+;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
+;; are the three important ones:
+;;
+;; + `doom-font'
+;; + `doom-variable-pitch-font'
+;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
+;; presentations or streaming.
+;;
+;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
+;; font string. You generally only need these two:
+;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light)
+;; doom-variable-pitch-font (font-spec :family "sans" :size 13))
+
+;; There are two ways to load a theme. Both assume the theme is installed and
+;; available. You can either set `doom-theme' or manually load a theme with the
+;; `load-theme' function. This is the default:
+;; (setq doom-theme 'doom-one)
+
+;; If you use `org' and don't want your org files in the default location below,
+;; change `org-directory'. It must be set before org loads!
+;; (setq org-directory "~/org/")
+
+;; 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)
+
+;; Here are some additional functions/macros that could help you configure Doom:
+;;
+;; - `load!' for loading external *.el files relative to this one
+;; - `use-package!' for configuring packages
+;; - `after!' for running code after a package has loaded
+;; - `add-load-path!' for adding directories to the `load-path', relative to
+;; this file. Emacs searches the `load-path' when you load packages with
+;; `require' or `use-package'.
+;; - `map!' for binding new keys
+;;
+;; To get information about any of these functions/macros, move the cursor over
+;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
+;; This will open documentation for it, including demos of how they are used.
+;;
+;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
+;; they are implemented.
+#+end_src
+#+html:
+* Doom modules
+
+#+begin_src emacs-lisp :tangle init.el
+(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 ; 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 ; 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 ; 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 +rust) ; 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 +ranger) ; making dired pretty [functional]
+ electric ; smarter, keyword-based electric-indent
+ ;;ibuffer ; 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 ; 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 ; organize your plain life in plain text
+ +roam2)
+ ;;php ; perl's insecure younger brother
+ ;;plantuml ; diagrams for confusing people more
+ ;;purescript ; javascript, but functional
+ (python ; beautiful is better than ugly
+ +lsp)
+ ;;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 +gmail)
+ ;;notmuch
+ ;;(wanderlust +gmail)
+
+ :app
+ calendar
+ ;;irc ; how neckbeards socialize
+ ;;(rss +org) ; emacs as an RSS reader
+ ;;twitter ; twitter client https://twitter.com/vnought
+
+ :config
+ ;;literate
+ (default +bindings +smartparens))
+#+end_src
+
+#+begin_src emacs-lisp :tangle packages.el
+(package! doct)
+(package! org-super-agenda :recipe
+ (:host github
+ :repo "starr-dusT/org-super-agenda"
+ :branch "master"))
+
+(package! org-ql :recipe
+ (:host github
+ :repo "starr-dusT/org-ql"
+ :branch "master"))
+
+(package! burly.el :recipe
+ (:host github
+ :repo "starr-dusT/burly.el"
+ :branch "master"))
+
+(package! hindent)
+
+(package! beancount-mode :recipe
+ (:host github
+ :repo "beancount/beancount-mode"
+ :branch "main"))
+
+(package! org-chef)
+
+#+end_src
+
+* General Configuration
+** This System
+
+#+begin_src emacs-lisp :tangle "config.el"
+(setq this-system "kestrel")
+(setq all-systems '("kestrel" "basilisk" "adjudicator"))
+(setq only-kestrel '("kestrel"))
+(setq only-basilisk '("basilisk"))
+#+end_src
+
+** Identity
+
+#+begin_src emacs-lisp :tangle "config.el"
+(setq user-full-name "Tyler Starr"
+ user-mail-address "starrtyler88@gmail.com")
+#+end_src
+
+** User Interface
+
+#+begin_src emacs-lisp :tangle "config.el"
+;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
+;; are the three important ones:
+;;
+;; + `doom-font'
+;; + `doom-variable-pitch-font'
+;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
+;; presentations or streaming.
+;;
+;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
+;; font string. You generally only need these two:
+;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light)
+;; doom-variable-pitch-font (font-spec :family "sans" :size 13))
+;; There are two ways to load a theme. Both assume the theme is installed and
+;; available. You can either set `doom-theme' or manually load a theme with the
+;; `load-theme' function. This is the default:
+(setq doom-theme 'doom-gruvbox)
+
+;; 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 'relative)
+#+end_src
+
+** Keybindings
+
+Add all my additional keybinds to Doom's standard SPC lead keymapping system.
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+(map! :leader
+ ; Add to the "open" menu in Doom
+ (:prefix-map ("o" . "open")
+ (:prefix-map ("o" . "org-ql")
+ :desc "views" "v" #'org-ql-view
+ :desc "Weekly Agenda" "w" (cmd! (org-ql-view "Weekly Agenda"))
+ :desc "Tasks to Refile" "r" (cmd! (org-ql-view "Tasks to Refile"))
+ :desc "This Weeks Progress" "p" (cmd! (org-ql-view "This Weeks Progress")))))
+#+end_src
+
+* Org mode
+** Org directories
+
+Define the folder structure for my gtd-esque setup. I don't declaritvely define every file within this folder stucture, but search for .org files within four primary folders: capture, agenda, todo, and note.
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+(setq org-directory "~/documents/org/")
+(setq org-capture (directory-files-recursively
+ (concat org-directory "gtd/capture/") "\.org$"))
+(setq org-agenda (directory-files-recursively
+ (concat org-directory "gtd/agenda/") "\.org$"))
+(setq org-todo (directory-files-recursively
+ (concat org-directory "gtd/todo/") "\.org$"))
+(setq org-agenda-files (append org-capture org-agenda org-todo))
+#+end_src
+
+** Org-Roam
+
+I'm attempting to use [[https://github.com/org-roam/org-roam][Org-Roam]] to implement something of the Zettelkasten method. I know... I know it is the flavor of the month, but I've tried to develop my own notetaking methods and workflow and found myself paralyzed by choice. So I'll give this a try!
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+(setq org-roam-directory (concat org-directory "roam"))
+(setq org-roam-db-location (concat org-directory "roam/org-roam.db"))
+#+end_src
+
+** Get Things Done (GTD)
+*** Tasks
+
+Define the org todo keywords we'll use.
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+(after! org
+ (setq org-todo-keywords
+ '((sequence "TODO(t)" "NEXT(n)" "CHASE(c)" "WIP(p)" "WAIT(w@/!)"
+ "GAVE(g@/!)" "|" "KILL(k@/!)" "DONE(d)")))
+ ; TODO add (1)...(10) numbers for task ordering (replacing "next")
+ (setq org-todo-keyword-faces
+ (quote (("TODO" :foreground "red" :weight bold)
+ ("CHASE" :foreground "red" :weight bold)
+ ("WIP" :foreground "blue" :weight bold)
+ ("NEXT" :foreground "orange" :weight bold)
+ ("GAVE" :foreground "orange" :weight bold)
+ ("WAIT" :foreground "orange" :weight bold)
+ ("KILL" :foreground "forest green" :weight bold)
+ ("DONE" :foreground "forest green" :weight bold))))
+#+end_src
+
+*** Tags
+
+Define the A tier tags.
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-use-tag-inheritance t)
+ (setq org-tags-exclude-from-inheritance '("prj" "prg" "subprj"))
+ (setq org-tag-alist
+ '((:startgroup)
+ ; Put mutually exclusive tags here
+ (:endgroup)
+ ("@home" . ?h)
+ ("@work" . ?w)
+ ("question" . ?q)
+ ("exclude" . ?e)
+ ("prj" . ?p)
+ ("subprj" . ?s)
+ ("prg" . ?P)
+ ("habit" . ?h)
+ ("me" . ?m)
+ ("Aaron" . ?a)
+ ("Landon" . ?l)
+ ("Valerie" . ?v)
+ ("David" . ?d)))
+#+end_src
+
+*** Capture
+**** Capture File Paths
+
+Define the different files that are used for capture. Currently, I use inbox.org for TODO esque items and note.org for notes.
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-capture-todo (concat org-directory "gtd/capture/inbox.org"))
+#+end_src
+
+**** Capture Templates
+
+Setup org-capture templates for nice capturing.
+
+Allowable tags: @work, @home, note, question, habit
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-capture-templates
+ (doct '(("todo" :keys "t"
+ :file org-capture-todo
+ :template ("* TODO %?" "%U"))
+ ("question" :keys "q"
+ :file org-capture-todo
+ :template ("* TODO Find out %? :question:"
+ "%U"))
+ ("habit" :keys "h"
+ :file org-capture-todo
+ :template ("* NEXT %? :habit:exclude:" "%U"
+ "SCHEDULED: %(format-time-string
+ \"%<<%Y-%m-%d %a .+1d/3d>>\")"
+ ":PROPERTIES:" ":STYLE: habit"
+ ":REPEAT_TO_STATE: NEXT" ":END:"))
+ ("meeting" :keys "m"
+ :file org-capture-todo
+ :template ("* NEXT %? :meeting:exclude:"
+ "%U")))))
+#+end_src
+
+*** Refile
+
+Set various refile settings. Mostly stolen from the great http://doc.norang.ca/org-mode.html.
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-refile-targets (quote ((nil :maxlevel . 3)
+ (org-agenda-files :maxlevel . 3))))
+ (advice-add 'org-refile :after 'org-save-all-org-buffers)
+#+end_src
+
+*** Views
+**** Agenda
+
+Currenlty I prefer to used vanilla Org-Agenda to view currently scheduled agenda items without any fancy sorting or anything like that.
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-agenda-start-day "0d")
+ (setq org-agenda-show-future-repeats 'next)
+ (setq org-agenda-custom-commands
+ '(("w" "Super awesome work agenda"
+ ((agenda "" ((org-agenda-overriding-header "")
+ (org-super-agenda-groups
+ '((:name "SCHEDULED"
+ :time-grid t
+ :date today
+ :todo "TODAY"
+ :scheduled today
+ :not (:todo "WIP"))
+ (:name "DUE"
+ :deadline today)
+ (:name "OVERDUE"
+ :deadline past)
+ (:name "DUE SOON"
+ :deadline future)
+ (:name "PAST SCHEDULED"
+ :scheduled past
+ :not (:todo "WIP"))
+ (:name "SCHEDULED SOON"
+ :scheduled future
+ :not (:todo "WIP"))
+ (:discard (:anything t))))))
+ (alltodo "" ((org-agenda-overriding-header "")
+ (org-super-agenda-groups
+ '((:name "TASK TO REFILE"
+ :file-path "gtd/capture")
+ (:name "IN PROGRESS"
+ :todo "WIP")
+ (:name "IMPORTANT"
+ :priority "A")
+ (:name "QUESTION"
+ :tag "question")
+ (:name "STANDALONE TASKS"
+ :and (:todo "TODO"
+ :not (:tag "exclude")))
+ (:name "WAITING"
+ :and (:todo "WAIT"
+ :not (:tag "exclude")))
+ (:name "DELEGATED"
+ :and (:todo "GAVE"
+ :not (:tag "exclude")))
+ (:discard (:anything t))))))))))
+#+end_src
+
+**** Org-ql
+
+Following config items will utilizes the awesome [[https://github.com/alphapapa/org-ql#function-org-ql-block][org-ql]] and [[https://github.com/alphapapa/org-super-agenda][super-org-agenda]] to setup custom views with fancy sorting and insights. More details to follow!
+
+***** Weekly Agenda
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-ql-weekly-agenda
+ (cons "Weekly Agenda"
+ (lambda ()
+ "Open agenda for week."
+ (interactive)
+ (org-agenda nil "t"))))
+#+end_src
+
+***** Tasks to Refile
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-ql-refile-tasks
+ (cons "Tasks to Refile"
+ (lambda ()
+ "Find tasks to refile."
+ (interactive)
+ (org-ql-search (list org-capture-todo)
+ '(or (not (done))
+ (done))
+ :title "Tasks to Refile"
+ :sort '(date priority todo)
+ :super-groups '((:name "Todos"
+ :not (:tag "note")))))))
+#+end_src
+
+***** This Weeks Progress
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-ql-weeks-progress
+ (cons "This Weeks Progress"
+ (lambda ()
+ "launch an agenda-like view at the specified date."
+ (interactive)
+ (let* ((ts (ts-now))
+ (beg-of-week (->> ts
+ (ts-adjust 'day (- (ts-dow (ts-now))))
+ (ts-apply :hour 0 :minute 0 :second 0)))
+ (end-of-week (->> ts
+ (ts-adjust 'day (- 6 (ts-dow (ts-now))))
+ (ts-apply :hour 23 :minute 59 :second 59))))
+ (org-ql-search (org-agenda-files)
+ '(ts-active :from beg-of-week :to end-of-week)
+ :title "Week Overview"
+ :sort '(date priority todo)
+ :super-groups '((:name "Late"
+ :scheduled past
+ :deadline past)
+ (:name "Today"
+ :time-grid t
+ :scheduled today
+ :deadline today)
+ (:name "Coming Up"
+ :scheduled future
+ :deadline future)))))))
+#+end_src
+
+***** Project View
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (defun open-org-ql-project (program)
+ (org-ql-search (list program)
+ '(and (todo)
+ (not (children)))
+ :super-groups '((:auto-outline-path t))))
+
+ (setq org-ql-project-view
+ (cons "Project View"
+ (lambda ()
+ "launch a project view for a given program."
+ (interactive)
+ (ivy-read "Project: "
+ (org-agenda-files)
+ :require-match t
+ :action #'open-org-ql-project))))
+#+end_src
+
+***** Final
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+ (setq org-super-agenda-header-map (make-sparse-keymap))
+ (setq org-ql-views
+ (list org-ql-weekly-agenda
+ org-ql-refile-tasks
+ org-ql-weeks-progress
+ org-ql-project-view))
+ (after! org-agenda
+ (org-super-agenda-mode))
+#+end_src
+
+** Misc small settings
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+(setq org-startup-folded t)
+(setq org-src-preserve-indentation t)) ; Close the after! org expression
+#+end_src
+* Devel
+** Haskell
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+(add-hook 'haskell-mode-hook #'hindent-mode)
+(setq lsp-enable-on-type-formatting nil)
+#+end_src
+
+** Beancount
+
+#+begin_src emacs-lisp :tangle (if (member this-system all-systems) "config.el" "no")
+(defun ts/next-fixme()
+ "Move cursor and delete next FIXME in beancount file."
+ (interactive)
+ (re-search-forward "FIXME" nil t)
+ (delete-char -5))
+
+(defun ts/next-fixme-replace()
+ "Move cursor, delete next FIXME, and insert account in beancount file."
+ (interactive)
+ (ts/next-fixme)
+ (call-interactively 'beancount-insert-account)
+ (call-interactively 'beancount-align-numbers))
+(beancount-mode)
+(define-key beancount-mode-map (kbd "C-c F") #'ts/next-fixme)
+(define-key beancount-mode-map (kbd "C-c f") #'ts/next-fixme-replace)
+#+end_src
diff --git a/.doom.d/init.el b/.doom.d/init.el
new file mode 100644
index 00000000..25c04c11
--- /dev/null
+++ b/.doom.d/init.el
@@ -0,0 +1,192 @@
+;;; init.el -*- lexical-binding: t; -*-
+
+;; DO NOT EDIT THIS FILE DIRECTLY
+;; This is a file generated from a literate programing source file located at
+;; https://github.com/starr-dusT/dotfiles/blob/master/.doom.d/doomed.org
+;; You should make any changes there and regenerate it from Emacs org-mode
+;; using org-babel-tangle (C-c C-v 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 ; 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 ; 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 ; 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 +rust) ; 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 +ranger) ; making dired pretty [functional]
+ electric ; smarter, keyword-based electric-indent
+ ;;ibuffer ; 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 ; 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 ; organize your plain life in plain text
+ +roam2)
+ ;;php ; perl's insecure younger brother
+ ;;plantuml ; diagrams for confusing people more
+ ;;purescript ; javascript, but functional
+ (python ; beautiful is better than ugly
+ +lsp)
+ ;;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 +gmail)
+ ;;notmuch
+ ;;(wanderlust +gmail)
+
+ :app
+ calendar
+ ;;irc ; how neckbeards socialize
+ ;;(rss +org) ; emacs as an RSS reader
+ ;;twitter ; twitter client https://twitter.com/vnought
+
+ :config
+ ;;literate
+ (default +bindings +smartparens))
diff --git a/.doom.d/packages.el b/.doom.d/packages.el
new file mode 100644
index 00000000..4014c0ee
--- /dev/null
+++ b/.doom.d/packages.el
@@ -0,0 +1,79 @@
+;; -*- no-byte-compile: t; -*-
+;;; $DOOMDIR/packages.el
+
+;; DO NOT EDIT THIS FILE DIRECTLY
+;; This is a file generated from a literate programing source file located at
+;; https://github.com/starr-dusT/dotfiles/blob/master/.doom.d/doomed.org
+;; You should make any changes there and regenerate it from Emacs org-mode
+;; using org-babel-tangle (C-c C-v t)
+
+;; 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! doct)
+(package! org-super-agenda :recipe
+ (:host github
+ :repo "starr-dusT/org-super-agenda"
+ :branch "master"))
+
+(package! org-ql :recipe
+ (:host github
+ :repo "starr-dusT/org-ql"
+ :branch "master"))
+
+(package! burly.el :recipe
+ (:host github
+ :repo "starr-dusT/burly.el"
+ :branch "master"))
+
+(package! hindent)
+
+(package! beancount-mode :recipe
+ (:host github
+ :repo "beancount/beancount-mode"
+ :branch "main"))
+
+(package! org-chef)
diff --git a/.doom.d/readme.md b/.doom.d/readme.md
new file mode 100644
index 00000000..a5ba3c48
--- /dev/null
+++ b/.doom.d/readme.md
@@ -0,0 +1,4 @@
+# Doomed
+> You are doomed to the infinite time sink of Emacs.
+
+My personal config of [hlissner's](https://github.com/hlissner) awesome [Doom Emacs](https://github.com/hlissner/doom-emacs). My config is written in a Literate style so checkout [doomed.org](https://github.com/starr-dusT/doomed/blob/master/doomed.org).
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 063c241d..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,48 +0,0 @@
-# ignore all files initially
-/*
-
-### track the files below ###
-
-# ~/
-!.gitignore
-!.bashrc
-!.imwheelrc
-!.xinitrc
-!/.icons
-!/.themes
-
-## ~/.xmonad
-!/.xmonad
-/.xmonad/*
-!/.xmonad/xmonad.hs
-!/.xmonad/xmonad.org
-
-## ~/.config
-!/.config
-/.config/*
-!/.config/xmobar
-!/.config/alacritty
-!/.config/fish
-!/.config/mpd
-!/.config/ncmpcpp
-!/.config/rofi
-!/.config/herbstluftwm
-
-### ~/.config/retroarch
-!/.config/retroarch
-/.config/retroarch/*
-!/.config/retroarch/retroarch.cfg
-
-### ~/.config/retroarch
-!/.config/qtile
-/.config/qtile/__pycache__
-/.config/qtile/settings/__pycache__
-
-### ~/media/pictures/wallpapers/tracked_wallpapers
-!/media/
-/media/*
-!/media/pictures
-/media/pictures/*
-!/media/pictures/wallpapers
-/media/pictures/wallpapers/*
-!/media/pictures/wallpapers/tracked_wallpapers
diff --git a/.xinitrc b/.xinitrc
index 6f0ffdfb..7f77025b 100644
--- a/.xinitrc
+++ b/.xinitrc
@@ -1,2 +1 @@
exec dbus-launch xmonad
-#exec qtile start
diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs
index 9c8e5dec..e3a5a1f8 100644
--- a/.xmonad/xmonad.hs
+++ b/.xmonad/xmonad.hs
@@ -24,6 +24,7 @@ import XMonad.Util.Run (spawnPipe)
import XMonad.Util.SpawnOnce
import XMonad.Util.EZConfig (additionalKeysP, removeKeys)
import XMonad.Util.NamedScratchpad
+import XMonad.Util.ClickableWorkspaces (clickablePP)
-- Actions
import XMonad.Actions.DynamicProjects (Project (..), dynamicProjects, switchProjectPrompt, shiftToProjectPrompt, switchProject, shiftToProject)
import XMonad.Actions.UpdatePointer
@@ -41,9 +42,9 @@ myFocusFollowsMouse = True
myModMask :: KeyMask
myModMask = mod4Mask
-- Define volume keys and commands
-lowerVolumeCmd = "pactl set-sink-volume @DEFAULT_SINK@ -2%"
-raiseVolumeCmd = "pactl set-sink-volume @DEFAULT_SINK@ +2%"
-muteVolumeCmd = "pactl set-sink-mute @DEFAULT_SINK@ toggle"
+lowerVolumeCmd = "pulseaudio-ctl down 2"
+raiseVolumeCmd = "pulseaudio-ctl up 2"
+muteVolumeCmd = "pulseaudio-ctl mute"
-- Count windows
windowCount :: X (Maybe String)
windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset
@@ -158,6 +159,7 @@ myManageHook = composeAll
className =? "Gimp" --> doFullFloat,
className =? "mpv" --> doRectFloat (W.RationalRect 0.55 0.05 0.4 0.4),
className =? "Steam" --> doFullFloat,
+ className =? "Superslicer" --> doFullFloat,
namedScratchpadManageHook myScratchPads]
-- Set dynamic display modes
myEventHook :: Event -> X All
@@ -190,7 +192,8 @@ myKeys home =
, ("M-" , spawn "alacritty")
-- Spawn rofi drun
- , ("M-w" , spawn "rofi -show run -theme gruvbox-dark-soft")
+ , ("M-w" , spawn "rofi -show drun -theme gruvbox-dark-soft -show-icons")
+ , ("M-S-w" , spawn "rofi -show run -theme gruvbox-dark-soft")
--------------------------------------------------
-- Scratchpads
@@ -210,6 +213,8 @@ myKeys home =
--------------------------------------------------
-- Dynamic Projects
--------------------------------------------------
+ --, ("M-p s", switchProjectPrompt projectsTheme)
+ --, ("M-p S", shiftToProjectPrompt projectsTheme)
, ("M-p d", switchProject (projects !! 0))
, ("M-p S-d", shiftToProject (projects !! 0))
, ("M-p g", switchProject (projects !! 1))
@@ -240,6 +245,10 @@ myKeys home =
, ("M-x g", spawn "gamemoded -r")
-- Stop gamemode
, ("M-x S-g", spawn "killall gamemoded")
+ -- Start wireguard
+ , ("M-x w", spawn "pkexec sh -c 'wg-quick up wg0 && mount -a'")
+ -- Stop wireguard
+ , ("M-x S-w", spawn "pkexec sh -c 'umount /run/media/engi && wg-quick down wg0'")
-- mute overall volume
, ("", spawn muteVolumeCmd)
-- raise overall volume
@@ -268,7 +277,7 @@ main = do
[("M-", windowGo),
("M-S-", windowSwap)]
False
- $ additionalNav2DKeysP ("", ",", "", ".")
+ $ additionalNav2DKeysP ("", "u", "", "i")
[("M-", screenGo),
("M-S-", screenSwap)]
False
@@ -288,6 +297,8 @@ main = do
manageHook = myManageHook,
handleEventHook = myEventHook,
logHook = workspaceHistoryHook <+> myLogHook <+> dynamicLogWithPP xmobarPP
+
+
{ ppOutput = \x -> hPutStrLn xmproc0 x
, ppCurrent = xmobarColor "#b8bb26" "" . wrap "[" "]" -- Current workspace in xmobar
, ppVisible = xmobarColor "#83a598" "" -- Visible but not current workspace
diff --git a/.xmonad/xmonad.org b/.xmonad/xmonad.org
index 3d1f0b3d..638dd6f3 100644
--- a/.xmonad/xmonad.org
+++ b/.xmonad/xmonad.org
@@ -33,6 +33,7 @@ import XMonad.Util.Run (spawnPipe)
import XMonad.Util.SpawnOnce
import XMonad.Util.EZConfig (additionalKeysP, removeKeys)
import XMonad.Util.NamedScratchpad
+import XMonad.Util.ClickableWorkspaces (clickablePP)
-- Actions
import XMonad.Actions.DynamicProjects (Project (..), dynamicProjects, switchProjectPrompt, shiftToProjectPrompt, switchProject, shiftToProject)
import XMonad.Actions.UpdatePointer
@@ -191,6 +192,7 @@ myManageHook = composeAll
className =? "Gimp" --> doFullFloat,
className =? "mpv" --> doRectFloat (W.RationalRect 0.55 0.05 0.4 0.4),
className =? "Steam" --> doFullFloat,
+ className =? "Superslicer" --> doFullFloat,
namedScratchpadManageHook myScratchPads]
-- Set dynamic display modes
myEventHook :: Event -> X All
@@ -227,7 +229,8 @@ myKeys home =
, ("M-" , spawn "alacritty")
-- Spawn rofi drun
- , ("M-w" , spawn "rofi -show run -theme gruvbox-dark-soft")
+ , ("M-w" , spawn "rofi -show drun -theme gruvbox-dark-soft -show-icons")
+ , ("M-S-w" , spawn "rofi -show run -theme gruvbox-dark-soft")
--------------------------------------------------
-- Scratchpads
@@ -279,6 +282,10 @@ myKeys home =
, ("M-x g", spawn "gamemoded -r")
-- Stop gamemode
, ("M-x S-g", spawn "killall gamemoded")
+ -- Start wireguard
+ , ("M-x w", spawn "pkexec sh -c 'wg-quick up wg0 && mount -a'")
+ -- Stop wireguard
+ , ("M-x S-w", spawn "pkexec sh -c 'umount /run/media/engi && wg-quick down wg0'")
-- mute overall volume
, ("", spawn muteVolumeCmd)
-- raise overall volume
@@ -311,7 +318,7 @@ main = do
[("M-", windowGo),
("M-S-", windowSwap)]
False
- $ additionalNav2DKeysP ("", ",", "", ".")
+ $ additionalNav2DKeysP ("", "u", "", "i")
[("M-", screenGo),
("M-S-", screenSwap)]
False
@@ -331,6 +338,8 @@ main = do
manageHook = myManageHook,
handleEventHook = myEventHook,
logHook = workspaceHistoryHook <+> myLogHook <+> dynamicLogWithPP xmobarPP
+
+
{ ppOutput = \x -> hPutStrLn xmproc0 x
, ppCurrent = xmobarColor "#b8bb26" "" . wrap "[" "]" -- Current workspace in xmobar
, ppVisible = xmobarColor "#83a598" "" -- Visible but not current workspace