Fast, modern Emacs tuned for web development (JS/TS, HTML/CSS, Docker, APIs, Markdown, Ruby), with a clean UI, powerful search, unified formatting, and comprehensive development tools.
Clone into ~/.emacs.d and start Emacs. An Emacs server auto-starts; set $EDITOR to emacsclient
if you like.
- Modeline:
doom-modelinewith icons, LSP/VC/diagnostics. - Completion: Vertico + Orderless + Corfu + Cape, plus Marginalia, Embark, and Consult.
- Floating prompts: minibuffer/command palette appears top‑center via
mini-frame. - Search:
consult-ripgrepbound tos-f(project root via Projectile). - Formatting: Apheleia global on‑save formatting (prettierd/prettier, eslint_d, RuboCop, Black). EditorConfig respected.
- LSP:
lsp-modewith consult integration; diagnostics via Flycheck. - UI polish: Modern coding fonts (JetBrains Mono), base16 theme, pixel‑precise resize, smooth scrolling.
- Files: Treemacs with Nerd Icons.
- Navigation: Avy jump (
jjchar,jkword,jlline), multiple cursors, expand-region. - Git/GitHub: Magit + Forge for PR/issue management directly in Emacs.
- Web Development: NPM integration, Node.js REPL, REST client for API testing.
- Containers: Docker management and file editing in containers.
- Remote Editing: TRAMP for SSH file editing and remote project support.
- Modern Undo: Vundo with visual undo tree (replaces undo-tree).
- System:
brew install ripgrep ispell(search and spell‑check). - Fonts: Install JetBrains Mono:
brew install font-jetbrains-mono(best coding font with ligatures). - Icons: Install a Nerd Font (for modeline + Treemacs icons).
- Node.js:
npm i -g @fsouza/prettierd eslint_d typescript-language-server(faster format/lint/LSP). - Ruby:
gem install solargraph rubocop; prefer Bundler in projects. - Python:
pip install black. - Docker: Install Docker Desktop for container management features.
- GitHub: Set up personal access token for Forge (PR/issue management).
- Emoji: If your Emacs build doesn't support color fonts, adjust
lisp/init-emojis.elor useemacs-plus.
s-f:consult-ripgrep(project ripgrep)M-x: command palette (top‑center floating)C-s:consult-line(in‑buffer search)s-p/C-c p: Projectile prefix (find file, switch project, etc.)
jj:avy-goto-char,jk:avy-goto-word-1,jl:avy-goto-lineuu: Vundo visual undo tree (C-n/C-pto navigate)M-o:ace-window(pick window)C-;: Embark action menu for thing at point
C-x g:magit-status- GitHub workflow: Use browser or
M-x browse-url-at-pointon URLs in Magit
C-c n r: Run NPM scriptC-c n i: NPM install packagesC-c C-z: Node.js REPL (in JS files)C-c C-c: Send HTTP request (in.httpfiles)
C-c d: Docker management interface
C-c t d: Open Dired on PiC-c t p: Connect to Pi (interactive prompt)C-c t h: Return to local home directoryC-c t b: Show TRAMP debug buffer
C-c l: LSP prefix (rename, code actions, etc.)
Apheleia runs on save with sensible defaults:
- JS/TS/TSX/JSON/CSS/SCSS/Markdown/YAML →
prettierd(orprettier) andeslint_dwhen appropriate. - Ruby →
rubocop(via Bundler when available). - Python →
black.
Disable per buffer with M-x apheleia-mode or customize apheleia-mode-alist.
- Floating minibuffer: uses
mini-frame. If native macOS fullscreen hides child frames, try maximized (not fullscreen) or ask for avertico-posframesetup. - Icons depend on a Nerd Font and
nerd-icons. Install a Nerd Font in your OS and select it in your Emacs font settings if necessary.
init.el– entrypoint that requires thelisp/init-*.elmodulesearly-init.el– startup performance optimizations
lisp/init-ui.el– UI polish, fonts, smooth scrollinglisp/init-modeline.el– doom‑modelinelisp/init-minibuffer.el– Vertico/Orderless/Consult + Corfu/Capelisp/init-float-minibuffer.el– top‑center floating promptslisp/init-editing.el– editing enhancements, vundo, multiple cursors
lisp/init-javascript.el– JS/Node.js + NPM integrationlisp/init-web.el– HTML/CSS/JSX with Emmetlisp/init-ruby.el– Ruby + RuboCoplisp/init-markdown.el– Markdown editinglisp/init-lsp.el– Language Server Protocol
lisp/init-vcs.el– Git (Magit) + GitHub (Forge)lisp/init-http.el– REST client for API testinglisp/init-docker.el– Docker management and container editinglisp/init-tramp.el– Remote file editing via SSHlisp/init-format.el– Apheleia unified formattinglisp/init-projectile.el– Project managementlisp/init-treemacs.el– File tree with icons
Create .http files to test APIs directly in Emacs:
GET https://api.github.com/user
Authorization: token YOUR_TOKEN
###
POST https://jsonplaceholder.typicode.com/posts
Content-Type: application/json
{
"title": "Test Post",
"body": "Testing API",
"userId": 1
}Use C-c C-c to send requests.
Note: Forge package disabled due to compatibility issues.
GitHub Workflow:
- Use Magit for all Git operations (
C-x g) - For GitHub PRs/issues: Use
M-x browse-url-at-pointon GitHub URLs in Magit - Or use browser-based GitHub workflow
- Alternative: Install GitHub CLI (
brew install gh) for terminal-based GitHub operations
C-c n r: Interactive script runner (shows all package.json scripts)C-c n i: Install packages with completionC-c n t: Run tests
C-c d: Docker management (images, containers, networks)- Edit files in containers:
/docker:container_name:/path/to/file
Edit files on remote servers via SSH:
C-c t d: Quick connect to PiC-c t p: Interactive connection (custom user/host/path)C-c t h: Return to local filesystem- Manual:
C-x C-f /sshx:user@host:/path/to/file
Works with Dired for remote directory browsing and Projectile for remote projects. EditorConfig automatically disabled for remote files to prevent timeouts.
uuorC-x u: Open visual undo treeC-n/C-p: Navigate,RET: Apply,q: Quit
- Use space‑separated terms with Orderless (e.g.,
proj buf). - Embark actions work everywhere: try
C-;during any completion. - Project roots are resolved via Projectile for Consult commands.
- JetBrains Mono font provides excellent ligatures for
=>,!=, etc.
- Session state like
recentf,desktop/, andplacesis ignored in git. - Contributions and PRs to improve languages and ergonomics are welcome.