---
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.
