logo hsb.horse
← Voltar para o índice do blog

Blog

Altere o destino da cópia do Vault para root com o plugin starlight-obsidian

Como alterar o comportamento padrão do plugin starlight-obsidian e copiar o Obsidian Vault diretamente em src/content/docs. Implementação organizada para resolver diferenças na estrutura hierárquica da barra lateral.

Publicado:

Por padrão, Obsidian Vault é copiado para src/content/docs/notes pelo plugin starlight-obsidian.

Como resultado, a exibição da interface do usuário da barra lateral e a descrição do caminho da URL estão um nível abaixo da raiz, resultando em uma diferença de um nível na estrutura de diretórios em comparação com quando visualizados no Obsidian.

O que eu quero alcançar

  • Defina o destino da cópia do Vault diretamente em src/content/docs
  • Alinhe a barra lateral com a hierarquia do Obsidian Vault

Defina o destino da cópia do Vault diretamente em src/content

Isso é relativamente fácil.

Primeiro, esvazie a área em src/content/docs.

Terminal window
rm -rf ./src/content/docs/**/*

Em seguida, altere as configurações brincando com astro.config.mjs.

import starlight from '@astrojs/starlight'
import { defineConfig } from 'astro/config'
import starlightObsidian, { obsidianSidebarGroup } from 'starlight-obsidian'
export default defineConfig({
integrations: [
starlight({
plugins: [
starlightObsidian({
output: '.'
}),
],
title: 'My Docs',
}),
],
})

Ao especificar output: '.', ele será copiado diretamente na raiz.

Alinhe a barra lateral com a hierarquia do Obsidian Vault

Um problema no GitHub foi aberto para isso, mas para cumprir as especificações de @astrojs/starlight, a política é não apoiá-lo como plugin no momento.

Opção para tornar o Obsidian a barra lateral inteira sem a necessidade de um nó raiz. · Edição nº 5 · HiDeoo/starlight-obsidian

Portanto, em vez de usar obsidianSidebarGroup gerado por starlight-obsidian, criaremos a estrutura de diretórios com nossa própria implementação.

Terminal window
touch sidebar.config.mjs
import path from 'node:path';
import fs from 'node:fs/promises';
const CONTENT_DIR = path.resolve(process.cwd(), 'src/content/docs');
export async function generateSidebar() {
const entries = await fs.readdir(CONTENT_DIR, { withFileTypes: true });
const dirs = entries.filter(v => v.isDirectory() && !v.name.startsWith("."));
/** @type {import('@astrojs/starlight/types').StarlightUserConfig} */
const config = {
sidebar: dirs.map(v => ({
label: v.name,
autogenerate: {
directory: v.name
}
}))
}
return config.sidebar
}
import starlight from '@astrojs/starlight'
import { defineConfig } from 'astro/config'
import starlightObsidian from 'starlight-obsidian'
import { generateSidebar } from './sidebar.config.mjs'
const sidebar = await generateSidebar();
export default defineConfig({
integrations: [
starlight({
plugins: [
starlightObsidian({
output: '.'
}),
],
title: 'My Docs',
sidebar
}),
],
})

resumo

Ao alterar o comportamento padrão do plugin starlight-obsidian, a estrutura hierárquica do Obsidian Vault pode ser refletida diretamente no site Starlight.

A geração automática de barras laterais permite manter uma estrutura consistente entre Obsidian e Starlight.