pinnacle/README.md

184 lines
7.5 KiB
Markdown
Raw Normal View History

![Pinnacle banner](/assets/pinnacle_banner_dark.png)
2023-06-20 20:52:50 +02:00
2023-09-08 05:52:45 +02:00
https://github.com/Ottatop/pinnacle/assets/120758733/c175ba80-9796-4759-92c3-1d7a6639b0c9
2023-08-17 04:23:17 +02:00
# Info
2023-08-16 04:58:03 +02:00
### What is Pinnacle?
Pinnacle is a Wayland compositor built in Rust using [Smithay](https://github.com/Smithay/smithay).
It's my attempt at creating something like [AwesomeWM](https://github.com/awesomeWM/awesome)
for Wayland.
It sports high configurability through a (soon to be) extensive Lua API, with plans for a Rust API in the future.
2023-09-08 05:52:45 +02:00
> ### More video examples below!
> <details>
>
> <summary>Click me</summary>
>
> All videos were recorded using [Screenkey](https://gitlab.com/screenkey/screenkey) and the Winit backend.
>
> https://github.com/Ottatop/pinnacle/assets/120758733/5b6b224b-3031-4a1c-9375-1143f1bfc0e3
>
> https://github.com/Ottatop/pinnacle/assets/120758733/7a465983-2560-412e-9154-40b3dfd20488
>
> (This video is very crunchy in my attempts to get under the 10mb limit)
>
> </details>
2023-08-16 04:58:03 +02:00
### Features
> This is a non-exhaustive list.
- [x] Winit backend (so you can run Pinnacle in your graphical environment)
- [x] Udev backend (so you can run Pinnacle in a tty)
- [x] Tag system
2023-07-03 01:31:41 +02:00
- [ ] Layout system
2023-07-18 17:41:55 +02:00
- [x] Left master stack, corner, dwindle, spiral layouts
- [ ] Other three master stack directions, floating, magnifier, maximized, and fullscreen layouts
- [ ] Resizable layouts
2023-08-03 02:45:56 +02:00
- [x] XWayland support
2023-08-16 04:58:03 +02:00
- This is currently somewhat buggy. If you find a problem, please submit an issue!
2023-08-08 01:25:22 +02:00
- [x] Layer-shell support
- [ ] wlr-screencopy support
- [ ] wlr-output-management support
2023-07-03 01:31:41 +02:00
- [ ] Server-side decorations
2023-07-13 04:48:47 +02:00
- [ ] Animations and blur and all that pizazz
2023-07-18 17:41:55 +02:00
- [ ] Widget system
2023-07-03 01:31:41 +02:00
- [ ] The other stuff Awesome has
- [x] Is very cool :thumbsup:
2023-06-20 23:16:14 +02:00
2023-08-17 04:23:17 +02:00
# Dependencies
2023-08-16 04:58:03 +02:00
> I have not tested these. If Pinnacle doesn't work properly with these packages installed, please submit an issue.
2023-06-20 23:16:14 +02:00
You'll need the following packages, as specified by [Smithay](https://github.com/Smithay/smithay):
2023-08-08 19:53:04 +02:00
`libwayland libxkbcommon libudev libinput libgdm libseat`, as well as `xwayland`.
2023-07-13 04:48:47 +02:00
- Arch:
```
2023-08-16 04:58:03 +02:00
sudo pacman -S wayland wayland-protocols libxkbcommon systemd-libs libinput mesa seatd xwayland
2023-07-13 04:48:47 +02:00
```
- Debian:
```
2023-08-08 19:53:04 +02:00
sudo apt install libwayland-dev libxkbcommon-dev libudev-dev libinput-dev libgdm-dev libseat-dev xwayland
2023-07-13 04:48:47 +02:00
```
2023-08-08 01:25:22 +02:00
- NixOS: Use the provided [`shell.nix`](shell.nix).
2023-07-13 04:48:47 +02:00
- TODO: other distros.
2023-09-22 00:34:02 +02:00
You'll also need Lua 5.4 for configuration. **Older versions will not work.**
Check with your package manager to see which version you have.
2023-06-20 23:16:14 +02:00
2023-08-17 04:23:17 +02:00
# Building
2023-06-20 23:16:14 +02:00
Build the project with:
```
cargo build [--release]
```
2023-08-08 01:25:22 +02:00
For NixOS users, there is a provided [`shell.nix`](shell.nix) file that you can use for `nix-shell`.
2023-08-16 04:58:03 +02:00
<sup>flake soon:tm:</sup>
2023-08-08 01:25:22 +02:00
2023-09-22 02:57:26 +02:00
> [!NOTE]
> On build, [`install_libs.sh`](install_libs.sh) will run to copy the Lua API library to
> `$XDG_DATA_HOME/pinnacle` (or `~/.local/share/pinnacle`).
2023-09-22 00:34:02 +02:00
2023-08-17 04:23:17 +02:00
# Running
2023-09-08 07:23:19 +02:00
> [!IMPORTANT]
> Before running, read the information in [Configuration](#configuration).
2023-09-22 00:34:02 +02:00
>
> Also, ensure you have installed the Lua API library to its correct location,
> as noted in [Building](#building).
2023-08-16 20:57:47 +02:00
2023-06-20 23:16:14 +02:00
After building, run the executable located in either:
2023-08-08 01:25:22 +02:00
```sh
2023-08-08 20:30:52 +02:00
./target/debug/pinnacle # without --release
./target/release/pinnacle # with --release
2023-06-20 23:16:14 +02:00
```
Or, run the project directly with
2023-08-08 01:25:22 +02:00
```sh
2023-08-08 20:30:52 +02:00
cargo run [--release]
2023-06-20 23:16:14 +02:00
```
2023-09-22 00:34:02 +02:00
See flags you can pass in by running `cargo run -- --help` (or `-h`).
2023-08-08 20:30:52 +02:00
2023-09-08 07:21:16 +02:00
> [!IMPORTANT]
> Make sure `command` in your `metaconfig.toml` is set to the right file.
2023-09-22 00:34:02 +02:00
> If it isn't, the compositor will load the default config instead.
2023-08-08 01:25:22 +02:00
2023-08-17 04:23:17 +02:00
# Configuration
2023-08-16 04:58:03 +02:00
Pinnacle is configured in Lua. Rust support is planned.
2023-06-20 23:16:14 +02:00
2023-08-16 04:58:03 +02:00
Pinnacle will search for a `metaconfig.toml` file in the following directories, from top to bottom:
2023-08-08 01:25:22 +02:00
```sh
2023-08-16 04:58:03 +02:00
$PINNACLE_CONFIG_DIR
2023-09-22 00:34:02 +02:00
$XDG_CONFIG_HOME/pinnacle
~/.config/pinnacle # Only if $XDG_CONFIG_HOME is not defined
2023-06-20 23:16:14 +02:00
```
2023-08-16 04:58:03 +02:00
The `metaconfig.toml` file provides information on what config to run, kill and reload keybinds,
2023-08-16 20:57:47 +02:00
and any environment variables you want set. For more details, see the provided
[`metaconfig.toml`](api/lua/metaconfig.toml) file.
2023-08-16 04:58:03 +02:00
2023-09-22 00:34:02 +02:00
If no `metaconfig.toml` file is found, the default config will be loaded.
2023-06-20 23:16:14 +02:00
2023-09-22 00:34:02 +02:00
For custom configuration, you can copy [`metaconfig.toml`](api/lua/metaconfig.toml) and
[`example_config.lua`](api/lua/example_config.lua) to `$XDG_CONFIG_HOME/pinnacle`
2023-08-16 04:58:03 +02:00
(this will probably be `~/.config/pinnacle`).
2023-08-03 02:45:56 +02:00
2023-09-22 00:34:02 +02:00
> If you rename `example_config.lua` to something like `init.lua`,
> you will need to change `command` in `metaconfig.toml` to reflect that.
2023-08-03 02:45:56 +02:00
2023-08-16 04:58:03 +02:00
### :information_source: Using the Lua Language Server
It is ***highly*** recommended to use the [Lua language server](https://github.com/LuaLS/lua-language-server)
and set it up to have the [`api/lua`](api/lua) directory as a library.
This will provide documentation, autocomplete, and error checking.
2023-06-20 23:16:14 +02:00
#### For VS Code:
2023-08-08 01:25:22 +02:00
Install the [Lua](https://marketplace.visualstudio.com/items?itemName=sumneko.lua) plugin, then go into
its settings and add the path to the [`api/lua`](api/lua) directory to `Workspace: Library`.
2023-06-20 23:16:14 +02:00
#### For Neovim:
Pass this table into your Lua language server settings:
2023-06-20 23:16:14 +02:00
```lua
Lua = {
workspace = {
library = {
2023-08-08 01:25:22 +02:00
"/path/to/pinnacle/api/lua" -- Your path here
2023-06-20 23:16:14 +02:00
}
}
}
```
2023-08-16 04:58:03 +02:00
### API Documentation
2023-09-10 04:33:09 +02:00
You can find online documentation for the Lua API [here](https://pinnacle-comp.github.io/pinnacle/main).
2023-08-16 04:58:03 +02:00
2023-08-29 04:11:30 +02:00
This documentation is auto-generated from the provided LuaLS annotation through
[ldoc_gen](https://github.com/Ottatop/ldoc_gen), so there may be some errors as I work the kinks out.
2023-08-16 04:58:03 +02:00
Note that there are some missing things like the `Keys` table and `Layout` enum
as well as any function overloads, but these should be autocompleted through the language server.
2023-09-10 04:33:09 +02:00
Documentation for other branches can be reached at `https://pinnacle-comp.github.io/pinnacle/<branch name>`.
2023-08-16 04:58:03 +02:00
2023-08-17 04:23:17 +02:00
# Controls
2023-09-11 05:25:18 +02:00
The following are the default controls in the [`example_config`](api/lua/example_config.lua).
| Binding | Action |
|----------------------------------------------|------------------------------------|
| <kbd>Ctrl</kbd> + <kbd>Mouse left drag</kbd> | Move window |
| <kbd>Ctrl</kbd> + <kbd>Mouse right drag</kbd>| Resize window |
| <kbd>Ctrl</kbd><kbd>Alt</kbd> + <kbd>q</kbd> | Quit Pinnacle |
| <kbd>Ctrl</kbd><kbd>Alt</kbd> + <kbd>c</kbd> | Close window |
| <kbd>Ctrl</kbd> + <kbd>Return</kbd> | Spawn [Alacritty](https://github.com/alacritty/alacritty) (you can change this in the config)|
| <kbd>Ctrl</kbd><kbd>Alt</kbd> + <kbd>Space</kbd> | Toggle between floating and tiled |
| <kbd>Ctrl</kbd> + <kbd>f</kbd> | Toggle fullscreen |
| <kbd>Ctrl</kbd> + <kbd>m</kbd> | Toggle maximized |
| <kbd>Ctrl</kbd> + <kbd>Space</kbd> | Cycle to the next layout |
| <kbd>Ctrl</kbd><kbd>Shift</kbd> + <kbd>Space</kbd> | Cycle to the previous layout |
| <kbd>Ctrl</kbd> + <kbd>1</kbd> to <kbd>5</kbd> | Switch to tag `1` to `5` |
| <kbd>Ctrl</kbd><kbd>Shift</kbd> + <kbd>1</kbd> to <kbd>5</kbd> | Toggle tag `1` to `5` |
| <kbd>Ctrl</kbd><kbd>Alt</kbd> + <kbd>1</kbd> to <kbd>5</kbd> | Move a window to tag `1` to `5` |
| <kbd>Ctrl</kbd><kbd>Alt</kbd><kbd>Shift</kbd> + <kbd>1</kbd> to <kbd>5</kbd> | Toggle tag `1` to `5` on a window |
2023-08-04 03:54:22 +02:00
2023-08-17 04:23:17 +02:00
# Feature Requests, Bug Reports, Contributions, and Questions
2023-08-14 21:47:27 +02:00
See [`CONTRIBUTING.md`](CONTRIBUTING.md).
2023-08-16 20:57:47 +02:00
2023-08-17 04:23:17 +02:00
# Changelog
2023-08-16 20:57:47 +02:00
See [`CHANGELOG.md`](CHANGELOG.md).