2023-09-18 16:45:14 +00:00
|
|
|
|
#+title: Emacs — Packages — Visual Configuration
|
|
|
|
|
#+setupfile: ../../headers
|
|
|
|
|
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
|
|
|
|
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/visual-config.el
|
|
|
|
|
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
|
|
|
|
|
|
|
|
|
* Visual Configuration
|
|
|
|
|
** Dashboard
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package dashboard
|
|
|
|
|
:straight (:build t)
|
|
|
|
|
:ensure t
|
|
|
|
|
:after all-the-icons
|
|
|
|
|
:config
|
|
|
|
|
(setq dashboard-banner-logo-title "Phundrak’s Vanilla Emacs"
|
|
|
|
|
dashboard-startup-banner 'logo
|
|
|
|
|
dashboard-center-content t
|
|
|
|
|
dashboard-show-shortcuts t
|
|
|
|
|
dashboard-set-navigator t
|
|
|
|
|
dashboard-set-heading-icons t
|
|
|
|
|
dashboard-set-file-icons t
|
|
|
|
|
initial-buffer-choice (lambda () (get-buffer "*dashboard*"))
|
|
|
|
|
dashboard-projects-switch-function 'counsel-projectile-switch-project-by-name)
|
|
|
|
|
(setq dashboard-navigator-buttons
|
|
|
|
|
`(((,(all-the-icons-faicon "language" :height 1.1 :v-adjust 0.0)
|
|
|
|
|
"Linguistics Website"
|
|
|
|
|
""
|
|
|
|
|
(lambda (&rest _) (browse-url "https://langue.phundrak.com")))
|
|
|
|
|
|
|
|
|
|
(,(all-the-icons-faicon "firefox" :height 1.1 :v-adjust 0.0)
|
|
|
|
|
"Config Website"
|
|
|
|
|
""
|
|
|
|
|
(lambda (&rest _) (browse-url "https://config.phundrak.com"))))
|
|
|
|
|
|
|
|
|
|
((,(all-the-icons-octicon "git-branch" :height 1.1 :v-adjust 0.0)
|
|
|
|
|
"Dotfiles Sources"
|
|
|
|
|
""
|
|
|
|
|
(lambda (&rest _) (browse-url "https://labs.phundrak.com/phundrak/dotfiles")))
|
|
|
|
|
("!" "Issues" "Show issues" (lambda (&rest _)
|
|
|
|
|
(browse-url "https://labs.phundrak.com/phundrak/dotfiles/issues"))
|
|
|
|
|
warning))
|
|
|
|
|
((,(all-the-icons-faicon "level-up" :height 1.1 :v-adjust 0.0)
|
|
|
|
|
"Update Packages"
|
|
|
|
|
""
|
|
|
|
|
(lambda (&rest _) (progn
|
|
|
|
|
(require 'straight)
|
|
|
|
|
(straight-pull-all)
|
|
|
|
|
(straight-rebuild-all)))))))
|
|
|
|
|
|
|
|
|
|
(setq dashboard-items '((recents . 15)
|
|
|
|
|
(agenda . 10)
|
|
|
|
|
(projects . 10)))
|
|
|
|
|
(dashboard-setup-startup-hook)
|
|
|
|
|
:init
|
|
|
|
|
(add-hook 'after-init-hook 'dashboard-refresh-buffer))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Fringe
|
|
|
|
|
It’s nice to know which lines were modified since the last commit in a
|
|
|
|
|
file.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package git-gutter-fringe
|
|
|
|
|
:straight (:build t)
|
|
|
|
|
:hook ((prog-mode . git-gutter-mode)
|
|
|
|
|
(org-mode . git-gutter-mode)
|
|
|
|
|
(markdown-mode . git-gutter-mode)
|
|
|
|
|
(latex-mode . git-gutter-mode)))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Icons? Did someone say icons?
|
|
|
|
|
/*YES! ALL OF THEM!*/
|
|
|
|
|
|
|
|
|
|
Ahem…
|
|
|
|
|
|
|
|
|
|
The package ~all-the-icons~ allows us to use a wide variety of icons in
|
|
|
|
|
Emacs for various purposes, wherever we want, and /THAT/ is *GREAT*! I’ll
|
|
|
|
|
(ab)use this feature in my config, be warned! *NOTE*: The first time a
|
|
|
|
|
configuration with ~all-the-icons~ loads on a machine, the needed fonts
|
|
|
|
|
might not be available, so you’ll need to install them with the
|
|
|
|
|
command ~M-x all-the-icons-install-fonts~.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package all-the-icons
|
|
|
|
|
:defer t
|
|
|
|
|
:straight t)
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
~prettify-symbols-mode~ is also a nifty feature of Emacs, and it is
|
|
|
|
|
built-in! With that, I can replace strings of my choice by another
|
|
|
|
|
character of my choice! First, let’s declare the general symbols that
|
|
|
|
|
will be used everywhere.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(defun prog-mode-set-symbols-alist ()
|
|
|
|
|
(setq prettify-symbols-alist '(("lambda" . ?λ)))
|
|
|
|
|
(prettify-symbols-mode 1))
|
|
|
|
|
|
|
|
|
|
(add-hook 'prog-mode-hook #'prog-mode-set-symbols-alist)
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
We can now take care of the language-specific symbols. First, let’s
|
|
|
|
|
declare some symbols for the Lisp languages.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(setq-default lisp-prettify-symbols-alist '(("lambda" . ?λ)
|
|
|
|
|
("defun" . ?𝑓)
|
|
|
|
|
("defvar" . ?𝑣)
|
|
|
|
|
("defcustom" . ?𝑐)
|
|
|
|
|
("defconst" . ?𝐶)))
|
|
|
|
|
|
|
|
|
|
(defun lisp-mode-prettify ()
|
|
|
|
|
(setq prettify-symbols-alist lisp-prettify-symbols-alist)
|
|
|
|
|
(prettify-symbols-mode -1)
|
|
|
|
|
(prettify-symbols-mode 1))
|
|
|
|
|
|
|
|
|
|
(dolist (lang '(emacs-lisp lisp common-lisp scheme))
|
|
|
|
|
(add-hook (intern (format "%S-mode-hook" lang))
|
|
|
|
|
#'lisp-mode-prettify))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
Finally, similar to how ~org-appear~ behaves, let’s show the real string
|
|
|
|
|
of our symbols when the cursor is on it.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(setq prettify-symbols-unprettify-at-point t)
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Ligatures
|
2023-12-10 14:09:07 +00:00
|
|
|
|
The font I’m using supports ligatures, but Emacs in GUI mode does not.
|
|
|
|
|
And of course, there’s a package for that.
|
2023-09-18 16:45:14 +00:00
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package ligature
|
|
|
|
|
:straight (ligature :type git
|
|
|
|
|
:host github
|
|
|
|
|
:repo "mickeynp/ligature.el"
|
|
|
|
|
:build t)
|
|
|
|
|
:config
|
|
|
|
|
(ligature-set-ligatures 't
|
|
|
|
|
'("www"))
|
|
|
|
|
;; Enable traditional ligature support in eww-mode, if the
|
|
|
|
|
;; `variable-pitch' face supports it
|
|
|
|
|
(ligature-set-ligatures '(eww-mode org-mode elfeed-show-mode)
|
|
|
|
|
'("ff" "fi" "ffi"))
|
|
|
|
|
;; Enable all Cascadia Code ligatures in programming modes
|
|
|
|
|
(ligature-set-ligatures 'prog-mode
|
|
|
|
|
'("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
|
|
|
|
|
":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
|
|
|
|
|
"!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
|
|
|
|
|
"<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
|
|
|
|
|
"<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
|
|
|
|
|
"..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
|
|
|
|
|
"~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
|
|
|
|
|
"[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
|
|
|
|
|
">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
|
|
|
|
|
"<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
|
|
|
|
|
"##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
|
|
|
|
|
"?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
|
|
|
|
|
"\\\\" "://"))
|
|
|
|
|
(global-ligature-mode t))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Modeline
|
|
|
|
|
The DoomEmacs modeline looks nice in my opinion, let’s use it.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package doom-modeline
|
|
|
|
|
:straight (:build t)
|
|
|
|
|
:defer t
|
2023-12-17 20:40:20 +00:00
|
|
|
|
:init
|
|
|
|
|
(doom-modeline-mode 1)
|
|
|
|
|
(setq find-file-visit-truename t)
|
|
|
|
|
:custom
|
|
|
|
|
(doom-modeline-height 15)
|
|
|
|
|
(doom-modeline-enable-word-count t)
|
|
|
|
|
(doom-modeline-continuous-word-count-modes '(markdown-mode gfm-mode org-mode))
|
|
|
|
|
(doom-modeline-mu4e t)
|
|
|
|
|
(doom-modeline-env-version t)
|
|
|
|
|
(doom-modeline-buffer-file-name-style 'truncate-upto-project)
|
2023-09-18 16:45:14 +00:00
|
|
|
|
:config
|
|
|
|
|
(mu4e-alert-enable-mode-line-display))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Pixel-perfect alignment of Markdown and org-mode tables
|
|
|
|
|
Usually, I have no issue with the alignment of the tables I write in
|
2023-12-10 14:09:07 +00:00
|
|
|
|
org-mode and (more rarely) Markdown. However, there are occurrences
|
2023-09-18 16:45:14 +00:00
|
|
|
|
where I’ll use a character that does not exactly respect my monospace
|
|
|
|
|
font, which messes with the alignment of the table (often when I do
|
|
|
|
|
linguistics stuff). A solution to this is the package ~valign~. A little
|
|
|
|
|
caveat though, as its name implies ~valign~ helps with vertical
|
|
|
|
|
alignment. If some lines are too high, they won’t exactly fit. Unless?
|
|
|
|
|
Unless ~valign-fancy-bar~ is set to ~t~.
|
|
|
|
|
|
|
|
|
|
For now, I disabled the hook with org-mode and markdown-mode because
|
|
|
|
|
it slows down opening these files quite a lot. I’ll re-enable the hook
|
|
|
|
|
once it is fixed.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package valign
|
|
|
|
|
:defer t
|
|
|
|
|
:straight (:build t)
|
|
|
|
|
:after (org markdown-mode)
|
|
|
|
|
;; :hook ((org-mode markdown-mode) . valign-mode)
|
|
|
|
|
:custom ((valign-fancy-bar t)))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Secret mode
|
|
|
|
|
Sometimes, I want to hide the text displayed by Emacs but not lock
|
|
|
|
|
altogether my computer. In this case, ~secret-mode~ comes in handy.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package secret-mode
|
|
|
|
|
:defer t
|
|
|
|
|
:straight (secret-mode :build t
|
|
|
|
|
:type git
|
|
|
|
|
:host github
|
|
|
|
|
:repo "bkaestner/secret-mode.el"))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Solaire: Incandescent Emacs
|
|
|
|
|
A common issue when you have a lot of windows opened in Emacs is
|
|
|
|
|
sometimes there’s just too much. Is the first window source code? Is
|
|
|
|
|
the other one just an open email? Oh, let’s not forget the ~*Messages*~
|
|
|
|
|
buffer open next to another source buffer.
|
|
|
|
|
|
2023-12-10 14:09:07 +00:00
|
|
|
|
Solaire-mode applies a subtle but useful tweak to your current colour
|
2023-09-18 16:45:14 +00:00
|
|
|
|
scheme: the background of programming buffers is slightly lighter than
|
|
|
|
|
the background of other buffers. (Or is it other buffers that have a
|
|
|
|
|
slightly darker background? I’m not sure.)
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package solaire-mode
|
|
|
|
|
:defer t
|
|
|
|
|
:straight (:build t)
|
|
|
|
|
:init (solaire-global-mode +1))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Theme
|
|
|
|
|
You may have noticed I use the Nord theme pretty much everywhere on my
|
|
|
|
|
computer, why not Emacs? In my opinion, its aurora variant is nicer
|
2023-12-10 14:09:07 +00:00
|
|
|
|
than the default Nord theme since it is richer in colours --- just a
|
2023-09-18 16:45:14 +00:00
|
|
|
|
personal preference.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package doom-themes
|
|
|
|
|
:straight (:build t)
|
|
|
|
|
:defer t
|
|
|
|
|
:init (load-theme 'doom-nord-aurora t))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Rainbow Delimiters
|
|
|
|
|
This makes Lisp especially more readable, but it’s also nice to have
|
|
|
|
|
for any language that has delimiters like brackets too.
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package rainbow-delimiters
|
|
|
|
|
:straight (:build t)
|
|
|
|
|
:defer t
|
|
|
|
|
:hook (prog-mode . rainbow-delimiters-mode))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
2023-12-10 14:09:07 +00:00
|
|
|
|
** Y’all want some more /COLOURS/?
|
|
|
|
|
It is possible to make info buffers much more colourful (and, in my
|
|
|
|
|
opinion, easier to read) with this simple package:
|
2023-09-18 16:45:14 +00:00
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package info-colors
|
|
|
|
|
:straight (:build t)
|
|
|
|
|
:commands info-colors-fnontify-node
|
|
|
|
|
:hook (Info-selection . info-colors-fontify-node)
|
|
|
|
|
:hook (Info-mode . mixed-pitch-mode))
|
|
|
|
|
#+end_src
|