Update readme
This commit is contained in:
parent
9adf8c5620
commit
b886302549
186
README.md
186
README.md
@ -1,3 +1,187 @@
|
|||||||
# WayCast
|
# WayCast
|
||||||
|
|
||||||
Raycast for linux. We deserve this.
|
A Raycast-like application launcher for Linux with Qt6 and Wayland support. We deserve this.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Fast fuzzy search** with AVX2 acceleration
|
||||||
|
- **Desktop application discovery** via XDG desktop entries
|
||||||
|
- **File search** with path-based filtering (e.g., `wallpapers/sunset.jpg`)
|
||||||
|
- **Plugin system** for extensible functionality
|
||||||
|
- **Modern UI** with Material Dark theme
|
||||||
|
- **Wayland native** with layer shell support
|
||||||
|
- **Semi-transparent** window
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Quick Install (Nix)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix profile install git+https://gitgud.foo/thegrind/waycast
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run Without Installing
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix run git+https://gitgud.foo/thegrind/waycast
|
||||||
|
```
|
||||||
|
|
||||||
|
### NixOS System-Wide Installation
|
||||||
|
|
||||||
|
Add to your `flake.nix`:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
waycast.url = "git+https://gitgud.foo/thegrind/waycast";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { nixpkgs, waycast, ... }: {
|
||||||
|
nixosConfigurations.yourhost = nixpkgs.lib.nixosSystem {
|
||||||
|
modules = [
|
||||||
|
waycast.nixosModules.waycast
|
||||||
|
{
|
||||||
|
programs.waycast.enable = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then rebuild your system:
|
||||||
|
```bash
|
||||||
|
sudo nixos-rebuild switch --flake .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Home Manager Installation
|
||||||
|
|
||||||
|
Add to your home-manager configuration:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
|
waycast.url = "git+https://gitgud.foo/thegrind/waycast";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { home-manager, waycast, ... }: {
|
||||||
|
homeConfigurations.youruser = home-manager.lib.homeManagerConfiguration {
|
||||||
|
modules = [
|
||||||
|
waycast.homeManagerModules.waycast
|
||||||
|
{
|
||||||
|
programs.waycast.enable = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then apply the configuration:
|
||||||
|
```bash
|
||||||
|
home-manager switch --flake .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Traditional Installation
|
||||||
|
|
||||||
|
If you're not using Nix, you can build from source:
|
||||||
|
|
||||||
|
#### Dependencies
|
||||||
|
- Qt6 (Core, Gui, Qml, Quick, QuickControls2, Widgets, Wayland)
|
||||||
|
- Layer Shell Qt
|
||||||
|
- GLib/GIO
|
||||||
|
- CMake 3.21+
|
||||||
|
- Ninja (recommended)
|
||||||
|
- C++20 compiler
|
||||||
|
|
||||||
|
#### Build
|
||||||
|
```bash
|
||||||
|
git clone https://gitgud.foo/thegrind/waycast
|
||||||
|
cd waycast
|
||||||
|
make configure # or: cmake -S . -B build -G Ninja
|
||||||
|
make bld # or: cmake --build build
|
||||||
|
make install # or: cp ./build/waycast ~/bin/waycast
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Launch waycast and start typing:
|
||||||
|
|
||||||
|
- **Applications**: Type app name (e.g., `firefox`, `kate`)
|
||||||
|
- **Files**: Type filename (e.g., `config.txt`)
|
||||||
|
- **Path search**: Type path + filename (e.g., `wallpapers/sunset`)
|
||||||
|
- **Directory browse**: Type path ending with `/` (e.g., `Documents/`)
|
||||||
|
|
||||||
|
### Keyboard Shortcuts
|
||||||
|
|
||||||
|
- `Escape` - Close launcher
|
||||||
|
- `↑/↓` - Navigate results
|
||||||
|
- `Enter` - Execute selected item
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
### Development Shell
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix develop git+https://gitgud.foo/thegrind/waycast
|
||||||
|
```
|
||||||
|
|
||||||
|
Or locally:
|
||||||
|
```bash
|
||||||
|
nix develop
|
||||||
|
```
|
||||||
|
|
||||||
|
Inside the dev shell:
|
||||||
|
```bash
|
||||||
|
make configure # Configure build
|
||||||
|
make bld # Build project
|
||||||
|
make run # Run waycast
|
||||||
|
make br # Build and run
|
||||||
|
```
|
||||||
|
|
||||||
|
### Architecture
|
||||||
|
|
||||||
|
- **Plugin system**: `lib/plugins/` - Extensible search providers
|
||||||
|
- **Fuzzy search**: `lib/fuzzy.hpp` - AVX2-accelerated string matching
|
||||||
|
- **UI**: Qt6 QML with Material Dark theme
|
||||||
|
- **File utilities**: `lib/files.hpp` - File system operations
|
||||||
|
- **Icon resolution**: `lib/IconUtil.hpp` - System theme integration
|
||||||
|
|
||||||
|
### Build Systems
|
||||||
|
|
||||||
|
WayCast supports multiple build systems:
|
||||||
|
|
||||||
|
- **CMake + Ninja** (recommended): `make configure && make bld`
|
||||||
|
- **Zig**: `zig build run`
|
||||||
|
- **Nix**: `nix build`
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Currently, WayCast works out of the box with sensible defaults:
|
||||||
|
|
||||||
|
- **Search directories**: `~/Documents`, `~/Desktop`, `~/Downloads`
|
||||||
|
- **Search depth**: 3 levels
|
||||||
|
- **File limit**: 1000 files
|
||||||
|
- **Ignored directories**: `node_modules`, `.git`, `build`, etc.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- **Linux** with Wayland compositor (Sway, Hyprland, KDE Plasma, GNOME, etc.)
|
||||||
|
- **Qt6** with Wayland support
|
||||||
|
- **Layer Shell Qt** for proper window positioning
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Create your feature branch
|
||||||
|
3. Make your changes
|
||||||
|
4. Test with `nix build` and `nix run`
|
||||||
|
5. Submit a pull request
|
||||||
|
|
||||||
|
The development environment includes all dependencies and development tools needed to contribute.
|
61
flake.lock
generated
Normal file
61
flake.lock
generated
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1756266583,
|
||||||
|
"narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
15
flake.nix
15
flake.nix
@ -38,7 +38,7 @@
|
|||||||
qt6.qtwayland
|
qt6.qtwayland
|
||||||
|
|
||||||
# Layer Shell Qt for Wayland
|
# Layer Shell Qt for Wayland
|
||||||
layer-shell-qt
|
kdePackages.layer-shell-qt
|
||||||
|
|
||||||
# GLib/GIO dependencies
|
# GLib/GIO dependencies
|
||||||
glib
|
glib
|
||||||
@ -50,8 +50,8 @@
|
|||||||
|
|
||||||
# Set Qt6 module path and other environment variables
|
# Set Qt6 module path and other environment variables
|
||||||
qtWrapperArgs = [
|
qtWrapperArgs = [
|
||||||
"--prefix QML2_IMPORT_PATH : ${qt6.qtdeclarative}/${qt6.qtbase.qtQmlPrefix}"
|
"--prefix QML2_IMPORT_PATH : ${pkgs.qt6.qtdeclarative}/${pkgs.qt6.qtbase.qtQmlPrefix}"
|
||||||
"--prefix QT_PLUGIN_PATH : ${qt6.qtbase.qtPluginPrefix}"
|
"--prefix QT_PLUGIN_PATH : ${pkgs.qt6.qtbase.qtPluginPrefix}"
|
||||||
];
|
];
|
||||||
|
|
||||||
cmakeFlags = [
|
cmakeFlags = [
|
||||||
@ -59,6 +59,13 @@
|
|||||||
"-DCMAKE_BUILD_TYPE=Release"
|
"-DCMAKE_BUILD_TYPE=Release"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp waycast $out/bin/
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
# Enable Qt6 and Wayland features
|
# Enable Qt6 and Wayland features
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
# Ensure we can find Qt6 components
|
# Ensure we can find Qt6 components
|
||||||
@ -101,7 +108,7 @@
|
|||||||
qt6.qttools # For Qt development tools
|
qt6.qttools # For Qt development tools
|
||||||
|
|
||||||
# Layer Shell Qt
|
# Layer Shell Qt
|
||||||
layer-shell-qt
|
kdePackages.layer-shell-qt
|
||||||
|
|
||||||
# GLib/GIO
|
# GLib/GIO
|
||||||
glib.dev
|
glib.dev
|
||||||
|
Loading…
x
Reference in New Issue
Block a user