1
0
Fork 0
mirror of https://git.notashelf.dev/notashelf/beer.git synced 2026-08-16 22:53:25 +00:00
No description
  • Rust 98.9%
  • Nix 0.6%
  • Makefile 0.3%
  • Python 0.2%
Find a file
NotAShelf f85297331f
ipc: let clients set window title and app-id
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If376069bf3f86db85cca48255eab96116a6a6964
2026-08-14 08:26:16 +03:00
contrib window: confirm close when a job is running 2026-08-14 08:26:15 +03:00
crates ipc: let clients set window title and app-id 2026-08-14 08:26:16 +03:00
doc ipc: let clients set window title and app-id 2026-08-14 08:26:16 +03:00
fuzz meta: add cargo-fuzz targets for the protocol decoders 2026-07-24 13:39:48 +03:00
nix nix: install manpages, desktop entry, icon, and example config 2026-07-24 13:39:54 +03:00
scripts
terminfo
.clippy.toml meta: enable pedantic clippy lint groups 2026-07-27 08:03:05 +03:00
.deny.toml treewide: run taplo 2026-07-24 13:40:04 +03:00
.envrc
.gitignore meta: add cargo-fuzz targets for the protocol decoders 2026-07-24 13:39:48 +03:00
.rustfmt.toml
.taplo.toml treewide: run taplo 2026-07-24 13:40:04 +03:00
Cargo.lock search: optional regex query matching 2026-08-14 08:26:11 +03:00
Cargo.toml search: optional regex query matching 2026-08-14 08:26:11 +03:00
flake.lock
flake.nix
Makefile build: add a Makefile for non-Nix installs 2026-07-24 13:39:55 +03:00
README.md font: shape runs for ligatures and OpenType features 2026-08-07 22:27:50 +03:00

🍺 beer

A terminal worth pouring time into.

A small, fast, Wayland-native terminal emulator written in Rust drawn entirely on the CPU, with no GPU pipeline, no tabs, and no async runtime to get in the way.

Why another terminal?

Two reasons, actually. The first one and the one that motivated me try and build my own terminal is, obviously, that I just wanted to. While I don't necessarily find Wayland interesting, I've been meaning to get a bit acquainted with it for personal reasons. That, combined with my personal disagreements with foot's handling of fullscreen transparency, and a C codebase I found hard to keep up to date if I were to fork, I decided to look for a new terminal.

Most terminals reach for the GPU and a stack of abstractions before they draw a single glyph. beer goes the other way. It takes its cues from foot to keep the moving parts few, render with the CPU through wl_shm, talk to a real PTY, and stay out of the way. Since I could not identify and settle with a terminal that checks all the boxes, I decided to write one for real.

The result is a terminal that starts instantly, sits quietly in the background, and spends its cycles on your shell rather than on itself. It is the kind of tool you forget is running which, for a terminal, is the highest compliment. Pour one, get to work.

Project status

beer is pre-1.0 but already comfortable as a daily driver on Wayland. It renders truecolor text with styled attributes and colour emoji, scrolls back with incremental search, handles mouse selection and clipboard, follows the compositor's fractional scale, and speaks the kitty keyboard, graphics, and text-sizing protocols. It runs standalone or as a daemon that hosts many windows from one process.

Feature requests are welcome, but not everything will be implemented.

Tip

Manual pages (beer(1), beer.toml(5), beer-themes(7)) are generated from doc/ with scdoc and installed by the package; a commented starting config lives at contrib/beer.toml.

What's in here

This is a Cargo workspace with five production crates and one separate fuzzing crate:

  • crates/beer - the terminal application itself. Start here for the feature list, installation, configuration, and day-to-day use.
  • crates/beer-protocols - the reusable, self-documenting building blocks the terminal is made of, and a readable reference for the escape sequences and protocols beer speaks.
  • crates/beer-ipc - the Unix-socket protocol used by daemon and client processes.
  • crates/beer-window - the platform-neutral application/windowing contract.
  • crates/beer-wayland - the Wayland backend that drives the application contract.

cargo-fuzz targets for protocol parsers and decoders.

If you just want to run it, head to the application README. If you are curious how a terminal actually talks to the programs inside it, the protocols README is a friendly tour.

License

EUPL-1.2.