1
0
Fork
You've already forked ewm
0
forked from ezemtsov/ewm
EWM - Emacs Wayland Manager
  • Rust 79.1%
  • Emacs Lisp 10.5%
  • Shell 9.7%
  • Nix 0.7%
Find a file
2026年06月20日 18:31:28 +02:00
compositor refactor: remove dead ewm screenshot command 2026年06月20日 18:31:28 +02:00
docs lisp: publish ewm-mode after compositor readiness 2026年06月09日 15:21:06 +02:00
emacs emacs(skia): catch stale GL scissor in copy_bits 2026年06月02日 18:39:11 +02:00
etc feat(surface): track shell CWD in surface buffers 2026年02月25日 16:20:27 +01:00
lisp refactor: remove dead ewm screenshot command 2026年06月20日 18:31:28 +02:00
nix emacs(skia): build from codeberg fork instead of patches 2026年06月01日 13:29:02 +02:00
resources session: avoid deprecated systemd environment import 2026年06月01日 13:03:30 +02:00
tests input: add XF86 key aliases for hardware bindings 2026年06月20日 13:24:18 +02:00
.envrc chore: update gitignore and add .envrc 2026年02月07日 20:09:01 +01:00
.gitignore docs: move diagrams to docs/diagrams/, add input methods diagram 2026年02月24日 13:12:35 +01:00
flake.lock Add flake.nix 2026年03月02日 18:17:57 +01:00
flake.nix Add flake.nix 2026年03月02日 18:17:57 +01:00
LICENSE docs: rewrite README and add LICENSE 2026年02月07日 20:09:01 +01:00
README.md input: make intercepted key routing deterministic 2026年05月29日 09:45:57 +02:00
shell.nix feat(drm): enable display-info EDID 2026年03月05日 17:41:10 +01:00

EWM - Emacs Wayland Manager

EWM Screenshot

EWM is a modern, fast Linux desktop environment based on Emacs. It is written in Rust, built on Smithay, and runs as a dynamic module inside an Emacs session. Wayland applications appear as Emacs buffers, which means graphical windows can be managed with the same commands, keybindings, and workflows as the rest of Emacs.

The ultimate goal of EWM is to let power users be bottlenecked by their own thinking, not by the tools they use. Computers should never stand in our way. EWM is built around the idea that window management, application launching, navigation, text input, and system control should be fast, deterministic, programmable, and composable.

Years ago I tried Emacs and became obsessed with how elegant and powerful the flow was. Most Emacs actions do not require visual feedback: once a command sequence is learned, it can be executed blindly through deterministic key presses. Over time this creates a huge productivity boost, with virtually no skill cap. The only missing piece was graphical windows. EWM solves that by making Wayland windows part of the Emacs environment itself.

Approach

EWM was bootstrapped with LLM assistance. Today, coding agents are used mainly to compare EWM against niri and catch divergences from proven Smithay compositor patterns before they become correctness, performance, or reliability issues. This feedback loop is a major reason EWM could be built quickly while still becoming fast and reliable enough for daily use.

Quick Start

For local testing, use the helper script:

cd compositor
./test.sh

The script builds EWM with screencast support, sets EWM_MODULE_PATH, and starts Emacs with --fg-daemon=vt2. Pass an init directory as the only argument when you need one, for example ./test.sh /etc/nixos/emacs. The named daemon is intentional: plain --fg-daemon uses the default Emacs server socket and can conflict with an existing Emacs daemon. Connect to this session with emacsclient --socket-name=vt2.

Launch apps with s-d. See the wiki for full setup, configuration, and NixOS instructions.

Current Features

  • Wayland applications as regular Emacs buffers
  • Emacs-native window management, focus, keybindings, and fullscreen
  • Multi-monitor DRM backend with hotplug, output configuration, and fractional scaling
  • Layer-shell, workspace, screen lock, idle, activation, clipboard, and drag-and-drop protocol support
  • Screen sharing through xdg-desktop-portal and PipeWire
  • Input methods and keyboard configuration integrated with Emacs
  • External app launching through XDG desktop entries

Known Limitations

  • GPU selection is automatic (no override)
  • Must run from TTY (no nested mode)

Inspirations

  • EXWM (Emacs side): Buffer-per-window model, prefix key interception, automatic focus management
  • niri (Compositor side): Backend architecture, Smithay patterns, DRM abstraction

Community

Join the Matrix room: #ewm:matrix.org

License

GPL-3.0