#wayland-compositor #window #wayland #compositor

nightly fireplace_lib

Modular wayland window manager library

9 stable releases

Uses old Rust 2015

3.0.2 Mar 2, 2017
3.0.1 Feb 21, 2017
2.0.1 Feb 19, 2017
1.0.3 Feb 15, 2017

#17 in #compositor

MIT license

280KB
6K SLoC

Fireplace Build Status Crates.io Crates.io Lines of Code

He who wants to warm himself in old age must build a fireplace in his youth.

A modular wayland window manager

Fireplace Library

This folder is about the modular fireplace_lib library for creating your own window manager / wayland compositor based the functionality provided by this library.

For information on the actual reference window manager "Fireplace" please go here.

Documentation

Documentation is hosted on GitHub pages, because special build parameters are required - see "Usage" - which makes it unable to build on docs.rs

Usage

In your Cargo.toml

fireplace_lib = "^1.0.0"

fireplace_lib offers multiple features, which are all enabled by default:

  • static - Compile wlc and link statically
  • render - Enable rendering at all
  • gl - Implies render, provides functionality for OpenGL ES rendering
  • graphics - Implies render and gl, provides functionality for rendering with piston2d-graphics
  • conrod_ui - Implies render, gl and graphics, provides functionality for rendering with conrod

E.g. to use only gl:

fireplace_lib = { version = "^1.0.0", default-features = false, features = ["gl"] }

Building

Runtime and Build dependencies:

  • wlc (without static)
  • pixman
  • wayland 1.7+
  • wayland-protocols 1.7+
  • libxkbcommon
  • udev
  • libinput
  • libx11 (X11-xcb, Xfixes)
  • libxcb (xcb-ewmh, xcb-composite, xcb-xkb, xcb-image, xcb-xfixes)
  • libgbm (usually provided by mesa in most distros)
  • libdrm
  • libEGL (GPU drivers and mesa provide this)
  • libGLESv2 (GPU drivers and mesa provide this)
  • libfontconfig1 (with feature ui)
  • libfreetype6 (with feature ui)

And optionally:

  • dbus (for logind support)
  • systemd (for logind support)

Build-only Dependencies:

  • fontconfig (with feature ui)
  • libclang (>=3.8)

If you have libclang in another path then /usr/lib you have to provide it when building your binary:

LIBCLANG_PATH=/usr/lib64 cargo build --release

See https://github.com/KyleMayes/clang-sys#environment-variables

Examples

The most basic examples initializing all fireplace_lib features is keeped in fireplace_flavors/code

Contributing

I will happily accept new features or bug fixes, given that they are:

  • easily configurable via a struct that implements Deserialize via serde
  • is split into a seperate feature if it increases compile time substancially and/or will most likely not be used by a large amount of users
  • passes cargo clippy except for well explained exceptions
  • was formated with rustfmt and the config in the repository's root
  • roughly follows the design of existing code

If you are not sure, if your contribution does match these rules, open an issue or a pull request and lets discuss the subject.

Also note you can easily keep your personal changes out-of-tree by creating another rust library crate, that can be included in other forks, if you still want to make it available to the public or if you just add your code directly into your personal binary.

Like this you will never need to modify fireplace_lib in the first place, you can easier maintain your fork and still be up to date with new functionality.

Dependencies

~5–10MB
~170K SLoC