1
0
Fork
You've already forked cow
0
forked from thomasadam/cow
Compositor on Wayland -- a stacking window manager using river as the compositor. cow aims to behave like fvwm and mwm from X11.
  • C 98.1%
  • Meson 1.5%
  • Shell 0.3%
  • CSS 0.1%
Thomas Adam f5cfd76045 set: make desks.count operate on all outputs
When setting 'desks.count' ensure it applies to all outputs and not the
output the command was run from.
2026年06月15日 21:59:38 +01:00
.forgejo/workflows actions: add IRC notifier 2026年04月20日 18:20:30 +01:00
config pan_frames: show orange on panframe dwell 2026年06月07日 16:54:58 +01:00
cowbar cowbar: optional -n to show desk names 2026年05月30日 15:36:29 +01:00
cowident cowident.c: Port fallback to shm_open from src/shm.c 2026年06月15日 21:58:08 +02:00
cowpager cowpager.c: Port fallback to shm_open from src/shm.c 2026年06月15日 21:58:08 +02:00
cowrearrange cowrearrange: tile / cascade module 2026年05月25日 14:15:04 +01:00
dev-docs cmd: introduce a new layout command 2026年05月25日 16:48:05 +01:00
include/cow Add util.h as option besides libutil.h and bsd/libutil.h 2026年06月13日 18:24:16 +02:00
logos repo: tidy up file locations 2026年05月28日 18:16:34 +01:00
man cowpager: clamp pager to originating desk 2026年06月12日 15:35:00 +01:00
protocol cmd: add pick-window command 2026年06月09日 21:33:03 +01:00
share/wayland-sessions initial commit 2026年04月06日 17:19:43 +01:00
src set: make desks.count operate on all outputs 2026年06月15日 21:59:38 +01:00
ss repo: tidy up file locations 2026年05月28日 18:16:34 +01:00
tools start: remove debug 2026年04月22日 08:58:21 +01:00
vendor initial commit 2026年04月06日 17:19:43 +01:00
.clang-format windows: implement containers 2026年04月08日 21:50:44 +01:00
.gitignore gitignore: exclude .cache/ directory 2026年04月18日 14:09:30 +01:00
LICENSE initial commit 2026年04月06日 17:19:43 +01:00
meson.build meson.build: Check for the existance of util.h 2026年06月13日 18:22:19 +02:00
meson_options.txt initial commit 2026年04月06日 17:19:43 +01:00
README.md repo: tidy up file locations 2026年05月28日 18:16:34 +01:00

CoW -- Compostitor on Wayland

cow is a stacking window manager. Unlike other compositors based on wlroots, cow is a window manager using river as the compositor.

This allows for more focus on writing the window manager part without having to worry too much about wayland protocol handling, etc., effectively lumping that in with being a wayland display server.

Inspiration

cow's aims are to provide the following:

  • The look-and-feel of fvwm and mwm.
  • To provide a sensible mechanism for configuration, divorcing the need for complex configuration syntaxes, instead using dedicated commands that can be used both as a configuration file, and via IPC (runtime).

The commands are inspired by tmux(1).

Where to Start?

There's been an attempt at some documentation:

  • cow(1) -- documents the commands/config settings which can be used to configure cow.
  • moocow(1) -- the CLI used to communicate with cow from shell-scripts, etc.
  • cowbar(1) -- JSON structure of the state of cow -- primarily used to provide information to waybar, but can be used for any bar.

More concretely though, have a look at:

  • cow config file -- this is documented and should help you start making changes. Copy it to ~/.config/cow to get started making changes,
  • waybar -- this can be copied verbatim to ~/.config/ if desired to it can be configured to your liking.

Wiki

See: https://codeberg.org/thomasadam/cow/wiki/Home

What does it look like?

There's also support for containers -- a top-level window which can group windows together into tabs.

Pages / Pager

A very crude video is also available

How do I build CoW?

Because cow is a window manager reliant on river, then the binary for river is required:

For the wayland parts:

  • wayland_client
  • xkbcommon
  • pangocairo
  • cairo
  • libbsd (for non-BSD systems; linux, etc.)

Note that the names of the libraries above will vary across systems.

Documentation is written in scdoc:

  • scdoc

The build system itself uses meson, and hence the following command will configure, build, and install cow:

meson setup build
meson compile -C build && meson install -C build

How do I run CoW?

There's a command called cow-start which you can run thus:

river -c 'cow-start'

It's recommended that you copy the river init file to ~/.config/river so that you can just run:

river

This will set up the environment before river starts to enable screen-sharing, etc. The river init file can be customised as needed.

Alternatively, a globally-installed cow.desktop file is installed allowing cow to be used with wayland login managers.

Contact and Support

You can email me at: thomas at xteddy dot org

Or, use the IRC channel on libera.chat -- #cow-wayland

IRC is preferred over other forms of communication. Maybe I'll see you there?


FAQ

Here's some of the questions that have never been asked, frequently or otherwise...

Why is this called Cow?

Because originally, cow was going to be an all-in-one Compositor On Wayland (CoW), but now that it uses river to do all the heavy-lifting, this nae is a slight misnomer.

That said though, I like cows and, I'm going to stick with that name for now.

Moocow? Seriously?

Well, the way I see it, if you want cow to do anything, you need to "moo (at) cow", so moocow as an external command seemed appropriate.

Are multi-monitors supported?

Yes. For now, one will need to edit the start script to run wlr-randr with the appropriate values.

Note that this is controlled via river(1) and cow has no means of being able to set monitors directly. To get a more visual overview of things, the wdisplays command is helpful, and is similar to arandr from xrandr.

Logo and mascot.

Meet our mascot, Anvil the cow.

Luis Sobalvarro kindly created the CoW logo for this project.

and...

Massive thanks to you, Luis!

These logos are released under the same licence as CoW itself -- that is to say, they're free to use as long as attribution is given to Luis Sobalvarro.