Files
dotfiles/Doom/.config/doom/org/config.org
dx 9930e9ef4f -use package hooks
This was a stupid idea that does nothing lol
2020-07-20 21:14:57 +01:00

9.9 KiB
Raw Blame History

Oreodave's Emacs configuration

Preclude

  • This is my Doom Emacs configuration.
  • Use it for most of my code editing and development needs.
  • Incredibly versatile tool in my inventory.

Initial setup

Doom Variables

  • Good font choices:

    • Hack
    • Source Code Pro/Variable
    • IBM Plex Mono
    • Space Mono
    • Z003 if I'm feeling fancy (▀̿Ĺ̯▀̿̿)
(after! core-keybinds
  (map! :leader "," nil)
  (setq doom-themes-enable-italic nil
        doom-themes-enable-bold t
        doom-theme 'derivative-new-molokai
        doom-font (font-spec :family "Source Code Pro" :size 15)))

Other variables

Some quality of life things and others that I couldn't really put in one category

  • Using line-numbers that are relative now instead of nothing.
  • Set org directory
  • Add libgen to search providers
(setq completion-ignore-case t
  truncate-lines t
  display-line-numbers-type t
  bookmark-default-file (expand-file-name (concat doom-private-dir "bookmarks")))
(setq-default frame-title-format '("%b - Emacs"))
(add-to-list 'default-frame-alist '(alpha . 90))
(cl-pushnew '("Libgen" "http://gen.lib.rus.ec/search.php?req=%s") +lookup-provider-url-alist :key #'car :test 'string=)

HACK: Load org mode again?

(load (expand-file-name (concat user-emacs-directory "modules/lang/org/config.el")))

Package Configuration

Configuration for or based heavily around specific packages that I find very important

Modeline

(setq-default mode-line-format (list "%l:%c \t %p \t %+%b(" '(:eval (format "%s" major-mode)) ") \t %I \t" vc-mode mode-line-end-spaces))

DAP

Function

First to setup is a routine for setting up all the dap-panes for debugging. Easier to do than just running all those functions manually

  • Routine sets up the panes that I like to use, instead of M-x'ing it
  • <SPC>cD starts up the routine
(after! dap-mode
  (defun dx:debug ()
    (interactive)
    (dap-ui-mode)
    (dap-ui-locals)
    (dap-ui-sessions)))

Keybind

(map!
 :after dap-mode
 :leader
 :desc "Start debugging setup" "cD" #'dx:debug)

Spelling checker

Keybinds to org-mode for flyspell package

(map!
 :after (flyspell org)
 :localleader
 :map org-mode-map
 :prefix "w"
 :desc "Correct current word" "c" #'flyspell-correct-at-point
 :desc "Autocorrect word"     "a" #'flyspell-auto-correct-word
 :desc "Goto next error"      "w" #'flyspell-goto-next-error)

Projectile

Add CMakeLists.txt to projectile-project-roots.

(after! projectile
  (cl-pushnew "CMakeLists.txt" projectile-project-root-files :test 'string=)
  (setq projectile-tags-command
        "ctags -e -R --exclude=dist --exclude=.ccls --exclude=.ccls-cache"))

Prettify symbols

Configuration for the module (pretty-code).

Setup symbols

Some symbols aren't present in the current doom version, or my fonts are screwing up, so I wrote them here. Maybe a bit of a bandage over broken glass, but at least it's something.

(setq +pretty-code-symbols
      '(:name "»"
        :src_block "»"
        :src_block_end "«"
        :quote "“"
        :quote_end "”"
        :lambda "λ"
        :def "ƒ"
        :composition "∘"
        :map "↦"
        :null "∅"
        :true "𝕋"
        :false "𝔽"
        :int ""
        :float ""
        :str "𝕊"
        :bool "𝔹"
        :not "¬"
        :in "∈"
        :not-in "∉"
        :and "∧"
        :or ""
        :for "∀"
        :some "∃"
        :return "⟼"
        :yield "⟻"
        :tuple "⨂"
        :pipe "|"
        :dot "•"))

The 'x' symbol in the +pretty-code-fira-code-font-ligatures is annoying, and unneeded. So I remove it.

(assoc-delete-all "x" +pretty-code-fira-code-font-ligatures #'string=)

Pretty symbols

Setup pretty symbols specifically for C++. I import the string type via `using std::string` which isn't supported in standard doom so I added support for it as well.

(after! cc-mode
  (set-pretty-symbols!
    '(c-mode c++-mode)
    :return "return"
    :or "||"
    :and "&&"
    :not "!"
    :bool "bool"
    :str "string"
    :str "std::string"
    :float "float"
    :int "int"
    :false "false"
    :true "true"
    :null "nullptr"))

Calc

Configuration

(use-package! calc
  :config
  (setq calc-angle-mode 'rad)
  (map!
   :leader
   :desc "Calc" ":" #'calc))

Dired and ranger

I like doing shell comamnds from dired, but I don't want Emacs to hang when doing them. So, as '!' is a common use command and "&" is the async comamnd, I'll just switcheroo the "!" and "&" for their designated commands.

(map!
 :map dired-mode-map
 :n "!" #'dired-do-async-shell-command
 :n "&" #'dired-do-shell-command)

Compilation

Add keybind to recompile (inside the buffer)

(map!
 (:map 'compilation-mode-map
  :n "u" #'recompile))

Company

(add-hook
 'company-mode-hook
 #'(lambda () (setq company-frontends '(company-preview-frontend company-pseudo-tooltip-frontend))))

Language Configuration

Configuration for various languages which I feel can be useful

C-style languages

Configuration for C and C++. Emacs doesn't have the full range of styles that I want, so lemme just do it myself.

(after! cc-mode
  (c-add-style
   "user"
   '((c-basic-offset . 2)
     (c-comment-only-line-offset . 0)
     (c-hanging-braces-alist (brace-list-open)
                             (brace-entry-open)
                             (substatement-open after)
                             (block-close . c-snug-do-while)
                             (arglist-cont-nonempty))
     (c-cleanup-list brace-else-brace)
     (c-offsets-alist
      (statement-block-intro . +)
      (knr-argdecl-intro . 0)
      (substatement-open . 0)
      (substatement-label . 0)
      (access-label . 0)
      (label . 0)
      (statement-cont . +))))
  (setq c-default-style "user"))

Python

Configuration for the Python language in doom

Set interpreter and flycheck to Python 3

I do python development for Python3 so I need to set the flycheck python checker, as well as the interpreter, to be Python3

(after! python
  (setq python-version-checked t)
  (setq python-python-command "python3")
  (setq python-shell-interpreter "python3")
  (setq flycheck-python-pycompile-executable "python3"))

Map to python-mode-map

Most of my python work is in scripts or ideas, so I don't need extensive testing utilities or anything like that I adhere greatly to the REPL in python, so I need access to it often.

(after! python
  (map! ; Python keybinds
   :map python-mode-map
   :localleader
   :desc "Start python minor" "c" #'run-python
   :desc "Format buffer"      "=" #'py-yapf-buffer
   (:prefix "s"
    :desc "Send region REPL" "r" #'python-shell-send-region
    :desc "Send buffer"      "b" #'python-shell-send-buffer
    :desc "Send function"    "f" #'python-shell-send-defun)))

Typescript

  • Typescript (in my opinion) should be indented by 2
  • Setup the LSP server on the lsp-language-id-config in case it hasn't already
(after! typescript-mode
  (setq typescript-indent-level 2)
  (setq tide-format-options '(:indentSize 2 :tabSize 2))
  (after! lsp
    (cl-pushnew '(typescript-mode . "typescript") lsp-language-id-configuration :key #'car)
    (lsp-register-client
     (make-lsp-client
      :new-connection (lsp-stdio-connection "typescript-language-server --stdio")
      :major-modes '(typescript-mode)
      :server-id 'typescript))))

Org

Org configuration to maximise org workflow.

Org variables

Setup the agenda-files and the org-directory.

(after! org
  (add-hook 'org-mode-hook #'visual-line-mode)
  (add-hook 'org-mode-hook #'org-toggle-latex-fragment)
  (setq org-directory "~/Text"
        org-agenda-files '("~/Text/")
        org-src-window-setup 'split-window-right
        org-superstar-headline-bullets-list '("◉" "‣" "⧈" "⬠")
        org-log-repeat 'note))

Fragtog

(use-package! org-fragtog
  :config
  (add-hook 'org-mode-hook #'org-fragtog-mode))

Thesaurus

Powerthesaurus installation, added a keybind in org-mode for looking up words.

(use-package! powerthesaurus
  :after-call (org-mode)
  :defer-incrementally (org)
  :config
  (map!
   :localleader
   :map org-mode-map
   :prefix "w"
   :desc "Thesaurus" "t" #'powerthesaurus-lookup-word-at-point))

Powerthesaurus for thesaurus on writer files

Org keymap

  • I like using org-export often, so bind it to a primary bind.
  • Loading latex fragments is nice
(map! ; Org keybinds
 :after org
 :map org-mode-map
 :localleader
 :desc "Org dispatch"        "e" #'org-export-dispatch
 :desc "Org LaTeX"           "E" #'org-latex-export-as-latex)

Haskell

Setup repl binds for Haskell

(map!
 :after haskell-mode
 :map haskell-mode-map
 :localleader
 "l" #'haskell-process-load-file
 "r" #'haskell-process-reload
 "o" #'haskell-process-start)

Sxhkd

Define a major-mode for sxhkd config files.

(define-generic-mode sxhkd-mode
  '(?#)
  '("alt" "Escape" "super" "bspc" "ctrl" "space" "shift" "hyper" "XF86*")
  '("{" "}")
  '("sxhkdrc")
  nil
  "Simple mode for sxhkdrc files.")

Key-map

General keymap, load the keymap elisp file. This elisp file is basically two big maps, which are better explained in that document than this one. Furthermore, debugging and working on that document is something I do so often, it's just better to do it in an Elisp file than a org file.

(load (concat doom-private-dir "+keymap.el"))