mirror of
https://github.com/Zedfrigg/ironbar.git
synced 2025-07-01 18:51:04 +02:00
This PR includes the necessary code changes, CI changes and documentation to generate and deploy a full JSON schema for each release and the master branch, which can be used within config files for autocomplete and type checking.
166 lines
No EOL
7.1 KiB
Markdown
166 lines
No EOL
7.1 KiB
Markdown
You can compile Ironbar from source using `cargo`.
|
|
Just clone the repo and build:
|
|
|
|
```sh
|
|
git clone https://github.com/jakestanger/ironbar.git
|
|
cd ironbar
|
|
cargo build --release
|
|
# change path to wherever you want to install
|
|
install target/release/ironbar ~/.local/bin/ironbar
|
|
```
|
|
|
|
It is also recommended to install a [Nerd Font](https://www.nerdfonts.com/#home) for displaying symbols.
|
|
|
|
## Build requirements
|
|
|
|
To build from source, you must have GTK (>= 3.22) and GTK Layer Shell installed.
|
|
You also need rust; only the latest stable version is supported.
|
|
|
|
### Arch
|
|
|
|
```shell
|
|
pacman -S gtk3 gtk-layer-shell
|
|
# for http support
|
|
pacman -S openssl
|
|
# for volume support
|
|
pacman -S libpulse
|
|
# for lua/cairo support
|
|
pacman -S luajit lua51-lgi
|
|
```
|
|
|
|
### Ubuntu/Debian
|
|
|
|
```shell
|
|
apt install build-essential libgtk-3-dev libgtk-layer-shell-dev
|
|
# for http support
|
|
apt install libssl-dev
|
|
# for volume support
|
|
apt install libpulse-dev
|
|
# for lua/cairo support
|
|
apt install luajit-dev lua-lgi
|
|
```
|
|
|
|
### Fedora
|
|
|
|
```shell
|
|
dnf install gtk3-devel gtk-layer-shell-devel
|
|
# for http support
|
|
dnf install openssl-devel
|
|
# for volume support
|
|
dnf install pulseaudio-libs-devel
|
|
# for lua/cairo support
|
|
dnf install luajit-devel lua-lgi
|
|
```
|
|
|
|
## Features
|
|
|
|
By default, all features are enabled for convenience. This can result in a significant compile time.
|
|
If you know you are not going to need all the features, you can compile with only the features you need.
|
|
|
|
As of `v0.15.0`, compiling with no features is about 50% faster.
|
|
On a 3800X, it takes about 45 seconds for no features and 90 seconds for all.
|
|
This difference is expected to increase as the bar develops.
|
|
|
|
Features containing a `+` can be stacked, for example `config+json` and `config+yaml` could both be enabled.
|
|
|
|
To build using only specific features, disable default features and pass a comma separated list to `cargo build`:
|
|
|
|
```shell
|
|
cargo build --release --no-default-features \
|
|
--features http,config+json,clock
|
|
```
|
|
|
|
> ⚠ Make sure you enable at least one `config` feature otherwise you will not be able to start the bar!
|
|
|
|
| Feature | Description |
|
|
|---------------------|-----------------------------------------------------------------------------------|
|
|
| **Core** | |
|
|
| http | Enables HTTP features. Currently this includes the ability to load remote images. |
|
|
| ipc | Enables the IPC server. |
|
|
| cli | Enables the CLI. Will also enable `ipc`. |
|
|
| config+all | Enables support for all configuration languages. |
|
|
| config+json | Enables configuration support for JSON. |
|
|
| config+yaml | Enables configuration support for YAML. |
|
|
| config+toml | Enables configuration support for TOML. |
|
|
| config+corn | Enables configuration support for [Corn](https://github.com/jakestanger/corn). |
|
|
| config+ron | Enables configuration support for [Ron](https://github.com/ron-rs/ron). |
|
|
| **Modules** | |
|
|
| cairo | Enables the `cairo` module |
|
|
| clipboard | Enables the `clipboard` module. |
|
|
| clock | Enables the `clock` module. |
|
|
| focused | Enables the `focused` module. |
|
|
| launcher | Enables the `launcher` module. |
|
|
| music+all | Enables the `music` module with support for all player types. |
|
|
| music+mpris | Enables the `music` module with MPRIS support. |
|
|
| music+mpd | Enables the `music` module with MPD support. |
|
|
| notifications | Enables the `notiications` module. |
|
|
| sys_info | Enables the `sys_info` module. |
|
|
| tray | Enables the `tray` module. |
|
|
| upower | Enables the `upower` module. |
|
|
| volume | Enables the `volume` module. |
|
|
| workspaces+all | Enables the `workspaces` module with support for all compositors. |
|
|
| workspaces+sway | Enables the `workspaces` module with support for Sway. |
|
|
| workspaces+hyprland | Enables the `workspaces` module with support for Hyprland. |
|
|
| **Other** | |
|
|
| schema | Enables JSON schema support and the CLI `--print-schema` flag. |
|
|
|
|
|
|
## Speeding up compiling
|
|
|
|
With the full feature set, Ironbar can take a good while to compile.
|
|
There are a couple of tricks which can be used to improve compile times.
|
|
|
|
## Linker
|
|
|
|
The default GCC linker is *slow* - it takes nearly half of the compile time.
|
|
As an alternative, you can use [mold](https://github.com/rui314/mold).
|
|
|
|
Install the package for your distro, create/modify the `.cargo/config.toml` file inside the project dir,
|
|
then add the following:
|
|
|
|
```toml
|
|
[target.x86_64-unknown-linux-gnu]
|
|
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
|
|
```
|
|
|
|
## Caching
|
|
|
|
To speed up subsequent rebuilds, Mozilla's [sccache](https://github.com/mozilla/sccache) tool can be used.
|
|
This provides a cache of Rust modules which can be re-used when compiling any other crate.
|
|
|
|
Install the package for your distro, create/modify the `.cargo/config.toml` file inside the project dir,
|
|
then add the following:
|
|
|
|
```toml
|
|
[build]
|
|
rustc-wrapper = "/usr/bin/sccache"
|
|
```
|
|
|
|
> [!TIP]
|
|
> To get the most of out `sccache`,
|
|
> you can add this to `$HOME/.cargo/config.toml` to enable caching for all Cargo builds.
|
|
|
|
## Codegen Backend
|
|
|
|
> [!WARNING]
|
|
> The Cranelift backend is experimental and requires the use of the nightly compiler.
|
|
> It is designed for development builds only.
|
|
|
|
If working on the Ironbar codebase, you may see some benefit from using the [Cranelift](https://github.com/rust-lang/rustc_codegen_cranelift) compiler backend.
|
|
This is known to shave a further few seconds off the compile time (bringing down from 10 to 7-8 on my own hardware).
|
|
|
|
Firstly install the component:
|
|
|
|
```shell
|
|
rustup component add rustc-codegen-cranelift-preview --toolchain nightly
|
|
```
|
|
|
|
Then create/modify the `.cargo/config.toml` file inside the project dir, and add the following:
|
|
|
|
```toml
|
|
[unstable]
|
|
codegen-backend = true
|
|
|
|
[profile.dev]
|
|
codegen-backend = "cranelift"
|
|
``` |