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) (provide 'early-init)
;;; early-init.el ends here ;;; early-init.el ends here
#+end_src #+end_src
** Elpaca ** Elpaca
#+BEGIN_SRC emacs-lisp #+BEGIN_SRC emacs-lisp :tangle no
;; -*- lexical-binding: t -*- ;; -*- lexical-binding: t -*-
(defvar elpaca-installer-version 0.3) (defvar elpaca-installer-version 0.3)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
@ -158,13 +157,97 @@ Finish up
(setq elpaca-queue-limit 30) (setq elpaca-queue-limit 30)
#+END_SRC #+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 ** Benchmarking
This is commented out since it adds ever so slightly to init time, but keep it around in case we 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. need to benchmark slow init times later.
#+begin_src emacs-lisp :tangle no #+begin_src emacs-lisp :tangle no
(elpaca 'benchmark-init)
(require 'benchmark-init) (require 'benchmark-init)
(add-hook 'after-init-hook 'benchmark-init/deactivate) (add-hook 'after-init-hook 'benchmark-init/deactivate)
#+end_src #+end_src
@ -228,20 +311,20 @@ This shows up when building Emacs;
#+end_quote #+end_quote
** Visuals ** Visuals
*** Initial Buffer *** Initial Buffer
#+begin_src emacs-lisp #+begin_src emacs-lisp :tangle no
(setq initial-buffer-choice "~/.config/emacs/init.org") (setq initial-buffer-choice "~/.config/emacs/init.org")
#+end_src #+end_src
*** Dashboard *** Dashboard
Use Dashboard.el. First load `all-the-icons` for nicer rendering 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 'all-the-icons)
(elpaca (dashboard :ref "554dc6f") ;; (package-vc-install (dashboard :ref)
;; (elpaca 'dashboard (require 'dashboard)
(dashboard-setup-startup-hook) (dashboard-setup-startup-hook)
(setq dashboard-items '((recents . 6) (setq dashboard-items '((recents . 6)
(projecss . 5) (projects . 5)
(bookmarks . 5))) (bookmarks . 5)))
(setq dashboard-startup-banner 'logo) (setq dashboard-startup-banner 'logo)
(setq dashboard-center-content t) (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 (add-hook 'dashboard-mode-hook
(lambda () (lambda ()
(setq-local line-spacing 12) (setq-local line-spacing 12)
;; TODO: It's not jumping
(dashboard-jump-to-recents))) (dashboard-jump-to-recents)))
(defun joe/launch-dashboard () ;; (defun joe/launch-dashboard ()
"Jump to the dashboard buffer, if doesn't exists create one." ;; "Jump to the dashboard buffer, if doesn't exists create one."
(interactive) ;; (interactive)
(switch-to-buffer dashboard-buffer-name) ;; (switch-to-buffer dashboard-buffer-name)
(dashboard-mode) ;; (dashboard-mode)
(dashboard-insert-startupify-lists))) ;; (dashboard-insert-startupify-lists))
#+end_src #+end_src
*** Olivetti *** Olivetti
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'olivetti
(require 'olivetti) (require 'olivetti)
(setq olivetti-minimum-body-width 100) (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 #+end_src
*** Themes *** Themes
#+begin_src emacs-lisp #+begin_src emacs-lisp
;; Small changes to my favorite themes ;; Small changes to my favorite themes
(elpaca ;; (load-theme 'doom-nord-light))
'(doom-themes :host github :repo "doomemacs/themes"
:remotes ("fork" :repo "JosephFerano/doom-themes"))
(load-theme 'doom-nord-light))
(setq custom-safe-themes t) (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 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) (defun joe/save-current-theme (THEME)
(let ((inhibit-message t) (let ((inhibit-message t)
(message-log-max nil)) (message-log-max nil))
(customize-save-variable 'custom-enabled-themes custom-enabled-themes))) (customize-save-variable 'custom-enabled-themes custom-enabled-themes)))
(advice-add 'consult-theme :after #'joe/save-current-theme) (advice-add 'consult-theme :after #'joe/save-current-theme)
;; (advice-remove 'load-theme 'joe/save-current-theme)
#+end_src #+end_src
*** Other *** Other
@ -348,13 +425,13 @@ Setup other stuff
;; Dont compact font caches during GC, in case doom modeline gets laggy issue ;; Dont compact font caches during GC, in case doom modeline gets laggy issue
(setq inhibit-compacting-font-caches t) (setq inhibit-compacting-font-caches t)
(elpaca 'ligature (require 'ligature)
(global-ligature-mode)) (global-ligature-mode)
(elpaca 'highlight-quoted (require 'highlight-quoted)
(add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode)) (add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode)
(elpaca 'doom-modeline (require 'doom-modeline)
(doom-modeline-mode) (doom-modeline-mode)
(doom-modeline-def-modeline 'main (doom-modeline-def-modeline 'main
'(workspace-name bar modals bar window-number matches buffer-info remote-host buffer-position word-count selection-info) '(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 ;; Set default mode-line
(add-hook 'doom-modeline-mode-hook (add-hook 'doom-modeline-mode-hook
(lambda () (lambda ()
(doom-modeline-set-modeline 'main 'default)))) (doom-modeline-set-modeline 'main 'default)))
;; TODO Likely not needed anymore ;; TODO Likely not needed anymore
@ -444,7 +521,7 @@ weren't working, until I randomly saw this in someone's init.el
#+end_src #+end_src
*** Hydra *** Hydra
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'hydra (require 'hydra)
(defhydra hydra-navigate (global-map "<f2>") (defhydra hydra-navigate (global-map "<f2>")
"Window Navigation" "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") ("y" joe/smooth-scroll-short-up "line up")
("n" next-line "line down") ("n" next-line "line down")
("p" previous-line "line up") ("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 #+end_src
*** Multiple Cursors *** Multiple Cursors
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'multiple-cursors) (require 'multiple-cursors)
#+end_src #+end_src
*** Meow *** Meow
#+begin_src emacs-lisp :tangle no #+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-disable-insert-state-bindings t)
(setq evil-echo-state nil) (setq evil-echo-state nil)
(elpaca 'evil (require 'evil)
(evil-mode t) (evil-mode t)
(evil-global-set-key 'insert (kbd "C-w") #'evil-delete-backward-word) (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-up-line () (interactive) (scroll-up-line 2))
(defun joe/scroll-down-line () (interactive) (scroll-down-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-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 (require 'evil-collection)
(evil-collection-init)) (evil-collection-init)
(elpaca 'evil-surround (require 'evil-surround)
(global-evil-surround-mode t)) (global-evil-surround-mode t)
;; (elpaca 'evil-snipe ;; (require 'evil-snipe)
;; (require 'evil-snipe) ;; (evil-snipe-mode +1)
;; (evil-snipe-mode +1)) ;; (evil-snipe-override-mode +1)
(elpaca 'evil-commentary (require 'evil-commentary)
(evil-commentary-mode t)) (evil-commentary-mode t)
(elpaca 'evil-goggles (require 'evil-goggles)
(evil-goggles-mode t) (evil-goggles-mode t)
(setq evil-goggles-duration 0.075) (setq evil-goggles-duration 0.075)
(setq evil-goggles-pulse t) (setq evil-goggles-pulse t)
(setq evil-goggles-async-duration 0.55)) (setq evil-goggles-async-duration 0.55)
#+end_src #+end_src
** Buffers ** 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 k") #'joe/kill-this-buffer-or-popup)
(global-set-key (kbd "C-x M-k") #'kill-buffer) (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) (add-hook 'ibuffer-mode-hook #'all-the-icons-ibuffer-mode)
(global-set-key [remap list-buffers] 'ibuffer) (global-set-key [remap list-buffers] 'ibuffer)
(global-set-key (kbd "C-x B") '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 "-") #'joe/window-split-horizontal)
(define-key ctl-x-4-map (kbd "t") #'rotate-window) (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 o") #'ace-window)
(global-set-key (kbd "C-x C-o") #'ace-swap-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 *** Popper
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'popper
(require 'popper) (require 'popper)
(setq popper-reference-buffers (setq popper-reference-buffers
'("\\*compilation\\*" compilation-mode '("\\*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) (setq popper-display-function #'joe/popper-display-func)
(popper-mode t)) (popper-mode t)
#+end_src #+end_src
*** Scrolling *** Scrolling
#+begin_src emacs-lisp :tangle no #+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 "C-S-v") #'joe/smooth-scroll-short-down)
(global-set-key (kbd "M-S-v") #'joe/smooth-scroll-short-up) (global-set-key (kbd "M-S-v") #'joe/smooth-scroll-short-up)
(elpaca 'topspace) (require 'topspace)
#+end_src #+end_src
** Tabs/Workspaces ** Tabs/Workspaces
*** Centaur Tabs *** Centaur Tabs
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'centaur-tabs (require 'centaur-tabs)
(setq centaur-tabs-set-bar 'under) (setq centaur-tabs-set-bar 'under)
(setq x-underline-at-descent-line t) (setq x-underline-at-descent-line t)
(setq centaur-tabs-set-close-button nil) (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 (t
"Emacs"))))) "Emacs")))))
(centaur-tabs-mode +1)) (centaur-tabs-mode +1)
#+end_src #+end_src
*** Tabs *** Tabs
#+begin_src emacs-lisp :tangle no #+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 Vertico Embark Marginalia Consult Orderless
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'all-the-icons-completion) (require 'all-the-icons-completion)
(elpaca '(vertico :files (:defaults "extensions/*") ;; (require '(vertico :files (:defaults "extensions/*")
:includes (vertico-indexed ;; :includes (vertico-indexed
vertico-repeat ;; vertico-repeat
vertico-directory)) ;; vertico-directory))
(require 'vertico)
(vertico-mode) (vertico-mode)
;; (elpaca 'vertico-posframe) ;; (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-) ;; (define-key vertico-map (kbd "C-r") #'vertico-repeat-)
;; (vertico-posframe-mode t) ;; (vertico-posframe-mode t)
(vertico-indexed-mode) ;; (vertico-indexed-mode)
;; (setq vertico-posframe-parameters ;; (setq vertico-posframe-parameters
;; '((left-fringe . 100) ;; '((left-fringe . 100)
;; (right-fringe . 100))) ;; (right-fringe . 100)))
@ -1038,7 +1115,7 @@ Vertico Embark Marginalia Consult Orderless
(add-hook 'minibuffer-setup-hook #'vertico-repeat-save) (add-hook 'minibuffer-setup-hook #'vertico-repeat-save)
(add-to-list 'savehist-additional-variables 'vertico-repeat-history) (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) ;; #' "C-M-p" #'vertico-previous-group)
@ -1049,7 +1126,7 @@ Vertico Embark Marginalia Consult Orderless
;; ("M-DEL" . vertico-directory-delete-word)) ;; ("M-DEL" . vertico-directory-delete-word))
;; :hook (rfn-eshadow-update-overlay . vertico-directory-tidy)) ;; :hook (rfn-eshadow-update-overlay . vertico-directory-tidy))
(elpaca 'embark (require 'embark)
(setq embark-quit-after-action '((kill-buffer . nil))) (setq embark-quit-after-action '((kill-buffer . nil)))
@ -1106,11 +1183,11 @@ Vertico Embark Marginalia Consult Orderless
(advice-add #'embark-completing-read-prompter (advice-add #'embark-completing-read-prompter
:around #'embark-hide-which-key-indicator) :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-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil))
(setq marginalia-align 'right) (setq marginalia-align 'right)
(setq marginalia-max-relative-age most-positive-fixnum) (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-mode)
(all-the-icons-completion-marginalia-setup) (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) (setq completion-styles '(orderless basic)
completion-category-overrides '((file (styles basic partial-completion))))) completion-category-overrides '((file (styles basic partial-completion))))
#+end_src #+end_src
*** Consult *** Consult
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'consult) (require 'consult)
(elpaca 'consult-lsp) (require 'consult-lsp)
;; (defun joe/consult-line () ;; (defun joe/consult-line ()
;; (interactive) ;; (interactive)
@ -1149,7 +1226,7 @@ Vertico Embark Marginalia Consult Orderless
#+end_src #+end_src
** Dirvish/Dired ** Dirvish/Dired
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'dirvish) (require 'dirvish)
(with-eval-after-load 'dirvish (with-eval-after-load 'dirvish
(dirvish-override-dired-mode) (dirvish-override-dired-mode)
(setq delete-by-moving-to-trash t) (setq delete-by-moving-to-trash t)
@ -1228,7 +1305,7 @@ Vertico Embark Marginalia Consult Orderless
** Avy ** Avy
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'avy) (require 'avy)
(setq avy-case-fold-search nil) (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)) (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 (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 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 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 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 #+end_src
** Helpful ** Helpful
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'helpful (require 'helpful)
(global-set-key (kbd "C-h f") #'helpful-callable) (global-set-key (kbd "C-h f") #'helpful-callable)
(global-set-key (kbd "C-h v") #'helpful-variable) (global-set-key (kbd "C-h v") #'helpful-variable)
(global-set-key (kbd "C-h k") #'helpful-key) (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 C-d") #'helpful-at-point)
(global-set-key (kbd "C-h F") #'helpful-function) (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 #+end_src
** Terminals/Shells ** Terminals/Shells
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'vterm
(require 'vterm) (require 'vterm)
(setq vterm-shell "/bin/fish") (setq vterm-shell "/bin/fish")
(setq vterm-timer-delay 0.01) (setq vterm-timer-delay 0.01)
@ -1284,7 +1360,7 @@ Vertico Embark Marginalia Consult Orderless
(when (boundp 'evil-mode) (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 "C-w") #'vterm-send-C-w)
(evil-define-key 'insert vterm-mode-map (kbd "<delete>") #'vterm-send-delete)) (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 #+end_src
VTerm is loading TRAMP along with it which slows down init time noticeably so call this after 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 #+end_src
** Undo Fu ** Undo Fu
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'undo-fu (require 'undo-fu)
(undo-fu-session-global-mode +1) (undo-fu-session-global-mode +1)
(setq undo-limit 6710886400) ;; 64mb. (setq undo-limit 6710886400) ;; 64mb.
(setq undo-strong-limit 100663296) ;; 96mb. (setq undo-strong-limit 100663296) ;; 96mb.
(setq undo-outer-limit 1006632960)) ;; 960mb. (setq undo-outer-limit 1006632960) ;; 960mb.
(elpaca 'undo-fu-session (require 'undo-fu-session)
(setq undo-fu-session-incompatible-files '("/COMMIT_EDITMSG\\'" "/git-rebase-todo\\'")) (setq undo-fu-session-incompatible-files '("/COMMIT_EDITMSG\\'" "/git-rebase-todo\\'"))
(require 'vundo)
)
(elpaca 'vundo)
#+end_src #+end_src
** Which Key ** Which Key
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'which-key (require 'which-key)
(setq which-key-idle-delay 0.3) (setq which-key-idle-delay 0.3)
(which-key-mode) (which-key-mode)
(when (boundp 'evil-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 t" '("Tabs")
"SPC p" '("Packages") "SPC p" '("Packages")
"SPC s" '("Shell (vterm)") "SPC s" '("Shell (vterm)")
"SPC h" '("Help")))) "SPC h" '("Help")))
#+end_src #+end_src
** IDE Features ** IDE Features
*** REPLs *** 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)) (evil-define-key 'insert comint-mode-map (kbd "C-p") 'comint-previous-input))
#+end_src #+end_src
*** Company *** Company
#+begin_src rust
println!("Hello world");
#+end_src
#+begin_src emacs-lisp #+begin_src emacs-lisp
(setq completion-in-region-function (setq completion-in-region-function
(lambda (&rest args) (lambda (&rest args)
(apply (if vertico-mode (apply (if vertico-mode
@ -1350,14 +1420,14 @@ println!("Hello world");
#'completion--in-region) #'completion--in-region)
args))) args)))
(elpaca 'company) (require 'company)
(with-eval-after-load 'company (with-eval-after-load 'company
(add-to-list 'completion-at-point-functions #'elisp-completion-at-point) (add-to-list 'completion-at-point-functions #'elisp-completion-at-point)
(require 'company) (require 'company)
(setq company-minimum-prefix-length 1) (setq company-minimum-prefix-length 1)
(setq company-tooltip-align-annotations t) (setq company-tooltip-align-annotations t)
(setq company-minimum-prefix-length 2) (setq company-minimum-prefix-length 2)
(define-key company-active-map (kbd "C-n") nil) (define-key company-active-map (kbd "C-n") nil)
(define-key company-active-map (kbd "C-p") nil) (define-key company-active-map (kbd "C-p") nil)
(define-key company-active-map (kbd "<return>") nil) (define-key company-active-map (kbd "<return>") nil)
@ -1376,12 +1446,12 @@ println!("Hello world");
;; company-echo-metadata-frontend) ;; company-echo-metadata-frontend)
company-backends '((company-capf company-elisp company-files))) company-backends '((company-capf company-elisp company-files)))
(setq company-transformers '(company-sort-by-occurrence)) (setq company-transformers '(company-sort-by-occurrence))
(global-company-mode)) (global-company-mode))
#+end_src #+end_src
*** LSP *** LSP
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'lsp-mode (require 'lsp-mode)
(setq lsp-enable-which-key-integration t) (setq lsp-enable-which-key-integration t)
(setq lsp-keymap-prefix "C-c c") (setq lsp-keymap-prefix "C-c c")
@ -1421,22 +1491,22 @@ println!("Hello world");
(--take-while (not (s-equals? "```" it)) it) (--take-while (not (s-equals? "```" it)) it)
(--map (s-trim it) it) (--map (s-trim it) it)
(s-join " " 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 #+end_src
*** Flycheck *** Flycheck
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'flycheck) (require 'flycheck)
;; TODO Add wrapping to these functions ;; TODO Add wrapping to these functions
(when (boundp 'evil-mode) (when (boundp 'evil-mode)
(evil-global-set-key 'normal (kbd "M-e") #'flycheck-next-error) (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 "M-E") #'flycheck-previous-error)
(evil-global-set-key 'normal (kbd "<leader>ee") 'flycheck-mode) (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>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 #+end_src
*** Compilation *** Compilation
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -1488,7 +1558,6 @@ println!("Hello world");
** Debugging ** Debugging
*** DAP *** DAP
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'dap-mode
(require 'dap-mode) (require 'dap-mode)
;; (setq dap-auto-configure-features '(locals breakpoints expressions tooltip)) ;; (setq dap-auto-configure-features '(locals breakpoints expressions tooltip))
@ -1513,20 +1582,20 @@ println!("Hello world");
:cwd "${workspaceFolder}" :cwd "${workspaceFolder}"
:console "external" :console "external"
:dap-compilation "cargo build" :dap-compilation "cargo build"
:dap-compilation-dir "${workspaceFolder}"))) :dap-compilation-dir "${workspaceFolder}"))
#+end_src #+end_src
** Languages ** Languages
*** Python *** Python
#+begin_src emacs-lisp #+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-n") #'comint-next-input)
(define-key inferior-python-mode-map (kbd "C-p") #'comint-previous-input) (define-key inferior-python-mode-map (kbd "C-p") #'comint-previous-input)
#+end_src> #+end_src>
*** Rust *** Rust
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'rustic) (require 'rustic)
(elpaca 'ob-rust) (require 'ob-rust)
;; Org-Babel ;; Org-Babel
;; Disabling until we figure out how to get it working ;; Disabling until we figure out how to get it working
;; (elpaca 'parsec) ;; Required by evcxr-mode ;; (elpaca 'parsec) ;; Required by evcxr-mode
@ -1564,7 +1633,7 @@ println!("Hello world");
#+end_src #+end_src
*** Web *** Web
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'typescript-mode) (require 'typescript-mode)
(setq typescript-indent-level 2) (setq typescript-indent-level 2)
#+end_src #+end_src
*** C *** 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. it doesn't close it.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'disaster) (require 'disaster)
(defun joe/c-mode-hook () (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 r") (defun joe/make-run () (interactive) (compile "make run")))
(local-set-key (kbd "C-x c c") (defun joe/make () (interactive) (compile "make"))) (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 #+end_src
*** Haskell *** Haskell
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'haskell-mode) (require 'haskell-mode)
(setq haskell-interactive-popup-errors nil) (setq haskell-interactive-popup-errors nil)
(when (boundp 'evil-mode) (when (boundp 'evil-mode)
@ -1595,17 +1664,17 @@ it doesn't close it.
#+end_src #+end_src
*** Clojure *** Clojure
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'clojure-mode) (require 'clojure-mode)
(elpaca 'cider) (require 'cider)
(setq cider-show-error-buffer 'only-in-repl) (setq cider-show-error-buffer 'only-in-repl)
#+end_src #+end_src
*** OCaml *** OCaml
#+begin_src emacs-lisp :tangle no #+begin_src emacs-lisp :tangle no
(elpaca 'tuareg) (require 'tuareg)
(elpaca 'dune) (require 'dune)
(elpaca 'utop) (require 'utop)
(elpaca 'merlin) (require 'merlin)
(elpaca 'merlin-eldoc) (require 'merlin-eldoc)
;; Might be worth checking out, depeding on whether we stick with flycheck or not ;; Might be worth checking out, depeding on whether we stick with flycheck or not
;; (elpaca 'flycheck-ocaml) ;; (elpaca 'flycheck-ocaml)
;; Also check this out, see if it adds anything ;; 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 #+end_src
*** FSharp *** FSharp
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'fsharp-mode) (require 'fsharp-mode)
;; (elpaca 'eglot-fsharp) ;; (elpaca 'eglot-fsharp)
#+end_src #+end_src
*** Go *** Go
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'go-mode) (require 'go-mode)
;; (elpaca 'go-imports) ;; (elpaca 'go-imports)
#+end_src #+end_src
*** Other *** Other
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'json-mode) (require 'json-mode)
(elpaca 'markdown-mode) (require 'markdown-mode)
#+end_src #+end_src
** Org Mode ** Org Mode
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'org-bullets) (require 'org-bullets)
(defun joe/org-init () (defun joe/org-init ()
(setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG"))) (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)) (org-indent-mode))
(add-hook 'org-mode-hook 'joe/org-hook) (add-hook 'org-mode-hook 'joe/org-hook)
(elpaca 'org-kanban) (require 'org-kanban)
#+end_src #+end_src
** Magit ** 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]] 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 #+begin_src emacs-lisp
(elpaca 'magit) (require 'magit)
(defun joe/magit-kill-buffers (param) (defun joe/magit-kill-buffers (param)
"Restore window configuration and kill all Magit buffers." "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 ** Restclient
#+begin_src emacs-lisp #+begin_src emacs-lisp
(elpaca 'restclient) (require 'restclient)
(add-to-list 'auto-mode-alist '("\\.restclient\\'" . restclient-mode)) (add-to-list 'auto-mode-alist '("\\.restclient\\'" . restclient-mode))