.github/workflows | ||
api/lua | ||
assets | ||
resources | ||
src | ||
.gitignore | ||
Cargo.toml | ||
LICENSE | ||
README.md | ||
rustfmt.toml |
Pinnacle
Features
- Winit backend
- Udev backend
- This is currently just a copy of Anvil's udev backend.
- Basic tags
- Tags are currently very jank on the udev backend with multiple monitors. If you're checking udev out, I suggest unplugging all but one monitor or just using the winit backend until I flesh out the tag system.
- Widget system
- Layout system
- Server-side decorations
- The other stuff Awesome has
- Is very cool 👍
Info
Why Pinnacle?
Well, I currently use Awesome. And I really like it! Unfortunately, Awesome doesn't exist for Wayland (anymore). There doesn't seem to be any Wayland compositor out there that has all of the following:
- Tags for window management
- Configurable in Lua (or any other programming language for that matter)
- Has a bunch of batteries included (widget system, systray, etc)
So, this is my attempt at making an Awesome-esque Wayland compositor.
Dependencies
You'll need the following packages, as specified by Smithay:
libwayland
libxkbcommon
libudev
libinput
libgdm
libseat
Package names will vary across distros. TODO: list those names.
Building
Build the project with:
cargo build [--release]
Running
After building, run the executable located in either:
./target/debug/pinnacle --<backend> // without --release
./target/release/pinnacle --<backend> // with --release
Or, run the project directly with
cargo run [--release] -- --<backend>
backend
can be one of two values:
winit
: run Pinnacle as a window in your graphical environmentudev
: run Pinnacle in a tty. NOTE: I tried running udev in Awesome and some things broke so uh, don't do that
Configuration
Please note: this is VERY WIP and has basically no options yet.
Pinnacle supports configuration through Lua (and hopefully more languages if it's not too unwieldy 🦀).
Run Pinnacle with the PINNACLE_CONFIG
environment variable set to the path of your config file. If not specified, Pinnacle will look for the following:
$XDG_CONFIG_HOME/pinnacle/init.lua
~/.config/pinnacle/init.lua // if XDG_CONFIG_HOME isn't set
The following will use the example config file in api/lua
:
PINNACLE_CONFIG="./api/lua/example_config.lua" cargo run -- --<backend>
Autocomplete and that cool stuff
It is highly recommended to use the Lua language server and set it up to have the api/lua
directory as a library, as I'll be using its doc comments to provide autocomplete and error checking.
For VS Code:
Install the Lua plugin, then go into its settings and add the absolute(?) path to the api/lua
directory to Workspace: Library.
For Neovim:
Pass this table into your Lua language server settings:
Lua = {
workspace = {
library = {
"/path/to/pinnacle/api/lua"
}
}
}
Doc website soon™️
Controls
The following controls are currently hardcoded:
Ctrl + Left Mouse
: Move a windowCtrl + Right Mouse
: Resize a window
You can find the rest of the controls in the example_config
.