問題点
Obsidianでファイル名をUIDにするとwikiリンクの恩恵を受けにくくなる
具体的には、
# hoge
[[fuga]]というファイルがあって
# fugaというファイルをあとから作ったときに
# hoge
[[02|fuga]]と、自動的に更新してくれない
解決策
そこで、Obsidian内ではあくまでH1をファイル名として扱い、
Quartz側の実行スクリプトでUIDに置換する、ということをやる
frontmatterの設定
Templaterで設定する
uid:
title:
created:
modified: Quartzプロジェクトのディレクトリ構成
./
├── content/
├── obsidian -> symlink or submodule
├── scripts/
...- obsidianはvaultのことで、シンボリックリンクかサブモジュールにする
- content内は空にしておき、obsidianから前処理したページを移動してくる
- scriptsディレクトリを用意する
前処理するスクリプトを書く
scripts/rename_with_uid - GitHub
- 全てのファイルのfrontmatterからuidをとってきてリネームする
- 全てのファイルのwikiリンクをuidで更新する
[[title]]→[[uid|title]][[title|alias]]→[[uid|alias]]
実行権限を与える
chmod +x scripts/rename_with_uid使い方
scripts/rename_with_uid -husage: rename_with_uid [-h] [-i I] [-o O] [--ignore IGNORE]
Rename files with uid, then update wiki links
options:
-h, --help show this help message and exit
-i I Obsidian vault (default: obsidian)
-o O Quartz content (default: content)
--ignore IGNORE Prefix to ignore (default: "_ .")-i- 生成元のファイルがあるディレクトリ
- 指定した相対パス配下を全て処理する
- デフォルトは
./obsidian
-o- 生成先のディレクトリ
- 生成元のディレクトリ構成を受け継ぐ
- デフォルトは
./content
--ignore- 無視するディレクトリを前方一致で指定できるようにした
- スペース区切りで列挙できる
- デフォルトは
_と.
syncコマンド一発でpushまで行う
#!/usr/bin/env bash
DIR=`dirname $0`
$DIR/rename_with_uid && bun quartz syncchmod +x scripts/syncscripts/sync