diff options
Diffstat (limited to 'share/home/emacs/emacs.org')
| -rw-r--r-- | share/home/emacs/emacs.org | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/share/home/emacs/emacs.org b/share/home/emacs/emacs.org new file mode 100644 index 0000000..aa5dbae --- /dev/null +++ b/share/home/emacs/emacs.org @@ -0,0 +1,155 @@ +#+TITLE: Miran Bastaja's Emacs Configuration +#+PROPERTY: header-args :tangle init.el +#+TOC: headlines 2 + +* Preface + +** Inspiration + +The current structure of this config was pretty much entirely copied from +[[https://rossabaker.com/configs/emacs/][Ross A. Baker's configuration]]. Many other resources such as stack overflow, +and other peoples configs were used. Here's some of the more notable ones: +- [[https://sanemacs.com/][sanemacs]] +- [https://idiomdrottning.org/bad-emacs-defaults] + +** TODO Licensing + +* Startup + +** Early Init + +From preliterate items. +#+begin_src emacs-lisp :tangle early-init.el + ;; All our packages come from Nix + (setq package-enable-at-startup nil + package-archives nil) + (provide 'early-init) + ;;; early-init.el ends here +#+end_src + +** Packages + +*** Ensuring packages + +Most of this config is broken down into [[https://github.com/jwiegley/use-package][~use-package~]] stanzas. All +dependencies are managed by [[https://nixos.org/][Nix]]. Any package with a true ~:ensure~ +keyword is found by [[https://github.com/nix-community/emacs-overlay#extra-library-functionality][~emacsWithPackagesFromUsePackage~]] to generate +the set of Emacs packages to install with Nix. + +In the brutish non-Nix world, ~:ensure~ triggers Emacs' own package +manager with willy nilly downloads. To prevent this, we tell +~use-package~ to assume the package is there and merely look for its +autoloads. + +#+begin_src emacs-lisp +(defun ross/use-package-ensure-already-installed + (name _ensure state &optional _context) + "Value for `use-package-ensure-function` that assumes the package + is already installed. This is true in our Nix environment." + (let ((autoloads-file-name (format "%s-autoloads" name))) + (with-demoted-errors "Error loading autoloads: %s" + (load autoloads-file-name t t)))) + +(setq use-package-ensure-function #'ross/use-package-ensure-already-installed) +#+end_src + +*** Hook naming + +~use-package~ also by default appends ~"-hook"~ to all its hooks. +This impairs ripgreppability. Let's be explicit: + +#+begin_src emacs-lisp +(setq use-package-hook-name-suffix nil) +#+end_src + +*** Load it + +~use-package~ doesn't use itself. (Well, I think it could, but this +is the recommended approach...) + +#+begin_src emacs-lisp +(eval-when-compile + (require 'use-package)) +#+end_src + +** Helpers + +*** General + +[[https://github.com/noctuid/general.el][General]] is known for keybindings, particularly among [[https://github.com/emacs-evil/evil][the evil]]. A +lesser known feature is [[https://github.com/noctuid/general.el#settings][~general-setq~]], which understands the ~:set~ +hooks of custom variables. [[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=21695][#21695]] raged on for a half decade without +a consensus, and I find this solution as tidy as any, + +#+begin_src emacs-lisp +(use-package general :ensure) +#+end_src + +* Personalization + +#+begin_src emacs-lisp +(general-setq user-full-name "Miran Bastaja" + user-mail-address "miran.bastaja04@gmail.com") +#+end_src + +* Display + +** Scrolling + +Emacs' default scrolling behavior feels a bit janky in the 2020s. + +- ~scroll-conservatively~ has a magic number of ~100~. Greater than + this scrolls just enough to get the point back on screen without + recentering. + +- ~scroll-margin~ specifies how many lines of context to keep above + and below the point. + +#+begin_src emacs-lisp +(use-package emacs + :custom + (frame-inhibit-implied-resize t) + (scroll-conservatively 101) + (scroll-margin 2) + (scroll-preserve-screen-position t)) +#+end_src + +* Customization + +** Theme + +I use [[https://github.com/doomemacs/themes][Doom emacs' theme pack]] to source my themes. + +#+begin_src emacs-lisp +(use-package doom-themes + :ensure t + :config + ;; Global settings (defaults) + (setq doom-themes-enable-bold t ; if nil, bold is universally disabled + doom-themes-enable-italic t) ; if nil, italics is universally disabled + (load-theme 'doom-one t) + + ;; Enable flashing mode-line on errors + (doom-themes-visual-bell-config) + ;; Corrects (and improves) org-mode's native fontification. + (doom-themes-org-config)) +#+end_src + +* Languages + +** Emacs Lisp + +I use local variables in this config to keep the code from indenting +two spaces. Without this, we get prompted the first time we read +this file: + +#+begin_src emacs-lisp +(dolist (pair '((org-src-preserve-indentation . t) (org-src-tab-acts-natively . t))) + (add-to-list 'safe-local-variable-values pair)) +#+end_src + +** Org + +#+begin_src emacs-lisp + +#+end_src |
