261 lines
9.8 KiB
Org Mode
261 lines
9.8 KiB
Org Mode
|
#+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
|
|||
|
The font I’m using (see *here*) supports ligatures, but Emacs in GUI
|
|||
|
mode does not. And of course, there’s a package for that.
|
|||
|
|
|||
|
# Insert equivalent of #Basic-configuration-Visual-Configuration-Fontsxfkjel6184j0 in *here*
|
|||
|
|
|||
|
#+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
|
|||
|
:init (doom-modeline-mode 1)
|
|||
|
:config
|
|||
|
(csetq 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)
|
|||
|
(mu4e-alert-enable-mode-line-display))
|
|||
|
#+end_src
|
|||
|
|
|||
|
** Pixel-perfect alignment of Markdown and org-mode tables
|
|||
|
:END:
|
|||
|
Usually, I have no issue with the alignment of the tables I write in
|
|||
|
org-mode and (more rarely) Markdown. However, there are occurences
|
|||
|
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.
|
|||
|
|
|||
|
Solaire-mode applies a subtle but useful tweak to your current color
|
|||
|
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
|
|||
|
than the default Nord theme since it is richer in colors --- just a
|
|||
|
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
|
|||
|
|
|||
|
** Y’all want some more /COLORS/?
|
|||
|
It is possible to make info buffers much more colorful (and imo easier
|
|||
|
to read) with this simple package:
|
|||
|
#+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
|