問題点
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 -h
usage: 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 sync
chmod +x scripts/sync
scripts/sync