NikOS

Inventory

What NikOS installs

Twelve roles run on every install. Fifteen more are opt-in, and nothing in them is downloaded unless you ask. Every item below maps to a role you can read in the repository.

Core roles

These run on every install.

RoleWhat it installs
basenala, git, curl, wget, build-essential, python3-pip, python3-venv, flatpak, gnupg, ca-certificates, dialog, xfconf, inkscape, openssh-server, tmux, pipx, sqlite3, unzip. Sets timezone, locale and NTP, adds the Flathub remote, deploys a default .tmux.conf.
desktopThe Xubuntu desktop package set, LightDM and its GTK greeter. Detects an existing GNOME install, hands display-manager.service to LightDM, and sets the account's default session.
themingNord GTK theme and icons, a generated wallpaper, GRUB theme, Plymouth boot splash (GPL-3.0-or-later, derived from Xubuntu's theme), an autostart entry that applies the wallpaper across every connected monitor, and dark Firefox, Chromium and Google Chrome in the desktop colour (existing profiles only).
github-setupGitHub CLI from GitHub's apt repository, plus the first-run wizard for auth, SSH keys and git identity.
ai-stackOllama as a user service, the default model, Miniforge, the nikos-ai conda environment, PyTorch (CPU), and llama.cpp binaries.
editorsVS Code from Microsoft's apt repository, plus the extension set.
cloud-ai-cliGemini CLI, GitHub Copilot CLI, shell-gpt and glances via pipx. Provides the Node the npm-only CLIs run on: the system one when it is new enough, otherwise a pinned Node under your home through nvm.
agent-devThe agent frameworks, ML libraries and image analysis stack in the conda environment, plus Claude Code.
dev-toolsdistrodeck, image-view, git-lantern, ai-runner and mkcert, cloned into ~/.local/share/nikos-tools and built.
networkNetwork tooling; adds you to the wireshark group. Tagged network.
musicMusic production tools and Ardour via Flatpak. Tagged music.
educationEducation tools and draw.io desktop via Flatpak. Tagged education.

Optional bundles

Installed with nikos add <name>, or selected from the installer menu.

BundleContents
neovimNeovim with a minimal init.lua
javaOpenJDK 21 (LTS) by default; nikos_java_versions adds 17 or 25
bunThe Bun JavaScript runtime
zshZsh with the Starship prompt
podmanRootless container runtime
redisRedis server and the Python client
postgresPostgreSQL with pgvector and psycopg2-binary
mongodbMongoDB Community 8.2 on 127.0.0.1:27017, mongosh, the Atlas CLI and pymongo
qdrantQdrant vector database as a user systemd service on port 6333
k8s-toolskubectl and Helm
actRun GitHub Actions workflows locally
fabricThe Fabric AI pattern CLI
jevJev client: the official TypeSafe SDK, hash-pinned, and a jev command. Bring your own API key (jev login).
bitnetBitNet.cpp 1-bit inference, built from source. Provides bitnet-cli.
mistral-rsmistral.rs, a Rust OpenAI-compatible LLM server
monitoringNetdata metrics dashboard
openclawThe OpenClaw LLM gateway CLI

The Python AI environment

A conda environment named nikos-ai, built on Miniforge. Python is a range (>=3.11,<3.14) rather than a fixed minor, so conda resolves whatever actually solves against the package set.

GroupPackages
Deep learningtorch, torchvision, torchaudio (CPU builds), transformers, accelerate
Agent frameworkslangchain, langchain-community, langchain-openai, llama-index, llama-index-llms-ollama, openai, anthropic, instructor
Retrievalsentence-transformers, chromadb, qdrant-client, datasets, evaluate
Image analysisopencv-contrib-python, pillow, scikit-image, imageio, pytesseract, timm
Data and notebooksjupyter, jupyterlab, pandas, numpy, scikit-learn, matplotlib, litecli
Servingfastapi, uvicorn, httpx

OpenCV's wheels are dynamically linked, so libgl1, libglib2.0-0t64, libsm6, libxext6 and ffmpeg are installed alongside them. Tesseract arrives with orientation detection and nine language packs by default; set nikos_tesseract_languages: ["all"] for all 160-plus.

Tesseract reads text, it does not translate it. It performs OCR — extracting characters from an image. Translating what it extracts is a separate step, and one of the local language models can do it.

Ollama models

Models come in modules, and each module pulls one model per role: the one this machine can run. The model per role and class of machine is the fleet's approved set, in ai-models.env. The default module is always pulled; the others with nikos add ollama-text, -reasoning, -coding, -vision, -embedding, or ollama-models for every role.

Download size of each Ollama module by class of machine: default small 2.7 GB, standard 3.4 GB, large 6.6 GB, xlarge 6.6 GB; text small 7.5 GB, standard 14.4 GB, large 17.6 GB, xlarge 17.6 GB; reasoning small 3.4 GB, standard 5.2 GB, large 5.2 GB, xlarge 13.8 GB; coding small 3.4 GB, standard 4.7 GB, large 4.7 GB, xlarge 18.6 GB; vision small 3.3 GB, standard 3.3 GB, large 6.1 GB, xlarge 6.1 GB; embedding small 0.3 GB, standard 0.3 GB, large 0.3 GB, xlarge 0.3 GB; models small 11.6 GB, standard 28.4 GB, large 34.4 GB, xlarge 56.9 GB small standard large xlarge default 2.7 GB 3.4 GB 6.6 GB 6.6 GB text 7.5 GB 14.4 GB 17.6 GB 17.6 GB reasoning 3.4 GB 5.2 GB 5.2 GB 13.8 GB coding 3.4 GB 4.7 GB 4.7 GB 18.6 GB vision 3.3 GB 3.3 GB 6.1 GB 6.1 GB embedding 0.3 GB 0.3 GB 0.3 GB 0.3 GB models 11.6 GB 28.4 GB 34.4 GB 56.9 GB
Download size per module, by class of machine (fleet registry sizes). One model per role, so a module costs what this machine runs, not every model. Models load on demand: this is disk and bandwidth, not idle RAM.
ModuleRolesmallstandardlargexlarge
default, textgeneralqwen3.5:2bqwen3.5:4bqwen3.5:9bqwen3.5:9b
textcreativeqwen3.5:4bgemma4:latestgemma4:latestgemma4:latest
textextractqwen3.5:2bqwen3.5:4bqwen3.5:9bqwen3.5:9b
textclassifyqwen3:1.7bqwen3:1.7bqwen3:1.7bqwen3:1.7b
reasoningreasoningqwen3.5:4bqwen3:8bqwen3:8bgpt-oss:20b
codingcodeqwen3.5:4bqwen2.5-coder:7bqwen2.5-coder:7bqwen3-coder:30b
visionvisionqwen3-vl:4bqwen3-vl:4bqwen3-vl:8bqwen3-vl:8b
embeddingembednomic-embed-textnomic-embed-textnomic-embed-textnomic-embed-text

The class is measured: small has less than 11 GiB of memory and of GPU memory; large has a GPU with 11 GiB or 30 GiB of memory; xlarge has a GPU with 15 GiB (reasoning) or 23 GiB (code); standard is the rest. Disk and memory are checked before each pull, and a model that does not fit falls back one class. nikos_ai_model_tier names the class instead; nikos models shows it.

nikos update pulls the default and the selected modules, and first offers to remove installed models that are not approved for this machine, one question per model. Without a terminal it lists them and removes nothing. nikos add model <name> installs any other model, and updates keep it.

VS Code extensions

Continue, GitHub Copilot, Leak Lock, GitLens, Python, Jupyter, the Nord theme, Remote SSH, Docker and REST Client. Edit nikos_vscode_extensions to change the set.

The nikos command

nikos setup            # run the full playbook
nikos update           # move to the newest release, then re-run
nikos update --ref X   # update to a specific branch or tag
nikos add <name>       # install an optional bundle or model group
nikos status           # version, Ollama models, installed roles
nikos doctor           # check for broken configs and missing deps
nikos clean [--apply]  # free disk from unused caches; never volumes
nikos log [N]          # tail the latest playbook log
nikos log list         # list available logs