Add Emacs config with Zed-matching Synthwave84 Soft theme - #13
Merged
Conversation
Vanilla Emacs 30 (emacs-plus) at ~/.config/emacs, managed by chezmoi: use-package + package.el, vertico/corfu completion, magit, and eglot + tree-sitter for Elixir, Rust, TS, Go, Python, Lua, Nix, and Solidity. The theme is templated from a new [data.theme.soft] block, the Synthwave84 Soft variant Zed uses. That block also carries the syntax roles [data.theme] lacks. ANSI faces deliberately reuse the base palette, so terminal buffers inside Emacs still match Ghostty -- the same split the Zed theme itself makes. Notes: - eglot only hooks a mode when its server binary exists, so missing servers degrade to a plain major mode instead of erroring. - mise shims are added to exec-path explicitly; mise activates from .zshrc, which the daemon's login shell never sources. - All runtime state (elpa, eln-cache, grammars) is redirected to XDG dirs to keep the chezmoi-managed tree free of drift. - Emacs prefers ~/.emacs.d whenever it merely exists, so setup-emacs.sh and `make doctor` guard against that directory reappearing. - Corrects keyword/type in config/theme/synthwave84.toml, which had drifted from the shipped Zed theme.
New client frames landed on an empty *scratch* in fundamental-mode. Add dashboard.el with an ASCII banner, recent files, projects, and bookmarks, themed to the Soft palette. The classic startup screen only renders during real startup, so under a daemon emacsclient frames never see it. Point initial-buffer-choice at a freshly refreshed dashboard instead, which is consulted per frame. Also restore *scratch* to lisp-interaction-mode with a short header, and exclude temp dirs and elpa from recentf so the dashboard's recents list stays meaningful.
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a chezmoi-managed Emacs config with a theme that matches Zed exactly.
Vanilla Emacs 30 (
emacs-plus@30) at~/.config/emacs:use-package+package.el, the vertico/corfu completion stack, magit, and eglot +tree-sitter for Elixir, Rust, TS, Go, Python, Lua, Nix, and Solidity.
New frames open on a dashboard rather than an empty
*scratch*.Theme
Zed and Ghostty were already on different Synthwave84 variants. Rather than
force one, this mirrors the split the Zed theme itself makes:
[data.theme.soft]block -- theSynthwave84 Soft variant Zed uses. It also carries the syntax roles
(
keyword,string,function,type, ...) that[data.theme]lacks.[data.theme]keys, so shell buffers insideEmacs still match Ghostty.
[data.theme]is untouched, so no existing template changes behavior.Verified against a live GUI frame:
Monaspace Neon, bg#2e2a3e,keyword
#fee380, string#ffa15a, function#5af5f3, type#ff92e0--identical to the shipped Zed theme.
Notable findings
~/.emacs.dsilently shadows XDG.startup--xdg-or-homedot(
startup.el:506-524) returns~/.emacs.dwhenever that directory merelyexists -- it never checks for an
init.el. The stale native-comp cachethere would have disabled this entire config.
setup-emacs.shandmake doctornow guard against it reappearing.mise shims were invisible to the daemon.
ruffandrust-analyzeraremise shims, and mise activates from
.zshrc, which the daemon's login shellnever sources;
rust-analyzeronly appeared to work via a separate cargocopy. The shims directory is now added to
exec-pathexplicitly.config/theme/synthwave84.tomlhad drifted from the shipped Zed theme onkeyword(#ff7edb->#fede5d) andtype(#72f1b8->#ff7edb).Corrected.
Design notes
PATH, so missingservers degrade to a plain major mode instead of erroring. Only
rust-analyzerandlua-language-serverare installed here; the otherlanguages open in tree-sitter modes with no LSP.
elpa,eln-cache, grammars,custom.el) is redirectedto XDG dirs, keeping the chezmoi-managed tree free of drift -- so no
home/.chezmoiignorewas needed.daemon
emacsclientframes never see it.initial-buffer-choicepoints ata freshly refreshed dashboard, which is consulted per frame.
Manual testing
chezmoi applydeploys 10 files;chezmoi verify ~/.config/emacscleanemacs --batch --eval '(princ user-emacs-directory)'->~/.config/emacs/lisp/modules;custom-enabled-themesis(synthwave84-soft)Monaspace Neon.ex/.rs/.go/.lua/.py/.ts/.nix/.yamlall open in their-ts-moderust-ts-modeandpython-ts-mode; opening a Go file with nogoplsyields no error*dashboard*indashboard-modemake lint, pre-commit, and the CI template gate (every.tmplrendered against a CI-rendered config) all passmake doctor: 40 passed, 0 failedbyte-compile-error-on-warn tNote: the Brewfile change marks
run_onchange_after_brew-bundle.shpending, soa full
chezmoi applywill runbrew bundle install.🤖 Generated with Claude Code