Runtime

Ollama (Vulkan)

Local LLM server on the RX 9070 XT via Vulkan (RADV). User-space install — no ROCm. Updated 2026-07-26.

Overview

ItemStatus
Binary~/.local/bin/ollama~/.local/lib/ollama/bin/ollama (v0.32.4)
BackendVulkan (libggml-vulkan.so), not ROCm/CUDA
GPUAMD Radeon RX 9070 XT (RADV GFX1201), ~15.9 GiB VRAM
APIhttp://127.0.0.1:11434 (OpenAI-compatible at /v1)
ServiceUser unit ollama.service (enabled)
Default contextOLLAMA_CONTEXT_LENGTH=32768

Vulkan was chosen over ROCm for RDNA4: Mesa RADV already works, the Vulkan runner is small, and official Ollama ROCm packaging is optional here.

Models

TagSizeNotes
qwen3:8b ~5.2 GB Default for the ai CLI helper (fast one-shot bash commands).
qwen3-coder:30b ~18 GB Qwen3-Coder-30B-A3B-Instruct (MoE, ~3.3B active). Smoke-tested ~43 tok/s; 49/49 layers on Vulkan.
qwen3:30b-thinking ~18 GB Qwen3-30B thinking variant for interactive chat / heavier prompts.

Models live under ~/.ollama/models.

How to use

# Chat
ollama run qwen3:8b
ollama run qwen3-coder:30b
ollama run qwen3:30b-thinking

# OpenAI-compatible endpoint (Cline / Continue / etc.)
#   base URL: http://127.0.0.1:11434/v1
#   model:    qwen3-coder:30b

# Service
systemctl --user status ollama
systemctl --user restart ollama
journalctl --user -u ollama -f

ai CLI

Turns a natural-language question into an Omarchy bash command via local Ollama, shows it for confirmation, then runs it in your interactive shell. Requires the ai() function from ~/.bashrc (source ~/.bashrc or a new terminal after editing).

ItemValue
Commandai "…" — bash function in ~/.bashrc wrapping ~/scripts/ai.py
Modelqwen3:8b (hardcoded in the script)
APIhttp://127.0.0.1:11434/api/generate
HistoryWrapper does history -s then eval; ↑ recalls the generated command (the ai "…" line sits one entry below)
ai "Find the file test.txt in this directory structure"
# grey thinking (if any), then:
#
#   <command>
#
# Run this command? [y/N]

The prompt asks for a paste-ready Omarchy bash command only. Thinking (API thinking field and/or <think> bodies) streams in light grey without tags; it is stripped before confirm/run. Markdown fences are stripped too. Blank line before and after the command. Anything other than y/yes skips. Needs systemctl --user start ollama if the service is down.

UI goes to /dev/tty so the bash wrapper can capture the accepted command on stdout. Calling ~/scripts/ai.py (or ~/.local/bin/ai) directly on a TTY still works, but runs via a subprocess and does not update shell history — use the bash function for that.

Recreate

  1. Download and extract Ollama into ~/.local/lib/ollama (includes lib/ollama/vulkan/libggml-vulkan.so):
    mkdir -p ~/.local/lib/ollama ~/.local/bin
    curl -fL https://github.com/ollama/ollama/releases/download/v0.32.4/ollama-linux-amd64.tar.zst \
      | zstd -d | tar -x -C ~/.local/lib/ollama
    ln -sfn ~/.local/lib/ollama/bin/ollama ~/.local/bin/ollama
  2. Install the user unit at ~/.config/systemd/user/ollama.service (see File index), then:
    systemctl --user daemon-reload
    systemctl --user enable --now ollama
  3. Pull models: ollama pull qwen3:8b, ollama pull qwen3-coder:30b, and optionally ollama pull qwen3:30b-thinking
  4. Install the helper script and bash wrapper:
    chmod +x ~/scripts/ai.py
    # optional fallback (no history): ln -sfn ~/scripts/ai.py ~/.local/bin/ai
    
    # in ~/.bashrc (interactive section):
    ai() {
      local cmd status
      cmd="$(~/scripts/ai.py "$@")"
      status=$?
      (( status == 0 )) || return "$status"
      [[ -n $cmd ]] || return 0
      history -s "$cmd"
      eval "$cmd"
    }
    Then source ~/.bashrc (or open a new terminal).
  5. Confirm Vulkan: look for library=Vulkan and the 9070 XT in journalctl --user -u ollama.

Do not install the ROCm addon unless you deliberately switch backends. Arch packages ollama + ollama-vulkan are an alternative system install path (needs sudo).

File index

PathRole
~/.local/bin/ollamaLauncher symlink
~/.local/lib/ollama/Binary + CUDA/CPU/Vulkan libs
~/.config/systemd/user/ollama.serviceUser service (OLLAMA_VULKAN=1, ctx 32k)
~/.ollama/Models and cache
~/scripts/ai.pyBackend: Ollama qwen3:8b; UI on /dev/tty; prints accepted command on stdout when captured
~/.bashrc (ai())Interactive wrapper: capture → history -seval
~/.local/bin/aiOptional symlink → ~/scripts/ai.py (direct TTY use; no shell history)