Doom Emacs Setup

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.


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 other config files
(load! "+bindings.el")                                   ;Load my custom key bindings

;;Other Projectile packages outside
(projectile-add-known-project "~/writings")              ;My LaTeX Writings
(projectile-add-known-project "~/.notes")                ;My Org and Markdown Notes

;;Setq stuff defined by Doom and such
(setq projectile-project-search-path '(                  ;All the code related stuff that I work on
                                       "~/Code/crystal"  ;All Crystal Projects
                                       "~/Code/_sites/"  ;All SSG Sites
                                       "~/Code/C")       ;All C Projects
      projectile-sort-order 'recentf                     ;Sort projects by recently opened and worked on
      ;;doom-theme "doom-one"                            ;Customize theme here, I just leave as default
      doom-font (font-spec :family "monospace" :size 13) ;How I like my fonts
      org-directory "~/.notes/org/")                     ;Org Directory, in the .notes dir where I like all my notes

;; Activate Packages defined in packages.el
(def-package! rtags)                                     ;For C stuff and clang


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! :input

       company             ; the ultimate code completion backend
        +icons)            ; a search engine for love and life

       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
       hl-todo             ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
       modeline            ; snazzy, Atom-inspired modeline, plus API
       nav-flash           ; blink the current line after jumping
       neotree             ; a project drawer, like NERDTree for vim
       ophints             ; highlight the region an operation acts on
       (popup              ; tame sudden yet inevitable temporary windows
        +all               ; catch all popups that start with an asterix
        +defaults)         ; default popup rules
       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

       (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

        +icons)            ; making dired pretty [functional]
       electric            ; smarter, keyword-based electric-indent
       ibuffer             ; interactive buffer management
       vc                  ; version-control and Emacs, sitting in a tree

       term                ; terminals in Emacs

       syntax              ; tasing you for every semicolon you forget
       spell               ; tasing you for misspelling mispelling
       grammar             ; tasing grammar mistake every you make

       editorconfig        ; let someone else argue about tabs vs spaces
       (eval +overlay)     ; run code, run (also, repls)
       (lookup             ; helps you navigate your code and documentation
        +docsets)          ; ...or in Dash docsets locally
       magit               ; a git porcelain for Emacs
       make                ; run make tasks from Emacs
       pdf                 ; pdf enhancements

       cc                  ; C/C++/Obj-C madness
       crystal             ; ruby at the speed of c
       data                ; config/data formats
       emacs-lisp          ; drown in parentheses
       javascript          ; all(hope(abandon(ye(who(enter(here))))))
       latex               ; writing papers in Emacs has never been so fun
       markdown            ; writing docs for people to ignore
       (org                ; organize your plain life in plain text
        +dragndrop         ; drag & drop files/images into org buffers
        +hugo              ; use Emacs for hugo blogging
        +pandoc            ; export-with-pandoc support
        +present)          ; using org-mode for presentations
       php                 ; perl's insecure younger brother
       sh                  ; she sells {ba,z,fi}sh shells on the C xor

       (default +bindings +smartparens)