aboutsummaryrefslogtreecommitdiff
path: root/emacs/.config
diff options
context:
space:
mode:
authorHenry J. Webster <hwebs@hwebs.info>2026-07-30 12:04:12 -0500
committerHenry J. Webster <hwebs@hwebs.info>2026-07-30 12:04:12 -0500
commit348507638576563528b6a9ab5091ca906490dd51 (patch)
tree2269e9b7fe8111bf8b0088837639d4ffcacf6628 /emacs/.config
parentdc1b0050762fc115814119ea06518de5363fe038 (diff)
Convert dotfiles to GNU Stow package layout
Restructure into per-app stow packages (bash, emacs, mako) whose trees mirror $HOME. Preserve emacs runtime data under the new package path and update .gitignore accordingly. Add README documenting stow usage. Assisted-by: Claude:claude-opus-4-8
Diffstat (limited to 'emacs/.config')
-rw-r--r--emacs/.config/emacs/early-init.el9
-rw-r--r--emacs/.config/emacs/init.el128
2 files changed, 137 insertions, 0 deletions
diff --git a/emacs/.config/emacs/early-init.el b/emacs/.config/emacs/early-init.el
new file mode 100644
index 0000000..7770747
--- /dev/null
+++ b/emacs/.config/emacs/early-init.el
@@ -0,0 +1,9 @@
+(setq inhibit-startup-message t)
+
+;; minimal UI
+(menu-bar-mode -1)
+(tool-bar-mode -1)
+(setq use-dialog-box nil)
+
+;; be quiet please...
+(setq ring-bell-function 'ignore)
diff --git a/emacs/.config/emacs/init.el b/emacs/.config/emacs/init.el
new file mode 100644
index 0000000..8363cf5
--- /dev/null
+++ b/emacs/.config/emacs/init.el
@@ -0,0 +1,128 @@
+;;; init.el --- Emacs configuration -*- lexical-binding: t; -*-
+
+(require 'package)
+(add-to-list 'package-archives
+ '("melpa" . "https://melpa.org/packages/") t)
+(package-initialize)
+
+(unless package-archive-contents
+ (package-refresh-contents))
+
+(require 'use-package)
+(setq use-package-always-ensure t)
+
+(scroll-bar-mode -1)
+(set-face-attribute 'default nil :height 130)
+(setq display-line-numbers-type 'relative)
+(global-display-line-numbers-mode 1)
+(setq-default indent-tabs-mode nil)
+
+;; prevent fancy animations from garbling compilation buffers
+(advice-add 'compilation-start :around
+ (lambda (orig &rest args)
+ (let ((process-connection-type nil))
+ (apply orig args))))
+
+(setq custom-file (concat user-emacs-directory "custom.el"))
+(setq backup-directory-alist `(("." . ,(concat user-emacs-directory
+ "backups"))))
+
+(use-package ibuffer
+ :custom
+ (ibuffer-expert t)
+ (ibuffer-show-empty-filter-groups nil)
+ :hook (ibuffer-mode . ibuffer-auto-mode))
+
+(use-package evil
+ :init
+ (setq evil-want-keybinding nil)
+ (setq evil-undo-system 'undo-redo)
+ :config
+ (evil-set-leader '(normal visual) (kbd "SPC"))
+ (evil-define-key '(normal visual) 'global
+ (kbd "<leader>bi") #'ibuffer)
+ (evil-mode 1))
+
+(use-package evil-collection
+ :after evil
+ :config
+ (evil-collection-init))
+
+;; TODO: make new custom theme based on this...
+;; this theme doesn't have ANSI colors for vterm
+;; (use-package vs-dark-theme
+;; :config
+;; (load-theme 'vs-dark t))
+
+(load-theme 'modus-vivendi t)
+
+;; needs pgtk/GTK build
+;; TODO: this is crashing my emacs :(
+;;(add-to-list 'default-frame-alist '(alpha-background . 80))
+;;(set-frame-parameter nil 'alpha-background 75)
+
+;;;; dev
+
+
+(use-package vterm
+ ;; provided by Nix (emacsPackages.vterm)
+ :ensure nil
+ :commands vterm
+ :init
+ (evil-define-key 'normal 'global (kbd "<leader>ot") #'vterm))
+
+(use-package apheleia
+ :config
+ (add-to-list 'apheleia-mode-alist '(scheme-mode . lisp-indent))
+ (apheleia-global-mode +1))
+
+
+;;;;; markdown
+(use-package markdown-mode
+ :mode ("\\.md\\'" . gfm-mode)
+ :hook (markdown-mode . flyspell-mode))
+
+(setq ispell-program-name "aspell"
+ ispell-dictionary "en_US")
+(add-hook 'markdown-mode-hook #'flyspell-mode)
+
+(use-package nix-ts-mode
+ :mode "\\.nix\\'")
+
+;;;;; zig
+;; grammar NOT from Nix: nixpkgs builds maxxnino/tree-sitter-zig, but
+;; zig-ts-mode needs the tree-sitter-grammars variant. Install it with
+;; `C-u M-x zig-ts-install-grammars' (lands in ~/.config/emacs/tree-sitter/).
+;; apheleia formats via `zig fmt' (zig must be on PATH)
+(use-package zig-ts-mode
+ :mode "\\.zig\\'")
+
+;;;;; javascript
+;; grammar provided by Nix (treesit-grammars tree-sitter-javascript);
+;; apheleia formats via prettier (needs prettier on PATH)
+(use-package js
+ :ensure nil
+ :mode ("\\.js\\'" . js-ts-mode)
+ :custom (js-indent-level 2))
+
+;;;;; scheme
+(use-package geiser-guile)
+
+(use-package rainbow-delimiters
+ :hook
+ (scheme-mode . rainbow-delimiters-mode)
+ (emacs-lisp-mode . rainbow-delimiters-mode))
+
+(add-hook 'scheme-mode-hook #'electric-pair-local-mode)
+
+;;;;; elisp
+(add-hook 'emacs-lisp-mode-hook #'outline-minor-mode)
+(add-hook 'emacs-lisp-mode-hook #'electric-pair-local-mode)
+
+;;;;; c
+
+;; TODO: I truly do not understand the interaction
+;; between this and apheleia / clang format
+(setq-default c-default-style "k&r"
+ c-basic-offset 4)
+