Complete GUI settings manager for driftwm compositor.
- 🎨 Native GTK4 interface with sidebar navigation
- ⚙️ All driftwm settings - 15+ configuration pages covering every option
- 💾 Live editing - changes update config structure in real-time
- 🔄 Hot reload support - driftwm automatically reloads config on save
- 📝 TOML format - reads/writes
~/.config/driftwm/config.toml - 🎭 Interactive Shader Editor - create custom animated backgrounds with visual controls
- 🪟 Window Rules - per-app blur, opacity, and decoration settings
- Modifier key (super/alt)
- Focus follows mouse
- Layout, variant, options, model
- Repeat rate and delay
- Layout independent keybindings
- Num Lock and Caps Lock startup state
- Tap to click, natural scroll, tap and drag
- Acceleration speed and profile
- Click method
- Acceleration speed and profile
- Natural scroll
- Theme and size
- Inactive opacity
- Trackpad and mouse speed
- Friction and animation speed
- Nudge and pan step
- Edge pan settings
- Zoom step multiplier
- Fit padding
- Reset on new window/activation
- Enable/disable snapping
- Gap, distance, break force
- Same edge snapping
- Background and foreground colors
- Corner radius
- Blur radius (0-20 passes) and strength (0.1-5.0)
- 6 blur presets: None, Light, Default, Medium, Strong, Extreme
- Per-app blur, opacity, decoration settings
- Match by app_id and/or title (glob support)
- Widget mode (pinned windows)
- Dynamic add/remove rules
- Wait for frame completion
- Disable direct scanout
- NVIDIA environment variables guide
- Shader path (GLSL)
- Tile path (PNG/JPG)
- Quick access to Shader Editor
- Visual Mode: Interactive controls for colors, animation, effects
- 3 shader templates: Gradient, Animated Waves, Clouds
- RGB color pickers for primary and secondary colors
- Animation speed, pattern scale, complexity controls
- Vignette and glow effects
- Raw Mode: Full GLSL code editor for advanced users
- Generate and save custom shaders
- Apply directly to background
- Custom keyboard shortcuts
- Add/remove bindings dynamically
- Multi-line editor for startup commands
- GTK4
- Rust 1.85+ (edition 2024)
cd ~/driftwmsettings
cargo build --releasesudo make installThis installs:
- Binary to
/usr/local/bin/driftwm-settings - Desktop entry to
/usr/local/share/applications/
sudo make uninstalldriftwm-settingsSearch for "driftwm Settings" in your application launcher.
cargo rundriftwmsettings/
├── src/
│ ├── main.rs # UI and page implementations
│ ├── config.rs # TOML config structures
│ ├── config_helpers.rs # Config initialization helpers
│ ├── ui_helpers.rs # UI widget helpers
│ └── shader_editor.rs # Interactive shader editor
├── Cargo.toml
├── Makefile
├── README.md
└── driftwm-settings.desktop
The app reads and writes to:
~/.config/driftwm/config.toml
Changes are saved when you click the "Save" button. driftwm will automatically reload the config within 1 second (hot reload).
Custom shaders are saved to:
~/.config/driftwm/custom_shader.glsl
- 🐛 Bug Fix: Fixed an issue where persistent and excessive scrollbars appeared by allowing the content area to dynamically resize based on the active page instead of keeping the maximum height of the tallest page.
- ✨ Interactive Shader Editor with Visual/Raw modes
- 🪟 Window Rules page for per-app settings
- 🎨 Enhanced blur controls with 6 presets
- 📏 Better window sizing - reduced default size to 900x650
- 🔄 Scroll reset - pages always start from top when switching
- 🔤 Clearer labels - "Layout independent keybindings" with tooltip
- Added
num_lockandcaps_lockkeyboard settings - Added
reset_on_new_windowandreset_on_activationzoom settings - Removed
force_legacy_drm(now usesSMITHAY_USE_LEGACY=1env var)
- Fixed scroll state persisting between sections (#1)
- Fixed default layout being too wide (#2)
- Improved "Layout independent" label clarity (#3)
(Coming soon)
- Add field to appropriate struct in
src/config.rs - Add UI widget in corresponding
add_*_page()function insrc/main.rs - Connect widget signal to update config
- Use
create_row()for horizontal layouts - Use
add_label()for consistent label width - Use
ensure_*()helpers to initialize nested config structs - Follow existing patterns for Switch, Entry, and SpinButton widgets
GPL-3.0-or-later (same as driftwm)
Contributions are welcome! Please read CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests:
cargo fmt,cargo clippy,cargo build - Submit a pull request
See also: Code of Conduct
For upstream driftwm, see malbiruk/driftwm.
- Built for driftwm by malbiruk
- GUI implementation by wwmaxik