This is my very own Emacs configuration. There are many like it, but this one's mine.
This configuration is meant and has only been tested with Emacs 31.1.
Packages are managed with straight.el,
which installs them as git clones of their own repositories (in straight/repos/),
instead of tarballs like package.el does. This makes it easy to hack on packages (M-x straight-visit-package) and contribute changes upstream.
Packages that ship with Emacs are used as built-ins; they are registered with straight
via :type built-in so that package dependencies don't pull repository checkouts
anyway.
Upgrades are manual and reviewable:
M-x straight-fetch-allfetches all package remotes without changing anything.- After fetching,
my-straight-incoming-diffs(C-c v U) opens automatically with one concatenateddiff-modebuffer: for each checkout that is behind upstream, the incoming commits (with authors and dates) followed by the net patch that merging would apply, ready to be skimmed or fed to a reviewing agent. M-x my-gptel-review-malicious-code(C-c a R) can be called on the diff buffer to have an AI review the diff for malicious code.M-x straight-merge-allmerges each package, but allows dropping into Magit with a recursive edit.- Restart Emacs, verify that everything works, then run
M-x straight-freeze-versionsand commitstraight/versions/default.el. This lockfile pins every package to an exact commit;M-x straight-thaw-versionsrestores those revisions.
Security notes:
- The straight.el bootstrap script is verified against a pinned SHA-256 checksum; on
mismatch startup stops for manual review (see
early-init.el). - The lockfile pins everything: package repositories, recipe repositories (MELPA, the
ELPA mirrors) and straight.el itself. Nothing moves without an explicit merge and
straight-freeze-versions. When committing an upgrade, reviewgit diff straight/versions/default.elfor a concise list of what moved. M-x straight-get-recipeshows where a package is actually fetched from. Recipe changes only take effect when the recipe repositories themselves are merged; spot-check withgit -C straight/repos/melpa diff HEAD..@{upstream} -- recipes/<pkg>.
This list might be outdated, you would do better by grepping init.el for use-package uses.
ace-window: quickly move/split/swap/copy windows.agent-shell: frontend for agentic coding agents via ACP; runs opencode per project, each session in its own firejail sandbox.all-the-icons: pretty icons.all-the-icons-ibuffer: pretty icons in ibuffer.all-the-icons-completion: pretty icons in completion minibuffer.all-the-icons-dired: pretty icons in dired.auto-dark: follow OS light/dark theme.auto-compile: compile Elisp files on load and/or save.avy: quick jumps.batppuccin: catppuccin-like theme, light/dark versions.calibredb: an Emacs interface to the Calibre DB.cape: completion-at-point extensions (dabbrev, file and more).corfu: completion-at-point popup. Like company but lighter.compile: built-in command to compile stuff.consult: practical commands based on the Emacs completion functioncompleting-read.consult-dir: insert directory paths into the minibuffer prompt.consult-git-log-grep: grep a repository's git history with consult.crux: collection of random utilities, originally bundled with Prelude.csv-mode: major mode to edit CSV (Comma-Separated Values) files.diff-hl: show uncommitted changes.diminish: hide minor-modes from modeline.docker: manage Docker (and Podman) from Emacs.docker-compose-mode: major mode for docker-compose files.dockerfile-mode: major mode to edit Dockerfiles.doom-modeline: a very nice modeline.easy-kill: mark/kill words, sexps, lines and more.editorconfig: support for .editorconfig files.eglot: LSP client built-in since Emacs 29.eldoc: display documentation about current function in echo area.embark: choose a command to run based on what is near point, both during a minibuffer completion session and in normal buffers.emojify: display emojis.envrc: use direnv to update Emacs environment when visiting files.exec-path-from-shell: have Emacs inherit environment variables.expreg: increase selected region by semantic units, with tree-sitter.fish-mode: major mode for fish shell scripts.flymake: Emacs built-in error checker. It integrates natively with Eglot.forge: Magit extension to work with code hosting sites (e.g. GitHub).git-timemachine: browse previous revisions of any git-controlled file.ghostel: terminal emulator powered by libghostty-vt.gptel: LLM chat client: chat buffers, send/rewrite text.helpful: better help buffers.ibuffer: better buffer view. Like dired for buffers.ibuffer-projectile: group buffers by project in ibuffer view.jinx: fast just-in-time spell checker (uses enchant).key-chord: execute commands by pressing keys quickly.keycast: show current command and its binding.kind-icon: icons for completion-at-point candidates.magit: the best Git interface there is.magit-delta: integrate delta diff with Magit.marginalia: adds marginalia to the minibuffer completions.markdown-mode: major mode to edit Markdown files.move-text: move lines or regions up and down.multiple-cursors: what it says in the label, allows editing multiple lines simultaneously.no-littering: keep Emacs config directory clean.nov-el: major mode for reading EPUB files in Emacs.orderless: completion style that divides the pattern into space-separated components, and matches candidates that match all of the components in any order.org: the most powerful note taking and planning software ever created.orgit: link to Magit buffers from Org-mode.orgit-forge: link to Forge buffers from Org-mode.popper: tame the flood of ephemeral windows Emacs produces.projectile: project management.rainbow-delimiters: color delimiters such as parentheses or braces as they nest.rainbow-mode: color strings that describe colors.rustic: major mode for Rust coding.saveplace: built-in to remember last position on each open file.super-save: automatically save buffers on certain events.systemd: major mode for editing systemd files.tab-bar: Emacs built-in tab bar.tabspaces: lightweight workspaces in tabs using Emacs built-in tab-bar and project.tramp: remote file editing, beyond cool.treesit-auto: automatically install and use tree-sitter grammars.valign: visual alignment for tables.vundo: visualize and navigate the undo history as a tree, never lose an edit.vertico: performant and minimalistic vertical completion UI based on the default completion system.volatile-highlights: visual feedback for some operations.which-key: show all possible key combinations.whitespace-cleanup-mode: minor mode to clean up a buffer's whitespace on save.writegood-mode: minor mode to aid in finding common writing problems in English.yaml-mode: major mode for YAML files.yasnippet: snippet extension.yasnippet-snippets: snippet collection for yasnippet.zoom-window: toggle windows to display full-frame.
I have drawn inspiration from many other people's configurations of Emacs. I thank them all for sharing, usually with much better comments than mine. Here are the ones I have studied more in depth: