This is a split off of my dotfiles repo, for just the emacs configuration.
This allows me to install the emacs config in places where I might not need the full set of dot-files, or install the dot-files on systems that don't have emacs.
I have recently switch from managing my external dependencies via package.el, to use-package. Those parts of the config are still somewhat volatile, as I keep finding bits I did either inefficiently or outright incorrectly.
As of 29.1, I've rewritten my configuration to keep pretty much everything in this file. I have per-host directories that have snippets that are only for the particular host (font settings and frame size/placement, generally). But the parts that matter are all in here. Lightly documented in places, but of course not enough.
This is my attempt at a comprehensive list of what needs to be installed for this configuration to work.
- Basic:
- Emacs 29.1 or later, with tree-sitter support
- Node.js/npm
- Homebrew (https://brew.sh/)
- Perl 5.16.0 or newer, with
cpan
- Python 3.8 or newer, with
pip3
- Rust 1.70 or newer, with rustup
- Language Server/Eglot Support (Source):
- Bash: bash-language-server (npm)
- C/C++: clangd (Homebrew)
- Clojure: clojure-lsp (Homebrew)
- CSS: css-languageserver (npm)
- Dockerfile: docker-langserver (npm)
- Go: gopls (Homebrew)
- HTML: html-languageserver (npm)
- Java: Eclipse JDT Language Server (Homebrew)
- JavaScript/TypeScript: TS & JS Language Server (npm)
- JSON: vscode-json-languageserver (npm)
- LaTeX: texlab (Homebrew)
- Markdown: marksman (Homebrew)
- Perl: Perl::LanguageServer (cpan)
- Python: Requires the following module installations:
pip3 install "python-lsp-server[all]"
pip3 install pylsp-mypy pylsp-rope python-lsp-ruff
pip3 install python-lsp-black
- Rust: rust-analyzer (rustup)
- YAML: yaml-language-server (Homebrew)
- Other External Programs (Source):
The script setup_deps.sh
in this directory will check for and install these
dependencies (except for the basic items). It will check for the installer
programs (Homebrew, npm, etc.) and only install those elements that can be
installed. It does not install Emacs, Homebrew, Node.js, Perl, Python, or Rust.
It will install the latest OpenJDK and Go from Homebrew along with their
Eglot-supporting tools.
Note that while texlab
is for LaTeX, no TeX/LaTeX system is installed
automatically by the setup script. This is because texlab
does not require
such an installation in order to operate. It is left to the user to choose a
preferred TeX system.
Emacs 29.1 with tree-sitter support can be installed via Homebrew if the distribution doesn't offer it.
The directory emacs.d/snippets
contains the hierarchy of YASnippet code I
use. The structure and relationships (via .yas-parents
files) is inspired by
the yasnippet-snippets
layout. However, as the code therein is licensed under GPL-3.0, I haven't made
direct use of any of their snippets other than as inspiration. I don't know
enough about the restrictiveness of GPL-3.0 to know whether using one of their
snippets would require a similar license for the resulting personal code, so I
am opting to be safe.
Notes on any issues found with getting the above to work.
The configuration now includes use of the pdf-tools
package for viewing PDF
files. On Ubuntu with Homebrew installed, this failed to build the server
piece of the package (epdfinfo
). The solution was to build the server (from
within the installation directory) with Homebrew paths moved to later in the
sequence within $PATH
. See
this reddit thread
for the details.
This repository is licensed under the MIT License. See the file LICENSE
for
details.