feat: introduce configuration file support and environmental variable overrides

This commit is contained in:
2026-01-08 21:38:48 +02:00
parent 20526ca42c
commit 9480b5fdde

67
ollama
View File

@@ -2,10 +2,50 @@
set -euo pipefail set -euo pipefail
OLLAMA_API_URL="https://ollama-api.hq.ars9.space/api" # Default values (should be configured in ~/.ollama/config.json)
OLLAMA_USER="ollama" DEFAULT_OLLAMA_API_URL="https://ollama.local"
OLLAMA_PASS_PATH="device/god-stronghold/authelia/users/ollama/password" DEFAULT_OLLAMA_USER="ollama"
DEFAULT_MODEL="llama3:8b" 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}" CONTEXT_FILE="${OLLAMA_CONTEXT_FILE:-$HOME/.ollama/context.json}"
PROFILE_DIR="${OLLAMA_PROFILE_DIR:-$HOME/.ollama/profiles}" PROFILE_DIR="${OLLAMA_PROFILE_DIR:-$HOME/.ollama/profiles}"
OUTPUT_FORMAT="text" # Can be "text" or "json" OUTPUT_FORMAT="text" # Can be "text" or "json"
@@ -15,12 +55,20 @@ SCRIPT_VERSION="1.0.0"
check_dependencies() { check_dependencies() {
local missing=() 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 if ! command -v "$cmd" &> /dev/null; then
missing+=("$cmd") missing+=("$cmd")
fi fi
done 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 if [[ ${#missing[@]} -gt 0 ]]; then
echo "Error: missing required command(s): ${missing[*]}" >&2 echo "Error: missing required command(s): ${missing[*]}" >&2
return 1 return 1
@@ -112,9 +160,16 @@ ensure_default_profile() {
fi 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() { get_password() {
if [[ -n "$OLLAMA_PASSWORD" ]]; then
echo "$OLLAMA_PASSWORD"
elif [[ -n "$OLLAMA_PASS_PATH" ]]; then
pass "$OLLAMA_PASS_PATH" pass "$OLLAMA_PASS_PATH"
else
echo ""
fi
} }
# Generate a completion # Generate a completion