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.
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.
Portanto, em vez de usar obsidianSidebarGroup gerado por starlight-obsidian, criaremos a estrutura de diretórios com nossa própria implementação.
touch sidebar.config.mjsimport 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.
hsb.horse