Skip to content

jclasley/doom-private-config

Repository files navigation

Table of Contents

  1. General
    1. Doom doctor recommendations
    2. More line spacing
    3. Always show perspectives in minibuffer
  2. Convenience
    1. Global keybindings, regardless of mode
    2. Normal mode keybindings
    3. Popper
  3. Org
    1. Variables
    2. Open org agenda in a popup buffer window
    3. org-super-agenda-mode
    4. org roam
      1. Directory
      2. Capture templates
    5. Capture templates
  4. Language-specific
    1. Go
      1. hooks
    2. TSX
      1. Prettier
  5. K8s helm
  6. Treesitter
  7. Hacks
    1. Remove file watches
  8. Treemacs theme

General

Doom doctor recommendations

(setq shell-file-name (executable-find "bash")) ;; emacs
(setq-default vterm-shell (executable-find "fish")) ;; vterm

More line spacing

(setq line-spacing 2)

Always show perspectives in minibuffer

(after! persp-mode
  (defun display-workspaces-in-minibuffer ()
    (with-current-buffer " *Minibuf-0*"
      (erase-buffer)
      (insert (+workspace--tabline))))
  (run-with-idle-timer 1 t #'display-workspaces-in-minibuffer)
  (+workspace/display))

Convenience

Global keybindings, regardless of mode

;; keybindings
(map!
 "C-c o" #'lsp-ui-doc-glance
 "C-c i" #'lsp-ui-imenu
 "C-c t" #'lsp-ui-imenu--refresh
 "s-[" #'winner-undo
 "s-]" #'winner-redo
 "M-s-<left>" #'winner-undo
 "M-s-<right>" #'winner-redo)

Normal mode keybindings

Convenience macro to allow for multiply normal mode maps in a row

(defmacro normal-map! (&rest args)
  "ALIST of form (keybinding . func)"
  (let (value)
    (append (list 'map!) (dolist (arg args value)
                           (setq value (append `(:n ,(car arg) ,(cdr arg)) value))))))

Function to highlight everything on this line and jump to the matching end brace

;; visual mode select block
(defun visual-select-block ()
  (interactive)
  (evil-visual-line)
  (evil-end-of-line)
  (evil-jump-item))

;; normal mode maps
(normal-map!
 ("SPC v" . #'visual-select-block)
 ("SPC p ~" . #'project-dired)
 ("SPC o c" . #'cfw:open-org-calendar)
 ("] e" . #'flycheck-next-error)
 ("[ e" . #'flycheck-previous-error)
 ("SPC c p" . #'flycheck-projectile-list-errors)
 ("SPC b Y" . #'centaur-tabs--copy-file-name-to-clipboard)
 ("SPC f n" . #'treemacs-create-file))

Popper

reference

(use-package! popper
  :bind (("C-`" . popper-toggle)
         ("s-." . popper-cycle)
         ("C-<escape>" . popper-kill-latest-popup))
  :init ;; set certain buffers to be automatically popups
  (setq popper-reference-buffers
        '("\\*Ibuffer\\*"
          "\\*Messages\\*"
          "\\*info\\*"
          "\\*helpful.*"
          vterm-mode))
  :config
  (popper-mode +1))

Custom function to group popups based on workspace

(defun popper-group-by-workspace ()
  (+workspace-current-name))

(setq popper-group-function #'popper-group-by-workspace)

Org

Variables

Used later on so have to be defined now

(setq +org-capture-baby-file "baby.org"
      +org-chores-file "~/org/chores.org")

The doom TODO statuses are suuuuper overtuned – let’s fix them Also, going to make it so that they will work better with org-super-agenda-mode

org-todo-keywords reference org-keywords special characters

(setq my/org-todo-keywords '(
                             ("TODO(t)" . org-todo)
                             ("NEXT(n)" .  (:foreground "#34ebd8" :weight bold :slant italic))
                             ("PROG(p!)" . +org-todo-active)
                             ("HOLD(h@)" . (:background "orange" :foreground "white")) ; in progress but held up
                             "|"
                             ("DONE(d!)" . org-done)
                             ("WONT(w@/!)" . +org-todo-cancel)))


;; have to set it after org loads
(after! org
  ;; keywords are the keys of the alist of ~my/org-todo-keywords~
  (setq org-todo-keywords (list (append '(sequence)
                                        (seq-map #'(lambda (elt)
                                                     (if (listp elt)
                                                         (car elt)
                                                       elt))
                                                 my/org-todo-keywords))))

  (setq org-todo-keyword-faces (let ((f (lambda (elt)
                                         (if (listp elt)
                                             `(
                                              ,(seq-take-while #'(lambda (elt) (not (equal ?\( elt))) (car elt))
                                              .
                                              ,(cdr elt))
                                           elt)
                                         )))
                                 (seq-map #'(lambda (elt) (funcall f elt)) my/org-todo-keywords)))
)

Open org agenda in a popup buffer window

I wrote this function myself! Super proud

(defun org-agenda-popup ()
  (interactive)
  (let ((buf (get-buffer-create "*Org Agenda*"))
        (org-agenda-start-day nil)
        (org-agenda-span 1))
    (display-buffer buf '(display-buffer-pop-up-window . ((dedicated . t) (window-width . 80))))
    (org-agenda nil "c")))

(map! :n "SPC w a" #'org-agenda-popup)

org-super-agenda-mode

org-super-agenda-mode gives a much prettier, organized agenda

(org-super-agenda-mode)
(setq org-agenda-custom-commands
      '(("c" "Super agenda"
         ((agenda "" ((org-agenda-overriding-header "")
                      (org-super-agenda-groups
                       '((:log t)
                         (:name "Today"
                          :time-grid t
                          :date today)
                         ))))
          (alltodo "" ((org-agenda-overriding-header "")
                       (org-super-agenda-groups
                        `((:log t)
                          (:name "Important"
                           :priority "A"
                           :face (:weight ultra-bold :background "blue")
                           :order 1)
                         (:name "Next"
                                :todo "NEXT"
                                :order 0)
                          (:name "Daphne"
                           :tag "daphne")
                          (:name "Chores"
                           :file-path ,(expand-file-name +org-chores-file) ; back-quoted list allows evaluation with `,`
                           :face (:slant italic)
                           :order 2)
                          (:name "Can wait"
                           :priority "C")
                          (:name "If time"
                           :priority "B")))))))))

org roam

Directory

(setq org-roam-directory "~/org-roam")

Capture templates

(setq org-roam-dailies-capture-templates
      '(("d" "default" entry "* %<%I:%M %p>: %?"
         :if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n")
         :unnarrowed t
         :empty-lines-before 1)))

(setq org-roam-capture-templates '(("c" "default" plain "%?"
                                    :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                                                       "#+title: ${title}\n")
                                    :unnarrowed t)
                                   ("n" "node" entry "* %?"
                                    :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                                                       "#+title: ${title}\n")
                                    :empty-lines-before 1)))

Capture templates

(after! org
  (setq +org-capture-agenda-file "~/org/agenda.org")
  (setq org-capture-templates (append '(
                                        ("a" "Agenda")
                                        ("ad" "Deadline" entry
                                         (file+olp+datetree +org-capture-agenda-file)
                                         "* %?\nDEADLINE: %^{at}t")
                                        ("t" "Todos")
                                        ("tt" "project todo" entry
                                         (file "~/org/projects.org")
                                         "* TODO %?\n%i")
                                        ("tn" "today" entry
                                         (file+headline "~/org/todo.org" "Todos")
                                         "* TODO %?\n%t")
                                        ("td" "deadline" entry
                                         (file+headline "~/org/todo.org" "Todos")
                                         "* TODO %?\nDEADLINE: %^{at}t")
                                        ("ts" "scheduled" entry
                                         (file+headline "~/org/todo.org" "Todos")
                                         "* TODO %?\nSCHEDULED: %^{at}t")
                                        ("c" "chore" entry
                                         (file +org-chores-file)
                                         "* TODO %?\nDEADLINE: %t")
                                        ) org-capture-templates))
  )

Language-specific

Go

(setq lsp-go-use-gofumpt t)
(eval-after-load 'flycheck
  '(add-hook 'flycheck-mode-hook #'flycheck-golangci-lint-setup))

hooks

(add-hook! 'go-mode-hook
  (which-function-mode 1)
  (add-hook! 'before-save-hook #'lsp-format-buffer t t)
  (add-hook! 'before-save-hook #'lsp-organize-imports t t))
(add-hook! 'go-ts-mode-hook
  (lsp))

TSX

(add-hook! 'tsx-ts-mode
  (lsp)
  (setq-local tab-width 4))

Format on save

(add-hook! 'tsx-ts-mode
  (add-hook! 'before-save-hook #'+format/buffer))

Prettier

(add-hook! 'tsx-ts-mode 'prettier-js-mode)
(setq prettier-js-args '(
                         "--trailing-comma" "es5"
                         "--bracket-spacing" "true"
                         "--single-quote" "true"
                         ))

K8s helm

Create an LSP for k8s helm so that I get nice syntax highlighting and definitions

(define-derived-mode k8s-helm-mode yaml-mode "Helm"
  "A mode for editing helm charts.
  \\{k8s-helm-mode-map}")

(after! lsp-mode
  (add-to-list 'lsp-language-id-configuration '(k8s-helm-mode . "yaml"))

  (lsp-register-client (make-lsp-client
                        :new-connection (lsp-stdio-connection '("helm_ls" "serve"))
                        :activation-fn (lsp-activate-on "yaml")
                        :server-id 'yaml))
  )

(add-hook! 'k8s-helm-mode
  (lsp))

Treesitter

Treesitter is helpful for syntax highlighting and supposedly has faster node navigation

(setq treesit-font-lock-level 4)

(setq treesit-language-source-alist
      '((tsx        "https://github.com/tree-sitter/tree-sitter-typescript"
         "v0.20.3"
         "tsx/src")
        (typescript "https://github.com/tree-sitter/tree-sitter-typescript"
                    "v0.20.3"
                    "typescript/src")
        (rust "https://github.com/tree-sitter/tree-sitter-rust")
        (go "https://github.com/tree-sitter/tree-sitter-go" "v0.19.1")))

Hacks

Remove file watches

(defun file-notify-rm-all-watches ()
  "Remove all existing file notification watches from Emacs."
  (interactive)
  (maphash
   (lambda (key _value)
     (file-notify-rm-watch key))
   file-notify-descriptors))

Treemacs theme

(setq doom-themes-treemacs-theme "doom-colors")

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published