finish commenting emacs config

This commit is contained in:
Anthony Rodriguez 2023-06-08 11:39:29 +02:00
parent 93c9cc2533
commit af273f811d
No known key found for this signature in database
GPG key ID: 838541960B42C340

View file

@ -91,6 +91,32 @@ Share the path on daemonized setups
(when (daemonp)
(exec-path-from-shell-initialize))
#+end_src
** Completion
*** Minibuffer completion
I use [[https://github.com/minad/vertico][vertico]] for my vertical/minibuffer completion. It's light, stays out of my way and works great out of the box, which is what I expect from all of my Emacs packages.
#+begin_src emacs-lisp
(use-package vertico
:init
(vertico-mode))
#+end_src
** which-key
I use [[https://github.com/justbur/emacs-which-key][which-key]], a small package that shows a window that describes available keybindings that follow the prefix I just hit. I just can't live without it, it's mandatory for me since I often don't remember which exact keybind I need to press to do a certain thing.
#+begin_src emacs-lisp
(use-package which-key
:config
(which-key-mode))
#+end_src
** expand-region
[[https://github.com/magnars/expand-region.el][expand-region]] is a really useful package that allows for selection regions of text in semantic units. It works with text (words, sentences, paragraphs), code etc.
#+begin_src emacs-lisp
(use-package expand-region
:bind
("C-=" . er/expand-region))
#+end_src
* Appearance
** Theme
I use [[https://github.com/catppuccin][catppuccin]] as my theme (the mocha flavor).
@ -124,23 +150,11 @@ doom-modeline requires nerd-icons to be able to display icons. Don't forget to r
#+begin_src emacs-lisp
(use-package nerd-icons)
#+end_src
* Org mode
This section contains all of my org mode configuration. Over the course of learning Emacs, I learned to appreciate org-mode more and more, and I use it for a lot of various tasks, from writing documents and exporting them to pdf, to writing this exact config, or just taking notes.
** General settings
Export documents to A4 (I'm European, so US letter won't work for me)
#+begin_src emacs-lisp
(use-package vertico
:init
(vertico-mode))
(use-package which-key
:config
(which-key-mode))
;; magit
(use-package magit)
;; org setup
;; export to a4
(with-eval-after-load 'ox-latex (add-to-list 'org-latex-classes
'("article" "\\documentclass[11pt,a4paper]{article}"
("\\section{%s}" . "\\section*{%s}")
@ -148,7 +162,27 @@ doom-modeline requires nerd-icons to be able to display icons. Don't forget to r
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))
#+end_src
Enable syntax highlighting in org source blocks
#+begin_src emacs-lisp
(setq org-src-fontify-natively t)
#+end_src
** Publishing
I use org's [[https://orgmode.org/manual/Publishing.html][publishing feature]] to export all of my notes at once.
#+begin_src emacs-lisp
(setq org-publish-project-alist
(list
'("notes"
:base-directory "~/org/notes"
:base-extension "org"
:publishing-directory "~/org/notes"
:publishing-function org-latex-publish-to-pdf
)))
#+end_src
** org-roam
I use [[https://github.com/org-roam/org-roam][org-roam]] for my note taking purposes. The [[https://en.wikipedia.org/wiki/Zettelkasten][Zettelkasten]] method works for me, and allows for flexibility as I really dislike very strict note-taking systems.
#+begin_src emacs-lisp
(use-package org-roam
:custom
(org-roam-directory "~/org/notes")
@ -159,34 +193,29 @@ doom-modeline requires nerd-icons to be able to display icons. Don't forget to r
(:map org-mode-map
(("C-c n i" . org-roam-node-insert)
("C-c n l" . org-roam-buffer-toggle)))))
#+end_src
(setq org-publish-project-alist
(list
'("notes"
:base-directory "~/org/notes"
:base-extension "org"
:publishing-directory "~/org/notes"
:publishing-function org-latex-publish-to-pdf
)))
** Spellchecking
I use [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Spelling.html][flyspell]], Emac's integated spellchecker.
;; spell checking for text modes
(dolist (hook '(text-mode-hook))
(add-hook hook (lambda () (flyspell-mode 1))))
(dolist (hook '(change-log-mode-hook log-edit-mode-hook))
(add-hook hook (lambda () (flyspell-mode -1))))
(add-hook 'prog-mode-hook
(lambda ()
(flyspell-prog-mode)))
;; avoid spell checking code regions in org mode
(add-to-list 'ispell-skip-region-alist '("^#+BEGIN_SRC" . "^#+END_SRC"))
;; add different dictionaries
Add different dictionaries for languages that I use
#+begin_src emacs-lisp
(let ((langs '("american" "francais")))
(setq lang-ring (make-ring (length langs)))
(dolist (elem langs) (ring-insert lang-ring elem)))
#+end_src
;; cycle through languages
Enable flyspell for text modes
#+begin_src emacs-lisp
(dolist (hook '(text-mode-hook))
(add-hook hook (lambda () (flyspell-mode 1))))
(dolist (hook '(change-log-mode-hook log-edit-mode-hook))
(add-hook hook (lambda () (flyspell-mode -1)))
)
#+end_src
Cycle through languages with F6
#+begin_src emacs-lisp
(defun cycle-ispell-languages ()
(interactive)
(let ((lang (ring-ref lang-ring -1)))
@ -195,55 +224,85 @@ doom-modeline requires nerd-icons to be able to display icons. Don't forget to r
(setq ispell-program-name "aspell")
(global-set-key [f6] 'cycle-ispell-languages)
#+end_src
;; automatic language detection
Enable flyspell in comments for programming modes
#+begin_src emacs-lisp
(add-hook 'prog-mode-hook
(lambda ()
(flyspell-prog-mode)))
#+end_src
Install [[https://github.com/tmalsburg/guess-language.el][guess-language.el]], which automatically detects the main language used and switches to that dictionary. It even works with documents written in multiple languages!
#+begin_src emacs-lisp
(use-package guess-language
:config
(setq guess-language-languages '(en fr))
(setq guess-language-min-paragraph-length 35)
:custom
(guess-language-languages '(en fr))
(guess-language-min-paragraph-length 35)
:hook
(text-mode . guess-language-mode))
#+end_src
(use-package expand-region
:bind
("C-=" . er/expand-region))
;; enable syntax highlighting in org source blocks
(setq org-src-fontify-natively t)
;; disable latex subscript in org-mode
(setq org-export-with-sub-superscripts nil)
** pdf-tools
[[https://github.com/vedang/pdf-tools][pdf-tools]] allows us to have a pdf viewer embedded inside of Emacs, which also works with org exports.
#+begin_src emacs-lisp
(use-package pdf-tools
:config
(pdf-tools-install)
(setq-default pdf-view-display-size 'fit-width))
#+end_src
* Development
This section contains all of my development related configuration. As a compsci student, it's absolutely mandatory for me to have a good editor experience and have it integrate well with all languages and frameworks I need to use in my day-to-day work.
** git
I use [[https://github.com/magit/magit][magit]] as my git client. It's incredible, it makes everything that you need to do in git available under a single prefix (C-x G), the diff interface is great and has genuinely made me more productive over the months of using it. Definitely prefer using it over the CLI.
#+begin_src emacs-lisp
(use-package magit)
#+end_src
** LSP
The following section contains the configuration of [[https://github.com/emacs-lsp/lsp-mode][lsp-mode]], which aims to provide an IDE like experience by leveraging different available language server protocols.
Install lsp-mode
#+begin_src emacs-lisp
(use-package lsp-mode
:ensure
:commands lsp
:custom
;; what to use when checking on-save. "check" is default, I prefer clippy
#+end_src
Install [[https://github.com/emacs-lsp/lsp-ui][lsp-ui]], which provides UI additions to lsp-mode such as code lenses, flycheck diagnostics etc.
#+begin_src emacs-lisp
(use-package lsp-ui
:after lsp-mode
:hook (lsp-mode . lsp-ui-mode))
#+end_src
Install [[http://company-mode.github.io/][company-mode]], a text completion framework for Emacs that integrates with LSP to provide in-buffer code completion, similar to VS Code and other text editors / IDEs
#+begin_src emacs-lisp
(use-package company
:after lsp-mode)
#+end_src
Install [[https://github.com/sebastiencs/company-box][company-box]], which adds icons to company-mode
#+begin_src emacs-lisp
(use-package company-box
:hook (company-mode . company-box-mode))
#+end_src
*** Rust
Install [[https://github.com/brotzeit/rustic][rustic]], an Emacs major mode for Rust
#+begin_src emacs-lisp
(use-package rustic
:custom
(rustic-format-trigger 'on-save)
(rustic-analyzer-command '("rustup" "run" "stable" "rust-analyzer"))
:hook
(rustic-mode . display-line-numbers-mode))
;; lsp integration
(use-package lsp-mode
:ensure
:commands lsp
:custom
;; what to use when checking on-save. "check" is default, I prefer clippy
(lsp-rust-analyzer-cargo-watch-command "clippy")
(lsp-eldoc-render-all t)
(lsp-idle-delay 0.6))
(use-package lsp-ui
:after lsp-mode
:hook (lsp-mode . lsp-ui-mode))
;; code completion
(use-package company
:after lsp-mode)
(use-package company-box
:hook (company-mode . company-box-mode))
#+end_src
**** LSP
Use [[https://github.com/rust-lang/rust-clippy][clippy]] as the watch command
#+begin_src emacs-lisp
(setq lsp-rust-analyzer-cargo-watch-command "clippy")
(setq lsp-eldoc-render-all t)
(setq lsp-idle-delay 0.6)
#+end_src