My (very simple) Emacs config
I have been using Emacs for 15 years. In that time, I have had large configs, spacemacs, doom, evil/non-evil. This is my current configuration. Package installation is managed via a home-manager nix flake.
I am surprised that I was able to remove everything surrounding vertico and go with fido-mode easily.
I have a parallel configuration that removes lsp and uses eglot, but it's not as fleshed out. I need to be able to use both eslint and typescript language servers and I don't have a reliable way to do that in eglot.
I am currently using emacs-head. I know I don't need to use-package builtin emacs packages but I do anyway.
(use-package isearch
:init (setq isearch-allow-motion t
isearch-motion-changes-direction t
isearch-allow-scroll t
isearch-lazy-count t))
(use-package frame
:bind (("C-z" . nil))
:config (set-frame-font "Iosevka-12" nil t))
(use-package icomplete
:config (fido-vertical-mode 1))
(use-package minibuffer
:init (setq completion-cycle-threshold t))
(use-package battery :config (display-battery-mode 1))
(use-package cus-edit :init (setq custom-file "~/.emacs.d/custom.el"))
(use-package custom :config (load-theme 'modus-vivendi-tinted t))
(use-package ediff-wind :init (setq ediff-window-setup-function 'ediff-setup-windows-plain))
(use-package files
:init (setq make-backup-files nil
confirm-kill-emacs 'y-or-n-p
find-file-visit-truename t))
(use-package menu-bar :config (menu-bar-mode -1))
(use-package mouse :init (setq mouse-yank-at-point t))
(use-package tool-bar :config (tool-bar-mode -1))
(use-package savehist :init (savehist-mode))
(use-package scroll-bar :config (scroll-bar-mode -1))
(use-package grep :config (grep-apply-setting 'grep-find-command '("rg -n -H --no-heading -e '' $(git rev-parse --show-toplevel || pwd)" . 27)))
(use-package magit
:init
(setq git-commit-summary-max-length 50)
:config
(add-to-list 'git-commit-style-convention-checks 'overlong-summary-line))
(use-package git-timemachine)
(use-package minions
:config (minions-mode 1))
(use-package js
:after apheleia
:init
(setq js-indent-level 2)
(when (featurep 'treesit)
(add-to-list 'apheleia-mode-alist '(js-ts-mode . prettier-javascript))))
(use-package js
:bind
(:map js-ts-mode-map ("M-." . nil))
(:map js-mode-map ("M-." . nil)))
(use-package nix-mode)
(use-package markdown-mode)
(use-package project)
(use-package apheleia
:config
(apheleia-global-mode +1)
(defalias 'format-mode 'apheleia-mode))
(use-package go-mode)
(use-package deadgrep :bind ("<f5>" . deadgrep))
(use-package org-roam
:init
(setq org-roam-directory (file-truename "~/org/roam"))
:config
(org-roam-db-autosync-mode))
(use-package treesit
:if (featurep 'treesit)
:init
(setq treesit-font-lock-level 4))
(use-package treesit-auto
:if (featurep 'treesit)
:config
(global-treesit-auto-mode))
(use-package webpaste)
(use-package copilot
:hook (prog-mode . copilot-mode)
:bind (("C-c c" . copilot-complete)
(:map copilot-completion-map
("C-g" . copilot-clear-overlay)
("C-c a" . copilot-accept-completion)
("C-c n" . copilot-next-completion)
("C-c p" . copilot-previous-completion))))
(use-package lsp-mode
:init
(setq lsp-headerline-breadcrumb-enable nil
lsp-enable-snippet nil
lsp-completion-provider :none)
:hook ((js-ts-mode . lsp-deferred)
(go-mode . lsp-deferred)
(typescript-ts-mode . lsp-deferred))
:commands (lsp lsp-deffered))
(use-package flycheck
:init (global-flycheck-mode))
(use-package all-the-icons
:if (display-graphic-p))
deadgrepandtreesit-autoseem really nice, added to my config!I like it.
Didn't know about apheleia, will have to check that one out.
Would you elaborate the part about home-manager? Do you use it to manage emacs packages?
Yes, I use
home-managerto manage my emacs packages, among other things. Here's the snippet that includes my emacs configuration. It's in a file calledcommon.nixwhich I include in my baselinux.nixanddarwin,nixconfigurations.There is a bit dynamism in the config that makes
lsporeglotorverticoconfigurations active. There is a bit at the bottom of myinit.elthat includes those files if they are present. It's not the cleanest solution, but it's mine.Thanks for sharing. It is useful for us noobs to have a look at the configs of more experienced users.
Any thoughts on going from a more in depth, or involved config to a more simple one? I'm somewhere in between, I use vanilla emacs but my config file is pretty large. Most of the largeness comes from an entirely custom set of keybindings. I'm wondering if I should switch to something like xah fly keys instead and just learn new commands/bindings as i go instead of making new ones as I go.