An offline-first voice assistant that listens for "hey nixie", then captures your next command, runs a local “skill”, and speaks back.
This repo is intentionally minimal and hackable:
- Wake phrase: detected from speech-to-text (STT) transcript (
"hey nixie"). - STT: Vosk (offline).
- TTS:
piperif available, elseespeak-ng. - Skills: simple Python router + a few built-ins (time/date, open apps, run commands).
- Enter the dev shell:
nix develop- Get a speech-to-text (STT) model:
Note: this currently requires the Python vosk module to be available in your environment. If your Nixpkgs doesn’t package python311Packages.vosk, use whisper.cpp below.
mkdir -p models
# Put a Vosk model folder here, e.g. models/vosk-model-small-en-us-0.15- Run:
export NIXIE_VOSK_MODEL_DIR="$PWD/models/vosk-model-small-en-us-0.15"
python -m nixie --stt voskDownload a model (one-time), then run:
python -m nixie --download-whisper-model base.en
export NIXIE_WHISPER_MODEL="$PWD/models/ggml-base.en.bin"
python -m nixie --stt whispercpp --ui orb --debug- Default UI is
notify(desktop notifications on state changes). - To show an always-on-top “orb” window:
python -m nixie --ui orb
- To list audio input devices:
python -m nixie --list-devices
If you use Home Manager, you can run Nixie as a user service:
{
imports = [ /path/to/nixie/nixos/home-manager.nix ];
services.nixie = {
enable = true;
modelDir = "%h/models/vosk-model-small-en-us-0.15";
wakePhrase = "hey nixie";
# audioDevice = "USB"; # optional
};
}- Wake phrase detection via STT is simple but less reliable than true hotword engines.
- Microphone access depends on PipeWire/PulseAudio configuration on your system.