anuvyklack/helheim-emacs
{ "createdAt": "2025-10-22T17:18:02Z", "defaultBranch": "main", "description": null, "fullName": "anuvyklack/helheim-emacs", "homepage": null, "language": "Emacs Lisp", "name": "helheim-emacs", "pushedAt": "2026-03-19T22:42:25Z", "stargazersCount": 25, "topics": [], "updatedAt": "2026-03-17T15:53:51Z", "url": "https://github.com/anuvyklack/helheim-emacs"}Helheim Emacs
Section titled “Helheim Emacs”This is the realm of Hel
Helheim is an Emacs configuration built around Hel — Helix emulation layer for Emacs, that aims to provide tight integration between Hel and other packages available for Emacs.
I wasted an unreasonable amount of time and effort trying to tune other editors to myself. It started with Sublime Text, then Atom (which I really liked), then VS Code (which I never liked), then Neovim, Emacs + Evil, VS Code again, then Doom Emacs. I also tried Helix and Zed. I liked one thing in one editor and something else in another.
I want keyboard-driven modal editor, multiple cursors, smooth scrolling, Lisp (I would prever Common Lisp, but Emacs Lisp is better then nothing).
Eventually, I decided that enough was enough — its easier to implementing all the things I want by myself. After all, if Linus Torvalds can maintain his own version of MicroEmacs, why can’t I?
That’s how Hel and Helheim were born.
Helheim gains three goals:
- Be my editor of the dream;
- Be useful to others to attract more users to Emacs;
- Celebrate the power of open source software as an act of pure selfless creation in an era of late capitalism.
Someone might say that I’m continuing to tune yet another editor — Emacs this time — but I would disagree. Emacs is not a text editor; it’s a Lisp machine with a terminal emulator (which is unfortunate, since I would prefer a full-fledged GUI).
Key Features
Section titled “Key Features”Hel – Helix Emulation Layer
Section titled “Hel – Helix Emulation Layer”- Selection → action modal editor with multiple cursors.
- Smooth scrolling commands out of the box.
Outliner and personal knowledge management system
Section titled “Outliner and personal knowledge management system”Helheim comes with one of the best outliners and personal knowledge management systems, fully preconfigured.
- Offline-first — your data belongs to you.
- Unmatched editing capabilities —no other note-taking app offers fully capable Vim emulation not to mention Kakoune of Helix.
- Org-mode
- Rich markup — more powerful than Markdown with LaTeX as a first-class citizen (like HTML for Markdown).
- The best code snippet support of any note taking app.
- Task management.
- Tables that allow multiline cells and Excel-like formulas.
- Attach files to outline nodes (I personally use it as my file system).
- Bidirectional links via Org-node
- Daily notes—your main scratchpad and better “Inbox”.
There is a lot of praise for Org mode that I can only agree with. For me, Org mode with bidirectional links (provided by Org-roam or Org-node), daily notes, and the ability to attach files to outline nodes divides my life into “before” and “after”. For the first time in my life, I have built a reliable and retrievable system for accumulating and processing knowledge, and it has already served me for more than two years — while all previous ones were abandoned within weeks.
Ibuffer Done Right
Section titled “Ibuffer Done Right”Buffers are grouped intelligently:
- Buffers are grouped by project.
- Within each project, buffers are grouped by file tree depth.
- File paths are relative to the project root.
- Special buffers are grouped after buffers visiting files.
- Buffers visiting files outside of any project are grouped separately from special buffers.
- Denote IDs are stripped from buffer names.
Xref with fallback behavior
Section titled “Xref with fallback behavior”Xref is hacked to try all registered backends in sequence until one succeeds, and Dumb Jump as an universal fallback backend by default.
Installation
Section titled “Installation”[!WARNING]
GNU Emacs 29.1 or later is required
-
Download and install Symbols Nerd Font from www.nerdfonts.com. This font contains only nerd font icons. Emacs can assign fonts for individual Unicode code points, which means you can use any unpatched font and still get Nerd Icons.
-
Clone or fork this repository.
Clone into
~/.config/emacsso Emacs loads it automatically on startup:Terminal window git clone https://github.com/anuvyklack/helheim-emacs.git ~/.config/emacsOr clone to any other location and pass the path to Emacs explicitly:
Terminal window emacs --init-directory <path/to/helheim-emacs> -
Rename
init.example.elfile toinit.el.
[!NOTE]
Ininit.example.el, the default font is set to Cascadia Code . Either install it or replace it with a font you prefer.
Configuration
Section titled “Configuration”[!TIP]
BindCaps LocktoEsc, and configureSpaceto tap+hold behavior:Spaceon tap andCtrlon hold. You can use any of the following tools for this:
- kanata
- kmonad
- keyd (Linux only)
- Karabiner-Elements (Mac only)
Read the Hel documentation for how to use and configure it.
[!WARNING] Hel uses the
U+2000(EN QUAD) character for secondary cursors by default. It should be bound to a variable-pitch font.
Modular Architecture
Section titled “Modular Architecture”[!IMPORTANT]
universal-argumentis rebound toM-usinceC-uis used for scrolling.
All folders in user-lisp/ directory are automatically added to the load-path and all Emacs Lisp files are byte-compiled and scraped for autoload cookies on startup.
You can also invoke prepare-user-lisp command manually to rescan user-lisp/ for content added after startup. With universal-argument — M-u : prepare-user-lisp — files will be recompiled and .user-lisp-autoloads.el file with autoload cookies will be rebuild.
require only the modules you need in your init.el.
[!NOTE]
This is an Emacs 31 feature backported to Helheim.
Color shemes workflow that actually works
Section titled “Color shemes workflow that actually works”Forget the nightmare of Emacs color themes management:
- Which function should you use to properly activate a color theme:
load-themeorenable-theme? - How customize faces for a specific theme? By default you can only use the
customizeinterface, and all face overrides are global — if you switch themes, the overrides persist. - How do you switch themes on the fly? It’s not easy. Loading a new theme doesn’t disable the previous one, leaving multiple themes enabled simultaneously.
Helheim takes care of all of these problems. Just use load-theme, either interactively or from Elisp, to activate the theme you want. That’s it.
If you want to customize a specific theme, use helheim-theme-set-faces. You can even apply your customizations immediately without restarting Emacs: place the cursor after the closing parenthesis of the form and evaluate it with Space e e (native Emacs keybinding is C-x C-e).
Example:
(helheim-theme-set-faces 'modus-operandi '(region :background "#d9eaff") '(help-key-binding :foreground "#0000b0" :background "grey96" :box (:line-width (-1 . -1) :color "grey80") :inherit fixed-pitch))Contributing
Section titled “Contributing”-
Share It
A quick post about Helheim on your blog or social media could bring new users to Emacs — which would be great!
-
Documentation
I struggle with deciding what to document: some things feel obvious, others seem too insignificant. If something is unclear, please open an issue and I’ll add documentation.
-
Support Development
Hel and Helheim were developed on an old laptop with a cracked screen. I worked on them instead of grinding LeetCode, and I have run out of money. If you like them and want to support their development, you can donate via:
Every contribution is greatly appreciated. Thank you!