Find a file
2023-06-21 21:49:20 -05:00
api/lua Add quit keybind 2023-06-21 19:12:27 -05:00
assets See if README image works 2023-06-20 13:52:50 -05:00
resources Merged crates, more work on api 2023-06-17 18:55:04 -05:00
src Make tiled windows move like tiled windows 2023-06-21 21:49:20 -05:00
.gitignore Initial commit 2023-05-28 19:10:42 -05:00
Cargo.toml Merged crates, more work on api 2023-06-17 18:55:04 -05:00
LICENSE Initial commit 2023-05-28 19:10:42 -05:00
README.md Add quit function to api, update README and example_config 2023-06-21 17:36:51 -05:00
rustfmt.toml First commit 2023-05-28 19:18:22 -05:00

Pinnacle

Cool logo
A very, VERY WIP Smithay-based wayland compositor

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 environment
  • udev: 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 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 window
  • Ctrl + Right Mouse: Resize a window

You can find the rest of the controls in the example_config.

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.

Also the only layout is kinda wonk right now if you close all but one window