4.1 KiB
Pinnacle
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 I architect it correctly 🦀).
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
Lua = {
workspace = {
library = {
"/path/to/pinnacle/api/lua"
}
}
}
into your Lua language server settings.
Controls
The following controls are currently hardcoded:
Esc
: Stop PinnacleCtrl + Left Mouse
: Move a windowCtrl + Right Mouse
: Resize a windowShift + L
: Open AlacrittyShift + K
: Open NautilusShift + J
: Open KittyShift + H
: Open Foot
The following controls are set in the example_config
:
Ctrl + Alt + C
: Close the currently focused windowCtrl + Alt + Space
: Toggle "floating" for the currently focused window
"Floating" is in quotes because while windows do currently tile themselves, tiled ones can still be moved just like a floating window. Toggling to and from floating will retile all tiled windows.
The only layout currently is a master stack with the master on the left side.
A Small Note
This is currently just a summer project I'm working on, but I hope that I can work on it enough that it becomes somewhat usable! If development slows down during the rest of the year, it's because ⭐university⭐.