--- name: unregister_obsidian_vault kind: function lang: py domain: obsidian version: "1.0.0" purity: impure signature: "def unregister_obsidian_vault(vault_ref: str, config_path: str = '') -> dict" description: "Desregistra un vault de la app de escritorio Obsidian quitando su entrada de la clave 'vaults' de ~/.config/obsidian/obsidian.json. Opera sobre la config de la app: NO borra la carpeta del vault en disco, solo hace que Obsidian deje de conocerlo. Acepta vault_ref como id exacto (hex 16) o como ruta (se normaliza a absoluta y se compara con path). Hace backup .bak antes de escribir y preserva el resto del JSON." tags: [obsidian, vault, unregister, config, desktop-app, obsidian-json] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: ["json", "os", "shutil"] params: - name: vault_ref desc: "id exacto de la entrada (hex 16 chars) O ruta al vault (se normaliza a absoluta y se compara con 'path'); primero intenta match por id, luego por path" - name: config_path desc: "ruta al obsidian.json de la app; vacio usa ~/.config/obsidian/obsidian.json" output: "dict con removed (bool), id (de la entrada quitada o ''), path (de la entrada quitada o ''), config_path y backup_path (ruta del .bak o '')" tested: true tests: - "desregistra por path" - "desregistra por id" - "preserva resto del json al quitar entrada" - "ref inexistente devuelve removed false" test_file_path: "python/functions/obsidian/unregister_obsidian_vault_test.py" file_path: "python/functions/obsidian/unregister_obsidian_vault.py" --- ## Ejemplo ```python import sys, os sys.path.insert(0, os.path.join("python", "functions")) from obsidian import unregister_obsidian_vault # Por ruta (se normaliza a absoluta) res = unregister_obsidian_vault("/home/enmanuel/vaults/viejo", config_path="") print(res["removed"], res["id"]) # True 3f9a1c0b7e2d4a86 # O por id exacto unregister_obsidian_vault("a1b2c3d4e5f60718", config_path="") ``` ## Cuando usarla Cuando quieras que la app de escritorio Obsidian deje de mostrar un vault en su selector sin tocar los archivos del vault en disco: limpiar entradas obsoletas, quitar un vault movido a otra ruta, o sanear `obsidian.json`. Para listar las entradas y obtener sus ids usa `list_registered_obsidian_vaults`. ## Gotchas - **NO borra la carpeta del vault**: solo elimina la entrada de la config de la app. Los archivos `.md` y el `.obsidian/` del vault siguen en disco. - **Escribe la config de la app** (I/O impuro) y crea backup `.bak` antes de sobreescribir, pero **solo si encontro la entrada** (`removed=True`). Si no la encuentra, no escribe ni hace backup. - Resolucion de `vault_ref`: primero intenta match exacto por id; si no, normaliza el ref a ruta absoluta y compara con `path`. Un id que coincide por azar con un path nunca pasara: el match por id va primero. - **Single-instance**: si Obsidian esta corriendo, sigue teniendo el vault en memoria hasta reiniciar; el desregistro solo afecta al archivo de config. - Preserva las demas claves de nivel superior del JSON y los demas vaults.