4 releases

0.1.3 Sep 6, 2024
0.1.2 Aug 28, 2024
0.1.1 Aug 26, 2024
0.1.0 Aug 26, 2024

#424 in GUI

MIT license

95KB
2K SLoC

Dynisland

A dynamic and extensible GTK4 bar for compositors implementing wlr-layer-shell, written in Rust.

Dynisland is designed to look and feel like Apple's Dynamic Island.

Demo

https://github.com/user-attachments/assets/3a8ae42e-a688-48d9-b76b-9d8292d7d9a7

Status

This project is still in early development; There will likely be bugs and breaking changes, including changes to the config format.

Features

  • Easy to configure with a dynamically generated default config
  • Animated transitions
  • Themable with hot loaded css
  • Extensible with third party Rust modules and layout managers

Planned features:

  • multi-monitor support
  • loading modules after startup
  • ? unload modules at runtime
  • ? custom widgets in lua

Usage

Start/restart the daemon

dynisland daemon
# or
dynisland restart

Open the gtk debugger

dynisland inspector
  • this can be useful for css theming

Dependencies

  • gtk4
  • gtk4-layer-shell

Installation

Using cargo

cargo install dynisland

Arch Linux

yay -S dynisland-git

Configuration

Create the directory structure

mkdir ~/.config/dynisland
mkdir ~/.config/dynisland/modules
mkdir ~/.config/dynisland/layouts

Download or compile the modules and put them in the modules directory

[!NOTE] If dynisland was compiled with the embed_modules feature (dynisland v0.1.2 has this as the default), the official modules are already included in the binary. You would only have to do this if you want to use third party modules.

Download the precompiled modules from the Release page

mv Download/libmusic_module.so Download/libscript_module.so Download/libclock_module.so ~/.config/dynisland/modules
mv Download/libdynamic_layoutmanager.so ~/.config/dynisland/layouts

Or build the modules from source

git clone --recursive https://github.com/cr3eperall/dynisland
cargo build --release --no-default-features --package dynisland_clock_module --package dynisland_dynamic_layoutmanager --package dynisland_music_module --package dynisland_script_module
mv target/release/libmusic_module.so target/release/libscript_module.so target/release/libclock_module.so ~/.config/dynisland/modules
mv targer/release/libdynamic_layoutmanager.so ~/.config/dynisland/layouts

Generate the default config file

dynisland default-config >> ~/.config/dynisland/dynisland.ron
touch ~/.config/dynisland/dynisland.scss

See the Wiki for the main config options

See dynisland-modules for the module specific configs

Then edit the configs and scss to your liking.

Building

Without including the modules

git clone https://github.com/cr3eperall/dynisland
cd dynisland
cargo build --release --no-default-features --features completions
cd target/release
install dynisland ~/.local/bin/dynisland

Including the modules

git clone https://github.com/cr3eperall/dynisland
cd dynisland
cargo build --release --features completions
cd target/release
install -Dm755 dynisland ~/.local/bin/dynisland

Install shell completions

install -Dm644 "target/_dynisland" "/usr/share/zsh/site-functions/_dynisland"

install -Dm644 "target/dynisland.bash" "/usr/share/bash-completion/completions/dynisland.bash"

install -Dm644 "target/dynisland.fish" "/usr/share/fish/vendor_completions.d/dynisland.fish"

Acknowledgements

  • eww - For reference on how to do IPC and custom gtk widgets
  • Nullderef - For a deep dive on how to implement a plugin system in rust

Dependencies

~28–42MB
~767K SLoC