Skip to content

Commit cd82711

Browse files
committed
docs: update README with new features and compositor support status
1 parent ad1e3e8 commit cd82711

2 files changed

Lines changed: 167 additions & 28 deletions

File tree

.github/workflows/ci.yml

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
tags: ["v*"]
6+
7+
env:
8+
CARGO_TERM_COLOR: always
9+
10+
jobs:
11+
check:
12+
name: Check & Lint
13+
runs-on: ubuntu-24.04
14+
steps:
15+
- uses: actions/checkout@v4
16+
17+
- uses: dtolnay/rust-toolchain@stable
18+
19+
- uses: Swatinem/rust-cache@v2
20+
21+
- name: Install system dependencies
22+
run: |
23+
sudo apt-get update
24+
sudo apt-get install -y libgtk-4-dev libgtk4-layer-shell-dev libdbus-1-dev libasound2-dev libudev-dev libxkbcommon-dev libjack-dev pkg-config
25+
26+
- name: Check
27+
run: cargo check --verbose
28+
29+
- name: Clippy
30+
run: cargo clippy -- -D warnings
31+
32+
- name: Format
33+
run: cargo fmt --all -- --check
34+
35+
build:
36+
name: Build Artifacts
37+
needs: check
38+
runs-on: ${{ matrix.os }}
39+
strategy:
40+
matrix:
41+
include:
42+
- target: x86_64-unknown-linux-gnu
43+
os: ubuntu-24.04
44+
artifact_name: keystroke-linux-x86_64
45+
bin_name: keystroke
46+
- target: aarch64-unknown-linux-gnu
47+
os: ubuntu-24.04-arm
48+
artifact_name: keystroke-linux-aarch64
49+
bin_name: keystroke
50+
51+
steps:
52+
- uses: actions/checkout@v4
53+
54+
- uses: dtolnay/rust-toolchain@stable
55+
with:
56+
targets: ${{ matrix.target }}
57+
58+
- uses: Swatinem/rust-cache@v2
59+
60+
- name: Install system dependencies
61+
run: |
62+
sudo apt-get update
63+
sudo apt-get install -y libgtk-4-dev libgtk4-layer-shell-dev libdbus-1-dev libasound2-dev libudev-dev libxkbcommon-dev libjack-dev pkg-config
64+
65+
- name: Build Release
66+
run: cargo build --release --target ${{ matrix.target }} --verbose
67+
68+
- name: Test
69+
run: cargo test --release --target ${{ matrix.target }} --verbose
70+
71+
- name: Prepare Artifact
72+
run: |
73+
mkdir -p staging
74+
cp target/${{ matrix.target }}/release/${{ matrix.bin_name }} staging/${{ matrix.artifact_name }}
75+
76+
- name: Upload Artifact
77+
uses: actions/upload-artifact@v4
78+
with:
79+
name: ${{ matrix.artifact_name }}
80+
path: staging/${{ matrix.artifact_name }}
81+
82+
release:
83+
name: Create Release
84+
needs: build
85+
runs-on: ubuntu-latest
86+
permissions:
87+
contents: write
88+
steps:
89+
- uses: actions/download-artifact@v4
90+
with:
91+
path: artifacts
92+
pattern: keystroke-*
93+
merge-multiple: true
94+
95+
- name: List artifacts
96+
run: ls -R artifacts
97+
98+
- name: Create Release
99+
uses: softprops/action-gh-release@v2
100+
with:
101+
files: artifacts/*
102+
draft: true
103+
generate_release_notes: true

README.md

Lines changed: 64 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,45 +8,81 @@ And yes, it's written in Rust, so you already know it's blazing fast and memory-
88

99
## Key Features
1010

11-
- **Wayland Native**: No more X11 workarounds; built to work with Hyprland, Niri, River, Sway, etc.
11+
- **Wayland Native**: No more X11 workarounds; built to work with modern compositors.
1212
- **Two Display Modes**:
1313
- **Keystroke**: The classic view for showing exactly what you're hitting.
1414
- **Bubble**: A sleek, minimal style inspired by [devaslife's setup](https://www.youtube.com/watch?v=zu_vqAWHy_E).
15-
- **Fully Customizable**: You can tweak the fonts, sizes, and layout to your liking.
16-
- **GTK Theme Support**: It currently pulls from your GTK theme to keep your desktop looking consistent.
17-
- **System Tray Integration**:
18-
- Quick access to switch modes.
19-
- Pause/Resume input capture.
20-
- Access settings.
21-
- **Draggable**: Visualizer windows can be repositioned.
15+
- **Native Audio Engine**:
16+
- Built-in `rodio`-based audio engine on a dedicated thread.
17+
- Compatible with **Mechvibes** sound packs (single and multi-file support).
18+
- Zero-copy sample playback for low latency.
19+
- **Modern Configuration**:
20+
- Configuration migrated to `config.toml` (auto-migrates from old JSON).
21+
- **Granular Typography**: Customize font family, weight, and size per mode.
22+
- **Virtualization**: Optimized Settings UI handles large lists of fonts and sound packs with zero lag.
23+
- **System Integration**:
24+
- **GTK Theme Support**: Automatically respects your system theme.
25+
- **System Tray**: Quick access to toggle modes, pause capture, or open settings.
26+
- **Draggable**: Visualizer windows can be repositioned easily.
2227

2328
## Supported Compositors
2429

25-
Keystroke automatically detects the running compositor.
30+
Keystroke attempts to automatically detect your running compositor.
2631

27-
- **Full Support** (Layout detection & events):
28-
- Hyprland
29-
- Sway
30-
- Niri
31-
- **Basic Support**:
32-
- River
33-
- DWL
34-
- Labwc
35-
- Wayfire
32+
| Compositor | Support Level | Notes |
33+
|------------|---------------|-------|
34+
| **Niri** | 🟢 **Tested & Working** | Fully supported layout detection and event handling. |
35+
| **Hyprland** | 🟡 **Experimental** | Implemented but needs community testing. |
36+
| **Sway** | 🟡 **Experimental** | Implemented but needs community testing. |
37+
| **River/DWL** | 🔴 **Basic/None** | Layout detection may fail; "Basic support" is minimal. |
3638

37-
## Current State & Contributing
39+
> **Note**: Real compositor support is complex! I can't detect layouts reliably on all compositors without specific implementations. **I need help testing Hyprland and Sway!** If you use these, please report issues.
3840
39-
The project is currently in **Early WIP**. It's fully functional, but since it's still in the early stages, there are no official packages (AUR, Nix, etc.) available yet. You'll need to build it from source for now.
41+
## Installation
4042

41-
I'm mainly sharing this to see if there's interest from the community! If you find this useful, I'd really appreciate it if you could:
43+
### Prerequisites
44+
You need a Wayland compositor and the following system libraries:
45+
- `libgtk-4-dev`
46+
- `libgtk4-layer-shell-dev`
47+
- `libasound2-dev` (for audio)
4248

43-
- ⭐ Drop a star on the repo: It helps the project get more visibility!
44-
- 💡 Open an Issue: Have a feature idea? Let me know.
45-
- 🛠️ Submit a PR: If you're a fellow Rustacean and want to jump in, contributions are more than welcome.
49+
### Via Cargo
50+
If you have Rust installed:
51+
```bash
52+
cargo install --path .
53+
# or
54+
cargo run --release
55+
```
4656

47-
## Usage
57+
### Via Nix
58+
Flake support is included!
59+
```bash
60+
# Run directly
61+
nix run github:linuxmobile/keystroke
4862

49-
The application launches with a system tray icon (if supported) and a launcher window.
63+
# Build
64+
nix build github:linuxmobile/keystroke
5065

51-
- **Launcher**: Select between Keystroke or Bubble mode.
52-
- **Tray Icon**: Right-click to access the menu to switch modes, pause capture, or quit.
66+
# Develop
67+
nix develop
68+
```
69+
70+
## Contributing & Help Needed
71+
72+
The project is currently in **Early WIP**.
73+
74+
### 🛑 We Need Your Help!
75+
1. **Compositor Testing**: We specifically need testers for **Hyprland** and **Sway**. The code is there, but I only use Niri.
76+
2. **Packaging**: We need maintainers for **AUR**, **Debian/Ubuntu**, **Fedora**, etc.
77+
3. **Feedback**: Found a bug? Open an issue!
78+
79+
### Development
80+
1. Clone the repo.
81+
2. Run `cargo run` to start dev mode.
82+
3. Check `src/compositor` to understand how we handle different Wayland protocols.
83+
84+
---
85+
If you find this useful, I'd really appreciate it if you could:
86+
- ⭐ Drop a star on the repo!
87+
- 💡 Open an Issue with ideas.
88+
- 🛠️ Submit a PR.

0 commit comments

Comments
 (0)