Auto-generated reference for all Nix module options exposed by Jotain.
Import and enable in your Home Manager configuration:
{
imports = [ jotain.homeManagerModules.default ];
services.jotain = {
enable = true;
defaultEditor = true;
client.enable = true;
};
}Whether to enable the Jotain Emacs daemon.
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Custom Jotain Emacs package to use. Leave this unset to use the default distribution from emacs.nix (pgtk/Wayland GUI on Linux, patched NS GUI on Darwin).
Type: null or package
Default:
nullDeclared by: - module.nix
Extra authinfo/netrc file paths to hand to Emacs’s auth-sources, searched ahead of ~/.authinfo(.gpg) and the 1Password backend. Point these at runtime secret files a secret manager produces (sops-nix, agenix, …) — the entries are file paths, not the secrets themselves, and are passed to the daemon through the JOTAIN_AUTH_SOURCES environment variable that lisp/init-systems.el reads. Every package that consults auth-source (gptel, forge, smtpmail, circe) then resolves credentials from them; the eca server, which reads only its environment, additionally has its provider keys exported from auth-source before each session (see lisp/init-ai.el).
Type: list of string
Default:
[ ]Example:
[
"/run/secrets/authinfo"
]Declared by: - module.nix
Whether to enable the Claude Code CLI (claude) on the wrapper PATH, the external agent claude-code-ide (lisp/init-ai.el, C-c q) drives. Pulls the unfree claude-code package, so it needs allowUnfree .
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Whether to enable generation of Jotain client desktop file.
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Command-line arguments to pass to emacsclient.
Type: list of string
Default:
[
"-c"
]Declared by: - module.nix
Whether to configure emacsclient as the default editor using the EDITOR and VISUAL environment variables.
Type: boolean
Default:
trueExample:
falseDeclared by: - module.nix
Whether to enable the devenv CLI on the wrapper PATH, for the native environment loader (devenv-env-global-mode, lisp/devenv.el) under launchd/systemd daemons whose login shell does not export it. Opt-in because exec-path-from-shell normally finds the user’s own devenv, and pkgs.devenv bundles its own nix and can version-skew against per-project devenv installs .
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Whether to enable Dockerfile language server (docker-langserver), auto-attached by Eglot in dockerfile-mode.
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Whether to install ~/.config/eca/config.json for the eca server (the AI pair-programming backend in lisp/init-ai.el). Enabled automatically when services.jotain.eca.openrouter.enable is set or services.jotain.eca.settings is non-empty.
Type: boolean
Default:
eca.openrouter.enable || eca.settings != { }Example:
trueDeclared by: - module.nix
Alias of services.jotain.environmentFile.
Type: null or absolute path
Default:
nullDeclared by: - module.nix
Whether to enable the default OpenRouter provider in the generated eca config. The provider and its model catalogue come from config/eca/config.json (kept in sync with gptel’s models in lisp/init-ai.el); the API key is read at runtime from OPENROUTER_API_KEY via eca’s ${env:…} interpolation, so no secret is written to the Nix store. Supply the key through services.jotain.environmentFile. gptel defaults to OpenRouter regardless of this option .
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Freeform eca configuration, rendered to ~/.config/eca/config.json and deep-merged over the default OpenRouter provider (later values win). Any eca key is expressible (providers, models, rules, mcpServers, behavior, …). Use eca’s ${env:VAR} syntax for secrets so nothing sensitive lands in the Nix store; provide the referenced variables through services.jotain.environmentFile.
Type: JSON value
Default:
{ }Example:
{
providers.anthropic = {
api = "anthropic";
key = "${env:ANTHROPIC_API_KEY}";
models."claude-sonnet-4.6" = { };
};
}Declared by: - module.nix
Path to a systemd.exec(5)-style environment file (VAR=value lines) loaded into the Jotain daemon’s environment. Every subprocess Emacs spawns inherits it, so this is the single place to supply credentials for all external-system integrations that read the environment — among them gptel’s OPENROUTER_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEY (lisp/init-ai.el), the eca server’s provider keys, and any token a tool reads from the environment. Point it at a runtime secret path (sops-nix, agenix, …); the file is read at daemon start and never copied into the Nix store. On Linux it becomes the service’s EnvironmentFile; on macOS the launchd agent sources it before exec. Secrets that instead live in a password manager can be resolved through auth-source — see services.jotain.onePassword.enable and services.jotain.authSources.
Type: null or absolute path
Default:
nullExample:
"/run/secrets/jotain-env"Declared by: - module.nix
Extra command-line arguments to pass to emacs when starting the daemon.
Type: list of string
Default:
[ ]Example:
[
"-f"
"exwm-enable"
]Declared by: - module.nix
AOT native-compile the Jotain config into the store, so the daemon loads .eln for init.el and the lisp/ modules from services.jotain’s own derivation instead of JIT-compiling into var/eln-cache after every deploy (every deploy that touches lisp/ moves the store path, which invalidates the JIT cache). early-init.el is structurally excluded: its .eln lookup happens before the load path is extended, so it always runs from .elc — with or without this option.
The store-.eln-through-symlinks mechanism is sound: Emacs realpath()s the source before hashing it into the .eln name (src/comp.c, Bug#44701), so the HM symlinks resolve to the exact path the AOT step compiled against. Off by default only because enabling it adds a native-compilation pass to every activation that rebuilds the config, and roughly 50–150 MB of .eln to the closure.
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Whether to enable the 1Password CLI (op) on the wrapper PATH, the backend for auth-source-1password (lisp/init-systems.el) that resolves credentials for gptel, forge, smtpmail, etc. from the vault when they are not supplied through services.jotain.environmentFile. Pulls the unfree _1password-cli package, so it needs allowUnfree .
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Whether to enable shell aliases for the Jotain daemon and clients.
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Optional prefix to namespace the emd / em / emg aliases (e.g. set to "j" to get jemd, jem, jemg).
Type: string
Default:
""Example:
"j"Declared by: - module.nix
Whether to enable systemd socket activation for the Jotain service.
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Whether to enable SonarLint language server (M-x jotain-sonarlint).
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Whether to enable the sops CLI on the wrapper PATH, required by sops.el (lisp/init-systems.el) for transparent encrypt/decrypt of SOPS-managed files .
Type: boolean
Default:
falseExample:
trueDeclared by: - module.nix
Aspell dictionary packages for jinx spell-checking (lisp/init-writing.el). Installed into the profile, where libaspell’s NIX_PROFILES patch finds them at runtime and enchant’s aspell backend hands them to jinx.
Type: list of package
Default:
[ pkgs.aspellDicts.en ]Example:
[ pkgs.aspellDicts.en pkgs.aspellDicts.fi ]Declared by: - module.nix
Whether to launch the Jotain service with the systemd user session. If true, the service is started by default.target. If "graphical", it is started by graphical-session.target.
Type: boolean or value “graphical” (singular enum)
Default:
!config.services.jotain.socketActivation.enableExample:
"graphical"Declared by: - module.nix
Applies the Jotain overlay and adds the package to system environment. For per-user daemon management, use the Home Manager module instead.
{
imports = [ jotain.nixosModules.default ]; # or darwinModules.default
services.jotain.enable = true;
}Whether to enable the Jotain Emacs configuration.
Type: boolean
Default:
falseExample:
trueDeclared by: - module-system.nix
Custom Jotain Emacs package to use. Leave this unset to use the cache-friendly default build from emacs.nix.
Type: null or package
Default:
nullDeclared by: - module-system.nix
Whether to enable the Claude Code CLI (claude) on the wrapper PATH, the external agent claude-code-ide (lisp/init-ai.el) drives. Pulls the unfree claude-code package, so it needs allowUnfree .
Type: boolean
Default:
falseExample:
trueDeclared by: - module-system.nix
Whether to configure emacsclient as the default editor using the EDITOR and VISUAL environment variables.
Type: boolean
Default:
trueExample:
falseDeclared by: - module-system.nix
Whether to enable the devenv CLI on the wrapper PATH, for the native environment loader (devenv-env-global-mode, lisp/devenv.el) under launchd/systemd daemons whose login shell does not export it. Opt-in because exec-path-from-shell normally finds the user’s own devenv, and pkgs.devenv bundles its own nix and can version-skew against per-project devenv installs .
Type: boolean
Default:
falseExample:
trueDeclared by: - module-system.nix
Whether to enable Dockerfile language server (docker-langserver), auto-attached by Eglot in dockerfile-mode.
Type: boolean
Default:
falseExample:
trueDeclared by: - module-system.nix
Whether to enable the 1Password CLI (op) on the wrapper PATH, the backend for auth-source-1password (lisp/init-systems.el) that resolves credentials for gptel, forge, smtpmail, etc. from the vault. Pulls the unfree _1password-cli package, so it needs allowUnfree .
Type: boolean
Default:
falseExample:
trueDeclared by: - module-system.nix
Whether to enable SonarLint language server (M-x jotain-sonarlint).
Type: boolean
Default:
falseExample:
trueDeclared by: - module-system.nix
Whether to enable the sops CLI on the wrapper PATH, required by sops.el (lisp/init-systems.el) for transparent encrypt/decrypt of SOPS-managed files .
Type: boolean
Default:
falseExample:
trueDeclared by: - module-system.nix
Aspell dictionary packages for jinx spell-checking (lisp/init-writing.el). Installed into the system profile, where libaspell’s NIX_PROFILES patch finds them at runtime and enchant’s aspell backend hands them to jinx.
Type: list of package
Default:
[ pkgs.aspellDicts.en ]Example:
[ pkgs.aspellDicts.en pkgs.aspellDicts.fi ]Declared by: - module-system.nix
Emacs Lisp development support for devenv shells.
{
languages.emacs-lisp = {
enable = true;
lsp.enable = true;
};
}Whether to enable Emacs Lisp support.
Type: boolean
Default:
falseExample:
trueDeclared by: - nix/devenv-emacs-lisp.nix
The emacs-nox package to use.
Type: package
Default:
pkgs.emacs-noxExample:
emacsDeclared by: - nix/devenv-emacs-lisp.nix
Whether to enable Emacs Lisp Static Analyzer (Elsa).
Type: boolean
Default:
trueExample:
trueDeclared by: - nix/devenv-emacs-lisp.nix
The Elsa static analyzer package to use.
Type: package
Default:
pkgs.callPackage ./elsa.nix { emacs = cfg.package; }Declared by: - nix/devenv-emacs-lisp.nix
Whether to enable Emacs Lisp Language Server (ellsp).
Type: boolean
Default:
trueExample:
trueDeclared by: - nix/devenv-emacs-lisp.nix
The Emacs Lisp language server package to use.
Type: package
Default:
pkgs.callPackage ./ellsp.nix { emacs = cfg.package; }Declared by: - nix/devenv-emacs-lisp.nix