doc: rename to river-classic

This commit is contained in:
Isaac Freund
2025-08-30 18:52:39 +02:00
parent 265461162f
commit 1168a3f47a
2 changed files with 44 additions and 73 deletions

View File

@ -1,39 +1,39 @@
# Packaging river for distribution # Packaging river-classic for distribution
First of all, I apologize for writing river in Zig. It will likely make First of all, I apologize for writing river-classic in Zig. It will likely make
your job harder until Zig is more mature/stable. I do however believe that your job harder until Zig is more mature/stable. I do however believe that
writing my software in Zig allows me to deliver the best quality I can writing my software in Zig allows me to deliver the best quality I can despite
despite the drawbacks of depending on a relatively immature language/toolchain. the drawbacks of depending on a relatively immature language/toolchain.
## Source tarballs ## Source tarballs
Source tarballs with stable checksums and git submodule sources included may Source tarballs with stable checksums may be found on the
be found on the [codeberg releases page](https://codeberg.org/river/river/releases). [codeberg releases page](https://codeberg.org/river/river-classic/releases).
These tarballs are signed with the PGP key available on my website at These tarballs are signed with the PGP key available on my website at
<https://isaacfreund.com/public_key.txt>. <https://isaacfreund.com/public_key.txt>.
For the 0.1.3 release for example, the tarball and signature URLs are: For the 0.3.12 release for example, the tarball and signature URLs are:
``` ```
https://codeberg.org/river/river/releases/download/v0.1.3/river-0.1.3.tar.gz https://codeberg.org/river/river-classic/releases/download/v0.1.3/river-classic-0.3.12.tar.gz
https://codeberg.org/river/river/releases/download/v0.1.3/river-0.1.3.tar.gz.sig https://codeberg.org/river/river-classic/releases/download/v0.1.3/river-classic-0.3.12.tar.gz.sig
``` ```
## Zig version ## Zig version
Until Zig 1.0, Zig releases will often have breaking changes that prevent Until Zig 1.0, Zig releases will often have breaking changes that prevent
river from building. River tracks the latest minor version Zig release river-classic from building. river-classic tracks the latest minor version Zig
and is only compatible with that release and any patch releases. At the time release and is only compatible with that release and any patch releases. At the
of writing for example river is compatible with Zig 0.9.0 and 0.9.1 but time of writing for example river is compatible with Zig 0.9.0 and 0.9.1 but not
not Zig 0.8.0 or 0.10.0. Zig 0.8.0 or 0.10.0.
## Zig Package Manager ## Zig Package Manager
River uses the built-in Zig package manager for its (few) Zig dependencies. river-classic uses the built-in Zig package manager for its (few) Zig
By default, running `zig build` will fetch river's Zig dependencies from the dependencies. By default, running `zig build` will fetch river-classic's Zig
internet and store them in the global zig cache before building river. Since dependencies from the internet and store them in the global zig cache before
accessing the internet is forbidden or at least frowned upon by most distro building river-classic. Since accessing the internet is forbidden or at least
packaging infrastructure, there are ways to fetch the Zig dependencies in a frowned upon by most distro packaging infrastructure, there are ways to fetch
separate step before building river: the Zig dependencies in a separate step before building river-classic:
1. Fetch step with internet access: 1. Fetch step with internet access:
@ -114,10 +114,10 @@ in the first place. For greatest effect, both may be used.
- `-Doptimize=ReleaseSmall`: Optimize for binary size, - `-Doptimize=ReleaseSmall`: Optimize for binary size,
disable all assertions and runtime safety checks. disable all assertions and runtime safety checks.
Please use `-Doptimize=ReleaseSafe` when building river for general Please use `-Doptimize=ReleaseSafe` when building river-classic for general use.
use. CPU execution speed is not the performance bottleneck for river, the CPU execution speed is not the performance bottleneck for river-classic, the GPU
GPU is. Additionally, the increased safety is more than worth the binary is. Additionally, the increased safety is more than worth the binary size
size trade-off in my opinion. trade-off in my opinion.
## Build prefix and DESTDIR ## Build prefix and DESTDIR
@ -126,7 +126,7 @@ environment variable. For example
```bash ```bash
DESTDIR="/foo/bar" zig build --prefix /usr install DESTDIR="/foo/bar" zig build --prefix /usr install
``` ```
will install river to `/foo/bar/usr/bin/river`. will install river-classic to `/foo/bar/usr/bin/river`.
The Zig build system only has a single install step, there is no way to build The Zig build system only has a single install step, there is no way to build
artifacts for a given prefix and then install those artifacts to that prefix artifacts for a given prefix and then install those artifacts to that prefix
@ -147,7 +147,7 @@ install() {
## River specific suggestions ## River specific suggestions
I recommend installing the example init file found at `example/init` to I recommend installing the example init file found at `example/init` to
`/usr/share/examples/river/init` or similar if your distribution has such `/usr/share/examples/river-classic/init` or similar if your distribution has such
a convention. a convention.
## Examples ## Examples

View File

@ -1,44 +1,35 @@
<div align="center"> # river-classic
<img src="logo/logo_text_adaptive_color.svg" width="600em">
</div>
## Overview river-classic is a dynamic tiling Wayland compositor with flexible runtime
configuration. It is a fork of [river](https://codeberg.org/river/river) 0.3
intended for users that are happy with how river 0.3 works and do not wish to
deal with the majorly breaking changes planned for the river 0.4.0 release.
River is a dynamic tiling Wayland compositor with flexible runtime
configuration.
Check [packaging status](https://repology.org/project/river-compositor/versions) —
Join us at [#river](https://web.libera.chat/?channels=#river) on irc.libera.chat — Join us at [#river](https://web.libera.chat/?channels=#river) on irc.libera.chat —
Read our man pages, [wiki](https://codeberg.org/river/wiki), and Read our man pages, [wiki](https://codeberg.org/river/wiki), and
[Code of Conduct](CODE_OF_CONDUCT.md) [Code of Conduct](CODE_OF_CONDUCT.md)
The main repository is on [codeberg](https://codeberg.org/river/river), The main repository is on [codeberg](https://codeberg.org/river/river-classic),
which is where the issue tracker may be found and where contributions are accepted. which is where the issue tracker may be found and where contributions are accepted.
Read-only mirrors exist on [sourcehut](https://git.sr.ht/~ifreund/river) Read-only mirrors exist on [sourcehut](https://git.sr.ht/~ifreund/river-classic)
and [github](https://github.com/riverwm/river). and [github](https://github.com/riverwm/river-classic).
*Note: river has not yet seen a stable 1.0 release and it will be necessary to
make significant breaking changes before 1.0 to realize my longer term plans.
That said, I do my best to avoid gratuitous breaking changes and bugs/crashes
should be rare. If you find a bug don't hesitate to
[open an issue](https://codeberg.org/river/river/issues/new/choose).*
## Features ## Features
Currently river's window management style is quite similar to river-classic's window management style is quite similar to
[dwm](http://dwm.suckless.org), [xmonad](https://xmonad.org), and other classic [dwm](http://dwm.suckless.org), [xmonad](https://xmonad.org), and other classic
dynamic tiling X11 window managers. Windows are automatically arranged in a tiled dynamic tiling X11 window managers. Windows are automatically arranged in a tiled
layout and shifted around as windows are opened/closed. layout and shifted around as windows are opened/closed.
Rather than having the tiled layout logic built into the compositor process, Rather than having the tiled layout logic built into the compositor process,
river uses a [custom Wayland river-classic uses a [custom Wayland
protocol](https://codeberg.org/river/river/src/branch/master/protocol/river-layout-v3.xml) protocol](https://codeberg.org/river/river-classic/src/branch/master/protocol/river-layout-v3.xml)
and separate "layout generator" process. A basic layout generator, `rivertile`, and separate "layout generator" process. A basic layout generator, `rivertile`,
is provided but users are encouraged to use community-developed [layout is provided but users are encouraged to use community-developed [layout
generators](https://codeberg.org/river/wiki/src/branch/master/pages/Community-Layouts.md) generators](https://codeberg.org/river/wiki/src/branch/master/pages/Community-Layouts.md)
or write their own. Examples in C and Python may be found or write their own. Examples in C and Python may be found
[here](https://codeberg.org/river/river/src/branch/master/contrib). [here](https://codeberg.org/river/river-classic/src/branch/master/contrib).
Tags are used to organize windows rather than workspaces. A window may be Tags are used to organize windows rather than workspaces. A window may be
assigned to one or more tags. Likewise, one or more tags may be displayed on a assigned to one or more tags. Likewise, one or more tags may be displayed on a
@ -46,14 +37,14 @@ monitor at a time.
River is configured at runtime using the `riverctl` tool. It can define River is configured at runtime using the `riverctl` tool. It can define
keybindings, set the active layout generator, configure input devices, and more. keybindings, set the active layout generator, configure input devices, and more.
On startup, river runs a user-defined init script which usually runs `riverctl` On startup, river-classic runs a user-defined init script which usually runs
commands to set up the user's configuration. `riverctl` commands to set up the user's configuration.
## Building ## Building
Note: If you are packaging river for distribution, see [PACKAGING.md](PACKAGING.md). Note: If you are packaging river-classic for distribution, see [PACKAGING.md](PACKAGING.md).
To compile river first ensure that you have the following dependencies To compile river-classic first ensure that you have the following dependencies
installed. The "development" versions are required if applicable to your installed. The "development" versions are required if applicable to your
distribution. distribution.
@ -79,7 +70,7 @@ Run `zig build -h` to see a list of all options.
River can either be run nested in an X11/Wayland session or directly River can either be run nested in an X11/Wayland session or directly
from a tty using KMS/DRM. Simply run the `river` command. from a tty using KMS/DRM. Simply run the `river` command.
On startup river will run an executable file at `$XDG_CONFIG_HOME/river/init` On startup river-classic will run an executable file at `$XDG_CONFIG_HOME/river/init`
if such an executable exists. If `$XDG_CONFIG_HOME` is not set, if such an executable exists. If `$XDG_CONFIG_HOME` is not set,
`~/.config/river/init` will be used instead. `~/.config/river/init` will be used instead.
@ -93,34 +84,14 @@ in the example directory.
For complete documentation see the `river(1)`, `riverctl(1)`, and For complete documentation see the `river(1)`, `riverctl(1)`, and
`rivertile(1)` man pages. `rivertile(1)` man pages.
## Future Plans
Currently details such as how tags work across multiple monitors are not
possible for users to configure. It would be possible to extend river's source
code to allow more flexibility here but this comes at the cost of complexity and
there will always be someone who prefers something slightly different.
My long term plan to address this is to move as much window management policy as
possible out of the river compositor process and into the "layout generator"
process which will need to be renamed to "window manager." This will give users
much more power and control over river's behavior and also enable some really
cool workflows. For example, it would be possible to write a window manager in
lisp and use hot code reloading to edit its behavior it while it is running.
This is a non-trivial architectural change and will take a while to implement. I
plan to focus on this change for the 0.4.0 release cycle. Unfortunately, it will
almost certainly break existing river configurations as well. I think the
benefits outweigh that downside though and I will do my best to offer a
reasonable upgrade path.
## Donate ## Donate
If my work on river adds value to your life and you'd like to support me If my work on river-classic adds value to your life and you'd like to support me
financially you can find donation information [here](https://isaacfreund.com/donate/). financially you can find donation information [here](https://isaacfreund.com/donate/).
## Licensing ## Licensing
River is released under the GNU General Public License v3.0 only. river-classic is released under the GNU General Public License v3.0 only.
The protocols in the `protocol` directory are released under various licenses by The protocols in the `protocol` directory are released under various licenses by
various parties. You should refer to the copyright block of each protocol for various parties. You should refer to the copyright block of each protocol for