init.el/README.org

237 lines
6.4 KiB
Org Mode
Raw Permalink Normal View History

2024-09-06 05:08:40 -04:00
#+TITLE: Emacs Configuration
#+AUTHOR: frosty
#+EMAIL: passedgoandgot200@gmail.com
#+OPTIONS: num:nil
2024-09-06 05:33:33 -04:00
* Package Bootstrapping
2024-09-06 06:21:20 -04:00
MELPA is a must for any Emacs configuration, it houses nearly everything you'd need related to Emacs. =use-package= is a useful macro for installing and configuring local remote packages.
2024-09-06 05:08:40 -04:00
#+BEGIN_SRC emacs-lisp
2024-09-06 05:33:33 -04:00
;; Add MELPA to the repositories list
2024-09-06 05:08:40 -04:00
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/") t)
2024-09-06 05:33:33 -04:00
;; Load packages list
2024-09-06 05:08:40 -04:00
(package-initialize)
2024-09-06 05:33:33 -04:00
;; Setup `use-package'
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(eval-when-compile
(require 'use-package))
#+END_SRC
2024-09-06 05:08:40 -04:00
2024-09-06 05:33:33 -04:00
* Look and Feel
2024-09-06 06:21:20 -04:00
I tend to like having a clean and unobtrusive interface, so I disable most of the UI elements. Switching to a visual-only bell is also essential; the audio one is quite annoying.
2024-09-06 05:33:33 -04:00
#+BEGIN_SRC emacs-lisp
2024-09-06 05:08:40 -04:00
;; Set the theme
2024-09-06 05:33:33 -04:00
(use-package ample-theme
:ensure t
:config (load-theme 'ample t))
2024-09-06 05:08:40 -04:00
;; Disable menu bar
(menu-bar-mode -1)
;; Disable tool bar
(tool-bar-mode -1)
;; Disable scroll bars
(toggle-scroll-bar -1)
;; Disable splash screen
(setq inhibit-startup-screen t)
;; Display line numbers
(global-display-line-numbers-mode 1)
(setq-default display-line-numbers-width 3)
;; Highlight current line
(global-hl-line-mode 1)
;; Show trailing whitespace
(setq-default show-trailing-whitespace t)
;; Flash mode line on bell
2024-09-06 05:33:33 -04:00
(use-package mode-line-bell
:ensure t
:config (mode-line-bell-mode))
#+END_SRC
2024-09-06 06:05:02 -04:00
* Input and Text Manipulation
2024-09-06 06:21:20 -04:00
Useful options and packages for manipulating text, including the almighty Evil mode, which emulates Vi-style bindings. I also use these bindings in other modes, such as Dired and Org.
2024-09-06 06:05:02 -04:00
#+BEGIN_SRC emacs-lisp
;; Better mouse scrolling
(setq mouse-wheel-progressive-speed nil)
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
;; Auto-pair parenthesis
(electric-pair-mode 1)
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
;; Automatically trim trailing whitespace on save
(add-hook 'before-save-hook 'delete-trailing-whitespace)
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
;;; VIM emulation
(use-package evil
:ensure t
:init
(setq
;; Scroll up with C-u
evil-want-C-u-scroll t
;; Yank to EOL with Y
evil-want-Y-yank-to-eol t
;; Create split windows below
evil-split-window-below t
;; Create vsplit windows to the right
evil-vsplit-window-right t)
:config (evil-mode))
2024-09-06 06:21:20 -04:00
;; General extension for Evil
(use-package evil-collection
2024-09-11 22:34:26 -04:00
:ensure t
2024-09-06 06:21:20 -04:00
:after evil
:config
(setq evil-collection-mode-list '(dired ibuffer))
(evil-collection-init))
2024-09-06 06:05:02 -04:00
;; Org extension for Evil
(use-package evil-org
:ensure t
:after org
:hook (org-mode . evil-org-mode))
#+END_SRC
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
* General Interface Improvements
2024-09-06 06:21:20 -04:00
I consider Vertico to be essential, as I find it to be a superior completion UI over the default one. Orderless is also very convenient as a completion style. Consult is very useful for searching through your buffers.
2024-09-06 06:05:02 -04:00
#+BEGIN_SRC emacs-lisp
;; Use short yes/no answers
(setq-default use-short-answers t)
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
;;; Completion UI
(use-package vertico
:ensure t
:config
(vertico-mode)
;; Improve directory navigation
(define-key vertico-map (kbd "RET") #'vertico-directory-enter)
(define-key vertico-map (kbd "DEL") #'vertico-directory-delete-word)
(define-key vertico-map (kbd "M-d") #'vertico-directory-delete-char))
;;; Completion style
(use-package orderless
:ensure t
:config
(setq completion-styles '(orderless basic)
completion-category-overrides '((file (styles basic partial-completion)))))
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
;;; Extended completion utilities
(use-package consult
:ensure t
:config
(global-set-key [rebind switch-to-buffer] #'consult-buffer)
(global-set-key (kbd "C-c j") #'consult-line)
(global-set-key (kbd "C-c i") #'consult-imenu))
;; Completion options
(setq read-buffer-completion-ignore-case t
read-file-name-completion-ignore-case t
completion-ignore-case t)
#+END_SRC
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
* Programming Extensions
2024-09-06 06:21:20 -04:00
Adding support for LSP, enabling static analysis, pop-up completions, Git integration, and other major modes not included by default.
2024-09-06 06:05:02 -04:00
#+BEGIN_SRC emacs-lisp
;;; LSP support
(use-package eglot
:ensure t
;; Enable LSP support by default in programming buffers
:hook (prog-mode-hook . eglot-ensure)
:config
;; Create a memorable alias for `eglot-ensure'.
(defalias 'start-lsp-server #'eglot))
;;; Static analysis
(use-package flymake
:hook (prog-mode-hook . flymake-mode)
:config
;; Display messages when idle, without prompting
(setq help-at-pt-display-when-idle t)
;; Message navigation bindings
(define-key flymake-mode-map (kbd "C-c n") #'flymake-goto-next-error)
(define-key flymake-mode-map (kbd "C-c p") #'flymake-goto-prev-error))
;;; Pop-up completion
(use-package corfu
:ensure t
;; Enable autocompletion by default in programming buffers
:hook (prog-mode-hook . corfu-mode)
;; Enable automatic completion
:init (setq corfu-auto t))
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
;;; Git client
(use-package magit
:ensure t
:config
;; Bind the `magit-status' command to a convenient key.
(global-set-key (kbd "C-c g") #'magit-status))
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
;;; Diff indication
(use-package diff-hl
:ensure t
;; Enable `diff-hl' support by default in programming buffers
:hook (prog-mode-hook . diff-hl-mode))
;;; Extra language modes
(use-package go-mode
:ensure t)
(use-package json-mode
:ensure t)
(use-package lua-mode
:ensure t)
(use-package rust-mode
:ensure t)
(use-package yaml-mode
:ensure t)
(use-package markdown-mode
:ensure t)
;;; EditorConfig support
(use-package editorconfig
:ensure t
:config (editorconfig-mode))
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
;;; Terminal emulator
(use-package eat
:ensure t
:config
(setq
;; Close the terminal buffer when the shell terminates
eat-kill-buffer-on-exit t
;; Enable mouse support
eat-enable-mouse t))
;;; Jump to arbitrary positions
(use-package avy
:ensure t
:config
(global-set-key (kbd "C-c z") #'avy-goto-word-1))
#+END_SRC
2024-09-06 05:08:40 -04:00
2024-09-06 06:05:02 -04:00
* Etcetera
2024-09-06 06:21:20 -04:00
Anything else that doesn't fit the bill.
2024-09-06 06:05:02 -04:00
#+BEGIN_SRC emacs-lisp
;; Store automatic customization options elsewhere
(setq custom-file (locate-user-emacs-file "custom.el"))
(when (file-exists-p custom-file)
(load custom-file))
;; Persist history over restarts
(use-package savehist
:config (savehist-mode))
2024-09-06 05:08:40 -04:00
#+END_SRC