seandewar/actually-doom.nvim

github github
game
stars 93
issues 3
subscribers 1
forks 2
CREATED

2025-04-02

UPDATED

4 days ago


actually-doom.nvim

This ain't some random DOOM Emacs-themed distro; actually play DOOM in Neovim v0.11+ on Linux and macOS!

Prerequisites

  • Neovim v0.11+. (LuaJIT support is recommended for performance reasons, but not required; check :version)
  • Linux or macOS. (macOS support courtesy of @sockthedev)
  • C compiler with support for the C99 standard.

How to play

Install it via your favourite package manager like any other plugin, then run :Doom.

The shareware version of DOOM is included for your convenience.

For more information regarding controls and such, consult :help actually-doom.txt.

Controls

  • Movement: Arrow keys (hold Shift to run)
  • Turn: Left/Right arrows (hold Shift to turn quickly)
  • Strafe: Alt + Left/Right arrows (may not work in all terminals)
  • Fire: X
  • Use/Open doors: Space
  • Weapon selection: Number keys 0-8
  • Toggle automap: Tab
  • Menu: Escape
  • Select menu option: Enter
  • Toggle renderer: Ctrl+K (switch between kitty graphics and cell-based rendering)
  • Stop capturing input (i.e. return control to Nvim): Ctrl+\ Ctrl+N

Kitty graphics protocol

Though optional, for increased performance and visual clarity, the game is best experienced in a terminal that implements the kitty graphics protocol with support for Unicode placeholders and image transmission via shared memory.

Within the TUI on Nvim v0.12+, actually-doom.nvim attempts to auto-detect support by default. In other cases it will have to be enabled manually.

See :h actually-doom-kitty for details. (And :h actually-doom-tmux if using tmux)

FAQ

Why do the controls feel clunky?

Historically, it's not possible to receive precise key press and release events within the terminal.

Fortunately, the kitty keyboard protocol provides the ability to detect these events, but Neovim currently lacks support for this.

How do I stop sending input to DOOM without exiting?

Press <C-\><C-N>.

Why does the graphics and performance suck?

You're likely using the fallback renderer that blasts-out a bunch of escape codes to draw to the terminal grid. See :h actually-doom-kitty for a much better experience.

Why no Windows support?

Windows support would require more significant changes to handle platform differences in terminal handling and process management. Plus, I only have access to Fedora Linux; macOS support was instead kindly added by @sockthedev.

If you're able to get things working on Windows (and if your code isn't too messy 😉), feel free to open a pull request with your changes.

Why did you make this?

🗿

Testimonials

dundargoc's review