From 9480b5fdde2f22167740c9999cec19ecb2c30438 Mon Sep 17 00:00:00 2001 From: Andrii Arsenin Date: Thu, 8 Jan 2026 21:38:48 +0200 Subject: [PATCH] feat: introduce configuration file support and environmental variable overrides --- ollama | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/ollama b/ollama index 6fa207c..c7f0ca2 100755 --- a/ollama +++ b/ollama @@ -2,10 +2,50 @@ set -euo pipefail -OLLAMA_API_URL="https://ollama-api.hq.ars9.space/api" -OLLAMA_USER="ollama" -OLLAMA_PASS_PATH="device/god-stronghold/authelia/users/ollama/password" -DEFAULT_MODEL="llama3:8b" +# Default values (should be configured in ~/.ollama/config.json) +DEFAULT_OLLAMA_API_URL="https://ollama.local" +DEFAULT_OLLAMA_USER="ollama" +DEFAULT_OLLAMA_PASS_PATH="" +DEFAULT_OLLAMA_PASSWORD="" +DEFAULT_MODEL_DEFAULT="llama2" + +# Configuration file +CONFIG_FILE="${HOME}/.ollama/config.json" + +# Load configuration from config file +load_config() { + if [[ -f "$CONFIG_FILE" ]]; then + # Validate JSON first + if ! jq empty "$CONFIG_FILE" 2>/dev/null; then + echo "Error: Invalid JSON in config file: $CONFIG_FILE" >&2 + return 1 + fi + + # Load values from config file, with fallback to empty if keys don't exist + OLLAMA_API_URL=$(jq -r '.api_url // empty' "$CONFIG_FILE") || return 1 + OLLAMA_USER=$(jq -r '.user // empty' "$CONFIG_FILE") || return 1 + OLLAMA_PASS_PATH=$(jq -r '.password_path // empty' "$CONFIG_FILE") || return 1 + OLLAMA_PASSWORD=$(jq -r '.password // empty' "$CONFIG_FILE") || return 1 + DEFAULT_MODEL=$(jq -r '.default_model // empty' "$CONFIG_FILE") || return 1 + fi + return 0 +} + +# Apply configuration with environment variable overrides +load_config || exit 1 +OLLAMA_API_URL="${OLLAMA_API_URL_ENV:-${OLLAMA_API_URL:-$DEFAULT_OLLAMA_API_URL}}" +OLLAMA_USER="${OLLAMA_USER_ENV:-${OLLAMA_USER:-$DEFAULT_OLLAMA_USER}}" +OLLAMA_PASS_PATH="${OLLAMA_PASS_PATH_ENV:-${OLLAMA_PASS_PATH:-$DEFAULT_OLLAMA_PASS_PATH}}" +OLLAMA_PASSWORD="${OLLAMA_PASSWORD_ENV:-${OLLAMA_PASSWORD:-$DEFAULT_OLLAMA_PASSWORD}}" +DEFAULT_MODEL="${DEFAULT_MODEL_ENV:-${DEFAULT_MODEL:-$DEFAULT_MODEL_DEFAULT}}" + +# Allow direct env var overrides (OLLAMA_API_URL, OLLAMA_USER, OLLAMA_PASS_PATH, OLLAMA_PASSWORD, DEFAULT_MODEL) +OLLAMA_API_URL="${OLLAMA_API_URL:-$DEFAULT_OLLAMA_API_URL}" +OLLAMA_USER="${OLLAMA_USER:-$DEFAULT_OLLAMA_USER}" +OLLAMA_PASS_PATH="${OLLAMA_PASS_PATH:-$DEFAULT_OLLAMA_PASS_PATH}" +OLLAMA_PASSWORD="${OLLAMA_PASSWORD:-$DEFAULT_OLLAMA_PASSWORD}" +DEFAULT_MODEL="${DEFAULT_MODEL:-$DEFAULT_MODEL_DEFAULT}" + CONTEXT_FILE="${OLLAMA_CONTEXT_FILE:-$HOME/.ollama/context.json}" PROFILE_DIR="${OLLAMA_PROFILE_DIR:-$HOME/.ollama/profiles}" OUTPUT_FORMAT="text" # Can be "text" or "json" @@ -15,12 +55,20 @@ SCRIPT_VERSION="1.0.0" check_dependencies() { local missing=() - for cmd in pass curl jq column less; do + # Always required + for cmd in curl jq column less; do if ! command -v "$cmd" &> /dev/null; then missing+=("$cmd") fi done + # Only required if using pass for password + if [[ -n "$OLLAMA_PASS_PATH" ]]; then + if ! command -v pass &> /dev/null; then + missing+=("pass") + fi + fi + if [[ ${#missing[@]} -gt 0 ]]; then echo "Error: missing required command(s): ${missing[*]}" >&2 return 1 @@ -112,9 +160,16 @@ ensure_default_profile() { fi } -# Get password from pass +# Get password from direct config or from pass +# Returns empty string if no password configured (for servers without auth) get_password() { - pass "$OLLAMA_PASS_PATH" + if [[ -n "$OLLAMA_PASSWORD" ]]; then + echo "$OLLAMA_PASSWORD" + elif [[ -n "$OLLAMA_PASS_PATH" ]]; then + pass "$OLLAMA_PASS_PATH" + else + echo "" + fi } # Generate a completion