wtype is not actually used by whisrs: injection happens through the Wayland virtual-keyboard protocol with a uinput fallback, so listing wtype as a dependency would send fresh installs down the wrong path. pipewire-alsa on the other hand is essential and was missing: whisrs captures through raw ALSA, and without the PipeWire bridge the default PCM is the silent headset-jack mic. Also document the hold-to-talk binding, the [audio] device setting, and the local rebuild (-march=native plus the vulkan feature) that moved decoding to the iGPU, since the stock AUR build is far too slow for dictation.
144 lines
4.6 KiB
Markdown
144 lines
4.6 KiB
Markdown
Jeena's Hyprland setup
|
|
======================
|
|
|
|
This git repo hosts all the dotfiles I need for my hyprland setup. You
|
|
can use it to learn and to copy from it, but you probably don't want
|
|
to just use it as it is because it's very opinionated and hard coded.
|
|
|
|
Introduction Video
|
|
==================
|
|
|
|
[Jeena's Hyprland Demo](https://tube.jeena.net/w/2EpbXJnMrDokc3362oXSTQ)
|
|
|
|
Screenshots
|
|
===========
|
|
|
|
Hyprlock lockscreen with custom font and showing keyboard layout
|
|

|
|
|
|
Empty hyprland screen
|
|

|
|
|
|
Firefox and Kitty side by side, no margin on the outside
|
|

|
|
|
|
If only one window is visible, border is removed
|
|

|
|
|
|
Tofi as app menu
|
|

|
|
|
|
nmtui to edit network and tofi to choose I/O audio devices
|
|

|
|
|
|
wlogout menu
|
|

|
|
|
|
Install
|
|
=======
|
|
|
|
You need to clone this git repository to your computer, let's assume
|
|
you do:
|
|
|
|
```
|
|
mkdir -p ~/Projects/
|
|
cd ~/Projects/
|
|
git clone https://git.jeena.net/jeena/hypr-dotfiles.git
|
|
```
|
|
|
|
The next step is to set up a hostname config where you can overwrite
|
|
hyprland configs for a specific host:
|
|
|
|
```
|
|
cd ~/Projects/hypr-dotfiles/hypr/hosts/
|
|
touch $(hostname).conf
|
|
ln -s $(hostname).conf host.conf
|
|
```
|
|
|
|
|
|
Then you need to soft link the directories in this git repo to the
|
|
`~/.config/` directory, make sure that those directories don't exist
|
|
yet in your `~/.config`, you will need to delete or move them
|
|
before. In our example it would be:
|
|
|
|
```
|
|
cd ~/.config
|
|
ln -s ~/Projects/hypr-dotfiles/hypr hypr
|
|
ln -s ~/Projects/hypr-dotfiles/waybar waybar
|
|
ln -s ~/Projects/hypr-dotfiles/tofi tofi
|
|
ln -s ~/Projects/hypr-dotfiles/wlogout wlogout
|
|
ln -s ~/Projects/hypr-dotfiles/kitty kitty
|
|
ln -s ~/Projects/hypr-dotfiles/helix helix
|
|
ln -s ~/Projects/hypr-dotfiles/fcitx5 fcitx5
|
|
```
|
|
|
|
To enable the auto-mute/unmute timers (mutes at 21:00, unmutes at
|
|
07:00, only when idle-inhibit is active), link the systemd user units:
|
|
|
|
```
|
|
systemctl --user link ~/Projects/hypr-dotfiles/systemd/user/auto-mute.service
|
|
systemctl --user link ~/Projects/hypr-dotfiles/systemd/user/auto-mute.timer
|
|
systemctl --user link ~/Projects/hypr-dotfiles/systemd/user/auto-unmute.service
|
|
systemctl --user link ~/Projects/hypr-dotfiles/systemd/user/auto-unmute.timer
|
|
systemctl --user enable --now auto-mute.timer auto-unmute.timer
|
|
```
|
|
|
|
You also need to install all the dependencies:
|
|
|
|
- hyprland
|
|
- hypridle
|
|
- hyprlock
|
|
- wlogout
|
|
- tofi
|
|
- waybar
|
|
- swaybg
|
|
- nmtui
|
|
- kitty
|
|
- python3
|
|
- Curved Square font https://www.1001freefonts.com/curved-square.font
|
|
- FontAwesome
|
|
- ttf-jetbrains-mono-nerd (required for waybar icons)
|
|
- xdg-desktop-portal-hyprland
|
|
- xdg-desktop-portal-gtk
|
|
- uwsm (recommended; log in via the "Hyprland (uwsm-managed)" session so
|
|
systemd starts the portals before the autostart apps — otherwise apps like
|
|
waybar and chromium intermittently come up in light mode. Without uwsm the
|
|
portal startup script falls back to launching the portals manually.)
|
|
- fcitx5
|
|
- fcitx5-hangul
|
|
- pipewire-alsa (whisrs captures audio via raw ALSA; without it the default
|
|
PCM is the headset-jack mic, which is silent when nothing is plugged in)
|
|
- vulkan-intel and vulkan-icd-loader (iGPU decode; already standard on systems
|
|
with Intel graphics set up for Vulkan)
|
|
- whisrs-git (AUR; voice dictation daemon, see below)
|
|
|
|
There are probably more, I will update the list next time I'm
|
|
installing it on a new computer.
|
|
|
|
Voice dictation
|
|
===============
|
|
|
|
The Copilot key (on newer laptops this replaced the right Ctrl key; it
|
|
sends SUPER+SHIFT+F23) toggles voice dictation. Hold it to record and
|
|
release to transcribe: one whisrs toggle fires on press, another on
|
|
release. whisrs transcribes locally with a whisper.cpp model and types
|
|
the text at the cursor in any window, including terminals running the
|
|
dockerized agent harnesses. Text injection uses the Wayland
|
|
virtual-keyboard protocol on Hyprland, with a uinput fallback that the
|
|
package's udev rule grants access to.
|
|
|
|
The config lives in ~/.config/whisrs/config.toml (set [audio] device =
|
|
"pipewire" so capture goes through PipeWire) and the model in
|
|
~/.local/share/whisrs/models/. The daemon runs as the systemd user
|
|
service whisrs.service.
|
|
|
|
The stock AUR build decodes on the CPU with generic -march flags, which
|
|
makes dictation take around five seconds. On this machine the package
|
|
is rebuilt locally with -march=native plus the vulkan cargo feature so
|
|
decoding runs on the Intel iGPU instead; that drops latency to roughly
|
|
a second. Re-apply those two PKGBUILD edits after AUR updates.
|
|
|
|
License
|
|
=======
|
|
|
|
All scripts here are under the GPL-v3 or a later version.
|