8.0 KiB
Interface
Bring Emacs out of the eighties
Completion
There's a lot of occasions Emacs asks to input text to match a file name in a directory, just one example of an oppertunity for a completion system. Swiper1 is a family of packages that work towards this common goal in Emacs.
Selection menu
Ivy1 is a powerful selection menu for Emacs.
(use-package ivy :diminish :config (ivy-mode 1))
Replace built in commands
Counsel1 is a customized set of commands to replace built in completion buffers.
(use-package counsel :after ivy :custom (counsel-linux-app-format-function #'counsel-linux-app-format-function-name-only) :config (counsel-mode 1))
Switch buffers with ,
Cherry picked from doom
.
(dotfiles/leader "," '(counsel-switch-buffer :which-key "Buffers"))
Additional details
Provide more information about each item in the completion menu with Ivy rich2.
(use-package ivy-rich :after counsel :init (ivy-rich-mode 1))
Fonts
Write out to all of Emacs' available font faces with the unified font defined in the options.
(set-face-attribute 'default nil :font dotfiles/font :height dotfiles/font-size) (set-face-attribute 'fixed-pitch nil :font dotfiles/font :height dotfiles/font-size) (set-face-attribute 'variable-pitch nil :font dotfiles/font :height dotfiles/font-size)
Text scaling
Define a transient keybinding for Scaling the text.
(defhydra hydra-text-scale (:timeout 4) "Scale" ("j" text-scale-increase "Increase") ("k" text-scale-decrease "Decrease") ("f" nil "Finished" :exit t))
-
Scale the text inside of buffers with
SPC t f
-
Increase
j
-
Decrease
k
-
Finished
f
-
(dotfiles/leader "tf" '(hydra-text-scale/body :which-key "Font"))
Icons
Dired feels more modern with prioritized icon fonts using All the Icons3. This makes navigation and visually parsing directories much faster, given that file types are quickly identified by their corresponding icons.
(use-package all-the-icons)
Integration with the All the Icons Dired4package.
(use-package all-the-icons-dired :hook (dired-mode . all-the-icons-dired-mode))
Themes
High quality and modern colour themes are provided in the Doom Themes5 package.
(use-package doom-themes :init (load-theme 'doom-moonlight t))
Load a theme with SPC t t
.
(dotfiles/leader "tt" '(counsel-load-theme t t :which-key "Theme"))
Modeline
Doom modeline6 provides an elegant and modern status bar / modeline.
(use-package doom-modeline :custom (doom-modeline-height 16) :config (doom-modeline-mode 1))
Line numbering
Relative line numbers are important when using VI emulation keys. You can prefix commands with a number, allowing you to perform that action that number of times. Useful when navigating around pages that are hundreds, or even thousands of lines long.
5: 4: 3: 2: 1: 156: << CURRENT LINE >> 1: 2: 3: 4: 5:
(use-package linum-relative :commands (linum-relative-global-mode) :custom (linum-relative-backend 'display-line-numbers-mode))
Toggle line numbers with SPC t l
.
(dotfiles/leader "tl" '(linum-relative-global-mode :which-key "Lines"))
Parenthesis
Colourize nested parenthesis with Rainbow delimeters7.
(use-package rainbow-delimiters :hook (prog-mode . rainbow-delimiters-mode))
Pretty symbols
Ligatures
Enable font ligatures via Fira Code mode10, perform this action only when Fira Code is the current font.
(when (display-graphic-p) (use-package fira-code-mode :hook (prog-mode org-mode)))
Toggle global ligature mode with SPC t g
.
(dotfiles/leader "tg" '(global-fira-code-mode :which-key "Ligatures"))
Dashboard
Present a Dashboard when first launching Emacs. Customize the buttons of the navigator.
-
Brain @ http://localhost:8080
-
Homepage @ https://chrishayward.xyz
-
Athabasca @ https://login.athabascau.ca/cas/login
-
Bookshelf @ https://online.vitalsource.com
(use-package dashboard :custom (dashboard-center-content t) (dashboard-set-init-info t) (dashboard-set-file-icons t) (dashboard-set-heading-icons t) (dashboard-set-navigator t) (dashboard-startup-banner 'logo) (dashboard-projects-backend 'projectile) (dashboard-items '((projects . 5) (recents . 5) (agenda . 10))) (dashboard-navigator-buttons `(((,(all-the-icons-fileicon "brain" :height 1.1 :v-adjust 0.0) "Brain" "Knowledge base" (lambda (&rest _) (browse-url "http://localhost:8080")))) ((,(all-the-icons-material "public" :height 1.1 :v-adjust 0.0) "Homepage" "Personal website" (lambda (&rest _) (browse-url "https://chrishayward.xyz")))) ((,(all-the-icons-faicon "university" :height 1.1 :v-adjust 0.0) "Athabasca" "Univeristy login" (lambda (&rest _) (browse-url "https://login.athabascau.ca/cas/login")))) ((,(all-the-icons-faicon "book" :height 1.1 :v-adjust 0.0) "Bookshelf" "Vitalsource bookshelf" (lambda (&rest _) (browse-url "https://online.vitalsource.com")))))) :config (dashboard-setup-startup-hook))
When running in daemon mode, ensure that the dashboard is the initial buffer.
(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))
Quickly navigate to the dashboard with SPC SPC
.
(dotfiles/leader "SPC" '((lambda () (interactive) (switch-to-buffer "*dashboard*")) :which-key "Dashboard"))