From 348507638576563528b6a9ab5091ca906490dd51 Mon Sep 17 00:00:00 2001 From: "Henry J. Webster" Date: Thu, 30 Jul 2026 12:04:12 -0500 Subject: 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 --- emacs/.config/emacs/early-init.el | 9 +++ emacs/.config/emacs/init.el | 128 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 emacs/.config/emacs/early-init.el create mode 100644 emacs/.config/emacs/init.el (limited to 'emacs/.config') 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 "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 "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) + -- cgit v1.3