3.0 KiB
Waycast
A launcher for Wayland that doesn't suck. Think Raycast but for Linux.
I already ordered the programmer socks.
What is this?
Waycast is an application launcher built for Wayland desktops. It's fast, extensible, and designed to get out of your way while helping you find what you need.
Current features:
- Search and launch desktop applications
- Search files in your home directories (Documents, Pictures, Music, Videos)
- Fuzzy search that actually works
- Fast startup with background file indexing
- GTK4 with proper layer shell integration
Planned features:
- Background daemon for instant launches
- Plugin system for extensions
- Calculator, clipboard history, system controls
- Terminal UI for SSH sessions
- Web search integration
Development
This is a Cargo workspace with three main crates:
- waycast-core - The launcher engine (traits, logic, no UI)
- waycast-plugins - Plugin implementations (desktop apps, file search)
- waycast-gtk - GTK4 UI and main binary
Common Commands
make help # See all available commands
make quick # Format code + compile check
make test # Run tests (that I don't have yet)
make build-all # Build everything
make install # Install to system
Project Structure
waycast/
├── waycast-core/ # Core launcher logic
├── waycast-plugins/ # Plugin implementations
└── waycast-gtk/ # GTK UI (main app)
The core is deliberately minimal and UI-agnostic. Plugins depend on core. UI depends on both core and plugins. Nothing depends on the UI.
Why Another Launcher?
Linux desktop launchers are either too basic (dmenu, wofi) or too bloated (some KDE thing with 47 configuration tabs). Raycast nailed the UX on macOS, but there's no good equivalent for Linux.
Waycast aims to be:
- Fast - Sub-100ms search responses, instant startup
- Clean - Good defaults, minimal configuration needed
- Extensible - Plugin system for custom functionality
- Native - Proper Wayland integration, not an Electron app
Installation
Nix Flakes
Add to your flake.nix
inputs:
waycast.url = "git+https://gitgud.foo/thegrind/waycast";
Install as package:
environment.systemPackages = [ inputs.waycast.packages.${system}.default ];
# or for home-manager:
home.packages = [ inputs.waycast.packages.${system}.default ];
With Home Manager module (recommended):
imports = [ inputs.waycast.homeManagerModules.default ];
programs.waycast = {
enable = true;
config = {
plugins.projects = {
search_paths = ["/absolute/path/to/search"];
skip_dirs = [ "node_modules" "target" ".git" ];
open_command = "code -n {path}";
};
plugins.file_search = {
search_paths = ["/absolute/path/to/search"];
ignore_dirs = ["scripts", "temp"]; # Just directory names here
};
};
css = ''
window {
background: rgba(0, 0, 0, 0.8);
border-radius: 12px;
}
'';
};
Contributing
TBA
License
TBA