Skip to content

fix: Respect XDG_CONFIG_HOME and XDG_CACHE_HOME environment variables#146

Open
ruiwarn wants to merge 6 commits intotobi:mainfrom
ruiwarn:main
Open

fix: Respect XDG_CONFIG_HOME and XDG_CACHE_HOME environment variables#146
ruiwarn wants to merge 6 commits intotobi:mainfrom
ruiwarn:main

Conversation

@ruiwarn
Copy link

@ruiwarn ruiwarn commented Feb 9, 2026

Description

This PR fixes #132 by adding proper support for XDG Base Directory Specification.

Changes

  • Added XDG_CONFIG_HOME support in getConfigDir() for index.yml location
  • Added XDG_CACHE_HOME support for model cache directory in llm.ts
  • Added verify-xdg.ts test script to validate XDG behavior

Testing

Verified that:

  • ✅ Config file (index.yml) is written to $XDG_CONFIG_HOME/qmd/ when set
  • ✅ Cache file (index.sqlite) is written to $XDG_CACHE_HOME/qmd/ when set
  • ✅ Falls back to default ~/.config/qmd/ and ~/.cache/qmd/ when XDG vars not set
  • QMD_CONFIG_DIR override still works (takes precedence)

Fixes #132

@seanmozeik
Copy link

Please merge, I need this for Docker security - my root file system is read only.

@HenryLoenwind
Copy link

With openclaw affected by this, this will blow up...

@marcin-kruszynski
Copy link

This would resolve so many issues related to multi-agent memory seperation in OpenClaw.

- Replace better-sqlite3 with bun:sqlite
- Replace fast-glob with Bun.Glob
- Replace child_process.spawn with Bun.spawn
- Replace crypto.createHash with Bun.CryptoHasher
- Replace picomatch with Bun.Glob
- Remove better-sqlite3, fast-glob, picomatch, tsx, vitest from deps
- Add @types/bun, change engine to bun>=1.0.0
- Update launcher script for bun
- Add setSQLiteFromBrewPrefixEnv for macOS sqlite-vec support
- Remove src/db.ts compatibility layer (use bun:sqlite directly)
- Change .js imports to bare specifiers
- Use import.meta.main instead of fileURLToPath check
- Add XDG_CACHE_HOME support for model cache directory in llm.ts
- (XDG_CONFIG_HOME for collections.ts already in upstream)
- (XDG_CACHE_HOME for db path already in upstream store.ts)
- Add EmbedFormat type and ModelConfig interface to collections.ts
- Add models? field to CollectionConfig for YAML config
- Add detectEmbedFormat() for auto-detection from model URI
- Add getEmbedFormat() with caching for format-aware embedding
- Make formatQueryForEmbedding/formatDocForEmbedding format-aware
- Add loadModelConfig() to read from YAML and merge with defaults
- Add modelDisplayName() helper for human-readable model names
- Modify getDefaultLlamaCpp() to use loadModelConfig() for model URIs
- Add commented models: section to example-index.yml
- Replace embedContexts[] with single embedContext
- Replace rerankContexts[] with single rerankContext
- Remove computeParallelism() and threadsPerContext() methods
- Simplify ensureEmbedContext() to create single context with promise guard
- Simplify ensureRerankContext() to create single context (no overrides)
- Simplify embedBatch() to use single context with Promise.all
- Simplify rerank() to use single context with rankAndSort()
- Simplify ensureLlama() to just getLlama() without manual GPU detection
- Remove getLlamaGpuTypes import (not needed with simplified approach)
- showHelp displays model names from config with (custom) indicator
- embed/pull/vsearch/query commands use loadModelConfig() for model URIs
- Version 1.0.7-rui.1 printed by --version flag
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: qmd collection add ignores XDG_CONFIG_HOME, writes index.yml to default path

4 participants

Comments