mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
149 lines
4.9 KiB
Markdown
149 lines
4.9 KiB
Markdown
Noctalia
|
|
===
|
|
|
|
A lightweight Wayland shell and bar built directly on Wayland + OpenGL ES, with no Qt or GTK dependency.
|
|
|
|
Noctalia is in early development. Expect breaking configuration and behavior changes while the project is still taking shape.
|
|
|
|
## Dependencies
|
|
|
|
### Fedora
|
|
|
|
```sh
|
|
sudo dnf install meson gcc-c++ just \
|
|
wayland-devel wayland-protocols-devel \
|
|
libEGL-devel mesa-libGLES-devel \
|
|
freetype-devel fontconfig-devel \
|
|
cairo-devel pango-devel \
|
|
libxkbcommon-devel glib2-devel \
|
|
sdbus-cpp-devel pipewire-devel \
|
|
pam-devel polkit-devel libcurl-devel libwebp-devel librsvg2-devel
|
|
```
|
|
|
|
### Arch
|
|
|
|
```sh
|
|
sudo pacman -S meson gcc just \
|
|
wayland wayland-protocols \
|
|
libglvnd freetype2 fontconfig \
|
|
cairo pango \
|
|
libxkbcommon glib2 \
|
|
sdbus-cpp libpipewire polkit \
|
|
pam curl libwebp librsvg
|
|
```
|
|
|
|
### Debian / Ubuntu
|
|
|
|
```sh
|
|
sudo apt install meson g++ just \
|
|
libwayland-dev wayland-protocols \
|
|
libegl-dev libgles-dev \
|
|
libfreetype-dev libfontconfig-dev \
|
|
libcairo2-dev libpango1.0-dev \
|
|
libxkbcommon-dev libglib2.0-dev \
|
|
libsdbus-c++-dev libpipewire-0.3-dev \
|
|
libpam0g-dev libpolkit-agent-1-dev libpolkit-gobject-1-dev \
|
|
libcurl4-openssl-dev libwebp-dev librsvg2-dev
|
|
```
|
|
|
|
Vendored dependencies, with no system package needed: `Wuffs`, `nanosvg`, `tomlplusplus`, `tinyexpr`,
|
|
`nlohmann/json`, `Luau`, `dr_wav`, `fzy`, `stb_image_resize2`, and Material Color Utilities.
|
|
|
|
System packages required beyond the Wayland/GL stack: `libwebp` handles WebP decoding and thumbnail encoding. Wuffs
|
|
handles the other supported raster image formats.
|
|
|
|
Polkit agent support requires development files that provide the `polkit-agent-1` and `polkit-gobject-1` pkg-config
|
|
modules. Some distros ship these in the runtime `polkit` package, while split-package distros use names such as
|
|
`polkit-devel`, `polkit-dev`, or `libpolkit-agent-1-dev` / `libpolkit-gobject-1-dev`.
|
|
|
|
**Optional:** installing `jemalloc` (Fedora: `jemalloc-devel`, Arch: `jemalloc`, Debian/Ubuntu: `libjemalloc-dev`, Void: `jemalloc`)
|
|
reduces memory fragmentation in long-running sessions. When detected at build time it is used automatically.
|
|
|
|
Sanitizer runtime packages are only needed for ASan/UBSan builds configured with `just configure asan`.
|
|
|
|
## Build
|
|
|
|
Requires [just](https://github.com/casey/just) and [meson](https://mesonbuild.com/).
|
|
|
|
```sh
|
|
# Debug build in build-debug/
|
|
just configure
|
|
just build
|
|
just run
|
|
|
|
# Optimized release build in build-release/
|
|
just configure release
|
|
just build release
|
|
just run release
|
|
|
|
# Clean rebuild
|
|
just rebuild
|
|
just rebuild release
|
|
```
|
|
|
|
## Installation
|
|
|
|
After building, install with `just`:
|
|
|
|
```sh
|
|
sudo just install release
|
|
```
|
|
|
|
Use `sudo just install` instead if you configured the default debug build.
|
|
|
|
Meson installs the binary and shipped assets using the normal prefix layout:
|
|
|
|
```text
|
|
/usr/local/bin/noctalia
|
|
/usr/local/share/noctalia/assets/...
|
|
```
|
|
|
|
Noctalia needs the shipped `assets/` tree at runtime. Copying only the `noctalia` binary is not enough.
|
|
|
|
Portable bundle layouts are also supported:
|
|
|
|
```text
|
|
bundle/
|
|
noctalia
|
|
assets/
|
|
```
|
|
|
|
```text
|
|
bundle/
|
|
bin/noctalia
|
|
share/noctalia/assets/
|
|
```
|
|
|
|
See [CONTRIBUTING.md](CONTRIBUTING.md#runtime-assets) for the full runtime asset lookup order.
|
|
|
|
## Configuration
|
|
|
|
Noctalia has two configuration layers:
|
|
|
|
- Declarative user config lives in `$XDG_CONFIG_HOME/noctalia/` or `~/.config/noctalia/`.
|
|
Noctalia reads every `*.toml` file in that directory, sorted alphabetically, and deep-merges them into one config.
|
|
A single `config.toml` is the simplest setup, but splitting config into files such as `bar.toml`, `theme.toml`,
|
|
or `widgets.toml` is also supported.
|
|
- GUI-managed overrides live in `$XDG_STATE_HOME/noctalia/settings.toml` or
|
|
`~/.local/state/noctalia/settings.toml`. This file is written by Noctalia itself for settings changed through the
|
|
UI, IPC-backed controls, setup flows, and other runtime actions that need persistence.
|
|
|
|
Load order is built-in defaults first, then declarative config files, then `settings.toml`.
|
|
Because the state file is applied last, GUI overrides win over matching values in `config.toml`.
|
|
|
|
Use the declarative config directory for hand-authored, dotfile-managed configuration. Treat `settings.toml` as an
|
|
app-managed override layer: inspect or delete it when you want to understand or clear GUI changes, but do not rely on
|
|
it as the primary place for curated config. Keeping the override file outside `~/.config` also allows the GUI to save
|
|
changes when the config directory is read-only, such as on NixOS.
|
|
|
|
Both layers are watched for changes and hot-reloaded. If neither declarative config nor state overrides exist,
|
|
Noctalia falls back to built-in defaults in code.
|
|
|
|
A ready-to-use starting config with all defaults is at [example.toml](example.toml). The full configuration reference
|
|
lives in the [documentation site](https://docs.noctalia.dev/v5/).
|
|
|
|
## Contributing
|
|
|
|
Developer notes, architecture overview, code style, project layout, and debugging commands live in
|
|
[CONTRIBUTING.md](CONTRIBUTING.md).
|