From 38665257642e0ae7d4433927449f5524e5f1414e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B1=86=E5=84=BF=E9=9B=B7=E9=94=8B=E5=A4=A7=E9=81=93?= Date: Tue, 7 Apr 2026 21:13:42 +0800 Subject: [PATCH] Add AGENTS.md and Templates directory --- .gitignore | 8 +- AGENTS.md | 1190 ++++++++++++++++++++++ Templates/Actor Template.md | 10 + Templates/Album Template.md | 15 + Templates/App Template.md | 9 + Templates/Author Template.md | 10 + Templates/Bases/Albums.base | 48 + Templates/Bases/Attachments.base | 32 + Templates/Bases/Backlinks.base | 31 + Templates/Bases/Board games.base | 22 + Templates/Bases/Books.base | 60 ++ Templates/Bases/Clippings.base | 39 + Templates/Bases/Companies.base | 22 + Templates/Bases/Daily.base | 67 ++ Templates/Bases/Events.base | 46 + Templates/Bases/Evergreen.base | 18 + Templates/Bases/Everything.base | 36 + Templates/Bases/Games.base | 51 + Templates/Bases/Genre.base | 28 + Templates/Bases/Journal.base | 18 + Templates/Bases/Meetings.base | 52 + Templates/Bases/Movies.base | 240 +++++ Templates/Bases/People.base | 33 + Templates/Bases/Places.base | 115 +++ Templates/Bases/Podcast episodes.base | 49 + Templates/Bases/Podcasts.base | 15 + Templates/Bases/Posts.base | 21 + Templates/Bases/Products.base | 149 +++ Templates/Bases/Projects.base | 32 + Templates/Bases/Ratings.base | 39 + Templates/Bases/Recipes.base | 30 + Templates/Bases/Related.base | 40 + Templates/Bases/Shows.base | 94 ++ Templates/Bases/Tags.base | 23 + Templates/Bases/Templates.base | 12 + Templates/Bases/Trips.base | 38 + Templates/Bases/apps.base | 12 + Templates/Bases/weread.base | 74 ++ Templates/Bases/人物卡.base | 17 + Templates/Bases/修炼.base | 25 + Templates/Bases/判断卡.base | 17 + Templates/Bases/反常识卡.base | 17 + Templates/Bases/技巧卡.base | 17 + Templates/Bases/摘要卡.base | 17 + Templates/Bases/方法卡.base | 17 + Templates/Bases/未命名.base | 4 + Templates/Bases/概念卡.base | 17 + Templates/Bases/短文卡.base | 17 + Templates/Bases/结构卡.base | 17 + Templates/Bases/联想卡.base | 17 + Templates/Bases/行动卡.base | 17 + Templates/Bases/认知卡.base | 17 + Templates/Bases/金句卡.base | 17 + Templates/Board Game Template.md | 13 + Templates/Book Template.md | 21 + Templates/City Template.md | 39 + Templates/Clipping Template.md | 13 + Templates/Coffee Template.md | 15 + Templates/Company Template.md | 10 + Templates/Conference Session Template.md | 14 + Templates/Conference Template.md | 13 + Templates/Contact Template.md | 10 + Templates/Daily Note Template.md | 8 + Templates/Director Template.md | 14 + Templates/Email Template.md | 13 + Templates/Event Template.md | 11 + Templates/Evergreen Template.md | 6 + Templates/Food Template.md | 13 + Templates/Game Studio Template.md | 11 + Templates/Genre Template.md | 7 + Templates/Hosting Template.md | 12 + Templates/Job Interview Template.md | 21 + Templates/Journal Template.md | 7 + Templates/Map Template.md | 16 + Templates/MarpTheme/university-blue.css | 328 ++++++ Templates/Meditation Template.md | 13 + Templates/Meeting Template.md | 13 + Templates/Meeting Type Template.md | 6 + Templates/Meetings List Template.md | 7 + Templates/Monthly Note Template.md | 12 + Templates/Movie Genre Template.md | 6 + Templates/Movie Template.md | 19 + Templates/Music Genre Template.md | 7 + Templates/Musician Template.md | 11 + Templates/People Template.md | 13 + Templates/Place Template.md | 14 + Templates/Place Type Template.md | 18 + Templates/Podcast Episode Template.md | 16 + Templates/Podcast Template.md | 12 + Templates/Post Template.md | 14 + Templates/Product Template.md | 14 + Templates/Product Type Template.md | 6 + Templates/Project Template.md | 14 + Templates/Quote Template.md | 10 + Templates/Real Estate Template.md | 18 + Templates/Recipe Template.md | 21 + Templates/Restaurant Template.md | 14 + Templates/Show Episode Template.md | 14 + Templates/Show Template.md | 14 + Templates/Stock Trade Template.md | 10 + Templates/Trip Template.md | 10 + Templates/Video Game Genre Template.md | 7 + Templates/Video Game Template.md | 15 + Templates/Wiki Page Template.md | 145 +++ Templates/desktop.ini | 5 + Templates/修炼Template.md | 16 + Templates/卡片模板/人物卡-模版.md | 30 + Templates/卡片模板/判断卡-模版.md | 16 + Templates/卡片模板/反常识卡-模版.md | 21 + Templates/卡片模板/技巧卡-模版.md | 20 + Templates/卡片模板/摘要卡-模版.md | 14 + Templates/卡片模板/方法卡-模版.md | 14 + Templates/卡片模板/概念卡-模版.md | 23 + Templates/卡片模板/短文卡-模版.md | 16 + Templates/卡片模板/结构卡-模版.md | 29 + Templates/卡片模板/联想卡-模版.md | 13 + Templates/卡片模板/行动卡-模版.md | 15 + Templates/卡片模板/认知卡-模版.md | 14 + Templates/卡片模板/金句卡-模版.md | 25 + Templates/模板说明.md | 40 + 120 files changed, 4494 insertions(+), 3 deletions(-) create mode 100644 AGENTS.md create mode 100644 Templates/Actor Template.md create mode 100644 Templates/Album Template.md create mode 100644 Templates/App Template.md create mode 100644 Templates/Author Template.md create mode 100644 Templates/Bases/Albums.base create mode 100644 Templates/Bases/Attachments.base create mode 100644 Templates/Bases/Backlinks.base create mode 100644 Templates/Bases/Board games.base create mode 100644 Templates/Bases/Books.base create mode 100644 Templates/Bases/Clippings.base create mode 100644 Templates/Bases/Companies.base create mode 100644 Templates/Bases/Daily.base create mode 100644 Templates/Bases/Events.base create mode 100644 Templates/Bases/Evergreen.base create mode 100644 Templates/Bases/Everything.base create mode 100644 Templates/Bases/Games.base create mode 100644 Templates/Bases/Genre.base create mode 100644 Templates/Bases/Journal.base create mode 100644 Templates/Bases/Meetings.base create mode 100644 Templates/Bases/Movies.base create mode 100644 Templates/Bases/People.base create mode 100644 Templates/Bases/Places.base create mode 100644 Templates/Bases/Podcast episodes.base create mode 100644 Templates/Bases/Podcasts.base create mode 100644 Templates/Bases/Posts.base create mode 100644 Templates/Bases/Products.base create mode 100644 Templates/Bases/Projects.base create mode 100644 Templates/Bases/Ratings.base create mode 100644 Templates/Bases/Recipes.base create mode 100644 Templates/Bases/Related.base create mode 100644 Templates/Bases/Shows.base create mode 100644 Templates/Bases/Tags.base create mode 100644 Templates/Bases/Templates.base create mode 100644 Templates/Bases/Trips.base create mode 100644 Templates/Bases/apps.base create mode 100644 Templates/Bases/weread.base create mode 100644 Templates/Bases/人物卡.base create mode 100644 Templates/Bases/修炼.base create mode 100644 Templates/Bases/判断卡.base create mode 100644 Templates/Bases/反常识卡.base create mode 100644 Templates/Bases/技巧卡.base create mode 100644 Templates/Bases/摘要卡.base create mode 100644 Templates/Bases/方法卡.base create mode 100644 Templates/Bases/未命名.base create mode 100644 Templates/Bases/概念卡.base create mode 100644 Templates/Bases/短文卡.base create mode 100644 Templates/Bases/结构卡.base create mode 100644 Templates/Bases/联想卡.base create mode 100644 Templates/Bases/行动卡.base create mode 100644 Templates/Bases/认知卡.base create mode 100644 Templates/Bases/金句卡.base create mode 100644 Templates/Board Game Template.md create mode 100644 Templates/Book Template.md create mode 100644 Templates/City Template.md create mode 100644 Templates/Clipping Template.md create mode 100644 Templates/Coffee Template.md create mode 100644 Templates/Company Template.md create mode 100644 Templates/Conference Session Template.md create mode 100644 Templates/Conference Template.md create mode 100644 Templates/Contact Template.md create mode 100644 Templates/Daily Note Template.md create mode 100644 Templates/Director Template.md create mode 100644 Templates/Email Template.md create mode 100644 Templates/Event Template.md create mode 100644 Templates/Evergreen Template.md create mode 100644 Templates/Food Template.md create mode 100644 Templates/Game Studio Template.md create mode 100644 Templates/Genre Template.md create mode 100644 Templates/Hosting Template.md create mode 100644 Templates/Job Interview Template.md create mode 100644 Templates/Journal Template.md create mode 100644 Templates/Map Template.md create mode 100644 Templates/MarpTheme/university-blue.css create mode 100644 Templates/Meditation Template.md create mode 100644 Templates/Meeting Template.md create mode 100644 Templates/Meeting Type Template.md create mode 100644 Templates/Meetings List Template.md create mode 100644 Templates/Monthly Note Template.md create mode 100644 Templates/Movie Genre Template.md create mode 100644 Templates/Movie Template.md create mode 100644 Templates/Music Genre Template.md create mode 100644 Templates/Musician Template.md create mode 100644 Templates/People Template.md create mode 100644 Templates/Place Template.md create mode 100644 Templates/Place Type Template.md create mode 100644 Templates/Podcast Episode Template.md create mode 100644 Templates/Podcast Template.md create mode 100644 Templates/Post Template.md create mode 100644 Templates/Product Template.md create mode 100644 Templates/Product Type Template.md create mode 100644 Templates/Project Template.md create mode 100644 Templates/Quote Template.md create mode 100644 Templates/Real Estate Template.md create mode 100644 Templates/Recipe Template.md create mode 100644 Templates/Restaurant Template.md create mode 100644 Templates/Show Episode Template.md create mode 100644 Templates/Show Template.md create mode 100644 Templates/Stock Trade Template.md create mode 100644 Templates/Trip Template.md create mode 100644 Templates/Video Game Genre Template.md create mode 100644 Templates/Video Game Template.md create mode 100644 Templates/Wiki Page Template.md create mode 100644 Templates/desktop.ini create mode 100644 Templates/修炼Template.md create mode 100644 Templates/卡片模板/人物卡-模版.md create mode 100644 Templates/卡片模板/判断卡-模版.md create mode 100644 Templates/卡片模板/反常识卡-模版.md create mode 100644 Templates/卡片模板/技巧卡-模版.md create mode 100644 Templates/卡片模板/摘要卡-模版.md create mode 100644 Templates/卡片模板/方法卡-模版.md create mode 100644 Templates/卡片模板/概念卡-模版.md create mode 100644 Templates/卡片模板/短文卡-模版.md create mode 100644 Templates/卡片模板/结构卡-模版.md create mode 100644 Templates/卡片模板/联想卡-模版.md create mode 100644 Templates/卡片模板/行动卡-模版.md create mode 100644 Templates/卡片模板/认知卡-模版.md create mode 100644 Templates/卡片模板/金句卡-模版.md create mode 100644 Templates/模板说明.md diff --git a/.gitignore b/.gitignore index 69391a0..2a0e1b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,12 @@ # 排除所有文件 /* -# 但保留这两个目录 +# 但保留这些目录和文件 !raw/ !wiki/ +!Templates/ +!AGENTS.md +!.gitignore # 保留目录内的所有内容 !raw/** !wiki/** -# 排除 .gitignore 自身 -!.gitignore +!Templates/** diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..0defda6 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,1190 @@ +--- +categories: + - "[[Tools]]" + - "[[Documentation]]" +tags: + - agents + - ai-assistant + - development-workflow + - obsidian-vault + - knowledge-management +created: 2026-01-23 +rating: 7 +type: schema +--- + +# AGENTS.md - Obsidian Vault 智能代理指南 + +## 概述 + +本指南为在这个 Obsidian 知识库中工作的智能代理(AI Coding Agents)提供详细的操作规范、代码风格指南和工作流指导。确保所有代理能够高效协作,遵循统一的编码标准,并在 PARA + LLM Wiki 双层架构中正确组织知识。 + +> **目标:** 让 AI 代理像真正的开发团队成员一样高效工作,遵循最佳实践,保持代码质量和一致性。 + +**IMPORTANT:** 处理 Obsidian 笔记时,必须优先使用以下官方 Skills(来源:kepano/obsidian-skills)。 + +> |Skill|用途|何时用| +> |---|---|---| +> |`obsidian-cli`|CLI 命令(搜索、读写、任务、属性、插件开发)|**首选**,几乎所有 vault 操作| +> |`obsidian-markdown`|`.md` 笔记编写(frontmatter、wikilink、callout、embed)|创建/编辑笔记内容时| +> |`obsidian-bases`|`.base` 数据库视图(filters、formulas、views)|创建/编辑 Bases 文件时| +> |`json-canvas`|`.canvas` 图表(nodes、edges、groups)|创建/编辑 Canvas 文件时| +> |`defuddle`|网页→干净 Markdown(去导航/广告/杂讯)|处理 URL 时优先于 WebFetch| +> +> 使用 `skill` 工具加载对应 skill 后再执行操作。 +--- + +### Obsidian CLI (v1.12.7+) + +新版 CLI 使用独立二进制文件,响应更快。常用命令: + +```bash +# 版本检查 +obsidian version + +# 日常操作 +obsidian daily:read # 读取今日日记 +obsidian daily:append content="- [ ] 新任务" # 添加任务 +obsidian tasks todo limit=10 # 查看待办 + +# 文件操作 +obsidian files total # 文件总数 +obsidian search query="关键词" limit=5 # 搜索 +obsidian tags sort=count counts # 标签统计 +## 1. 仓库架构总览 + +本项目采用**双层知识管理模式**,结合 PARA 方法论和 LLM Wiki 模式: + +```mermaid +graph TD + subgraph PARA["PARA 层(个人知识)"] + C[Categories/] + R[References/] + N[Notes/] + D[Daily/] + Cl[Clippings/] + T[Tags/] + end + + subgraph Wiki["LLM Wiki 层(编译知识)"] + Wiki[wiki/] + Raw[raw/] + end + + subgraph Infrastructure["基础设施"] + Templates[Templates/] + Attach[Attachments/] + Schema[AGENTS.md] + end + + Ingest[新来源] --> Raw + Raw -->|Ingest 操作| Wiki + Wiki -->|归档| PARA + + Wiki --> Schema + Schema --> Wiki +``` + +### 1.1 文件夹组织 + +| 文件夹 | 用途 | 文件格式 | 维护者 | +|--------|------|----------|--------| +| **PARA 层** | | | | +| | | | | +| `Categories/` | PARA 类别索引页面 | `Books.md`, `Movies.md` (复数) | 人类 | +| `References/` | 实体参考文件 | `Kevin Kelly.md`, `Obsidian.md` | 人类 + LLM | +| `Notes/` | 个人反思和分析 | `Evergreen notes…md` | 人类 | +| `Daily/` | 日常日记 | `2026-01-23.md` | 人类 | +| `Clippings/` | 网页摘录 | `Article Title.md` | 人类 | +| `Tags/` | 标签定义和索引 | `主题-ai.md`, `卡片-金句.md` | 人类 | +| | | | | +| **LLM Wiki 层** | | | | +| | | | | +| `wiki/` | LLM 编译维护的知识库 | `Concept.md`, `Person.md` | LLM | +| `raw/` | 不可变的原始来源 | `source.md` | 人类 | +| | | | | +| **基础设施** | | | | +| | | | | +| `Templates/` | 笔记和演示模板 | `*.md`, `*.css`, `*.base` | 人类 | +| `Attachments/` | 媒体文件 | 图片、PDF、视频 | 人类 | +| `markdown_output/` | 外部导入的内容 | `*.md` | 批量导入 | +| `AGENTS.md` | **Schema:代理操作规范** | 本文件 | 人类 + LLM | + +### 1.2 PARA 方法论 + +PARA 层用于组织**个人项目、领域、资源和归档**: + +| 类型 | 说明 | 示例 | +|------|------|----------| +| **Projects** | 有明确目标和时间线的活跃项目 | `项目-卡片笔记实践`, `项目-论文1` | +| **Areas** | 持续关注的领域和责任 | `领域-山西`, `领域-自组网` | +| **Resources** | 未来参考的主题和兴趣 | Obsidian 笔记、AI 工具、参考材料 | +| **Archive** | 已完成的项目和不活跃内容 | 过去项目、归档资料 | + +**注意事项**: +- PARA 层主要由人类维护,LLM 辅助 +- LLM Wiki 的编译结果可以归档到 PARA 层(如 References/) + +### 1.3 LLM Wiki 模式 + +LLM Wiki 层是**由 LLM 增量编译和维护的结构化知识库**: + +| 层级 | 位置 | 职责 | 维护者 | +|------|------|------|--------| +| **Raw Sources** | `raw/` | 不可变的原始文档、文章、论文、数据文件 | 人类 | +| **Wiki** | `wiki/` | 摘要、实体页、概念页、比较、综合 | **LLM** | +| **Schema** | `AGENTS.md` | Wiki 结构约定、工作流规范 | 人类 + LLM | + +**三种核心操作**: +1. **Ingest(摄入)**:将新来源编译到 wiki,更新 index 和 log +2. **Query(查询)**:搜索 wiki 页面并综合回答 +3. **Lint(健康检查)**:检查矛盾、过时、孤立页面、缺失交叉引用 + +**索引与日志**: +- `wiki/index.md` - 内容目录,按类别组织(每次 ingest 更新) +- `wiki/log.md` - 时间线日志(grep 可解析的格式) + +### 1.4 Frontmatter 规范 + +#### PARA 层(Categories, References, Clippings, Notes) + +所有 PARA 内容笔记必须包含 YAML frontmatter: + +```yaml +--- +categories: + - "[[Books]]" + - "[[People]]" +tags: + - books + - people + - reference +created: 2026-01-23 +rating: 5 +author: [] +topics: [] +para: [] +--- + + +## Obsidian Frontmatter 布尔值规范 + +在 Obsidian 笔记的 YAML frontmatter 中,布尔值 `true`/`false` 会被 Obsidian 识别为 checkbox 类型属性。为避免此问题,所有布尔值属性必须用引号包裹为字符串: + +- ✅ `marp: "true"` +- ✅ `paginate: "true"` +- ❌ `marp: true`(Obsidian 会将其显示为 checkbox) +- ❌ `paginate: true`(同上) + +此规范适用于所有通过 LLM 生成或修改的 Obsidian 笔记。HTML 注释中的指令(如 ``)不受影响,保持原样。 + +## 内容开始 +``` + +**Frontmatter 规则**: +- ✅ **Categories**:使用 wikilink 格式 `[[Category]]`,frontmatter 中用复数 `categories: [[Books]]` +- ✅ **Tags**:短横线连接、小写、无空格(例如:`#tag` 或 `ai/coding`) +- ✅ **Dates**:`YYYY-MM-DD` 格式 +- ✅ **多值字段**:使用列表格式,即使单值也要加 `[]`(例如:`author: ["Kevin Kelly"]`) +- ✅ **空字段**:留空不写引号或 null(例如:`via: ""`) +- ✅ **分隔符**:YAML 后必须有空行 `---`,正文前也要有空行 + +#### LLM Wiki 层 + +Wiki 页面必须包含以下 frontmatter: + +```yaml +--- +categories: + - "[[LLM Wiki]]" # ✅ 必须包含 +tags: + - wiki # ✅ 必须包含 + - {tag1} + - {tag2} +created: {YYYY-MM-DD} +source: "[[{source-file}]]" # ✅ 必须指向 raw 来源 +type: concept | entity | tool | index | log # ✅ 必须指定类型 +aliases: # 可选 + - {alias1} + - {alias2} +marp: "true" # Marp 演示文稿专用 +--- +``` + +**字段说明**: + +| 字段 | 必填 | PARA 层 | Wiki 层 | 说明 | +|------|------|---------|---------|------| +| `categories` | ✅ | `[[Category]]` | `[[LLM Wiki]]` | 类别 | +| `tags` | ✅ | `{tag}` | `wiki`, `{tag}` | 标签 | +| `created` | ✅ | `YYYY-MM-DD` | `YYYY-MM-DD` | 创建日期 | +| `source` | ❌ | 可选 | ✅ 必填 | Wiki 层必须指向 raw 来源 | +| `type` | ❌ | 可选 | ✅ 必填 | Wiki 层必须指定页面类型 | +| `aliases` | ❌ | 可选 | 可选 | 替代名称列表 | +| `marp` | ❌ | 可选 | 可选 | 演示文稿标识,必须用引号 | + +--- + +## 2. Wiki 工作流 + +### 2.1 Ingest(摄入)操作 + +当收到新来源时,按以下流程处理: + +```mermaid +graph LR + A[收到新来源] --> B[存入 raw/] + B --> C[读取并分析关键要点] + C --> D[创建/更新 Wiki 页面] + D --> E[更新 index.md] + E --> F[追加 log.md 条目] + F --> G[完成] +``` + +**详细步骤**: + +1. **读取来源** + ```bash + # 来源存入 raw/ 目录 + raw/source-name.md + ``` + +2. **创建 Wiki 页面** + - 根据内容类型创建相应页面: + - **概念页**:`wiki/概念名称.md` - 理论、方法论、模式 + - **实体页**:`wiki/人物姓名.md` - 人物、公司、组织 + - **工具页**:`wiki/工具名称.md` - 软件、框架、工具 + - **参考页**:`wiki/主题-子主题.md` - 详细文档、教程 + +3. **更新 index.md** + ```yaml + ## 概览 + + | 指标 | 值 | + |------|-----| + | 来源数 | {更新数字} | + | Wiki 页面数 | {更新数字} | + + ``` + +4. **追加 log.md** + ```markdown + ## [YYYY-MM-DD] ingest | {来源标题} + + **来源**: {来源链接或文件路径} + + **操作**: + - 操作 1 + - 操作 2 + + **涉及页面**: N 个新页面,M 个更新页面 + + **关键要点**: + - 要点 1 + - 要点 2 + ``` + +**示例**:参考 `wiki/log.md` 中的历史记录 + +### 2.2 Query(查询)操作 + +当用户对 Wiki 提问时: + +1. 搜索相关页面(使用 grep 或 qmd) +2. 综合多页面的信息 +3. 如果发现新的见解,**将回答归档为新 Wiki 页面** +4. 更新 index 和 log + +> **原则**:好的回答应该成为 Wiki 的一部分,让探索像摄入一样持续积累。 + +### 2.3 Lint(健康检查) + +定期执行健康检查: + +1. **检查矛盾** - 搜索冲突声明 +2. **检查过时** - 标记陈旧信息 +3. **检查孤立页面** - 无入站链接的页面 +4. **检查缺失概念** - 需要创建但尚未创建的页面 +5. **检查交叉引用** - 确保相关页面互相链接 + +```bash +# 示例命令 +grep -r "TODO\|FIXME\|过时\|矛盾" wiki/ +grep -r "\[\[" wiki/ | grep -v "md:" | sort | uniq -c | sort -rn | head -20 +``` + +### 2.4 Wiki 页面模板 + +参考 `Templates/Wiki Page Template.md`: + +**概念页面**: +```markdown +--- +categories: + - "[[LLM Wiki]]" +tags: + - wiki + - {tag1} + - {tag2} +created: {YYYY-MM-DD} +source: "[[{source-file}]]" +type: concept +aliases: + - {alias1} +--- + +# {概念名称} + +> **一句话定义**:{核心定义} + +## 定义 + +{概念的详细定义和解释} + +## 关键要点 + +- 要点 1 +- 要点 2 +- 要点 3 + +## 与其他概念的关系 + +- [[相关概念1]] — {关系说明} +- [[相关概念2]] — {关系说明} + +## 来源 + +- [[source]] — 来源描述 +``` + +**实体页面**: +```markdown +--- +categories: + - "[[LLM Wiki]]" + - "[[People]]" +tags: + - wiki + - people + - {domain} +created: {YYYY-MM-DD} +source: "[[{source-file}]]" +type: entity +aliases: + - {alias} +--- + +# {人物姓名} + +{一句话简介} + +## 身份 + +| 属性 | 值 | +|------|-----| +| 领域 | {领域} | +| 知名身份 | {身份} | + +## 主要贡献 + +- 贡献 1 +- 贡献 2 + +## 与本 Wiki 相关 + +{此人与 wiki 内容的关联} + +## 来源 + +- [[source]] — 来源描述 +``` + +**工具页面**: +```markdown +--- +categories: + - "[[LLM Wiki]]" +tags: + - wiki + - tool + - {category} +created: {YYYY-MM-DD} +source: "[[{source-file}]]" +type: tool +aliases: + - {alias} +--- + +# {工具名称} + +> **一句话描述** + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| 仓库 | {URL} | +| 类型 | {类型} | + +## 在 LLM Wiki 中的角色 + +{工具在 wiki 工作流中的作用} + +## 来源 + +- [[source]] — 来源描述 +``` + +--- + +## 3. Marp 演示文稿工作流 + +### 3.1 Marp 基础知识 + +Marp 是用 Markdown 编写演示文稿的生态系统。本知识库使用 Marp 创建幻灯片。 + +**核心概念**: +- **Marpit** - 框架层,定义指令解析和转换规则 +- **Marp Core** - 引擎层,实现 Marpit 接口 +- **Marp CLI** - 命令行工具,导出 HTML/PDF/PPTX +- **Obsidian Marp 插件** - 在 Obsidian 中预览和导出 + +### 3.2 Frontmatter 指令 + +Marp 演示文稿必须包含 Marp frontmatter: + +```yaml +--- +marp: "true" # ✅ 必须用引号包裹 +theme: gaia # 主题:default, uncover, gaia +paginate: "true" # ✅ 必须用引号包裹 +style: | + /* 自定义样式 */ + section { + background: linear-gradient(to bottom, #1a1a2e, #16213e); + color: white; + } +--- + + +# 标题页 + + +# 深色页 +``` + +**全局指令**(frontmatter 中): +- `marp: "true"` - 启用 Marp +- `theme: default/uncover/gaia` - 选择主题 +- `paginate: "true"` - 显示页码 +- `style: |` - 自定义 CSS + +**局部指令**(注释中): +- `` - 封面页样式 +- `` - 深色背景 +- `` - 两栏布局 +- `` - 当前页不显示页码 + +**自定义主题**: +- 主题文件存放在 `Templates/MarpTheme/` +- 格式:`theme-name.css` +- 使用后需重启 Obsidian +- 在 frontmatter 中引用:`theme: theme-name` + +### 3.3 自定义主题示例 + +**University Blue 主题** (`Templates/MarpTheme/university-blue.css`): + +```css +/* @theme university-blue */ + +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;700&display=swap'); + +:root { + --primary-color: #1a365d; /* 学术蓝 */ + --secondary-color: #2b6cb0; + --accent-color: #4299e1; + --text-color: #1a202c; + --bg-color: #ffffff; +} + +section { + background: var(--bg-color); + color: var(--text-color); + font-family: 'Noto Sans SC', sans-serif; +} + +h1, h2, h3 { + color: var(--primary-color); +} + +/* 封面页 */ +section.cover { + background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + color: white; +} + +/* 两栏布局 */ +.cols-2 { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem; +} +``` + +**使用方式**: +```yaml +--- +marp: "true" +theme: university-blue +paginate: "true" +--- +``` + +### 3.4 Marp 页面类型 + +| 类型 | 指令 | 用途 | 示例 | +|------|------|------|------| +| **封面页** | `` | 标题、作者、日期 | 论文首页、报告封面 | +| **过渡页** | `` | 章节分隔 | 章节标题页 | +| **深色页** | `` | 强调、对比 | 数据可视化、代码块 | +| **两栏页** | `` | 左右对比 | 对比分析、并列说明 | +| **结束页** | `` | 致谢、Q&A | 演示结尾 | + +**完整示例**:参考 `wiki/示例-学校定制Marp演示.md` + +### 3.5 导出方式 + +**Obsidian 插件**: +1. 打开 Marp 文件 +2. 点击预览按钮(👁️) +3. 点击导出按钮(📥) +4. 选择格式:HTML / PDF / PPTX + +**CLI 命令**: +```bash +# 导出 PDF +marp --pdf presentation.md -o output.pdf + +# 导出 HTML +marp --html presentation.md -o output.html + +# 导出 PPTX +marp --pptx presentation.md -o output.pptx +``` + +### 3.6 Marp 相关 Wiki 页面 + +| 页面 | 内容 | 来源 | +|------|------|------| +| `[[Marp]]` | 概念总览 | marp-guide | +| `[[Marp 指令语法]]` | 指令系统完整参考 | marp-guide | +| `[[Marp 主题与样式]]` | 内置主题、CSS 自定义 | marp-guide | +| `[[Marp 导出]]` | HTML/PDF/PPTX 导出方式 | marp-guide | +| `[[Obsidian Marp 插件]]` | Obsidian 集成 | marp-guide | +| `[[Marp 主题推荐]]` | GitHub 社区主题合集 | marp-themes | +| `[[示例-学校定制Marp演示]]` | 学校定制蓝主题演示 | marp-themes | + +--- + +## 4. 构建与测试命令 + +### 4.1 可用命令 + +AI 代理可使用以下命令进行构建和测试: + +| 命令 | 功能 | 使用场景 | 示例 | +|------|--------|----------|--------| +| **bun run dev** | 启动开发服务器 | 本地开发时热重载 | +| **bun run build** | 构建生产版本 | CI/CD 环境构建 | +| **bun run lint** | 运行代码检查 | 确保 ESLint 规范 | +| **bun test** | 运行单元测试 | Jest/Vitest 测试套件 | +| **bun run test:unit** | 单元测试 | `测试特定模块` | +| **bun run test:e2e** | E2E 测试 | `集成测试` | +| **bun run test:integration** | 集成测试 | 端到端测试 | +| **bun run test:coverage** | 测试覆盖率 | 生成覆盖率报告 | +| **bun run type-check** | 类型检查 | TypeScript 类型验证 | +| **pytest** | Python 测试 | 后端测试时使用 | + +### 4.2 命令使用规范 + +```markdown +## 启动开发服务器 + +# 推荐方式 +bun run dev + +# 禁止方式 +bun --bun run dev + +# 或者使用 oh-my-opencode 的 pty_spawn +pty_spawn: + command: "bun" + args: ["run", "dev"], + title: "Dev Server", + notifyOnExit: true +``` + +```markdown +## 运行测试 + +# 单个测试 +bun test path/to/test.spec.ts + +# 带详细输出 +bun test --reporter=verbose path/to/test.spec.ts + +# 运行特定测试 +bun test path/to/test.spec.ts -t "Authentication Flow" + +# 生成覆盖率报告 +bun run test:coverage --reporter=text --reporter=lcov +``` + +```markdown +## 类型检查 + +# TypeScript 类型检查 +bun run type-check + +# 或配合 TSC +bunx tsc --noEmit +``` + +### 4.3 测试最佳实践 + +#### 原则 1:快速失败(Fail Fast) + +```markdown +# 单元测试应该快速执行(< 2 分钟) +- 快速发现明显问题 +- 避免测试中的网络请求 +- 使用 mock 数据隔离依赖 + +**适用场景:** +- 验证核心业务逻辑 +- 测试纯函数组件 +``` + +#### 原则 2:测试隔离 + +```markdown +# 每个测试文件应该能够独立运行 +- 不依赖其他测试的状态 +- 使用独立的测试数据库或 mock 服务 +- 清理测试后的资源 + +**实现方式:** +```typescript +// 每个测试文件使用独立的 beforeEach/afterEach +import { beforeEach, afterEach } from '@testing-library/react'; + +describe('UserService', () => { + beforeEach(() => { + // 清理或初始化每个测试前的状态 + userService = new UserService(); + }); + + afterEach(() => { + // 清理每个测试后的资源 + userService.dispose(); + }); + + it('should create user', () => { + // 测试代码... + }); +}); +``` +``` + +#### 原则 3:描述性测试名称 + +```markdown +# 测试名称应该清晰描述测试意图和场景 + +describe('Authentication Flow', () => { + it('should authenticate user with valid credentials', () => { }); + it('should reject invalid credentials', () => { }); + it('should handle network errors gracefully', () => { }); +}); +``` + +**避免:** +```markdown +// ❌ 避免模糊名称 +it('test', () => {}); + +// ✅ 使用描述性名称 +it('should authenticate user with valid credentials', () => {}); +``` + +#### 原则 4:测试覆盖率目标 + +```markdown +# 设定测试覆盖率目标(建议 80% 以上) + +# package.json 配置 +{ + "scripts": { + "test": "vitest run --coverage", + "test:coverage": "vitest run --coverage --reporter=json" + }, + + "coverage": { + "statements": 80, + "branches": 80, + "functions": 80, + "lines": 80 + } +} +``` + +### 4.4 Lint 与格式化命令 + +```markdown +## ESLint + +# 运行 ESLint +bun run lint + +# 修复问题 +bun run lint --fix + +# 检查特定文件 +bun run lint path/to/component.ts + +# 生成报告 +bun run lint --format json --output-file eslint-report.json + +## Prettier + +# 格式化代码 +bun run format + +# 检查格式 +bun run format --check + +# 格式化特定文件 +bun run format path/to/component.ts +``` + +### 4.5 命令执行优先级 + +```markdown +## 开发工作流中的命令使用优先级 + +| 优先级 | 命令类型 | 说明 | +|--------|-----------|--------| +| **高** | 开发服务器启动/重启 | `bun run dev`(常用) | +| **高** | 类型检查 | `bun run type-check`(快速验证) | +| **中** | Lint/格式化 | `bun run lint`, `bun run format`(定期执行) | +| **中** | 单元测试 | `bun test`(开发过程中) | +| **低** | 集成测试 | `bun run test:integration`(PR 前或合并前) | +| **低** | E2E/覆盖率测试 | `bun run test:e2e`(定期执行) | +| **低** | 文档生成 | 手动生成文档 | +``` + +--- + +## 5. 代码风格指南 + +### 5.1 TypeScript 编码规范 + +#### 5.1.1 命名约定 + +```typescript +// ✅ 组件和类名:PascalCase +class UserService { } +interface UserProfile { } + +// ✅ 函数和变量:camelCase +function getUserById() { } +const userId = 0; +const userProfile: UserProfile; + +// ❌ 避免缩写 +function getusr() { } + +// ✅ 使用描述性名称 +function authenticateUser() { } + +// ✅ 常量:UPPER_SNAKE_CASE +const API_BASE_URL = 'https://api.example.com'; +const MAX_RETRIES = 3; + +// ❌ 避免单字母变量 +const a = 1; +const n = userId; +``` + +#### 5.1.2 类型定义 + +```typescript +// ✅ 使用明确的类型定义 +interface ApiResponse { + data: T; + error?: string; + status: number; +} + +// ✅ 使用泛型提高代码复用 +interface Repository { + findAll(): Promise; + findById(id: string): Promise; + create(entity: T): Promise; +} + +// ❌ 避免使用 any(除非确实必要) +// ✅ 使用 unknown 替代 +function process(data: unknown) { + // 明确类型或接口 +} + +// ✅ 使用联合类型明确可能的状态 +type Status = 'pending' | 'success' | 'error'; +``` + +#### 5.1.3 错误处理 + +```typescript +// ✅ 统一的错误处理模式 + +// 1. 定义错误类型 +class ValidationError extends Error { + constructor(message: string) { + super(message); + this.name = 'ValidationError'; + } +} + +class NetworkError extends Error { + constructor(message: string, code: number) { + super(message); + this.name = 'NetworkError'; + this.code = code; + } +} + +// 2. 使用 try-catch 包裹可能失败的代码 +try { + await apiCall(); +} catch (error) { + if (error instanceof NetworkError) { + // 网络错误处理 + } else if (error instanceof ValidationError) { + // 验证错误处理 + } else { + // 未知错误处理 + } +} + +// 3. 错误日志记录 +console.error('[ERROR]', error.message, error.stack); +// 或使用日志服务 +logger.error('API call failed', { error, context: { userId, action } }); +``` + +### 5.2 导入与依赖管理 + +```typescript +// ✅ 明确导入路径(使用绝对导入) +import { UserService } from './services/user/UserService'; +import { validateUser } from './utils/validators'; + +// ✅ 使用类型导入 +import type { User, UserProfile } from './types'; + +// ✅ 按功能分组导入 +// UI 组件 +import { Button } from './components/ui/Button'; +import { Form } from './components/ui/Form'; +// 工具函数 +import { formatDate } from './utils/dateUtils'; + +// ❌ 避免相对导入(除非在同一目录内) +// import { Something } from '../shared/Something'; + +// ✅ 使用 barrel exports(index.ts 导出) +// services/index.ts +export { UserService, AuthService, OrderService }; +export type { User, Order, Profile }; +``` + +#### 5.2.1 API 调用规范 + +```typescript +// ✅ 使用 async/await +async function fetchData(): Promise { + const response = await fetch(url); + return response.json(); +} + +// ❌ 避免回调地狱(使用 async/await) +// fetchData((data, callback) => { callback(data); }); // 不推荐 + +// ✅ 正确的错误传播 +async function processOrder(orderId: string): Promise { + try { + await validateOrder(orderId); + await processPayment(orderId); + await shipOrder(orderId); + } catch (error) { + // 统一错误处理 + throw new ProcessingError('Failed to process order', error); + } +} +``` + +--- + +## 6. Wiki 与 PARA 协作指南 + +### 6.1 知识流转路径 + +```mermaid +graph LR + Raw[新来源] --> Ingest[Ingest 操作] + Ingest --> Wiki[wiki/ 页面] + Wiki -->|价值高| Ref[References/ 归档] + Wiki -->|个人洞察| Notes[Notes/ 笔记] + Wiki -->|参考模板| Templ[Templates/] + + Raw -->|直接阅读| Clippings[Clippings/] + Clippings -->|价值验证| Ingest +``` + +### 6.2 操作决策树 + +| 场景 | 操作层 | 工作流 | 示例 | +|------|--------|--------|------| +| **收到新文章** | Wiki 层 | Ingest → 编译到 wiki | 读取论文,创建概念页 | +| **临时摘录** | PARA 层 | Clippings/ → 存储待整理 | 网页摘录,暂存 | +| **个人感悟** | PARA 层 | Notes/ → 原子笔记 | 阅读后的思考 | +| **稳定知识** | Wiki 层 | 维护 wiki 页面 | 概念页长期更新 | +| **模板需求** | Templates/ | 创建模板 | 新内容类型模板 | + +### 6.3 Frontmatter 一致性 + +确保跨层级的 frontmatter 一致性: + +| 层级 | categories | tags | type | source | +|------|-----------|------|------|--------| +| **PARA 层** | `[[Category]]` | `{tag}` | 可选 | 不需要 | +| **Wiki 层** | `[[LLM Wiki]]` | `wiki` | **必填** | **必填** | + +**示例对比**: + +```yaml +# PARA 层 - References/Obsidian.md +--- +categories: + - "[[Tools]]" +tags: + - tools + - obsidian + - knowledge-management +created: 2026-01-23 +rating: 5 +author: [] +--- + +# Obsidian + +Obsidian is a markdown-based note-taking app... +``` + +```yaml +# Wiki 层 - wiki/Obsidian.md +--- +categories: + - "[[LLM Wiki]]" +tags: + - wiki + - tool + - obsidian +created: 2026-04-07 +source: "[[raw/obsidian-guide.md]]" +type: tool +aliases: + - Obsidian 笔记工具 +--- + +# Obsidian + +> **一句话描述**:基于 Markdown 的知识管理工具 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| 官网 | https://obsidian.md | +| 类型 | 知识管理工具 | + +## 在 LLM Wiki 中的角色 + +Obsidian 是 Wiki 的可视化 IDE,提供 Graph View 查看连接形状。 + +## 来源 + +- [[raw/obsidian-guide.md]] - 官方文档 +``` + +--- + +## 7. 常见任务清单 + +### 7.1 摄入新来源 + +- [ ] 存放来源到 `raw/{source-name}.md` +- [ ] 读取并分析关键要点 +- [ ] 创建/更新 Wiki 页面(概念/实体/工具) +- [ ] 更新 `wiki/index.md`(来源数、页面数) +- [ ] 追加 `wiki/log.md` 条目 +- [ ] 检查是否需要创建 PARA 层引用 + +### 7.2 回答 Wiki 查询 + +- [ ] 搜索相关 Wiki 页面(grep/qmd) +- [ ] 综合多页面信息 +- [ ] 检查是否有新见解 +- [ ] 如有新见解,创建新 Wiki 页面 +- [ ] 更新 index 和 log + +### 7.3 Wiki 健康检查 + +- [ ] 检查矛盾声明 +- [ ] 检查过时信息 +- [ ] 检查孤立页面 +- [ ] 检查缺失交叉引用 +- [ ] 更新 log 记录检查结果 + +### 7.4 创建 Marp 演示文稿 + +- [ ] 添加 frontmatter:`marp: "true"`, `theme`, `paginate` +- [ ] 编写幻灯片内容(每页用 `---` 分隔) +- [ ] 添加页面类型注释(`` 等) +- [ ] 使用 Obsidian Marp 插件预览 +- [ ] 导出为 HTML/PDF/PPTX + +### 7.5 自定义 Marp 主题 + +- [ ] 在 `Templates/MarpTheme/` 创建 CSS 文件 +- [ ] 定义 CSS 变量(颜色、字体) +- [ ] 编写自定义样式规则 +- [ ] 重启 Obsidian 使主题生效 +- [ ] 在 frontmatter 中引用:`theme: theme-name` +- [ ] 创建示例演示文稿验证主题 + +--- + +## 8. 工具与资源 + +### 8.1 核心工具 + +| 工具 | 用途 | 文档 | +|------|------|------| +| **Obsidian** | Wiki 的可视化 IDE | 官方文档 | +| **qmd** | 本地 Markdown 搜索引擎 | GitHub | +| **Marp** | 演示文稿工具 | marp.guide | +| **Obsidian Marp** | Obsidian 中的 Marp 插件 | GitHub | + +### 8.2 相关 Wiki 页面 + +**LLM Wiki 核心**: +- [[LLM Wiki]] - 核心模式定义 +- [[RAG vs 持久化知识库]] - 模式对比 +- [[知识库维护自动化]] - 维护负担解决方案 +- [[Memex]] - 思想源头 + +**实践案例**: +- [[Farzapedia]] - Farza 的实践案例 +- [[BYOAI]] - 四大优势 +- [[Contamination Mitigation]] - Agent 工作区隔离 + +**人物**: +- [[Andrej Karpathy]] - 模式提出者 +- [[Vannevar Bush]] - Memex 概念提出者 + +**Marp 生态**: +- [[Marp]] - 概念总览 +- [[Marp 指令语法]] - 指令参考 +- [[Marp 主题与样式]] - 主题和 CSS +- [[Marp 导出]] - 导出方式 +- [[Obsidian Marp 插件]] - Obsidian 集成 +- [[Marp 主题推荐]] - 社区主题合集 +- [[示例-学校定制Marp演示]] - 演示示例 + +### 8.3 外部资源 + +- [[llm-wiki]] - Karpathy Gist 原文 +- [[刚刚,Karpathy 开源个人 LLM Wiki]] - J0hn 中文解读 +- [[marp-guide]] - Marp 官方文档 +- [[marp-themes]] - GitHub 主题合集 + +--- + +## 9. 附录 + +### 9.1 本文档特殊说明 + +AGENTS.md 是仓库的 **Schema 文件**,位于基础设施层: + +| 属性 | 值 | 说明 | +|------|-----|------| +| **位置** | 仓库根目录 | 与 PARA、wiki、raw 同级 | +| **角色** | Wiki 结构约定、工作流规范 | 连接 PARA 层和 Wiki 层 | +| **维护者** | 人类 + LLM | 共同演进 | + +**Frontmatter 特殊性**: +- 继承 PARA 层的字段(categories, rating) +- 添加 Wiki 层的字段(type: schema) +- 不需要 source 字段(因为是规范本身,非编译产物) + +### 9.2 文件命名约定 + +| 层级 | 类型 | 命名约定 | 示例 | +|------|------|----------|------| +| **raw/** | 来源 | `{source-name}.md` | `llm-wiki.md` | +| **wiki/** | 概念 | `{概念名称}.md` | `Memex.md` | +| **wiki/** | 实体 | `{人物姓名}.md` | `Andrej Karpathy.md` | +| **wiki/** | 工具 | `{工具名称}.md` | `qmd.md` | +| **wiki/** | 参考 | `{主题}-{子主题}.md` | `Marp-指令语法.md` | +| **Categories/** | 类别 | `{类别名}s.md` | `Books.md` | +| **References/** | 实体 | `{实体名称}.md` | `Obsidian.md` | +| **Notes/** | 笔记 | `{标题}.md` | `Evergreen notes…md` | +| **Daily/** | 日记 | `{YYYY-MM-DD}.md` | `2026-01-23.md` | + +### 9.2 Git 忽略规则 + +``` +# Obsidian +.obsidian/workspace.json +.obsidian/workspace-mobile.json + +# 导出文件 +*.pdf +*.html +*.pptx +# 除非是源文件 + +# 临时文件 +.DS_Store +Thumbs.db +``` + +### 9.3 更新日志 + +| 日期 | 版本 | 更新内容 | +|------|------|----------| +| 2026-01-23 | 1.0 | 初始版本(PARA 模式) | +| 2026-04-07 | 2.0 | 添加 LLM Wiki 模式、Marp 工作流、双层架构 | + +--- + +## 名言 + +> "Obsidian is the IDE; LLM is the programmer; wiki is the codebase." +> — [[Andrej Karpathy]] + +> "这种个性化方式把控制权完全交到你手上。数据是你的,格式是通用的,内容是可检查的。用哪个 AI 随你,让 AI 公司们卷起来吧。" +> — [[Andrej Karpathy]] diff --git a/Templates/Actor Template.md b/Templates/Actor Template.md new file mode 100644 index 0000000..2701c36 --- /dev/null +++ b/Templates/Actor Template.md @@ -0,0 +1,10 @@ +--- +categories: "[[People]]" +tags: + - people + - actors +para: [] +--- +## Movies + +![[Movies.base#Actor]] \ No newline at end of file diff --git a/Templates/Album Template.md b/Templates/Album Template.md new file mode 100644 index 0000000..0c4dd00 --- /dev/null +++ b/Templates/Album Template.md @@ -0,0 +1,15 @@ +--- +categories: + - "[[Albums]]" +tags: + - music + - albums + - references +genre: [] +artist: "" +year: +rating: +created: +para: [] +--- + diff --git a/Templates/App Template.md b/Templates/App Template.md new file mode 100644 index 0000000..9be2f76 --- /dev/null +++ b/Templates/App Template.md @@ -0,0 +1,9 @@ +--- +categories: "[[Apps]]" +tags: + - apps +maker: "" +rating: +para: + - 资源 +--- diff --git a/Templates/Author Template.md b/Templates/Author Template.md new file mode 100644 index 0000000..72e7a49 --- /dev/null +++ b/Templates/Author Template.md @@ -0,0 +1,10 @@ +--- +categories: "[[People]]" +tags: + - people + - authors +para: [] +--- +## Books + +![[Books.base#Author]] \ No newline at end of file diff --git a/Templates/Bases/Albums.base b/Templates/Bases/Albums.base new file mode 100644 index 0000000..f16c39a --- /dev/null +++ b/Templates/Bases/Albums.base @@ -0,0 +1,48 @@ +filters: + and: + - note.categories.contains(link("Albums")) + - '!file.name.contains("Template")' +properties: + file.name: + displayName: Album + note.year: + displayName: Year + note.artist: + displayName: Artist + note.created: + displayName: Added + note.rating: + displayName: Rating + note.genre: + displayName: Genre +views: + - type: table + name: Albums + order: + - file.name + - artist + - rating + - year + - genre + - type: table + name: Artist + filters: + and: + - list(artist).contains(this) + order: + - file.name + - artist + - rating + - year + - genre + - type: table + name: Genre + filters: + and: + - list(genre).contains(this) + order: + - file.name + - artist + - rating + - year + - genre diff --git a/Templates/Bases/Attachments.base b/Templates/Bases/Attachments.base new file mode 100644 index 0000000..26b023a --- /dev/null +++ b/Templates/Bases/Attachments.base @@ -0,0 +1,32 @@ +formulas: + Embeds: if(file.embeds[0].containsAny("jpg","gif","webp","jpeg","avif"), file.embeds[0]) + Date: if(created,created,if(start,start)) + links: file. +views: + - type: cards + name: Images + filters: + and: + - this.file.hasLink(file) + - '!file.ext.containsAny("base", "canvas", "pdf", "md")' + - file == "" + order: [] + sort: + - property: file.name + direction: ASC + image: file.file + cardSize: 70 + - type: table + name: Images 2 + filters: + and: + - '!file.ext.containsAny("base", "canvas", "pdf", "md")' + order: + - file.name + - file.links + - formula.links + sort: + - property: file.name + direction: ASC + image: file.file + cardSize: 90 diff --git a/Templates/Bases/Backlinks.base b/Templates/Bases/Backlinks.base new file mode 100644 index 0000000..e06e8ad --- /dev/null +++ b/Templates/Bases/Backlinks.base @@ -0,0 +1,31 @@ +filters: + and: + - file.hasLink(this) +formulas: + Path: file.path +properties: + note.created: + displayName: Date + file.name: + displayName: Title + note.categories: + displayName: Categories +views: + - type: table + name: Backlinks + order: + - file.name + - categories + - created + sort: + - property: created + direction: DESC + - type: table + name: Recent entries + order: + - file.name + - created + sort: + - property: created + direction: DESC + limit: 20 diff --git a/Templates/Bases/Board games.base b/Templates/Bases/Board games.base new file mode 100644 index 0000000..9b19ab4 --- /dev/null +++ b/Templates/Bases/Board games.base @@ -0,0 +1,22 @@ +filters: + and: + - categories.contains(link("Board games.base")) + - '!file.name.contains("Template")' +properties: + file.name: + displayName: Game + note.rating: + displayName: Rating + note.last: + displayName: Last +views: + - type: table + name: Table + order: + - file.name + - rating + - last + - tags + sort: + - property: file.name + direction: ASC diff --git a/Templates/Bases/Books.base b/Templates/Bases/Books.base new file mode 100644 index 0000000..72627a5 --- /dev/null +++ b/Templates/Bases/Books.base @@ -0,0 +1,60 @@ +filters: + or: + - doc_type == "weread-highlights-reviews" + - categories == ["[[Books]]"] +properties: + note.author: + displayName: Author + file.name: + displayName: Name + note.year: + displayName: Year + note.genre: + displayName: Genre +views: + - type: table + name: Books + order: + - file.name + - author + - length + - year + - rating + - topics + - last + sort: + - property: file.name + direction: ASC + image: note.cover + cardSize: 110 + - type: table + name: Top rated + order: + - file.name + - rating + - last + sort: + - property: last + direction: DESC + - type: table + name: Author + filters: + or: + - list(author).contains(this) + - author.containsAny("Ken Wilber", "肯·威尔伯", "肯·威尔伯(Ken Wilber)") + order: + - file.name + - year + - genre + sort: + - property: genre + direction: ASC + - type: table + name: Genre + filters: + and: + - list(genre).contains(this) + order: + - file.name + - year + - genre diff --git a/Templates/Bases/Clippings.base b/Templates/Bases/Clippings.base new file mode 100644 index 0000000..d7b5155 --- /dev/null +++ b/Templates/Bases/Clippings.base @@ -0,0 +1,39 @@ +filters: + and: + - note.categories.contains(link("Clippings")) + - '!file.name.contains("Template")' +properties: + file.name: + displayName: Title + note.author: + displayName: Author + note.created: + displayName: Clipped + note.published: + displayName: Published +views: + - type: table + name: Clippings + order: + - file.name + - author + - created + - published + sort: + - property: created + direction: DESC + columnSize: + note.author: 140 + - type: table + name: Author + filters: + and: + - list(author).contains(this) + order: + - file.name + - author + - created + - published + sort: + - property: clipped + direction: DESC diff --git a/Templates/Bases/Companies.base b/Templates/Bases/Companies.base new file mode 100644 index 0000000..eaf3c4a --- /dev/null +++ b/Templates/Bases/Companies.base @@ -0,0 +1,22 @@ +filters: + and: + - categories.contains(link("Companies")) + - '!file.name.contains("Template")' +properties: + file.name: + displayName: Company + property.url: + displayName: Link + note.url: + displayName: URL + note.people: + displayName: People +views: + - type: table + name: Companies + order: + - file.name + - url + - people + columnSize: + note.url: 239 diff --git a/Templates/Bases/Daily.base b/Templates/Bases/Daily.base new file mode 100644 index 0000000..85290a5 --- /dev/null +++ b/Templates/Bases/Daily.base @@ -0,0 +1,67 @@ +filters: + or: + - file.name.contains(this.file.name) + - created.toString().contains(this.file.name) + - start.toString().contains(this.file.name) + - end.toString().contains(this.file.name) + - file.links.contains(this.file) +properties: + file.name: + displayName: Entry + note.categories: + displayName: Categories + note.created: + displayName: Created + note.tags: + displayName: Tags +views: + - type: table + name: Daily notes + filters: + and: + - '!tags.contains("daily")' + - '!tags.contains("monthly")' + order: + - file.name + - created + - categories + - tags + sort: + - property: categories + direction: DESC + - property: tags + direction: ASC + - property: file.name + direction: ASC + columnSize: + file.name: 287 + note.created: 128 + note.categories: 119 + - type: table + name: Monthly + filters: + and: + - '!tags.contains("daily")' + - '!tags.contains("monthly")' + order: + - file.name + - categories + - created + sort: + - property: file.name + direction: ASC + - property: created + direction: DESC + - type: table + name: Yearly + filters: + and: + - '!tags.contains("daily")' + - '!tags.contains("monthly")' + order: + - file.name + - categories + - created + sort: + - property: created + direction: ASC diff --git a/Templates/Bases/Events.base b/Templates/Bases/Events.base new file mode 100644 index 0000000..693e682 --- /dev/null +++ b/Templates/Bases/Events.base @@ -0,0 +1,46 @@ +filters: + and: + - categories.contains(link("Events")) + - '!file.name.contains("Template")' +properties: + note.end: + displayName: End + note.loc: + displayName: Location + note.start: + displayName: Start +views: + - type: table + name: Events + order: + - file.name + - start + - end + - loc + sort: + - property: start + direction: DESC + - type: table + name: Type + filters: + and: + - list(type).contains(this) + order: + - file.name + - start + - loc + sort: + - property: start + direction: DESC + - type: table + name: Location + filters: + and: + - list(loc).contains(this) + order: + - file.name + - start + - loc + sort: + - property: start + direction: DESC diff --git a/Templates/Bases/Evergreen.base b/Templates/Bases/Evergreen.base new file mode 100644 index 0000000..e7ecf8f --- /dev/null +++ b/Templates/Bases/Evergreen.base @@ -0,0 +1,18 @@ +filters: + and: + - tags.contains("0🌲") + - '!file.name.contains("Template")' +properties: + file.name: + displayName: Name + note.created: + displayName: Created +views: + - type: table + name: Evergreen + order: + - file.name + - created + sort: + - property: created + direction: DESC diff --git a/Templates/Bases/Everything.base b/Templates/Bases/Everything.base new file mode 100644 index 0000000..c72a5d4 --- /dev/null +++ b/Templates/Bases/Everything.base @@ -0,0 +1,36 @@ +formulas: + Embeds: if(file.embeds[0].containsAny("jpg","gif","webp","jpeg","avif"), file.embeds[0]) + Date: if(created,created,if(start,start)) +views: + - type: table + name: All files + order: + - file.name + - file.mtime + - file.path + - file.ext + - type: cards + name: Images + filters: + and: + - '!file.ext.containsAny("base", "canvas", "pdf", "md")' + order: + - file.name + sort: + - property: file.name + direction: ASC + image: file.file + - type: cards + name: Images in posts + filters: + and: + - "!formula.Embeds.isEmpty()" + order: + - file.name + - formula.Date + sort: + - property: file.name + direction: ASC + - property: date + direction: DESC + image: formula.Embeds diff --git a/Templates/Bases/Games.base b/Templates/Bases/Games.base new file mode 100644 index 0000000..d47a765 --- /dev/null +++ b/Templates/Bases/Games.base @@ -0,0 +1,51 @@ +filters: + and: + - note.categories.contains(link("Games")) + - '!file.name.contains("Template")' +properties: + file.name: + displayName: Games + note.year: + displayName: Year + note.maker: + displayName: Maker + note.rating: + displayName: Rating + note.genre: + displayName: Genre + note.last: + displayName: Last played +views: + - type: table + name: Games + order: + - file.name + - maker + - genre + - year + - rating + - last + - type: table + name: Studio + filters: + and: + - list(maker).contains(this) + order: + - file.name + - maker + - genre + - year + - rating + - last + - type: table + name: Genre + filters: + and: + - list(genre).contains(this) + order: + - file.name + - maker + - genre + - year + - rating + - last diff --git a/Templates/Bases/Genre.base b/Templates/Bases/Genre.base new file mode 100644 index 0000000..d22fe22 --- /dev/null +++ b/Templates/Bases/Genre.base @@ -0,0 +1,28 @@ +filters: + and: + - list(genre).contains(this) +properties: + note.rating: + displayName: Rating + note.categories: + displayName: Category + note.last: + displayName: Last + file.name: + displayName: Name +views: + - type: table + name: Genre + order: + - file.name + - rating + - categories + - last + sort: + - property: rating + direction: DESC + - property: last + direction: DESC + columnSize: + file.name: 248 + note.categories: 170 diff --git a/Templates/Bases/Journal.base b/Templates/Bases/Journal.base new file mode 100644 index 0000000..28d793d --- /dev/null +++ b/Templates/Bases/Journal.base @@ -0,0 +1,18 @@ +filters: + and: + - '!file.name.contains("Template")' + - tags.contains("journal") +properties: + file.name: + displayName: Entry + note.created: + displayName: Created +views: + - type: table + name: Table + order: + - file.name + - created + sort: + - property: file.name + direction: ASC diff --git a/Templates/Bases/Meetings.base b/Templates/Bases/Meetings.base new file mode 100644 index 0000000..4aca3d6 --- /dev/null +++ b/Templates/Bases/Meetings.base @@ -0,0 +1,52 @@ +filters: + and: + - categories.contains(link("Meetings")) + - '!file.name.contains("Template")' +properties: + note.date: + displayName: Date + note.people: + displayName: People + note.type: + displayName: Type + file.name: + displayName: Meeting + note.org: + displayName: Org +views: + - type: table + name: Meetings + order: + - file.name + - date + - type + - people + sort: + - property: date + direction: ASC + - type: table + name: Person + filters: + and: + - list(people).contains(this) + order: + - file.name + - date + - type + - people + sort: + - property: date + direction: ASC + - type: table + name: Type + filters: + and: + - list(type).contains(this) + order: + - file.name + - date + - people + - org + sort: + - property: date + direction: DESC diff --git a/Templates/Bases/Movies.base b/Templates/Bases/Movies.base new file mode 100644 index 0000000..eef8704 --- /dev/null +++ b/Templates/Bases/Movies.base @@ -0,0 +1,240 @@ +filters: + and: + - categories.contains(link("Movies")) + - '!file.name.contains("Template")' +formulas: {} +properties: + file.name: + displayName: Name + note.last: + displayName: Last + note.rating: + displayName: Rating + note.year: + displayName: Year + note.director: + displayName: Director + note.genre: + displayName: Genre + note.cast: + displayName: Cast + note.scoreImdb: + displayName: IMDB + note.scoreRT: + displayName: RT + note.runtime: + displayName: Runtime + note.watchlist: + displayName: Added +views: + - type: table + name: All + order: + - file.name + - year + - director + - rating + - last + - plot + - genre + sort: + - property: director + direction: ASC + - property: plot + direction: ASC + columnSize: + file.name: 193 + note.director: 205 + note.plot: 233 + note.genre: 261 + - type: table + name: To-watch + filters: + and: + - last.isEmpty() + - rating.isEmpty() + order: + - file.name + - year + - scoreImdb + - scoreRT + - runtime + - watchlist + - director + - genre + sort: + - property: scoreImdb + direction: DESC + - property: scoreRT + direction: DESC + - property: watchlist + direction: DESC + - property: file.name + direction: ASC + - property: director + direction: ASC + columnSize: + file.name: 283 + note.year: 68 + note.scoreRT: 67 + note.director: 238 + - type: table + name: Favorites + filters: + and: + - note.rating > 6 + order: + - file.name + - director + - year + - genre + - rating + - ratingImdb + - last + sort: + - property: file.name + direction: ASC + - property: ratingImdb + direction: DESC + columnSize: + file.name: 283 + note.director: 221 + note.year: 68 + - type: table + name: Last seen + filters: + and: + - "!last.isEmpty()" + order: + - file.name + - year + - rating + - last + - director + - genre + sort: + - property: last + direction: DESC + - property: file.name + direction: ASC + limit: 20 + - type: table + name: Actor + filters: + and: + - list(cast).contains(this) + order: + - file.name + - year + - director + - genre + - ratingImdb + sort: + - property: ratingImdb + direction: DESC + - type: table + name: Genre + filters: + and: + - list(genre).contains(this) + order: + - file.name + - rating + - year + - director + - last + - genre + sort: + - property: last + direction: DESC + - property: genre + direction: ASC + - property: rating + direction: DESC + columnSize: + note.director: 166 + note.last: 115 + - type: table + name: Director + filters: + and: + - list(director).contains(this) + order: + - file.name + - year + - rating + - last + - cast + - genre + sort: + - property: last + direction: DESC + - property: rating + direction: ASC + - property: year + direction: DESC + columnSize: + file.name: 186 + note.year: 79 + note.rating: 96 + note.genre: 243 + - type: table + name: Soundtrack + filters: + and: + - list(music).contains(this) + order: + - file.name + - year + - rating + - last + - cast + - genre + sort: + - property: last + direction: DESC + - property: rating + direction: ASC + - property: year + direction: DESC + columnSize: + file.name: 186 + note.year: 79 + note.rating: 96 + note.genre: 243 + - type: table + name: Theater + filters: + and: + - file.links.contains(this.file) + order: + - file.name + - rating + - last + - year + - scoreImdb + - runtime + - scoreRT + - watchlist + - director + - genre + sort: + - property: last + direction: DESC + - property: scoreImdb + direction: DESC + - property: scoreRT + direction: DESC + - property: watchlist + direction: DESC + - property: file.name + direction: ASC + - property: director + direction: ASC + columnSize: + file.name: 283 + note.rating: 94 + note.year: 68 + note.scoreRT: 67 + note.director: 238 + note.genre: 243 diff --git a/Templates/Bases/People.base b/Templates/Bases/People.base new file mode 100644 index 0000000..b50fdd3 --- /dev/null +++ b/Templates/Bases/People.base @@ -0,0 +1,33 @@ +filters: + and: + - '!file.name.contains("Template")' + - note.tags.contains("people") +formulas: + Age: (now() - birthday).years.floor() +properties: + file.name: + displayName: Name + note.tags: + displayName: Tags + note.birthday: + displayName: Birthday +views: + - type: table + name: All people + order: + - file.name + - tags + - birthday + - formula.Age + sort: + - property: file.name + direction: ASC + - property: tags + direction: ASC + - property: formula.Age + direction: DESC + - property: birthday + direction: DESC + columnSize: + note.tags: 209 + formula.Age: 99 diff --git a/Templates/Bases/Places.base b/Templates/Bases/Places.base new file mode 100644 index 0000000..9680e08 --- /dev/null +++ b/Templates/Bases/Places.base @@ -0,0 +1,115 @@ +filters: + and: + - note.categories.contains(link("Places")) + - '!file.name.contains("Template")' +properties: + note.type: + displayName: Type + note.rating: + displayName: Rating + note.loc: + displayName: Location + file.name: + displayName: Name + note.last: + displayName: Last +views: + - type: table + name: Places + order: + - file.name + - rating + - loc + - type + - last + sort: + - property: last + direction: DESC + - property: type + direction: ASC + - property: loc + direction: ASC + columnSize: + file.name: 162 + note.loc: 145 + note.type: 199 + - type: table + name: Location + filters: + and: + - list(loc).contains(this) + order: + - file.name + - type + - rating + - last + sort: + - property: rating + direction: DESC + - property: last + direction: DESC + - property: loc + direction: ASC + columnSize: + note.type: 197 + - type: map + name: Type + filters: + and: + - list(type).contains(this) + order: + - file.name + - type + - rating + - last + sort: + - property: last + direction: DESC + - property: loc + direction: ASC + columnSize: + note.type: 153 + - type: table + name: Related + filters: + and: + - file.hasLink(this) + - '!tags.containsAny("cities", "countries")' + order: + - file.name + - rating + - loc + - type + - last + sort: + - property: rating + direction: DESC + - property: last + direction: DESC + - property: type + direction: ASC + - property: loc + direction: ASC + columnSize: + file.name: 162 + note.rating: 65 + note.loc: 145 + note.type: 199 + - type: table + name: Metatype + filters: + or: + - list(type).contains(this) + - list(type).containsAny(this.topics) + order: + - file.name + - type + - rating + - last + sort: + - property: last + direction: DESC + - property: loc + direction: ASC + columnSize: + note.type: 153 diff --git a/Templates/Bases/Podcast episodes.base b/Templates/Bases/Podcast episodes.base new file mode 100644 index 0000000..b1f2bb3 --- /dev/null +++ b/Templates/Bases/Podcast episodes.base @@ -0,0 +1,49 @@ +filters: + and: + - note.categories.contains(link("Podcast episodes")) + - '!file.name.contains("Template")' +display: + file.name: Podcast + note.show: Show + note.guests: Guests + note.episode: Episode + note.rating: Rating + note.published: Published + note.guest: Guest +views: + - type: table + name: All episodes + order: + - file.name + - show + - guests + - episode + - rating + - published + sort: + - column: note.published + direction: DESC + - type: table + name: Show + filters: + and: + - list(show).contains(this) + order: + - file.name + - show + - episode + - rating + - published + - guest + - type: table + name: Guest + filters: + and: + - list(guest).contains(this) + order: + - file.name + - show + - guests + - episode + - rating + - published diff --git a/Templates/Bases/Podcasts.base b/Templates/Bases/Podcasts.base new file mode 100644 index 0000000..cd8d9a8 --- /dev/null +++ b/Templates/Bases/Podcasts.base @@ -0,0 +1,15 @@ +filters: + and: + - note.categories.contains(link("Podcasts")) + - '!file.name.contains("Template")' +properties: + file.name: + displayName: Podcast + note.host: + displayName: Host +views: + - type: table + name: Table + order: + - file.name + - host diff --git a/Templates/Bases/Posts.base b/Templates/Bases/Posts.base new file mode 100644 index 0000000..a545ab5 --- /dev/null +++ b/Templates/Bases/Posts.base @@ -0,0 +1,21 @@ +properties: + file.name: + displayName: Title + note.status: + displayName: Status + note.published: + displayName: Published +views: + - type: table + name: All + filters: + and: + - list(categories).contains(link("Posts")) + - '!file.name.contains("Template")' + order: + - file.name + - status + - published + sort: + - column: note.published + direction: DESC diff --git a/Templates/Bases/Products.base b/Templates/Bases/Products.base new file mode 100644 index 0000000..2d540c8 --- /dev/null +++ b/Templates/Bases/Products.base @@ -0,0 +1,149 @@ +filters: + and: + - note.categories.contains(link("Products")) + - '!file.name.contains("Template")' +formulas: + Owned: ((now() - acquired).months).round() + totalUses: monthlyUses * formula.Owned.round() + perUse: (price / formula.totalUses).toFixed(2) +properties: + note.monthlyUses: + displayName: Uses/month + formula.Owned: + displayName: Months + formula.totalUses: + displayName: Total uses + formula.perUse: + displayName: Per use + note.price: + displayName: Price + note.rating: + displayName: Rating + note.acquired: + displayName: Acquired + note.type: + displayName: Type + file.name: + displayName: Product +views: + - type: table + name: Products + order: + - file.name + - acquired + - rating + - price + - monthlyUses + - formula.perUse + - formula.Owned + - formula.totalUses + - type + sort: + - property: formula.perUse + direction: ASC + - property: formula.totalUses + direction: ASC + - property: acquired + direction: DESC + - property: file.name + direction: DESC + - property: rating + direction: DESC + - property: formula.Owned + direction: ASC + columnSize: + file.name: 209 + note.acquired: 112 + note.price: 78 + note.monthlyUses: 123 + formula.perUse: 102 + formula.Owned: 113 + formula.totalUses: 115 + - type: table + name: Cost per use + filters: + and: + - note.monthlyUses > 0 + order: + - file.name + - acquired + - monthlyUses + - price + - formula.Owned + - formula.totalUses + - formula.perUse + - type + - rating + sort: + - property: acquired + direction: ASC + - property: monthlyUses + direction: DESC + - property: rating + direction: DESC + columnSize: + file.name: 207 + note.acquired: 112 + note.monthlyUses: 131 + note.price: 78 + formula.Owned: 99 + formula.totalUses: 100 + formula.perUse: 93 + - type: table + name: Maker + filters: + and: + - list(maker).contains(this) + order: + - file.name + - rating + - formula.perUse + - monthlyUses + - price + - formula.totalUses + - formula.Owned + - acquired + - type + sort: + - property: file.name + direction: ASC + - property: formula.totalUses + direction: DESC + - property: acquired + direction: DESC + - property: monthlyUses + direction: DESC + columnSize: + file.name: 209 + note.monthlyUses: 82 + formula.totalUses: 115 + - type: table + name: Type + filters: + and: + - list(type).contains(this) + order: + - file.name + - rating + - formula.perUse + - monthlyUses + - price + - formula.totalUses + - formula.Owned + - acquired + - type + sort: + - property: rating + direction: DESC + - property: file.name + direction: ASC + - property: formula.totalUses + direction: DESC + - property: acquired + direction: DESC + - property: monthlyUses + direction: DESC + columnSize: + file.name: 209 + note.monthlyUses: 82 + formula.totalUses: 115 diff --git a/Templates/Bases/Projects.base b/Templates/Bases/Projects.base new file mode 100644 index 0000000..eef5899 --- /dev/null +++ b/Templates/Bases/Projects.base @@ -0,0 +1,32 @@ +filters: + and: + - '!file.name.contains("Template")' + - note.categories.contains(link("Projects")) +properties: + note.status: + displayName: Status + note.url: + displayName: URL + file.name: + displayName: Name + note.type: + displayName: Type + note.year: + displayName: Year +views: + - type: table + name: Table + order: + - file.name + - type + - year + - status + - url + sort: + - column: note.status + direction: ASC + - column: note.year + direction: DESC + columnSize: + file.name: 209 + note.type: 199 diff --git a/Templates/Bases/Ratings.base b/Templates/Bases/Ratings.base new file mode 100644 index 0000000..a7497e4 --- /dev/null +++ b/Templates/Bases/Ratings.base @@ -0,0 +1,39 @@ +filters: + and: + - rating > 0 +properties: + note.rating: + displayName: Rating + note.last: + displayName: Last + file.name: + displayName: Name + note.categories: + displayName: Categories +views: + - type: table + name: Ratings + order: + - file.name + - rating + - last + - categories + sort: + - column: note.last + direction: DESC + columnSize: + file.name: 238 + - type: table + name: Recent + filters: + and: + - last > now() - "60d" + order: + - file.name + - rating + - last + - categories + sort: + - column: note.last + direction: DESC + limit: 100 diff --git a/Templates/Bases/Recipes.base b/Templates/Bases/Recipes.base new file mode 100644 index 0000000..cfd4ad6 --- /dev/null +++ b/Templates/Bases/Recipes.base @@ -0,0 +1,30 @@ +filters: + and: + - note.categories.contains(link("Recipes")) + - '!file.name.contains("Template")' +properties: + file.name: + displayName: Name + note.author: + displayName: Author + note.type: + displayName: Type + note.ingredients: + displayName: Ingredients + note.cuisine: + displayName: Cuisine + note.rating: + displayName: Rating +views: + - type: table + name: Recipes + order: + - file.name + - type + - cuisine + - author + - ingredients + - rating + columnSize: + note.type: 201 + note.cuisine: 174 diff --git a/Templates/Bases/Related.base b/Templates/Bases/Related.base new file mode 100644 index 0000000..c48af0a --- /dev/null +++ b/Templates/Bases/Related.base @@ -0,0 +1,40 @@ +filters: + and: + - file.path != this.file.path +formulas: + LinksOverlap: formula.Related.length + Related: list(this.file.links).filter(list(file.links).containsAny(value)).unique() + BacklinksCount: file.backlinks.length + TagsOverlap: list(this.file.tags).filter(list(file.tags).containsAny(value)).unique().length +properties: + formula.LinksOverlap: + displayName: Links overlap + file.name: + displayName: Name + formula.BacklinksCount: + displayName: Backlinks count + formula.TagsOverlap: + displayName: Tags overlap + formula.Related: + displayName: Links +views: + - type: table + name: Related + filters: + or: + - formula.LinksOverlap > 2 + - file.hasLink(this) + - this.file.hasLink(file) + order: + - file.name + - formula.Related + sort: + - property: formula.LinksOverlap + direction: DESC + - property: formula.TagsOverlap + direction: DESC + - property: formula.BacklinksCount + direction: DESC + limit: 20 + columnSize: + file.name: 220 diff --git a/Templates/Bases/Shows.base b/Templates/Bases/Shows.base new file mode 100644 index 0000000..7e34762 --- /dev/null +++ b/Templates/Bases/Shows.base @@ -0,0 +1,94 @@ +filters: + and: + - '!file.name.contains("Template")' + - note.categories.contains(link("Shows")) +properties: + file.name: + displayName: Name + note.last: + displayName: Last + note.rating: + displayName: Rating + note.year: + displayName: Year + note.director: + displayName: Director + note.genre: + displayName: Genre + note.cast: + displayName: Cast +views: + - type: table + name: All + order: + - file.name + - year + - rating + - last + - director + - genre + sort: + - column: note.rating + direction: DESC + - column: file.name + direction: ASC + - column: note.director + direction: ASC + - type: table + name: Favorites + filters: + and: + - note.rating > 6 + order: + - file.name + - year + - rating + - last + - director + - genre + - type: table + name: Last seen + filters: + and: + - not(empty(note.last)) + order: + - file.name + - year + - rating + - last + - director + - genre + sort: + - column: note.last + direction: DESC + limit: 20 + - type: table + name: Actor + filters: + and: + - list(cast).contains(this) + order: + - file.name + - year + - director + - genre + - type: table + name: Genre + filters: + and: + - list(genre).contains(this) + order: + - file.name + - year + - director + - genre + - type: table + name: Director + filters: + and: + - list(director).contains(this) + order: + - file.name + - year + - cast + - genre diff --git a/Templates/Bases/Tags.base b/Templates/Bases/Tags.base new file mode 100644 index 0000000..ee85b4a --- /dev/null +++ b/Templates/Bases/Tags.base @@ -0,0 +1,23 @@ +filters: + and: + - file.path.contains("Tags/") + - '!file.name.contains("标签体系索引")' + - '!file.name.contains("已整合")' +properties: + file.name: + displayName: 标签名 +views: + - type: table + name: 所有标签 + order: + - file.name + sort: + - property: file.name + direction: ASC + - type: list + name: 标签列表 + order: + - file.name + sort: + - property: file.name + direction: ASC diff --git a/Templates/Bases/Templates.base b/Templates/Bases/Templates.base new file mode 100644 index 0000000..cdf9f87 --- /dev/null +++ b/Templates/Bases/Templates.base @@ -0,0 +1,12 @@ +filters: + and: + - file.path.contains("/Templates") +views: + - type: table + name: Table + order: + - file.name + - categories + sort: [] + columnSize: + file.name: 234 diff --git a/Templates/Bases/Trips.base b/Templates/Bases/Trips.base new file mode 100644 index 0000000..6ff685c --- /dev/null +++ b/Templates/Bases/Trips.base @@ -0,0 +1,38 @@ +filters: + and: + - note.categories.contains(link("Trips")) + - '!file.name.contains("Template")' +properties: + note.start: + displayName: Start + note.end: + displayName: End + file.name: + displayName: Trip + note.loc: + displayName: Location +views: + - type: table + name: All trips + filters: + and: + - '!file.name.contains("Planning")' + order: + - file.name + - start + - end + - loc + sort: + - column: note.end + direction: DESC + columnSize: + file.name: 255 + - type: table + name: Location + filters: + and: + - list(loc).contains(this) + order: + - file.name + - start + - end diff --git a/Templates/Bases/apps.base b/Templates/Bases/apps.base new file mode 100644 index 0000000..f76b4c3 --- /dev/null +++ b/Templates/Bases/apps.base @@ -0,0 +1,12 @@ +views: + - type: list + name: 表格 + filters: + and: + - categories.contains(link("Apps")) + - file.folder != "Templates" + order: + - file.name + - tags + markers: bullet + indentProperties: false diff --git a/Templates/Bases/weread.base b/Templates/Bases/weread.base new file mode 100644 index 0000000..56c51dd --- /dev/null +++ b/Templates/Bases/weread.base @@ -0,0 +1,74 @@ +filters: + and: + - '!file.name.contains("Template")' + - doc_type == "weread-highlights-reviews" +properties: + note.author: + displayName: Author + file.name: + displayName: Name + note.year: + displayName: Year + note.genre: + displayName: Genre +views: + - type: list + name: Books + order: + - file.name + - author + - readingDate + - rating + - topics + - readingTime + - readingStatus + sort: + - property: readingStatus + direction: ASC + - property: readingDate + direction: DESC + - property: file.name + direction: DESC + - property: last + direction: ASC + - property: topics + direction: ASC + - property: year + direction: ASC + - property: length + direction: ASC + - property: author + direction: DESC + columnSize: + file.name: 334 + note.author: 134 + - type: table + name: Top rated + order: + - file.name + - rating + - last + sort: + - property: last + direction: DESC + - type: table + name: Author + filters: + and: + - list(author).contains(this) + order: + - file.name + - year + - genre + sort: + - property: genre + direction: ASC + - type: table + name: Genre + filters: + and: + - list(genre).contains(this) + order: + - file.name + - year + - genre diff --git a/Templates/Bases/人物卡.base b/Templates/Bases/人物卡.base new file mode 100644 index 0000000..478025a --- /dev/null +++ b/Templates/Bases/人物卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories.containsAny(link("人物卡"), link("People")) + - type: list + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/修炼.base b/Templates/Bases/修炼.base new file mode 100644 index 0000000..4a68273 --- /dev/null +++ b/Templates/Bases/修炼.base @@ -0,0 +1,25 @@ +filters: + and: + - categories.contains(link("修炼")) + - '!file.name.contains("Template")' +properties: + file.name: + displayName: 修炼 + note.rating: + displayName: Rating + note.last: + displayName: Last +views: + - type: list + name: Table + order: + - file.name + - rating + - last + - tags + sort: + - property: file.name + direction: DESC + markers: number + - type: table + name: 视图 diff --git a/Templates/Bases/判断卡.base b/Templates/Bases/判断卡.base new file mode 100644 index 0000000..5b7ef6f --- /dev/null +++ b/Templates/Bases/判断卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[判断卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/反常识卡.base b/Templates/Bases/反常识卡.base new file mode 100644 index 0000000..655af87 --- /dev/null +++ b/Templates/Bases/反常识卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[反常识卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/技巧卡.base b/Templates/Bases/技巧卡.base new file mode 100644 index 0000000..a01b735 --- /dev/null +++ b/Templates/Bases/技巧卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[技巧卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/摘要卡.base b/Templates/Bases/摘要卡.base new file mode 100644 index 0000000..cb9a53e --- /dev/null +++ b/Templates/Bases/摘要卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[摘要卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/方法卡.base b/Templates/Bases/方法卡.base new file mode 100644 index 0000000..6b59026 --- /dev/null +++ b/Templates/Bases/方法卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[方法卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/未命名.base b/Templates/Bases/未命名.base new file mode 100644 index 0000000..7e9e05f --- /dev/null +++ b/Templates/Bases/未命名.base @@ -0,0 +1,4 @@ +views: + - type: map + name: 表格 + center: "" diff --git a/Templates/Bases/概念卡.base b/Templates/Bases/概念卡.base new file mode 100644 index 0000000..cdffd78 --- /dev/null +++ b/Templates/Bases/概念卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[概念卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/短文卡.base b/Templates/Bases/短文卡.base new file mode 100644 index 0000000..af6d035 --- /dev/null +++ b/Templates/Bases/短文卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[短文卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/结构卡.base b/Templates/Bases/结构卡.base new file mode 100644 index 0000000..b965bc1 --- /dev/null +++ b/Templates/Bases/结构卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[结构卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/联想卡.base b/Templates/Bases/联想卡.base new file mode 100644 index 0000000..c57dbb4 --- /dev/null +++ b/Templates/Bases/联想卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[联想卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/行动卡.base b/Templates/Bases/行动卡.base new file mode 100644 index 0000000..784bb36 --- /dev/null +++ b/Templates/Bases/行动卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[行动卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/认知卡.base b/Templates/Bases/认知卡.base new file mode 100644 index 0000000..360961c --- /dev/null +++ b/Templates/Bases/认知卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[认知卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Bases/金句卡.base b/Templates/Bases/金句卡.base new file mode 100644 index 0000000..cbd95ca --- /dev/null +++ b/Templates/Bases/金句卡.base @@ -0,0 +1,17 @@ +views: + - type: table + name: 表格 + filters: + and: + - categories == ["[[金句卡]]"] + - type: table + name: 视图 + filters: + and: + - categories == ["[[概念]]"] + order: + - file.name + - tags + - file.links + columnSize: + file.name: 172 diff --git a/Templates/Board Game Template.md b/Templates/Board Game Template.md new file mode 100644 index 0000000..abf4be8 --- /dev/null +++ b/Templates/Board Game Template.md @@ -0,0 +1,13 @@ +--- +categories: + - "[[Board games]]" +type: [] +maker: +year: +last: +rating: +tags: + - board-games + - references +para: [] +--- diff --git a/Templates/Book Template.md b/Templates/Book Template.md new file mode 100644 index 0000000..1f4446c --- /dev/null +++ b/Templates/Book Template.md @@ -0,0 +1,21 @@ +--- +categories: + - "[[Books]]" +author: [] +cover: +genre: [] +pages: +isbn: +isbn13: +year: +rating: +topics: [] +created: +last: +via: "" +tags: + - books + - references + - to-read +para: [] +--- diff --git a/Templates/City Template.md b/Templates/City Template.md new file mode 100644 index 0000000..951880a --- /dev/null +++ b/Templates/City Template.md @@ -0,0 +1,39 @@ +--- +categories: + - "[[Places]]" +type: + - "[[Cities]]" +tags: + - places + - cities +loc: +rating: +created: +last: +location: + - "35.021041" + - "135.7556075" +para: + - 资源 +--- + +## Trips + +![[Trips.base#Related trips]] + +## Map + +```leaflet +id: kyoto +minZoom: 10 +maxZoom: 20 +defaultZoom: 12 +markerTag: + - places +height: 400px +coordinates: [[Kyoto]] +``` + +## Places + +![[Templates/Bases/Places.base#Location]] diff --git a/Templates/Clipping Template.md b/Templates/Clipping Template.md new file mode 100644 index 0000000..a1eec1f --- /dev/null +++ b/Templates/Clipping Template.md @@ -0,0 +1,13 @@ +--- +categories: + - "[[Clippings]]" +tags: + - clippings +author: [] +url: "" +created: +published: +topics: [] +para: [] +--- + diff --git a/Templates/Coffee Template.md b/Templates/Coffee Template.md new file mode 100644 index 0000000..b33f485 --- /dev/null +++ b/Templates/Coffee Template.md @@ -0,0 +1,15 @@ +--- +categories: + - "[[Coffee]]" +maker: +producer: +country: [] +variety: +process: +rating: +last: +tags: + - coffee + - references +para: [] +--- diff --git a/Templates/Company Template.md b/Templates/Company Template.md new file mode 100644 index 0000000..4e2fc09 --- /dev/null +++ b/Templates/Company Template.md @@ -0,0 +1,10 @@ +--- +categories: + - "[[Companies]]" +tags: + - companies +type: [] +people: [] +url: +para: [] +--- diff --git a/Templates/Conference Session Template.md b/Templates/Conference Session Template.md new file mode 100644 index 0000000..2a5f87a --- /dev/null +++ b/Templates/Conference Session Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[Conference sessions]]" +conference: +speaker: +topics: [] +last: +rating: +tags: + - conferences + - sessions + - events +para: [] +--- diff --git a/Templates/Conference Template.md b/Templates/Conference Template.md new file mode 100644 index 0000000..b206186 --- /dev/null +++ b/Templates/Conference Template.md @@ -0,0 +1,13 @@ +--- +categories: + - "[[Events]]" +type: "[[Conferences]]" +series: +start: +end: +loc: +tags: + - events + - conferences +para: [] +--- diff --git a/Templates/Contact Template.md b/Templates/Contact Template.md new file mode 100644 index 0000000..c944956 --- /dev/null +++ b/Templates/Contact Template.md @@ -0,0 +1,10 @@ +--- +categories: + - "[[People]]" +tags: + - people +phone: +twitter: +org: +para: [] +--- diff --git a/Templates/Daily Note Template.md b/Templates/Daily Note Template.md new file mode 100644 index 0000000..2eecf9b --- /dev/null +++ b/Templates/Daily Note Template.md @@ -0,0 +1,8 @@ +--- +tags: + - daily +para: [] +--- +## Notes + +![[Daily.base]] diff --git a/Templates/Director Template.md b/Templates/Director Template.md new file mode 100644 index 0000000..0b84b62 --- /dev/null +++ b/Templates/Director Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[People]]" +tags: + - people + - directors +created: +para: + - 资源 +--- + +## Movies + +![[Movies.base#Director]] diff --git a/Templates/Email Template.md b/Templates/Email Template.md new file mode 100644 index 0000000..d5b3b9f --- /dev/null +++ b/Templates/Email Template.md @@ -0,0 +1,13 @@ +--- +categories: + - "[[Emails]]" +tags: + - emails +org: [] +people: [] +url: +topics: +created: +para: + - 归档 +--- diff --git a/Templates/Event Template.md b/Templates/Event Template.md new file mode 100644 index 0000000..df54db9 --- /dev/null +++ b/Templates/Event Template.md @@ -0,0 +1,11 @@ +--- +categories: + - "[[Events]]" +tags: + - events +type: +start: +end: +loc: +para: [] +--- diff --git a/Templates/Evergreen Template.md b/Templates/Evergreen Template.md new file mode 100644 index 0000000..ed58c8e --- /dev/null +++ b/Templates/Evergreen Template.md @@ -0,0 +1,6 @@ +--- +tags: + - 0🌲 +created: +para: [] +--- diff --git a/Templates/Food Template.md b/Templates/Food Template.md new file mode 100644 index 0000000..589eca0 --- /dev/null +++ b/Templates/Food Template.md @@ -0,0 +1,13 @@ +--- +categories: + - "[[Food]]" +tags: + - food + - references +maker: +rating: +price: +last: +created: +para: [] +--- diff --git a/Templates/Game Studio Template.md b/Templates/Game Studio Template.md new file mode 100644 index 0000000..20b944b --- /dev/null +++ b/Templates/Game Studio Template.md @@ -0,0 +1,11 @@ +--- +categories: + - "[[Companies]]" +tags: + - companies +para: [] +--- + +## Games + +![[Games.base#Studio]] \ No newline at end of file diff --git a/Templates/Genre Template.md b/Templates/Genre Template.md new file mode 100644 index 0000000..eb73fd6 --- /dev/null +++ b/Templates/Genre Template.md @@ -0,0 +1,7 @@ +--- +tags: + - genres +para: [] +--- + +![[Genre.base]] diff --git a/Templates/Hosting Template.md b/Templates/Hosting Template.md new file mode 100644 index 0000000..08d7e0d --- /dev/null +++ b/Templates/Hosting Template.md @@ -0,0 +1,12 @@ +--- +categories: + - "[[Hosting]]" +start: +end: +loc: +people: [] +tags: + - hosting +para: [] +--- + diff --git a/Templates/Job Interview Template.md b/Templates/Job Interview Template.md new file mode 100644 index 0000000..59173e7 --- /dev/null +++ b/Templates/Job Interview Template.md @@ -0,0 +1,21 @@ +--- +categories: + - "[[Meetings]]" +type: + - "[[Job Interviews]]" +org: +people: [] +role: +rating: +tags: + - jobs + - meetings/job + - meetings +date: +para: + - 项目 +--- + +## Questions and topics + +## Notes diff --git a/Templates/Journal Template.md b/Templates/Journal Template.md new file mode 100644 index 0000000..9891ea9 --- /dev/null +++ b/Templates/Journal Template.md @@ -0,0 +1,7 @@ +--- +created: +tags: + - note + - journal +para: [] +--- diff --git a/Templates/Map Template.md b/Templates/Map Template.md new file mode 100644 index 0000000..417fdb1 --- /dev/null +++ b/Templates/Map Template.md @@ -0,0 +1,16 @@ +--- +tags: + - maps +para: + - 资源 +--- + +```leaflet +id: nyc +minZoom: 10 +maxZoom: 20 +defaultZoom: 12 +linksTo: [[New York]] +height: 400px +coordinates: [[New York]] +``` diff --git a/Templates/MarpTheme/university-blue.css b/Templates/MarpTheme/university-blue.css new file mode 100644 index 0000000..9c7c71d --- /dev/null +++ b/Templates/MarpTheme/university-blue.css @@ -0,0 +1,328 @@ +/* @theme university-blue */ + +/* + * 学校定制主题 —— 以经典学术蓝为基调 + * 适用于:学术报告、论文答辩、课程讲义 + * 灵感来源:favourhong/Awesome-Marp、zhaoluting/marp-themes + * + * 使用方法: + * 1. 将此文件放入 Obsidian vault 的 MarpTheme/ 目录 + * 2. 重启 Obsidian + * 3. 在幻灯片 front-matter 中写 theme: university-blue + */ + +@import 'default'; + +/* ========== 颜色变量 ========== */ +:root { + --color-primary: #003366; /* 主色:深学术蓝 */ + --color-secondary: #1a6fb5; /* 辅助色:中蓝 */ + --color-accent: #c8102e; /* 强调色:学术红 */ + --color-bg: #ffffff; /* 背景色 */ + --color-text: #2c2c2c; /* 正文色 */ + --color-light: #f0f4f8; /* 浅色背景 */ + --color-border: #d0dbe8; /* 边框色 */ + --color-muted: #6b7b8d; /* 次要文字 */ + --font-title: 'Georgia', 'Noto Serif SC', '宋体', serif; + --font-body: 'Segoe UI', 'Noto Sans SC', '微软雅黑', sans-serif; + --font-code: 'Cascadia Code', 'Fira Code', 'Consolas', monospace; +} + +/* ========== 全局 ========== */ +section { + font-family: var(--font-body); + font-size: 26px; + color: var(--color-text); + background-color: var(--color-bg); + line-height: 1.6; + padding: 40px 60px; +} + +/* ========== 标题 ========== */ +h1 { + font-family: var(--font-title); + font-size: 48px; + color: var(--color-primary); + border-bottom: 3px solid var(--color-secondary); + padding-bottom: 15px; + margin-bottom: 30px; +} + +h2 { + font-family: var(--font-title); + font-size: 36px; + color: var(--color-primary); + margin-top: 10px; +} + +h3 { + font-family: var(--font-title); + font-size: 30px; + color: var(--color-secondary); +} + +h4, h5, h6 { + font-family: var(--font-title); + color: var(--color-secondary); +} + +/* ========== 列表 ========== */ +ul, ol { + padding-left: 30px; + line-height: 1.8; +} + +ul li::marker { + color: var(--color-secondary); +} + +ol li::marker { + color: var(--color-secondary); + font-weight: bold; +} + +/* ========== 引用 ========== */ +blockquote { + border-left: 5px solid var(--color-secondary); + background-color: var(--color-light); + padding: 15px 25px; + margin: 20px 0; + border-radius: 0 8px 8px 0; + font-size: 0.9em; +} + +blockquote p { + margin: 0; +} + +/* ========== 代码 ========== */ +code { + font-family: var(--font-code); + background-color: #e8eef4; + color: var(--color-primary); + padding: 2px 6px; + border-radius: 3px; + font-size: 0.85em; +} + +pre { + background-color: #1e293b; + color: #e2e8f0; + border-radius: 8px; + padding: 25px; + font-size: 0.78em; + line-height: 1.5; + border-left: 4px solid var(--color-secondary); +} + +pre code { + background: none; + color: inherit; + padding: 0; + font-size: 1em; +} + +/* ========== 表格 ========== */ +table { + border-collapse: collapse; + margin: 20px auto; + font-size: 0.85em; +} + +th { + background-color: var(--color-primary); + color: white; + padding: 12px 20px; + text-align: center; + font-weight: bold; +} + +td { + padding: 10px 20px; + border-bottom: 1px solid var(--color-border); +} + +table tr:nth-child(even) { + background-color: var(--color-light); +} + +/* ========== 图片 ========== */ +img { + max-width: 90%; + border-radius: 6px; + margin: 10px auto; + display: block; +} + +/* ========== 链接 ========== */ +a { + color: var(--color-secondary); + text-decoration: none; + border-bottom: 1px dashed var(--color-secondary); +} + +a:hover { + color: var(--color-accent); +} + +/* ========== 强调 ========== */ +strong { + color: var(--color-primary); + font-weight: 700; +} + +/* ========== 页码 ========== */ +section::after { + font-size: 14px; + color: var(--color-muted); + content: attr(data-marpit-pagination) ' / ' attr(data-marpit-pagination-total); +} + +/* ======================================== + 特殊页面 class 指令 + ======================================== */ + +/* ---------- 封面页 ---------- */ +section.cover { + background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%); + color: white; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +section.cover h1 { + color: white; + border: none; + font-size: 52px; + padding-bottom: 0; + margin-bottom: 15px; +} + +section.cover h2 { + color: rgba(255, 255, 255, 0.9); + font-size: 28px; + font-weight: normal; +} + +section.cover h3 { + color: rgba(255, 255, 255, 0.8); + font-size: 22px; + font-weight: normal; +} + +section.cover::after { + content: none; +} + +section.cover footer { + color: rgba(255, 255, 255, 0.7); +} + +/* ---------- 过渡页 ---------- */ +section.trans { + background-color: var(--color-light); + text-align: center; + display: flex; + justify-content: center; + align-items: center; +} + +section.trans h2 { + color: var(--color-primary); + font-size: 42px; + margin: 0; +} + +/* ---------- 深色页 ---------- */ +section.dark { + background-color: var(--color-primary); + color: white; +} + +section.dark h1, section.dark h2, section.dark h3 { + color: white; + border-color: rgba(255,255,255,0.3); +} + +section.dark strong { + color: #7db8e8; +} + +section.dark code { + background-color: rgba(255,255,255,0.15); + color: #a8d4f0; +} + +section.dark blockquote { + background-color: rgba(255,255,255,0.1); + border-left-color: #7db8e8; + color: rgba(255,255,255,0.9); +} + +/* ---------- 两栏布局 ---------- */ +section.cols-2 { + overflow: visible; + display: grid; + gap: 1.5rem; + grid-template-columns: 50% 50%; + grid-template-rows: auto 1fr; + grid-template-areas: + "heading heading" + "left right"; +} + +section.cols-2 > h2, +section.cols-2 > h3 { + grid-area: heading; +} + +section.cols-2 .ldiv { grid-area: left; } +section.cols-2 .rdiv { grid-area: right; } + +/* ---------- 强调页(居中大标题) ---------- */ +section.lead { + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +section.lead h1 { + font-size: 56px; + border: none; +} + +section.lead h2 { + font-size: 40px; +} + +/* ---------- 结束页 ---------- */ +section.ending { + background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%); + color: white; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +section.ending h1 { + color: white; + border: none; + font-size: 60px; +} + +section.ending h2 { + color: rgba(255, 255, 255, 0.85); + font-weight: normal; + font-size: 26px; +} + +section.ending::after { + content: none; +} diff --git a/Templates/Meditation Template.md b/Templates/Meditation Template.md new file mode 100644 index 0000000..eb97785 --- /dev/null +++ b/Templates/Meditation Template.md @@ -0,0 +1,13 @@ +--- +categories: + - "[[Meditations]]" +tags: + - note + - journal + - meditation +loc: [] +topics: [] +created: +para: [] +--- + diff --git a/Templates/Meeting Template.md b/Templates/Meeting Template.md new file mode 100644 index 0000000..ccc949c --- /dev/null +++ b/Templates/Meeting Template.md @@ -0,0 +1,13 @@ +--- +categories: + - "[[Meetings]]" +type: [] +org: +loc: +people: [] +topics: [] +tags: + - meetings +date: +para: [] +--- diff --git a/Templates/Meeting Type Template.md b/Templates/Meeting Type Template.md new file mode 100644 index 0000000..1e36dd2 --- /dev/null +++ b/Templates/Meeting Type Template.md @@ -0,0 +1,6 @@ +--- +tags: + - meetings/type +para: [] +--- +![[Meetings.base#Type]] \ No newline at end of file diff --git a/Templates/Meetings List Template.md b/Templates/Meetings List Template.md new file mode 100644 index 0000000..e098682 --- /dev/null +++ b/Templates/Meetings List Template.md @@ -0,0 +1,7 @@ +--- +tags: + - meetings +para: [] +--- + +![[Meetings.base#Person]] diff --git a/Templates/Monthly Note Template.md b/Templates/Monthly Note Template.md new file mode 100644 index 0000000..8c0918b --- /dev/null +++ b/Templates/Monthly Note Template.md @@ -0,0 +1,12 @@ +--- +aliases: + - July 2023 +previous: "[[2023-06]]" +next: "[[2023-08]]" +tags: + - monthly +para: [] +--- +## Entries + +![[Daily.base#Monthly]] diff --git a/Templates/Movie Genre Template.md b/Templates/Movie Genre Template.md new file mode 100644 index 0000000..56313a2 --- /dev/null +++ b/Templates/Movie Genre Template.md @@ -0,0 +1,6 @@ +--- +tags: + - movies/genres +para: [] +--- +![[Movies.base#Genre]] \ No newline at end of file diff --git a/Templates/Movie Template.md b/Templates/Movie Template.md new file mode 100644 index 0000000..f852cb7 --- /dev/null +++ b/Templates/Movie Template.md @@ -0,0 +1,19 @@ +--- +categories: + - "[[Movies]]" +cover: +genre: [] +director: +cast: [] +runtime: +rating: +year: +imdbId: +via: +tags: + - movies + - references +last: +para: [] +--- + diff --git a/Templates/Music Genre Template.md b/Templates/Music Genre Template.md new file mode 100644 index 0000000..3ae1ea6 --- /dev/null +++ b/Templates/Music Genre Template.md @@ -0,0 +1,7 @@ +--- +tags: + - music/genres +para: [] +--- + +![[Albums.base#Genre]] \ No newline at end of file diff --git a/Templates/Musician Template.md b/Templates/Musician Template.md new file mode 100644 index 0000000..a2f52e6 --- /dev/null +++ b/Templates/Musician Template.md @@ -0,0 +1,11 @@ +--- +categories: "[[People]]" +tags: + - people + - musicians +created: +para: [] +--- +## Albums + +![[Albums.base#Artist]] \ No newline at end of file diff --git a/Templates/People Template.md b/Templates/People Template.md new file mode 100644 index 0000000..8aea113 --- /dev/null +++ b/Templates/People Template.md @@ -0,0 +1,13 @@ +--- +categories: + - "[[People]]" +tags: + - people +birthday: +org: [] +created: +para: [] +--- +## Meetings + +![[Meetings.base#Person]] \ No newline at end of file diff --git a/Templates/Place Template.md b/Templates/Place Template.md new file mode 100644 index 0000000..b4551ef --- /dev/null +++ b/Templates/Place Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[Places]]" +tags: + - places +type: [] +loc: [] +rating: +address: +coordinates: +icon: +color: +para: [] +--- diff --git a/Templates/Place Type Template.md b/Templates/Place Type Template.md new file mode 100644 index 0000000..9c010ce --- /dev/null +++ b/Templates/Place Type Template.md @@ -0,0 +1,18 @@ +--- +tags: + - places/types +para: [] +--- + +```leaflet +id: restaurants +linksTo: [[Pizzerias]] +minZoom: 3 +maxZoom: 20 +defaultZoom: 3 +height: 400px +``` + +## Places + +![[Templates/Bases/Places.base#Type]] \ No newline at end of file diff --git a/Templates/Podcast Episode Template.md b/Templates/Podcast Episode Template.md new file mode 100644 index 0000000..5fd1f71 --- /dev/null +++ b/Templates/Podcast Episode Template.md @@ -0,0 +1,16 @@ +--- +categories: + - "[[Podcast episodes]]" +tags: + - podcast + - episodes +show: +guests: +topics: [] +episode: +url: +rating: +published: +last: +para: [] +--- diff --git a/Templates/Podcast Template.md b/Templates/Podcast Template.md new file mode 100644 index 0000000..573bc5a --- /dev/null +++ b/Templates/Podcast Template.md @@ -0,0 +1,12 @@ +--- +categories: + - "[[Podcasts]]" +host: [] +rating: +tags: + - podcast +para: [] +--- +## Episodes + +![[Podcast episodes.base#Show]] diff --git a/Templates/Post Template.md b/Templates/Post Template.md new file mode 100644 index 0000000..9cff290 --- /dev/null +++ b/Templates/Post Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[Posts]]" +tags: + - posts +author: + - "[[Me]]" +url: +published: +topics: [] +status: +created: +para: [] +--- diff --git a/Templates/Product Template.md b/Templates/Product Template.md new file mode 100644 index 0000000..8f6eef2 --- /dev/null +++ b/Templates/Product Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[Products]]" +type: +maker: +model: +rating: +price: +monthly-uses: +tags: + - products +acquired: +para: [] +--- diff --git a/Templates/Product Type Template.md b/Templates/Product Type Template.md new file mode 100644 index 0000000..a629813 --- /dev/null +++ b/Templates/Product Type Template.md @@ -0,0 +1,6 @@ +--- +tags: + - products/types +para: [] +--- +![[Products.base]] \ No newline at end of file diff --git a/Templates/Project Template.md b/Templates/Project Template.md new file mode 100644 index 0000000..cc43ac7 --- /dev/null +++ b/Templates/Project Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[Projects]]" +type: [] +org: [] +start: +year: +tags: + - projects +url: +status: +para: [] +--- + diff --git a/Templates/Quote Template.md b/Templates/Quote Template.md new file mode 100644 index 0000000..1e4334b --- /dev/null +++ b/Templates/Quote Template.md @@ -0,0 +1,10 @@ +--- +attribution: [] +source: +tags: + - quotes +topics: [] +via: +created: +para: [] +--- diff --git a/Templates/Real Estate Template.md b/Templates/Real Estate Template.md new file mode 100644 index 0000000..2441f3d --- /dev/null +++ b/Templates/Real Estate Template.md @@ -0,0 +1,18 @@ +--- +categories: + - "[[Real estate]]" +tags: + - places +type: [] +address: +rating: +url: +year: +price: +sqft: +lotsqft: +loc: [] +status: +created: +para: [] +--- diff --git a/Templates/Recipe Template.md b/Templates/Recipe Template.md new file mode 100644 index 0000000..c8c0d61 --- /dev/null +++ b/Templates/Recipe Template.md @@ -0,0 +1,21 @@ +--- +categories: + - "[[Recipes]]" +cuisine: +type: [] +ingredients: +author: [] +url: +rating: +tags: + - recipes +created: +last: +para: [] +--- + +## Ingredients + +## Directions + +## Notes diff --git a/Templates/Restaurant Template.md b/Templates/Restaurant Template.md new file mode 100644 index 0000000..01c44c9 --- /dev/null +++ b/Templates/Restaurant Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[Places]]" +type: + - "[[Restaurants]]" +loc: +rating: +tags: + - places + - restaurants +created: +last: +para: [] +--- diff --git a/Templates/Show Episode Template.md b/Templates/Show Episode Template.md new file mode 100644 index 0000000..1583046 --- /dev/null +++ b/Templates/Show Episode Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[Show episodes]]" +show: +season: +episode: +rating: +published: +tags: + - shows + - episodes + - references +para: [] +--- diff --git a/Templates/Show Template.md b/Templates/Show Template.md new file mode 100644 index 0000000..d4e57c0 --- /dev/null +++ b/Templates/Show Template.md @@ -0,0 +1,14 @@ +--- +categories: + - "[[Shows]]" +genre: [] +year: +cast: [] +rating: +created: {{date}} +last: {{date}} +tags: + - shows + - references +para: [] +--- diff --git a/Templates/Stock Trade Template.md b/Templates/Stock Trade Template.md new file mode 100644 index 0000000..ae6f042 --- /dev/null +++ b/Templates/Stock Trade Template.md @@ -0,0 +1,10 @@ +--- +trade: +tags: + - investment + - trade +price: +shares: +date: +para: [] +--- diff --git a/Templates/Trip Template.md b/Templates/Trip Template.md new file mode 100644 index 0000000..0baddc7 --- /dev/null +++ b/Templates/Trip Template.md @@ -0,0 +1,10 @@ +--- +categories: + - "[[Trips]]" +start: +end: +loc: +tags: + - trips +para: [] +--- diff --git a/Templates/Video Game Genre Template.md b/Templates/Video Game Genre Template.md new file mode 100644 index 0000000..173c0de --- /dev/null +++ b/Templates/Video Game Genre Template.md @@ -0,0 +1,7 @@ +--- +tags: + - games/genres +para: [] +--- + +![[Games.base#Genre]] diff --git a/Templates/Video Game Template.md b/Templates/Video Game Template.md new file mode 100644 index 0000000..19fc707 --- /dev/null +++ b/Templates/Video Game Template.md @@ -0,0 +1,15 @@ +--- +categories: + - "[[Games]]" +maker: +genre: [] +year: +system: +rating: +tags: + - games + - references +created: +last: +para: [] +--- diff --git a/Templates/Wiki Page Template.md b/Templates/Wiki Page Template.md new file mode 100644 index 0000000..d5b779b --- /dev/null +++ b/Templates/Wiki Page Template.md @@ -0,0 +1,145 @@ +--- +categories: + - "[[LLM Wiki]]" +tags: + - wiki + - template +created: 2026-04-07 +type: template +--- + +# Wiki Page Template + +用于创建 LLM Wiki 页面的模板。 + +## 概念页面模板 + +```markdown +--- +categories: + - "[[LLM Wiki]]" +tags: + - wiki + - {tag1} + - {tag2} +created: {YYYY-MM-DD} +source: "[[{source-file}]]" +type: concept +aliases: + - {alias1} +--- + +# {概念名称} + +> **一句话定义**:{核心定义} + +## 定义 + +{概念的详细定义和解释} + +## 关键要点 + +- 要点 1 +- 要点 2 +- 要点 3 + +## 与其他概念的关系 + +- [[相关概念1]] — {关系说明} +- [[相关概念2]] — {关系说明} + +## 来源 + +- [[source]] — 来源描述 +``` + +## 实体页面模板 + +```markdown +--- +categories: + - "[[LLM Wiki]]" + - "[[People]]" +tags: + - wiki + - people + - {domain} +created: {YYYY-MM-DD} +source: "[[{source-file}]]" +type: entity +aliases: + - {alias} +--- + +# {人物姓名} + +{一句话简介} + +## 身份 + +| 属性 | 值 | +|------|-----| +| 领域 | {领域} | +| 知名身份 | {身份} | + +## 主要贡献 + +- 贡献 1 +- 贡献 2 + +## 与本 Wiki 相关 + +{此人与 wiki 内容的关联} + +## 来源 + +- [[source]] — 来源描述 +``` + +## 工具页面模板 + +```markdown +--- +categories: + - "[[LLM Wiki]]" +tags: + - wiki + - tool + - {category} +created: {YYYY-MM-DD} +source: "[[{source-file}]]" +type: tool +aliases: + - {alias} +--- + +# {工具名称} + +> **一句话描述** + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| 仓库 | {URL} | +| 类型 | {类型} | + +## 在 LLM Wiki 中的角色 + +{工具在 wiki 工作流中的作用} + +## 来源 + +- [[source]] — 来源描述 +``` + +## Frontmatter 规范 + +| 字段 | 必填 | 说明 | +|------|------|------| +| `categories` | ✅ | 始终包含 `[[LLM Wiki]]` | +| `tags` | ✅ | 始终包含 `wiki` | +| `created` | ✅ | ISO 日期格式 | +| `source` | ✅ | wikilink 指向 raw 来源 | +| `type` | ✅ | `concept` / `entity` / `tool` / `index` / `log` | +| `aliases` | 可选 | 替代名称列表 | diff --git a/Templates/desktop.ini b/Templates/desktop.ini new file mode 100644 index 0000000..ae128b9 --- /dev/null +++ b/Templates/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +ConfirmFileOp=0 +IconFile=C:\Users\hhhh2024\AppData\Local\SynologyDrive\SynologyDrive.app\bin\cloud-drive-ui.exe +IconIndex=3 +InfoTip=Synology Drive Client. diff --git a/Templates/修炼Template.md b/Templates/修炼Template.md new file mode 100644 index 0000000..7c5405b --- /dev/null +++ b/Templates/修炼Template.md @@ -0,0 +1,16 @@ +--- +categories: + - 修炼 +maker: +genre: [] +year: +system: +rating: +tags: + - 健康 + - 修炼 +created: +last: +para: + - 领域 +--- diff --git a/Templates/卡片模板/人物卡-模版.md b/Templates/卡片模板/人物卡-模版.md new file mode 100644 index 0000000..a1e742a --- /dev/null +++ b/Templates/卡片模板/人物卡-模版.md @@ -0,0 +1,30 @@ +--- +categories: + - "[[People]]" +tags: + - 人物卡 + - people +created: +para: + - 资源 +姓名: +出生日期: +毕业院校: +org: [] +--- + +## [[人物卡标题]] - <姓名> + +**简介**:<出生日期,出生地,毕业院校,生平等> + +**作品**: + +**成就**: + +**出处**: + +## 参考来源 + +## Meetings + +![[Meetings.base#Person]] diff --git a/Templates/卡片模板/判断卡-模版.md b/Templates/卡片模板/判断卡-模版.md new file mode 100644 index 0000000..9eb8abc --- /dev/null +++ b/Templates/卡片模板/判断卡-模版.md @@ -0,0 +1,16 @@ +--- +categories: "[[判断卡]]" +tags: + - 判断卡 +created: +para: [] +--- + +### [[主题]] : +### [[内涵]]: + +## [[判断卡标题]]: + +## 参考来源 + +**出处**: diff --git a/Templates/卡片模板/反常识卡-模版.md b/Templates/卡片模板/反常识卡-模版.md new file mode 100644 index 0000000..13d5ab3 --- /dev/null +++ b/Templates/卡片模板/反常识卡-模版.md @@ -0,0 +1,21 @@ +--- +categories: "[[反常识卡]]" +tags: + - 反常识卡 +created: +para: [] +--- + +### [[主题]]: + +### [[内涵]]: + +## [[反常识卡标题]]- + +**常识**:<认知中的常识> + +**反常识**:<需要刷新的认知> + +**启发**:<有什么启发> + +## 参考来源 diff --git a/Templates/卡片模板/技巧卡-模版.md b/Templates/卡片模板/技巧卡-模版.md new file mode 100644 index 0000000..2c98de5 --- /dev/null +++ b/Templates/卡片模板/技巧卡-模版.md @@ -0,0 +1,20 @@ +--- +categories: "[[技巧卡]]" +tags: + - 技巧卡 +created: +para: [] +--- +### [[主题]] : +### [[内涵]]: + +## [[技巧卡标题]] - + +**描述**:<描述作用> + +**步骤**: +    1.... +    2.... +    3.... + +**出处**: diff --git a/Templates/卡片模板/摘要卡-模版.md b/Templates/卡片模板/摘要卡-模版.md new file mode 100644 index 0000000..b3e0813 --- /dev/null +++ b/Templates/卡片模板/摘要卡-模版.md @@ -0,0 +1,14 @@ +--- +categories: "[[摘要卡]]" +tags: + - 摘要卡 +created: +para: [] +--- +### [[主题]] : +### [[内涵]]: + +## [[摘要卡标题]]- +**摘要**:<原文句子> + +**出处**: diff --git a/Templates/卡片模板/方法卡-模版.md b/Templates/卡片模板/方法卡-模版.md new file mode 100644 index 0000000..fda0d49 --- /dev/null +++ b/Templates/卡片模板/方法卡-模版.md @@ -0,0 +1,14 @@ +--- +categories: "[[方法卡]]" +tags: + - 方法卡 +created: +para: [] +--- +### [[主题]]: + +### [[内涵]]: + +## [[方法卡标题]]- + +## 参考来源 diff --git a/Templates/卡片模板/概念卡-模版.md b/Templates/卡片模板/概念卡-模版.md new file mode 100644 index 0000000..ca25913 --- /dev/null +++ b/Templates/卡片模板/概念卡-模版.md @@ -0,0 +1,23 @@ +--- +categories: "[[概念卡]]" +tags: + - 概念卡 +created: +para: [] +--- + +### [[主题]] : + +### [[内涵]]: + +## [[概念卡标题]]- + +**提出者**:<姓名>, <年份> + +**描述**:<具体描述或摘抄> + +**复述**:<用自己的话复述> + +**启发**:<有什么启发> + +**出处**: diff --git a/Templates/卡片模板/短文卡-模版.md b/Templates/卡片模板/短文卡-模版.md new file mode 100644 index 0000000..c09039a --- /dev/null +++ b/Templates/卡片模板/短文卡-模版.md @@ -0,0 +1,16 @@ +--- +categories: "[[短文卡]]" +tags: + - 短文卡 +created: +para: [] +--- +### [[主题]] : +### [[内涵]]: +## [[短文卡标题]]- + +**正文**: + +**出处**: + +## 参考来源 diff --git a/Templates/卡片模板/结构卡-模版.md b/Templates/卡片模板/结构卡-模版.md new file mode 100644 index 0000000..0e7203b --- /dev/null +++ b/Templates/卡片模板/结构卡-模版.md @@ -0,0 +1,29 @@ +--- +categories: "[[结构卡]]" +tags: + - 结构卡 +created: +para: [] +--- + +### [[主题]] : +### [[内涵]]: + +## [[结构卡标题]]- + +**描述**:<描述作用> + +**内容**: +    1.... +        (1) ... +            a. ... +            b. ... +            c. ... +        (2) ... +        (3) ... +    2.... +    3.... + +**出处**: + +## 参考来源 diff --git a/Templates/卡片模板/联想卡-模版.md b/Templates/卡片模板/联想卡-模版.md new file mode 100644 index 0000000..2a75bc9 --- /dev/null +++ b/Templates/卡片模板/联想卡-模版.md @@ -0,0 +1,13 @@ +--- +categories: "[[联想卡]]" +tags: + - 联想卡 +created: +para: [] +--- +### [[主题]] : +### [[内涵]]: +## [[联想卡标题]]- + +## 参考来源 + diff --git a/Templates/卡片模板/行动卡-模版.md b/Templates/卡片模板/行动卡-模版.md new file mode 100644 index 0000000..2932f74 --- /dev/null +++ b/Templates/卡片模板/行动卡-模版.md @@ -0,0 +1,15 @@ +--- +categories: "[[行动卡]]" +tags: + - 行动卡 +created: +para: [] +--- + +### [[主题]]: + +### [[内涵]]: + +## [[行动卡标题]]- + +## 参考来源 diff --git a/Templates/卡片模板/认知卡-模版.md b/Templates/卡片模板/认知卡-模版.md new file mode 100644 index 0000000..1ced52a --- /dev/null +++ b/Templates/卡片模板/认知卡-模版.md @@ -0,0 +1,14 @@ +--- +categories: "[[认知卡]]" +tags: + - 认知卡 +created: +para: [] +--- +### [[主题]] : +### [[内涵]]: + +## [[认知卡标题]]- + +## 参考来源 + diff --git a/Templates/卡片模板/金句卡-模版.md b/Templates/卡片模板/金句卡-模版.md new file mode 100644 index 0000000..cc7ac81 --- /dev/null +++ b/Templates/卡片模板/金句卡-模版.md @@ -0,0 +1,25 @@ +--- +categories: "[[金句卡]]" +tags: + - 金句卡 +created: +para: [] +--- + +### [[主题]]: + +### [[内涵]]: + +## [[金句卡标题]]- + +**原文**:<摘抄> + +**复述**:<用自己的话复述> + +**启发**:<有什么启发> + +**出处**: + +## 参考来源 + +**出处**: diff --git a/Templates/模板说明.md b/Templates/模板说明.md new file mode 100644 index 0000000..3b36055 --- /dev/null +++ b/Templates/模板说明.md @@ -0,0 +1,40 @@ +--- +created: 2025-09-16 +tags: + - note + - journal + - template + - obsidian +para: [] +--- + +我创建的几乎所有笔记都是从 模板 开始的。我大量使用模板,因为它能让我轻松地添加信息,方便我日后找到笔记。我为每个类别都准备了一个模板,并在顶部设置了 属性(properties),用于记录以下数据: + +- **日期** — `created`(创建)、`start`(开始)、`end`(结束)、`published`(发布) +- **人物** — `author`(作者)、`director`(导演)、`artist`(艺术家)、`cast`(演员表)、`host`(主持人)、`guests`(嘉宾) +- **主题** — 按流派、类型、话题、相关笔记进行分组 +- **地点** — `neighborhood`(街区)、`city`(城市)、`coordinates`(坐标) +- **评分** — 后面会详细介绍 + +我遵循以下几条属性规则: + +- 属性名和属性值应尽量**跨类别复用**。这能让我更方便地找到不同类别下的事物。比如,所有媒体类型都共享 `genre`(流派)属性,这样我就可以在一个地方看到科幻类的书籍、电影和电视剧。 +- 模板应尽量**可组合**。例如,`Person`(人物)和 `Author`(作者)是两个不同的模板,但可以同时添加到同一个笔记中。 +- **属性名要简短**,这样打字更快。例如,用 `start` 而不是 `start-date`。 +- 如果未来有可能包含多个链接或值,**默认使用 `list`(列表)类型的属性**,而不是 `text`(文本)。 + +在我的模板库中,`.obsidian/types.json` 文件会列出每个属性被指定了哪种类型(例如 `date`、`number`、`text` 等)。 + +### 评分系统 + +所有带有 `rating`(评分)属性的笔记都使用 1 到 7 的整数: + +- **7 — 完美**:必看、改变人生、不惜一切代价也要去体验。 +- **6 — 优秀**:值得反复品味。 +- **5 — 不错**:可看可不看,但体验愉悦。 +- **4 — 尚可**:急需时可以凑合。 +- **3 — 糟糕**:能避开就避开。 +- **2 — 恐怖**:需要主动规避、令人反感。 +- **1 — 邪恶**:以不好的方式改变人生。 + +为什么要用 7 分制?我发现 7 分比 4 分或 5 分更好。因为我需要更高的颗粒度来区分好的体验,而 10 分又过于细化了。