https://github.com/cr3eperall/dynisland
A dynamic and extensible GTK4 layer-shell, written in Rust.
https://github.com/cr3eperall/dynisland
bar gtk gtk4 layer-shell linux rust wayland
Last synced: 6 days ago
JSON representation
A dynamic and extensible GTK4 layer-shell, written in Rust.
- Host: GitHub
- URL: https://github.com/cr3eperall/dynisland
- Owner: cr3eperall
- License: mit
- Created: 2023-11-04T20:33:41.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-26T15:57:41.000Z (7 months ago)
- Last Synced: 2024-10-25T09:13:21.871Z (6 months ago)
- Topics: bar, gtk, gtk4, layer-shell, linux, rust, wayland
- Language: Rust
- Homepage:
- Size: 603 KB
- Stars: 172
- Watchers: 6
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-useful-projects - <img src="https://icon.horse/icon/github.com" height="20px" align="center"/>/cr3eperall/dynisland - Apple Dynamic Island-like bar (Linux / Other)
- awesome-useful-projects - <img src="https://icon.horse/icon/github.com" height="20px" align="center"/>/cr3eperall/dynisland - Apple Dynamic Island-like bar (Jump To / Linux)
README
# 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
## 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
- multi-monitor support**Planned features:**
- [ ] loading modules after startup
- [ ] ? unload modules at runtime
- [ ] ? custom widgets in lua## Usage
### Start/restart the daemon
```bash
dynisland daemon
# or
dynisland restart
```### Open the gtk debugger
```bash
dynisland inspector
```- this can be useful for css theming
## Dependencies
- gtk4
- gtk4-layer-shell## Installation
### Using cargo
```bash
cargo install dynisland
```### Arch Linux
```bash
yay -S dynisland-git
```## Configuration
### Create the directory structure
```bash
mkdir -p ~/.config/dynisland/{modules,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](https://github.com/cr3eperall/dynisland-modules) 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](https://github.com/cr3eperall/dynisland-modules/releases/latest)
```bash
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
```bash
git clone --recursive https://github.com/cr3eperall/dynisland
cd 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 target/release/libdynamic_layoutmanager.so ~/.config/dynisland/layouts
```### Generate the default config file
```bash
dynisland default-config >> ~/.config/dynisland/dynisland.ron
touch ~/.config/dynisland/dynisland.scss
```### See the [Wiki](https://github.com/cr3eperall/dynisland/wiki) for the main config options
### See [dynisland-modules](https://github.com/cr3eperall/dynisland-modules) for the module specific configs
Then edit the configs and scss to your liking.
## Building
### Without including the modules
```bash
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
```bash
git clone --recursive https://github.com/cr3eperall/dynisland
cd dynisland
cargo build --release --features completions
cd target/release
install -Dm755 dynisland ~/.local/bin/dynisland
```### Install shell completions
```bash
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](https://github.com/elkowar/eww) - For reference on how to do IPC, custom gtk widgets and some of the systray code
- [Nullderef](https://nullderef.com/) - For a deep dive on how to implement a plugin system in rust