Doom Emacs Setup
Last Updated: March 6th, 2021
Doom Emacs is for people who like Vim but in reality want to get things done. Emacs, but with extra Vim keybindings, oh and configured to work out of the box.
Some people may want to show and compare versions of Emacs or Doom Emacs and I've given a way that's pretty simple. Below I've listed my configs for Doom Emacs so others can see what some people choose, I'll even explain why.
I have not gotten around to writing my own elisp extensions for emacs yet, but I would really like to create one for the Crystal REPL or for the Amber Framework + Slang.
If you want to see what setup I use this on check this out.
If you want to learn more about Emacs then check checkout my emacs wiki entry.
config.el
I have my config setup to reflect my workflow and such. I keep notes in a certain place as well as my code and LaTeX projects.
(load! "custom.el") ; Custom theme stuff (load! "+bindings.el") ; Load my custom key bindings bindings (load! "+org.el") ; Load my custom org settings ;; (load! "+irc.el") ; Load my irc settings for Circe settings ;; (load! "+rss.el") ; Load my RSS Feeds settings ;; These don't follow the typical file convention (projectile-add-known-project "$PAPERS") ; My LaTeX Writings (projectile-add-known-project "$NOTES") ; My Org and Markdown Notes ;; Settings for basic Doom Emacs things (setq projectile-project-search-path ; All Coding related Projects denoted by the $CODE evironment variable. Preferably a XDG directory suck as `$HOME/.local/code/` '( "$CODE/asm/" ; All Assembly Projects "$CODE/C/" ; All C Projects "$CODE/lisp/common-lisp/" ; All Common Lisp Related Projects "$CODE/lisp/elisp/" ; All Emacs Lisp Related Projects "$CODE/lisp/scheme/" ; All Scheme Related Projects "$CODE/crystal/" ; All Crystal Projects "$CODE/misc/" ; Misc. Projects such as snippets and small tests "$CODE/php/" ; All PHP Projects "$CODE/shell/" ; All shell scripts "$CODE/tex/") ; All TeX/LaTeX Projects projectile-sort-order 'recentf ; Sort projects by recently opened and worked on display-line-numbers-type t ; I like seeing line numbers, what can I say? org-directory "$NOTES/org/") ; Org Directory, in the .notes dir where I like all my notes ;; Emacs fonts (setq doom-font (font-spec :family "Liberation Mono" ; Linux Liberation Mono Font :size 16)) ; Font-Size ;; Aspell/ispell stuff to fix errors for some (setq ispell-program-name "aspell" ispell-dictionary "english") ;; GNU TRAMP Configuration (setq tramp-default-method "ssh" ; Default to SSH, that's what I primarily use tramp-terminal-type "tramp" ; Let other terminal know what client I'm connecting with (might need to configure server) tramp-auto-save-directory "$XDG_CACHE_HOME/tramp/" ; Send Tramp info into XDG Cache directory on machine tramp-chunksize 2000) ; Resonable Chunk size for speed and disk space in mind ;;; Activate Packages defined in packages.el (use-package doom-themes ; Doom themes, so I can have my nice themes :) :config (setq doom-themes-enable-bold t ; if nil, bold is universally disabled doom-themes-enable-italic t) ; if nil, italics is universally disabled (load-theme 'doom-spacegrey t) (doom-themes-visual-bell-config) (doom-themes-neotree-config) (doom-themes-treemacs-config) (doom-themes-org-config))
init.el
For my init, I setup just what I need and I try to disable what I don't utilize. For a full list refer to the repository.
(doom! :completion (company +auto) ; the ultimate code completion backend (ivy ; a search engine for love and +fuzzy +icons) :ui doom ; what makes DOOM look the way it does doom-quit ; DOOM quit-message prompts when you quit Emacs doom-dashboard ; a nifty splash screen for Emacs hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW modeline ; snazzy, Atom-inspired modeline, plus API nav-flash ; blink the current line after jumping ophints ; highlight the region an operation acts on (popup +all +defaults) ; tame sudden yet inevitable temporary windows unicode ; extended unicode support for various languages vc-gutter ; vcs diff in the fringe window-select ; visually switch windows workspaces ; tab emulation, persistence & separate workspaces :editor (evil +everywhere) ; come to the dark side, we have cookies file-templates ; auto-snippets for empty files fold ; (nigh) universal code folding multiple-cursors ; editing in many places at once 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 +icons) ; making dired pretty [functional] electric ; smarter, keyword-based electric-indent ibuffer ; interactive buffer management vc ; version-control and Emacs, sitting in a tree undo ; persistent, smarter undo for your inevitable mistakes :term eshell ; the elisp shell that works everywhere :checkers syntax ; tasing you for every semicolon you forget (spell +everywhere) ; tasing you for misspelling misspelling grammar ; tasing grammar mistake every you make :tools editorconfig ; let someone else argue about tabs vs spaces (eval +overlay) ; run code, run (also, repls) (lookup +dictionary +docset) ; navigate your code and its documentation magit ; a git porcelain for Emacs (lsp +peek) make ; run make tasks from Emacs pdf ; pdf enhancements gist ; interacting with github gists :lang cc ; C/C++/Obj-C madness common-lisp ; if you've seen one lisp, you've seen them all crystal ; ruby at the speed of c data ; config/data formats emacs-lisp ; drown in parentheses (latex ; writing papers in Emacs has never been so fun +fold +lsp) markdown ; writing docs for people to ignore (org ; de-facto note taking system for emacs +dragndrop +gnuplot +roam ; org-roam support +pandoc +pretty +present) ; organize your plain life in plain text (php +lsp) ; perl's insecure younger brother scheme ; a fully conniving family of lisps (sh +lsp) ; she sells {ba,z,fi}sh shells on the C xor (web +lsp) ; the tubes (yaml +lsp) ; yaml (yml) support for emacs :config ;;literate (default +bindings +smartparens) )