Emacs

Decknix provides a modern, batteries-included Emacs experience with 13+ modules, background daemon, and three profile tiers.

Modules

ModuleDescriptionProfile
CoreModus theme, line numbers, better defaultsminimal+
CompletionVertico, Consult, Corfu, Embarkminimal+
EditingSmartparens, Crux, Move-text, EditorConfigminimal+
UIWhich-key, Helpful, Nerd-iconsminimal+
Undoundo-fu, vundo (visual undo tree)minimal+
ProjectProject management and navigationminimal+
WelcomeStartup screen with keybinding cheat sheetstandard+
DevelopmentFlycheck, Yasnippetstandard+
MagitGit interface, Forge (GitHub PRs), code-reviewstandard+
TreemacsProject file tree with git integrationstandard+
Languages30+ language modes with syntax highlightingstandard+
LSPEglot, kotlin-ls, jdt-ls, dape (debugging)full
Org-modeModern styling, presentations (Olivetti)full
HTTPREST client, jq integration, org-babelfull
Agent ShellAI agent interface (Augment Code)full

Key Bindings — Quick Reference

KeyAction
C-sSearch in buffer (consult-line)
C-x bSwitch buffer with preview
M-s rProject-wide ripgrep search
M-yBrowse kill ring
C-.Context actions (Embark)

Git (Magit)

KeyAction
C-x gMagit status
@ f fFetch forge topics (PRs/issues)
@ c pCreate pull request
@ l pList pull requests

File Tree (Treemacs)

KeyAction
C-x t tToggle treemacs
C-x t fFind current file in tree

LSP / Code

KeyAction
C-c l rRename symbol
C-c l aCode actions
C-c l fFormat region
C-c l FFormat buffer
C-c l dShow documentation

Debugging (dape)

KeyAction
C-c d dStart debugger
C-c d bToggle breakpoint
C-c d nStep over
C-c d sStep in
C-c d cContinue

Editing

KeyAction
C-aSmart home (Crux)
C-c dDuplicate line
M-up/downMove line/region
C-/Undo
C-?Redo
C-x uVisual undo tree (vundo)

Org-mode

KeyAction
F5 or C-c pStart/stop presentation
n / pNext/previous slide

Languages

30+ languages with syntax highlighting:

CategoryLanguages
PrimaryKotlin, Java, Scala, SQL, Terraform/HCL, Shell, Nix, Python
DataJSON, YAML, TOML, XML, Markdown
WebHTML, CSS/SCSS/LESS, JavaScript, TypeScript, JSX, Vue, Svelte

Emacs Daemon

Configured in modules/darwin/emacs.nix, enabled by default on macOS. Runs as a background launchd service — no Dock icon, no Cmd+Tab entry.

ec filename          # Open file in Emacs
ec -c -n             # New GUI frame
ec -c -n file.txt    # Open file in new GUI frame
ec -t file.txt       # Open in terminal
emacsclient -c       # Create new GUI frame

GUI frames appear in the Dock while open; closing a frame doesn't kill the daemon.

OptionDefaultDescription
services.emacs.decknix.enabletrueEnable Emacs daemon
services.emacs.decknix.packagepkgs.emacsEmacs package to use
services.emacs.decknix.additionalPath[]Extra PATH entries for daemon

Module Options Reference

Disabling Modules

{ ... }: {
  programs.emacs.decknix.enable = false;             # ALL emacs config
  programs.emacs.decknix.welcome.enable = false;     # Welcome screen
  programs.emacs.decknix.magit.enable = false;       # Git interface
  programs.emacs.decknix.magit.forge.enable = false;  # Just Forge
  programs.emacs.decknix.completion.enable = false;  # Completion stack
  programs.emacs.decknix.treemacs.enable = false;    # File tree
  programs.emacs.decknix.undo.enable = false;        # Undo enhancements
  programs.emacs.decknix.editing.enable = false;     # Editing enhancements
  programs.emacs.decknix.development.enable = false; # Flycheck/Yasnippet
  programs.emacs.decknix.ui.enable = false;          # UI enhancements
  programs.emacs.decknix.ui.icons.enable = false;    # Just icons
  programs.emacs.decknix.org.enable = false;         # Org enhancements
  programs.emacs.decknix.lsp.enable = false;         # LSP/IDE
  programs.emacs.decknix.http.enable = false;        # REST client
  programs.emacs.decknix.languages.enable = false;   # All languages
}

Customisation

{ pkgs, ... }: {
  # Add your own packages
  programs.emacs.extraPackages = epkgs: [ epkgs.evil epkgs.lsp-mode ];

  # Add your own config
  programs.emacs.extraConfig = ''
    (evil-mode 1)
    (setq my-custom-variable t)
  '';
}

Note: Evil mode (Vim emulation) is not included by default. Add it in your personal config as shown above.