Skip to main content

Floating AI assistant orb for Arch Linux โ€” KDE Plasma 6 Wayland

Project description

NixOrb ๐ŸŒ

Floating AI assistant orb for Arch Linux โ€” KDE Plasma 6 Wayland โ€” GTX 1080

CI PyPI License: MIT Python 3.12 Arch Linux


What it is

NixOrb is a frameless, always-on-top AI assistant that floats on your Wayland desktop as a glowing GLSL-shader orb. Press a global hotkey (or say a wake word), speak, and it transcribes โ†’ thinks โ†’ speaks back โ€” the orb pulsing to the audio in real time.

Key features at a glance:

Category What it does
Orb UI Frameless QML shader orb with particle system, drag-to-reposition
ASR Whisper Large v3 INT8 (~2 GB VRAM) via faster-whisper
LLM OpenAI API, Ollama, llama.cpp local, with offline auto-fallback
TTS OpenAI TTS, HuggingFace models, offline Piper
VRAM Priority-eviction manager keeps 8 GB GTX 1080 from OOM crashing
Actions Sandboxed bash execution via bubblewrap; user confirmation gate
Memory ChromaDB long-term vector memory, injected into every prompt
Vision grim screen capture โ†’ VLM description on demand
Wake word OpenWakeWord always-on detector (low CPU)
Plugins Drop-in .py plugin folder, hot-reloadable
Clipboard wl-paste / wl-copy Wayland integration
Tray KDE Plasma 6 system tray icon

Installation

Option 1 โ€” Arch Linux (pacman) โ€” recommended

# Download the .pkg.tar.zst from the GitHub Releases page, then:
sudo pacman -U nixorb-0.1.0-1-x86_64.pkg.tar.zst

Option 2 โ€” PyPI

# Install PyTorch with CUDA first (GTX 1080 โ†’ CUDA 11.8)
pip install torch==2.7.1+cu118 torchaudio==2.7.1+cu118 \
  --index-url https://download.pytorch.org/whl/cu118

pip install nixorb

Option 3 โ€” AppImage (portable)

chmod +x NixOrb-0.1.0-x86_64.AppImage
./NixOrb-0.1.0-x86_64.AppImage start

Option 4 โ€” Flatpak

flatpak install NixOrb-0.1.0.flatpak
flatpak run io.nixorb.NixOrb

Option 5 โ€” From source (development)

git clone https://github.com/minerofthesoal/nixorb.git
cd nixorb

# System packages
sudo pacman -S --needed python qt6-base qt6-declarative qt6-wayland \
  qt6-multimedia qt6-tools cuda cudnn portaudio wl-clipboard grim \
  ffmpeg base-devel
yay -S --needed kglobalacceld piper-tts openwakeword

# Python environment
python -m venv .venv --system-site-packages
source .venv/bin/activate
pip install torch==2.7.1+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install -e ".[dev]"

# Compile QML shaders (required once)
cd assets/shaders
qsb --glsl "100es,120,150" --hlsl 50 --msl 12 orb_glow.vert -o orb_glow.vert.qsb
qsb --glsl "100es,120,150" --hlsl 50 --msl 12 orb_glow.frag -o orb_glow.frag.qsb
cd ../..

# Run
nixorb start

Quick start

nixorb start               # Launch GUI orb
nixorb start --headless    # Daemon only (no Qt), for SSH/scripting
nixorb ask "What is 2+2?"  # One-shot LLM query
nixorb tts "Hello world"   # Speak text
nixorb transcribe audio.wav
nixorb check-deps          # Verify Arch packages
nixorb list-devices        # List microphones
nixorb list-plugins        # Show loaded plugins
nixorb memory-search "python"
nixorb memory-clear --yes
nixorb export-config --out backup.tar.gz.enc
nixorb import-config backup.tar.gz.enc
nixorb version

Configuration

~/.config/nixorb/config.toml is created on first run from the shipped defaults.

Key settings:

hotkey       = "Ctrl+Alt+Space"   # global activation hotkey
llm_backend  = "openai"           # openai | ollama | local
llm_model    = "gpt-4o-mini"
openai_api_key = "sk-..."

tts_backend  = "openai"           # openai | huggingface | piper
tts_voice    = "alloy"

local_model_path    = "/home/you/models/mistral-7b.Q4_K_M.gguf"
fallback_model_path = "/home/you/models/phi-2.Q4_K_M.gguf"

wake_word_enabled   = true
wake_word_model     = "hey_jarvis_v0.1"
screen_capture_enabled = true
require_action_confirmation = true

All settings are also editable via the GUI (right-click orb โ†’ Settings).


VRAM budget โ€” GTX 1080 (8 GB)

Model VRAM Priority
Whisper Large v3 INT8 ~2.1 GB LOW โ€” evicted first
Local LLM 7B Q4_K_M ~4.0 GB HIGH โ€” evicted last
HuggingFace TTS ~1.5 GB MEDIUM
Piper TTS (offline) ~0.1 GB MEDIUM
Driver + KDE compositor ~0.5 GB reserved
Safety buffer 0.25 GB reserved

Paging flow: hotkey โ†’ Whisper loads โ†’ transcript โ†’ Whisper evicted โ†’ LLM loads โ†’ response โ†’ LLM evicted โ†’ TTS speaks.


Writing a plugin

Drop a .py file into ~/.local/share/nixorb/plugins/ (or the plugins/ repo dir):

TOOL_DEFINITION = {
    "type": "function",
    "function": {
        "name": "my_tool",
        "description": "What this does โ€” the LLM reads this to decide when to call it.",
        "parameters": {
            "type": "object",
            "properties": {
                "input": {"type": "string", "description": "The input"}
            },
            "required": ["input"],
        },
    },
}

def my_tool(input: str) -> str:
    return f"Result: {input.upper()}"

Async plugins work too โ€” use async def. Reload in Settings โ†’ Plugins โ†’ Reload.


Architecture

Qt Main Thread          asyncio Event Loop          Thread Pool
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
OrbWindow (QML)    โ†โ”€โ”€ EventBus (PriorityQueue) โ†โ”€โ”€ Whisper inference
SettingsWindow     โ†โ”€โ”€ LLM stream chunks        โ†โ”€โ”€ llama.cpp generate
NixOrbTray         โ†โ”€โ”€ TTS audio chunks         โ†โ”€โ”€ VRAM load/unload
HotkeyManager          VRAMManager monitor           sounddevice record
                        PluginLoader
                        VectorMemory (ChromaDB)

Security

  • Hard-deny list blocks destructive commands unconditionally
  • REQUIRE_CONFIRM list prompts user confirmation before sensitive ops
  • Optional bubblewrap (bwrap) sandbox with --unshare-net
  • NixOrb refuses to run as root
  • API keys stored in ~/.config/nixorb/config.toml (mode 600 recommended)
  • Config export is PBKDF2 + Fernet encrypted

Contributing

git clone https://github.com/minerofthesoal/nixorb.git
cd nixorb
pip install -e ".[dev]"
ruff check nixorb/
mypy nixorb/
pytest tests/ -v

License

MIT ยฉ NixOrb Contributors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nixorb-0.1.0.tar.gz (59.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nixorb-0.1.0-py3-none-any.whl (62.5 kB view details)

Uploaded Python 3

File details

Details for the file nixorb-0.1.0.tar.gz.

File metadata

  • Download URL: nixorb-0.1.0.tar.gz
  • Upload date:
  • Size: 59.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nixorb-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c4affb23597497c69cfa75c73f584c3f91da5394c508e4f9897af179847fd8f2
MD5 6b46f3ccbd1b08676e56ae7d6292ec5f
BLAKE2b-256 618518c92acca442bbcdf9c82f33d9e2a2747d009aa826e6f799b58d5eeed690

See more details on using hashes here.

Provenance

The following attestation bundles were made for nixorb-0.1.0.tar.gz:

Publisher: release.yml on minerofthesoal/nixorb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nixorb-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: nixorb-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 62.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nixorb-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36e5a977dd705dd8dc1bd0cc1505e2d1a4fad8dbbb212ca21b4a5ba778ccb07b
MD5 b3846f6af4a0dacfd714953bbc8fa96f
BLAKE2b-256 b0e8a5e2ca807b3620204ba1f23e949659934e186be43279bb6f1d3f88fbc9ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for nixorb-0.1.0-py3-none-any.whl:

Publisher: release.yml on minerofthesoal/nixorb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page