Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,170 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

digitwm

A scrollable-tiling window manager for X11, forked from cwm — the calm window manager from the OpenBSD base system.

Русская версия: README.ru.md.

What it is

Windows live on an endless horizontal ribbon of columns. The screen is a viewport onto that ribbon: opening a window pushes the ribbon, it never squeezes the neighbours into unreadable slivers. Focus moves the viewport; the ribbon keeps its shape.

If that sounds like niri, it is the same idea. niri is a Wayland compositor. digitwm brings the layout model to X11, where it can run on Linux, FreeBSD and NetBSD alike.

What it is not

It is not a compositor, so it does not animate. Animation needs a process that owns the frame, and an X11 window manager does not. Windows move in one step. If you want fades and slides, run a compositor beside it.

It is not a fork of sdorfehs or of papersway. Those are GPL; digitwm is ISC, and it stays that way so patches can flow back to cwm and so the code can be used without conditions. See NOTICE.

Why cwm as the base

cwm is small (7 883 lines of C), depends on three libraries (x11, xft, xrandr), has been maintained in OpenBSD base for two decades, and — the part that matters here — has no tiling model to tear out. It is a floating window manager, so the ribbon is added onto clean ground rather than grafted over someone else's frame tree.

Layout rules are executable specifications

The numbers that drive the layout — how far the ribbon shifts after a focus change, how wide a column is, where a new window is inserted, what gets focus when a window closes — are not buried in C. They are written as FTS models under fts/, in Russian and in English, with worked examples on the boundaries.

The loop over columns stays in C, because a loop is mechanical. The numbers the loop substitutes are policy, and policy belongs somewhere it can be read and tested.

FTS never runs inside the window manager. It runs in CI: the same vectors go through the generated code and through the live window manager, and a mismatch fails the build. No runtime dependency on Node, which is what keeps NetBSD reachable.

The two promises no single number can hold — opening a window alters no window already on the ribbon, and the focused column always lies wholly inside the viewport horizontally — are checked against the running binary by a harness of their own. doc/ribbon.md is the whole model in one page.

The session

session/ turns the window manager into a working desktop: editor, terminal, shell, multiplexer and the Digit agent, all in one palette, installed with one command.

sh bootstrap.sh --plan        # from a bare system: see what would happen
sh bootstrap.sh               # build dependencies, the window manager, then this
session/verify.sh             # check the result

bootstrap.sh installs what digitwm is built with and hands over to session/install.sh, which can also be run on its own if the toolchain is already there.

Nothing third-party is vendored here. vim, tmux, alacritty, zsh and the rest ship under their own licences and are installed by the target system's package manager; this repository carries configuration only. Colour schemes are not duplicated either — they are generated by Digitable Workbench from one palette file and referenced, not copied.

What you get and, just as importantly, what you do not — no animation, no panel, and an incomplete tool set on some package managers — is spelled out in session/README.md.

Documentation

Every document is here twice, in English and in Russian, and they say the same things — a difference in facts is worse than a missing translation.

doc/ribbon.md the layout model, its commands and its settings
doc/commands.md every command, and what the ribbon did to it
doc/monitors.md more than one monitor, and what happens on hotplug
doc/offscreen.md windows outside the viewport, and the numbers behind the default
doc/baseline.md flicker, insertion latency, hidden windows — measured, and what is still missing
doc/build.md building, installing, running, checking a change
fts/README.md the models, the harnesses, and where they stop
pkgsrc/README.md the package, and what is missing until the first release
CONTRIBUTING.md the order a layout change is made in

Status

Early. The fork is in place with upstream history preserved. The ribbon is there and checked — columns, stacks, the scrolling viewport, insertion, focus, width presets, per-output ribbons — but it has not been lived in for a week by anyone, there is no panel, and the delivery paths (bootstrap.sh, the pkgsrc port) have been exercised on Debian and by reading rather than on every system they claim. Each document says which of its statements were measured and which were not.

Licence

ISC, inherited from cwm and applied to new code as well. Full text in LICENSE; provenance and the one BSD-3 exception in NOTICE.

Part of Digitable. A write-up with the numbers from the harnesses and the measurements is on the product page, courses.digitable.life/digitwm; it also says why digitwm stays out of the paid Workbench archive even though ISC does not forbid it.

About

Скроллируемый тайлинг поверх cwm (ISC): лента колонок вместо стопки окон. Правила раскладки описаны на FTS.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages