Back to package.el

This commit is contained in:
Joseph Ferano 2023-03-29 22:30:31 +07:00
parent 456d426fe3
commit 359c92028f

View File

@ -113,9 +113,8 @@ Finish up
(provide 'early-init)
;;; early-init.el ends here
#+end_src
** Elpaca
#+BEGIN_SRC emacs-lisp
#+BEGIN_SRC emacs-lisp :tangle no
;; -*- lexical-binding: t -*-
(defvar elpaca-installer-version 0.3)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
@ -158,13 +157,97 @@ Finish up
(setq elpaca-queue-limit 30)
#+END_SRC
** Package Management
#+begin_src emacs-lisp
;; Also read: <https://protesilaos.com/codelog/2022-05-13-emacs-elpa-devel/>
(setq package-archives
'(("elpa" . "https://elpa.gnu.org/packages/")
("elpa-devel" . "https://elpa.gnu.org/devel/")
("nongnu" . "https://elpa.nongnu.org/nongnu/")
("melpa" . "https://melpa.org/packages/")))
;; Add MELPA to `package-archives'
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
;; Proof-of-concept to install a list of packages
(mapc
(lambda (package)
(unless (package-installed-p package)
(package-install package)))
'(recentf
dashboard
olivetti
ligature
highlight-quoted
doom-modeline
hydra
multiple-cursors
evil
evil-collection
evil-surround
evil-snipe
evil-commentary
evil-goggles
all-the-icons-ibuffer
ace-window
popper
centaur-tabs
all-the-icons-completion
vertico
savehist
embark
embark-consult
marginalia
all-the-icons-completion
orderless
consult
consult-lsp
dirvish
smtpmail
sendmail
age
avy
helpful
vterm
undo-fu
undo-fu-session
vundo
which-key
company
company
lsp-mode
lsp-ui
flycheck
dap-mode
rustic
ob-rust
typescript-mode
disaster
haskell-mode
clojure-mode
cider
fsharp-mode
go-mode
json-mode
markdown-mode
org-bullets
org-kanban
restclient
magit))
(package-initialize)
(setopt package-vc-selected-packages
'((dashboard . "554dc6f")
(doom-themes :url "https://github.com/JosephFerano/doom-themes")))
#+end_src
** Benchmarking
This is commented out since it adds ever so slightly to init time, but keep it around in case we
need to benchmark slow init times later.
#+begin_src emacs-lisp :tangle no
(elpaca 'benchmark-init)
(require 'benchmark-init)
(add-hook 'after-init-hook 'benchmark-init/deactivate)
#+end_src
@ -228,20 +311,20 @@ This shows up when building Emacs;
#+end_quote
** Visuals
*** Initial Buffer
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
(setq initial-buffer-choice "~/.config/emacs/init.org")
#+end_src
*** Dashboard
Use Dashboard.el. First load `all-the-icons` for nicer rendering
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
;; (elpaca 'all-the-icons)
(elpaca (dashboard :ref "554dc6f")
;; (elpaca 'dashboard
(dashboard-setup-startup-hook)
;; (package-vc-install (dashboard :ref)
(require 'dashboard)
(dashboard-setup-startup-hook)
(setq dashboard-items '((recents . 6)
(projecss . 5)
(projects . 5)
(bookmarks . 5)))
(setq dashboard-startup-banner 'logo)
(setq dashboard-center-content t)
@ -253,33 +336,29 @@ Use Dashboard.el. First load `all-the-icons` for nicer rendering
(add-hook 'dashboard-mode-hook
(lambda ()
(setq-local line-spacing 12)
;; TODO: It's not jumping
(dashboard-jump-to-recents)))
(defun joe/launch-dashboard ()
"Jump to the dashboard buffer, if doesn't exists create one."
(interactive)
(switch-to-buffer dashboard-buffer-name)
(dashboard-mode)
(dashboard-insert-startupify-lists)))
;; (defun joe/launch-dashboard ()
;; "Jump to the dashboard buffer, if doesn't exists create one."
;; (interactive)
;; (switch-to-buffer dashboard-buffer-name)
;; (dashboard-mode)
;; (dashboard-insert-startupify-lists))
#+end_src
*** Olivetti
#+begin_src emacs-lisp
(elpaca 'olivetti
(require 'olivetti)
(setq olivetti-minimum-body-width 100)
(global-set-key (kbd "C-x x o") 'olivetti-mode))
(global-set-key (kbd "C-x x o") 'olivetti-mode)
#+end_src
*** Themes
#+begin_src emacs-lisp
;; Small changes to my favorite themes
(elpaca
'(doom-themes :host github :repo "doomemacs/themes"
:remotes ("fork" :repo "JosephFerano/doom-themes"))
(load-theme 'doom-nord-light))
;; (load-theme 'doom-nord-light))
(setq custom-safe-themes t)
@ -299,15 +378,13 @@ our case is worse since we have a literate file. Send all custom variables to ~c
Save the chosen theme after picking a new one
#+begin_src emacs-lisp tangle: no
#+begin_src emacs-lisp
(defun joe/save-current-theme (THEME)
(let ((inhibit-message t)
(message-log-max nil))
(customize-save-variable 'custom-enabled-themes custom-enabled-themes)))
(advice-add 'consult-theme :after #'joe/save-current-theme)
;; (advice-remove 'load-theme 'joe/save-current-theme)
#+end_src
*** Other
@ -348,13 +425,13 @@ Setup other stuff
;; Dont compact font caches during GC, in case doom modeline gets laggy issue
(setq inhibit-compacting-font-caches t)
(elpaca 'ligature
(global-ligature-mode))
(require 'ligature)
(global-ligature-mode)
(elpaca 'highlight-quoted
(add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode))
(require 'highlight-quoted)
(add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode)
(elpaca 'doom-modeline
(require 'doom-modeline)
(doom-modeline-mode)
(doom-modeline-def-modeline 'main
'(workspace-name bar modals bar window-number matches buffer-info remote-host buffer-position word-count selection-info)
@ -363,7 +440,7 @@ Setup other stuff
;; Set default mode-line
(add-hook 'doom-modeline-mode-hook
(lambda ()
(doom-modeline-set-modeline 'main 'default))))
(doom-modeline-set-modeline 'main 'default)))
;; TODO Likely not needed anymore
@ -444,7 +521,7 @@ weren't working, until I randomly saw this in someone's init.el
#+end_src
*** Hydra
#+begin_src emacs-lisp
(elpaca 'hydra
(require 'hydra)
(defhydra hydra-navigate (global-map "<f2>")
"Window Navigation"
@ -455,12 +532,12 @@ weren't working, until I randomly saw this in someone's init.el
("y" joe/smooth-scroll-short-up "line up")
("n" next-line "line down")
("p" previous-line "line up")
("M-r" move-to-window-line-top-bottom "Reposition cursor")))
("M-r" move-to-window-line-top-bottom "Reposition cursor"))
#+end_src
*** Multiple Cursors
#+begin_src emacs-lisp
(elpaca 'multiple-cursors)
(require 'multiple-cursors)
#+end_src
*** Meow
#+begin_src emacs-lisp :tangle no
@ -612,7 +689,7 @@ weren't working, until I randomly saw this in someone's init.el
(setq evil-disable-insert-state-bindings t)
(setq evil-echo-state nil)
(elpaca 'evil
(require 'evil)
(evil-mode t)
(evil-global-set-key 'insert (kbd "C-w") #'evil-delete-backward-word)
@ -686,27 +763,27 @@ weren't working, until I randomly saw this in someone's init.el
(defun joe/scroll-up-line () (interactive) (scroll-up-line 2))
(defun joe/scroll-down-line () (interactive) (scroll-down-line 2))
(evil-global-set-key 'normal (kbd "C-e") #'joe/scroll-up-line)
(evil-global-set-key 'normal (kbd "C-y") #'joe/scroll-down-line))
(evil-global-set-key 'normal (kbd "C-y") #'joe/scroll-down-line)
(elpaca 'evil-collection
(evil-collection-init))
(require 'evil-collection)
(evil-collection-init)
(elpaca 'evil-surround
(global-evil-surround-mode t))
(require 'evil-surround)
(global-evil-surround-mode t)
;; (elpaca 'evil-snipe
;; (require 'evil-snipe)
;; (evil-snipe-mode +1))
;; (require 'evil-snipe)
;; (evil-snipe-mode +1)
;; (evil-snipe-override-mode +1)
(elpaca 'evil-commentary
(evil-commentary-mode t))
(require 'evil-commentary)
(evil-commentary-mode t)
(elpaca 'evil-goggles
(require 'evil-goggles)
(evil-goggles-mode t)
(setq evil-goggles-duration 0.075)
(setq evil-goggles-pulse t)
(setq evil-goggles-async-duration 0.55))
(setq evil-goggles-async-duration 0.55)
#+end_src
** Buffers
@ -722,7 +799,7 @@ weren't working, until I randomly saw this in someone's init.el
(global-set-key (kbd "C-x k") #'joe/kill-this-buffer-or-popup)
(global-set-key (kbd "C-x M-k") #'kill-buffer)
(elpaca 'all-the-icons-ibuffer)
(require 'all-the-icons-ibuffer)
(add-hook 'ibuffer-mode-hook #'all-the-icons-ibuffer-mode)
(global-set-key [remap list-buffers] 'ibuffer)
(global-set-key (kbd "C-x B") 'ibuffer)
@ -766,7 +843,7 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(define-key ctl-x-4-map (kbd "-") #'joe/window-split-horizontal)
(define-key ctl-x-4-map (kbd "t") #'rotate-window)
(elpaca 'ace-window)
(require 'ace-window)
(global-set-key (kbd "C-x o") #'ace-window)
(global-set-key (kbd "C-x C-o") #'ace-swap-window)
@ -779,7 +856,6 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
*** Popper
#+begin_src emacs-lisp
(elpaca 'popper
(require 'popper)
(setq popper-reference-buffers
'("\\*compilation\\*" compilation-mode
@ -849,7 +925,7 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(setq popper-display-function #'joe/popper-display-func)
(popper-mode t))
(popper-mode t)
#+end_src
*** Scrolling
#+begin_src emacs-lisp :tangle no
@ -893,13 +969,13 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(global-set-key (kbd "C-S-v") #'joe/smooth-scroll-short-down)
(global-set-key (kbd "M-S-v") #'joe/smooth-scroll-short-up)
(elpaca 'topspace)
(require 'topspace)
#+end_src
** Tabs/Workspaces
*** Centaur Tabs
#+begin_src emacs-lisp
(elpaca 'centaur-tabs
(require 'centaur-tabs)
(setq centaur-tabs-set-bar 'under)
(setq x-underline-at-descent-line t)
(setq centaur-tabs-set-close-button nil)
@ -946,7 +1022,7 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(t
"Emacs")))))
(centaur-tabs-mode +1))
(centaur-tabs-mode +1)
#+end_src
*** Tabs
#+begin_src emacs-lisp :tangle no
@ -1002,20 +1078,21 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
Vertico Embark Marginalia Consult Orderless
#+begin_src emacs-lisp
(elpaca 'all-the-icons-completion)
(elpaca '(vertico :files (:defaults "extensions/*")
:includes (vertico-indexed
vertico-repeat
vertico-directory))
(require 'all-the-icons-completion)
;; (require '(vertico :files (:defaults "extensions/*")
;; :includes (vertico-indexed
;; vertico-repeat
;; vertico-directory))
(require 'vertico)
(vertico-mode)
;; (elpaca 'vertico-posframe)
(define-key vertico-map (kbd "C-w") #'vertico-directory-delete-word)
;; (define-key vertico-map (kbd "C-w") #'vertico-directory-delete-word)
;; (define-key vertico-map (kbd "C-r") #'vertico-repeat-)
;; (vertico-posframe-mode t)
(vertico-indexed-mode)
;; (vertico-indexed-mode)
;; (setq vertico-posframe-parameters
;; '((left-fringe . 100)
;; (right-fringe . 100)))
@ -1038,7 +1115,7 @@ Vertico Embark Marginalia Consult Orderless
(add-hook 'minibuffer-setup-hook #'vertico-repeat-save)
(add-to-list 'savehist-additional-variables 'vertico-repeat-history)
(define-key vertico-map (kbd "C-M-n") #'vertico-next-group))
(define-key vertico-map (kbd "C-M-n") #'vertico-next-group)
;; #' "C-M-p" #'vertico-previous-group)
@ -1049,7 +1126,7 @@ Vertico Embark Marginalia Consult Orderless
;; ("M-DEL" . vertico-directory-delete-word))
;; :hook (rfn-eshadow-update-overlay . vertico-directory-tidy))
(elpaca 'embark
(require 'embark)
(setq embark-quit-after-action '((kill-buffer . nil)))
@ -1106,11 +1183,11 @@ Vertico Embark Marginalia Consult Orderless
(advice-add #'embark-completing-read-prompter
:around #'embark-hide-which-key-indicator)
(global-set-key (kbd "C-'") #'embark-act))
(global-set-key (kbd "C-'") #'embark-act)
(elpaca 'embark-consult)
(require 'embark-consult)
(elpaca 'marginalia
(require 'marginalia)
(setq marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil))
(setq marginalia-align 'right)
(setq marginalia-max-relative-age most-positive-fixnum)
@ -1120,17 +1197,17 @@ Vertico Embark Marginalia Consult Orderless
(all-the-icons-completion-mode)
(all-the-icons-completion-marginalia-setup)
(add-hook 'marginalia-mode-hook #'all-the-icons-completion-marginalia-setup))
(add-hook 'marginalia-mode-hook #'all-the-icons-completion-marginalia-setup)
(elpaca 'orderless
(require 'orderless)
(setq completion-styles '(orderless basic)
completion-category-overrides '((file (styles basic partial-completion)))))
completion-category-overrides '((file (styles basic partial-completion))))
#+end_src
*** Consult
#+begin_src emacs-lisp
(elpaca 'consult)
(elpaca 'consult-lsp)
(require 'consult)
(require 'consult-lsp)
;; (defun joe/consult-line ()
;; (interactive)
@ -1149,7 +1226,7 @@ Vertico Embark Marginalia Consult Orderless
#+end_src
** Dirvish/Dired
#+begin_src emacs-lisp
(elpaca 'dirvish)
(require 'dirvish)
(with-eval-after-load 'dirvish
(dirvish-override-dired-mode)
(setq delete-by-moving-to-trash t)
@ -1228,7 +1305,7 @@ Vertico Embark Marginalia Consult Orderless
** Avy
#+begin_src emacs-lisp
(straight-use-package 'avy)
(require 'avy)
(setq avy-case-fold-search nil)
(setq avy-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l ?q ?w ?e ?r ?u ?i ?o ?p ?z ?x ?c ?v ?n ?m))
(define-key global-map (kbd "C-;") 'avy-goto-char) ;; I use this most frequently
@ -1237,21 +1314,20 @@ Vertico Embark Marginalia Consult Orderless
(define-key global-map (kbd "M-g e") 'avy-goto-word-0) ;; lots of candidates
(define-key global-map (kbd "M-g g") 'avy-goto-line) ;; digits behave like goto-line
(define-key global-map (kbd "M-g w") 'avy-goto-word-1) ;; first character of the word
(define-key global-map (kbd "M-g P") 'avy-pop-mark))
(define-key global-map (kbd "M-g P") 'avy-pop-mark)
#+end_src
** Helpful
#+begin_src emacs-lisp
(elpaca 'helpful
(require 'helpful)
(global-set-key (kbd "C-h f") #'helpful-callable)
(global-set-key (kbd "C-h v") #'helpful-variable)
(global-set-key (kbd "C-h k") #'helpful-key)
(global-set-key (kbd "C-h C-d") #'helpful-at-point)
(global-set-key (kbd "C-h F") #'helpful-function)
(global-set-key (kbd "C-h C") #'helpful-command))
(global-set-key (kbd "C-h C") #'helpful-command)
#+end_src
** Terminals/Shells
#+begin_src emacs-lisp
(elpaca 'vterm
(require 'vterm)
(setq vterm-shell "/bin/fish")
(setq vterm-timer-delay 0.01)
@ -1284,7 +1360,7 @@ Vertico Embark Marginalia Consult Orderless
(when (boundp 'evil-mode)
(evil-define-key 'insert vterm-mode-map (kbd "C-w") #'vterm-send-C-w)
(evil-define-key 'insert vterm-mode-map (kbd "<delete>") #'vterm-send-delete))
(setq-local global-hl-line-mode nil))))
(setq-local global-hl-line-mode nil)))
#+end_src
VTerm is loading TRAMP along with it which slows down init time noticeably so call this after
@ -1295,22 +1371,20 @@ startup. Reason we have to call this is so the vterm fucntion can call `vterm--i
#+end_src
** Undo Fu
#+begin_src emacs-lisp
(elpaca 'undo-fu
(undo-fu-session-global-mode +1)
(setq undo-limit 6710886400) ;; 64mb.
(setq undo-strong-limit 100663296) ;; 96mb.
(setq undo-outer-limit 1006632960)) ;; 960mb.
(require 'undo-fu)
(undo-fu-session-global-mode +1)
(setq undo-limit 6710886400) ;; 64mb.
(setq undo-strong-limit 100663296) ;; 96mb.
(setq undo-outer-limit 1006632960) ;; 960mb.
(elpaca 'undo-fu-session
(setq undo-fu-session-incompatible-files '("/COMMIT_EDITMSG\\'" "/git-rebase-todo\\'"))
)
(elpaca 'vundo)
(require 'undo-fu-session)
(setq undo-fu-session-incompatible-files '("/COMMIT_EDITMSG\\'" "/git-rebase-todo\\'"))
(require 'vundo)
#+end_src
** Which Key
#+begin_src emacs-lisp
(elpaca 'which-key
(require 'which-key)
(setq which-key-idle-delay 0.3)
(which-key-mode)
(when (boundp 'evil-mode)
@ -1325,7 +1399,7 @@ startup. Reason we have to call this is so the vterm fucntion can call `vterm--i
"SPC t" '("Tabs")
"SPC p" '("Packages")
"SPC s" '("Shell (vterm)")
"SPC h" '("Help"))))
"SPC h" '("Help")))
#+end_src
** IDE Features
*** REPLs
@ -1336,13 +1410,9 @@ startup. Reason we have to call this is so the vterm fucntion can call `vterm--i
(evil-define-key 'insert comint-mode-map (kbd "C-p") 'comint-previous-input))
#+end_src
*** Company
#+begin_src rust
println!("Hello world");
#+end_src
#+begin_src emacs-lisp
(setq completion-in-region-function
(lambda (&rest args)
(apply (if vertico-mode
@ -1350,14 +1420,14 @@ println!("Hello world");
#'completion--in-region)
args)))
(elpaca 'company)
(require 'company)
(with-eval-after-load 'company
(add-to-list 'completion-at-point-functions #'elisp-completion-at-point)
(require 'company)
(setq company-minimum-prefix-length 1)
(setq company-tooltip-align-annotations t)
(setq company-minimum-prefix-length 2)
(add-to-list 'completion-at-point-functions #'elisp-completion-at-point)
(require 'company)
(setq company-minimum-prefix-length 1)
(setq company-tooltip-align-annotations t)
(setq company-minimum-prefix-length 2)
(define-key company-active-map (kbd "C-n") nil)
(define-key company-active-map (kbd "C-p") nil)
(define-key company-active-map (kbd "<return>") nil)
@ -1376,12 +1446,12 @@ println!("Hello world");
;; company-echo-metadata-frontend)
company-backends '((company-capf company-elisp company-files)))
(setq company-transformers '(company-sort-by-occurrence))
(global-company-mode))
(global-company-mode))
#+end_src
*** LSP
#+begin_src emacs-lisp
(elpaca 'lsp-mode
(require 'lsp-mode)
(setq lsp-enable-which-key-integration t)
(setq lsp-keymap-prefix "C-c c")
@ -1421,22 +1491,22 @@ println!("Hello world");
(--take-while (not (s-equals? "```" it)) it)
(--map (s-trim it) it)
(s-join " " it))))
(lsp--render-element (concat "```rust\n" sig "\n```")))))
(lsp--render-element (concat "```rust\n" sig "\n```"))))
(elpaca 'lsp-ui)
(require 'lsp-ui)
#+end_src
*** Flycheck
#+begin_src emacs-lisp
(elpaca 'flycheck)
(require 'flycheck)
;; TODO Add wrapping to these functions
(when (boundp 'evil-mode)
(evil-global-set-key 'normal (kbd "M-e") #'flycheck-next-error)
(evil-global-set-key 'normal (kbd "M-E") #'flycheck-previous-error)
(evil-global-set-key 'normal (kbd "<leader>ee") 'flycheck-mode)
(evil-global-set-key 'normal (kbd "<leader>el") #'flycheck-list-errors)
(evil-global-set-key 'normal (kbd "<leader>ce") #'consult-lsp-diagnostics)))
(evil-global-set-key 'normal (kbd "<leader>ce") #'consult-lsp-diagnostics))
#+end_src
*** Compilation
#+begin_src emacs-lisp
@ -1488,7 +1558,6 @@ println!("Hello world");
** Debugging
*** DAP
#+begin_src emacs-lisp
(elpaca 'dap-mode
(require 'dap-mode)
;; (setq dap-auto-configure-features '(locals breakpoints expressions tooltip))
@ -1513,20 +1582,20 @@ println!("Hello world");
:cwd "${workspaceFolder}"
:console "external"
:dap-compilation "cargo build"
:dap-compilation-dir "${workspaceFolder}")))
:dap-compilation-dir "${workspaceFolder}"))
#+end_src
** Languages
*** Python
#+begin_src emacs-lisp
(elpaca 'elpy)
(require 'elpy)
(define-key inferior-python-mode-map (kbd "C-n") #'comint-next-input)
(define-key inferior-python-mode-map (kbd "C-p") #'comint-previous-input)
#+end_src>
*** Rust
#+begin_src emacs-lisp
(elpaca 'rustic)
(elpaca 'ob-rust)
(require 'rustic)
(require 'ob-rust)
;; Org-Babel
;; Disabling until we figure out how to get it working
;; (elpaca 'parsec) ;; Required by evcxr-mode
@ -1564,7 +1633,7 @@ println!("Hello world");
#+end_src
*** Web
#+begin_src emacs-lisp
(elpaca 'typescript-mode)
(require 'typescript-mode)
(setq typescript-indent-level 2)
#+end_src
*** C
@ -1575,7 +1644,7 @@ whether the point hasn't been moved. This way, if I switched to another popper b
it doesn't close it.
#+begin_src emacs-lisp
(elpaca 'disaster)
(require 'disaster)
(defun joe/c-mode-hook ()
(local-set-key (kbd "C-x c r") (defun joe/make-run () (interactive) (compile "make run")))
(local-set-key (kbd "C-x c c") (defun joe/make () (interactive) (compile "make")))
@ -1585,7 +1654,7 @@ it doesn't close it.
#+end_src
*** Haskell
#+begin_src emacs-lisp
(elpaca 'haskell-mode)
(require 'haskell-mode)
(setq haskell-interactive-popup-errors nil)
(when (boundp 'evil-mode)
@ -1595,17 +1664,17 @@ it doesn't close it.
#+end_src
*** Clojure
#+begin_src emacs-lisp
(elpaca 'clojure-mode)
(elpaca 'cider)
(require 'clojure-mode)
(require 'cider)
(setq cider-show-error-buffer 'only-in-repl)
#+end_src
*** OCaml
#+begin_src emacs-lisp :tangle no
(elpaca 'tuareg)
(elpaca 'dune)
(elpaca 'utop)
(elpaca 'merlin)
(elpaca 'merlin-eldoc)
(require 'tuareg)
(require 'dune)
(require 'utop)
(require 'merlin)
(require 'merlin-eldoc)
;; Might be worth checking out, depeding on whether we stick with flycheck or not
;; (elpaca 'flycheck-ocaml)
;; Also check this out, see if it adds anything
@ -1646,25 +1715,25 @@ and there's no need for a middle-man when it's already been implemented.
#+end_src
*** FSharp
#+begin_src emacs-lisp
(elpaca 'fsharp-mode)
(require 'fsharp-mode)
;; (elpaca 'eglot-fsharp)
#+end_src
*** Go
#+begin_src emacs-lisp
(elpaca 'go-mode)
(require 'go-mode)
;; (elpaca 'go-imports)
#+end_src
*** Other
#+begin_src emacs-lisp
(elpaca 'json-mode)
(elpaca 'markdown-mode)
(require 'json-mode)
(require 'markdown-mode)
#+end_src
** Org Mode
#+begin_src emacs-lisp
(elpaca 'org-bullets)
(require 'org-bullets)
(defun joe/org-init ()
(setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG")))
@ -1704,14 +1773,14 @@ and there's no need for a middle-man when it's already been implemented.
(org-indent-mode))
(add-hook 'org-mode-hook 'joe/org-hook)
(elpaca 'org-kanban)
(require 'org-kanban)
#+end_src
** Magit
The best git porcelain/client I've ever used. Also kill stray magit buffers left over as explained [[https://manueluberti.eu/emacs/2018/02/17/magit-bury-buffer/][here]]
#+begin_src emacs-lisp
(elpaca 'magit)
(require 'magit)
(defun joe/magit-kill-buffers (param)
"Restore window configuration and kill all Magit buffers."
@ -1732,7 +1801,7 @@ The best git porcelain/client I've ever used. Also kill stray magit buffers left
** Restclient
#+begin_src emacs-lisp
(elpaca 'restclient)
(require 'restclient)
(add-to-list 'auto-mode-alist '("\\.restclient\\'" . restclient-mode))