Initial global Obsidian config
Shared config extracted from obsidian-config; vault-specific files (bookmarks.json, daily-notes.json) excluded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ASYabtTgxSxJPjxPmBK9PJ
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
workspace.json
|
||||||
|
workspace-mobile.json
|
||||||
|
workspaces.json
|
||||||
|
.DS_Store
|
||||||
88
README.md
Normal file
88
README.md
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
# Obsidian config — global + per-vault fork model
|
||||||
|
|
||||||
|
Two-tier Obsidian configuration:
|
||||||
|
|
||||||
|
- **Global config** — `ssh://git@gitea.bchen.dev:2222/brendan/obsidian-global-config.git` —
|
||||||
|
shared settings (plugins, hotkeys, appearance, theme) used by **every** vault.
|
||||||
|
- **Per-vault config** (this repo, e.g. `obsidian-config`) — a *fork* of the global repo:
|
||||||
|
the global config **plus** files specific to one vault that must sync with that vault
|
||||||
|
but never be published globally.
|
||||||
|
|
||||||
|
Each vault's `.obsidian` is a git submodule pointing at that vault's per-vault repo, which
|
||||||
|
has the global repo configured as its `upstream` remote.
|
||||||
|
|
||||||
|
```
|
||||||
|
vault/.obsidian ──submodule──► obsidian-config (per-vault, downstream)
|
||||||
|
│ remote: upstream
|
||||||
|
▼
|
||||||
|
obsidian-global-config (shared, upstream)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tiers
|
||||||
|
|
||||||
|
| Tier | Examples | Lives in |
|
||||||
|
|---|---|---|
|
||||||
|
| **Global** (shared everywhere) | `app.json`, `appearance.json`, `hotkeys.json`, `templates.json`, `core-plugins.json`, `community-plugins.json`, `types.json`, `themes/**`, plugin code, most plugin `data.json` | global upstream → flows to every vault |
|
||||||
|
| **Vault-specific** (synced, never published) | `bookmarks.json`, `daily-notes.json` | per-vault repo only — never pushed upstream |
|
||||||
|
| **Machine-local** (not synced) | `workspace.json`, `workspaces.json`, `workspace-mobile.json`, `.DS_Store` | gitignored everywhere |
|
||||||
|
|
||||||
|
## Daily workflow
|
||||||
|
|
||||||
|
Run from a vault root (where `.obsidian` is the submodule).
|
||||||
|
|
||||||
|
**Change a vault-specific setting** (a bookmark, the daily-notes folder) — stays in this vault:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git -C .obsidian add -A
|
||||||
|
git -C .obsidian commit -m "..."
|
||||||
|
git -C .obsidian push
|
||||||
|
git add .obsidian && git commit -m "bump config" && git push # record the pointer
|
||||||
|
```
|
||||||
|
|
||||||
|
**Pull global changes down** — conflict-free; never touches your vault-specific files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git -C .obsidian fetch upstream
|
||||||
|
git -C .obsidian merge upstream/main
|
||||||
|
git -C .obsidian push # save merged result to this vault's repo
|
||||||
|
git add .obsidian && git commit -m "pull global config" && git push
|
||||||
|
```
|
||||||
|
|
||||||
|
**Change a global setting** — make it in a clone of the **global** repo, push there, then run
|
||||||
|
the pull-down above in each vault:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git -C /path/to/obsidian-global-config add -A
|
||||||
|
git -C /path/to/obsidian-global-config commit -m "..."
|
||||||
|
git -C /path/to/obsidian-global-config push
|
||||||
|
```
|
||||||
|
|
||||||
|
> Promoting a *global* change you happened to make **inside a vault** isn't a plain push
|
||||||
|
> (your per-vault history has vault-specific commits in the way) — cherry-pick it onto an
|
||||||
|
> `upstream`-tracking branch and push that. Editing global settings in the global clone
|
||||||
|
> avoids this entirely.
|
||||||
|
|
||||||
|
## Which files are vault-specific
|
||||||
|
|
||||||
|
The current list is `bookmarks.json` and `daily-notes.json`. To make a plugin's settings
|
||||||
|
vault-specific, add `plugins/<plugin>/data.json` to the denylist and remove it from the
|
||||||
|
global repo. The denylist is enforced by a `pre-receive` hook on the global repo, which
|
||||||
|
rejects any push that touches a vault-specific path (so a stray cherry-pick can't publish
|
||||||
|
private data). See the project notes for the hook script.
|
||||||
|
|
||||||
|
## Bootstrapping a new vault
|
||||||
|
|
||||||
|
- **Only needs the global config** → point the submodule straight at the global repo:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git submodule add ssh://git@gitea.bchen.dev:2222/brendan/obsidian-global-config.git .obsidian
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Needs its own private tracked config** → create an empty gitea repo for it, seed it from
|
||||||
|
the global repo, add it as the submodule, and set `upstream` to the global repo. (Ask to
|
||||||
|
have this scripted.)
|
||||||
|
|
||||||
|
> Do this **before opening the vault in Obsidian** — Obsidian auto-creates a default
|
||||||
|
> `.obsidian/` on first open, which blocks the submodule add. Delete it first if present.
|
||||||
|
> On first open the vault starts in **Restricted Mode** — click **Trust author and enable
|
||||||
|
> plugins** to load the configured community plugins.
|
||||||
25
app.json
Normal file
25
app.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"vimMode": false,
|
||||||
|
"showUnsupportedFiles": true,
|
||||||
|
"livePreview": true,
|
||||||
|
"showInlineTitle": false,
|
||||||
|
"mobileToolbarCommands": [
|
||||||
|
"editor:undo",
|
||||||
|
"editor:redo",
|
||||||
|
"editor:swap-line-up",
|
||||||
|
"editor:swap-line-down",
|
||||||
|
"editor:move-caret-up",
|
||||||
|
"editor:move-caret-down",
|
||||||
|
"editor:move-caret-left",
|
||||||
|
"editor:move-caret-right",
|
||||||
|
"editor:insert-wikilink",
|
||||||
|
"insert-current-date",
|
||||||
|
"editor:toggle-checklist-status",
|
||||||
|
"editor:toggle-bullet-list",
|
||||||
|
"editor:indent-list",
|
||||||
|
"editor:unindent-list",
|
||||||
|
"editor:configure-toolbar"
|
||||||
|
],
|
||||||
|
"promptDelete": true,
|
||||||
|
"alwaysUpdateLinks": true
|
||||||
|
}
|
||||||
8
appearance.json
Normal file
8
appearance.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"cssTheme": "Minimal",
|
||||||
|
"showRibbon": true,
|
||||||
|
"textFontFamily": "",
|
||||||
|
"translucency": true,
|
||||||
|
"interfaceFontFamily": "",
|
||||||
|
"baseFontSize": 18
|
||||||
|
}
|
||||||
7
community-plugins.json
Normal file
7
community-plugins.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[
|
||||||
|
"obsidian-minimal-settings",
|
||||||
|
"obsidian-hider",
|
||||||
|
"calendar",
|
||||||
|
"multi-vault-links",
|
||||||
|
"typewriter-mode"
|
||||||
|
]
|
||||||
33
core-plugins.json
Normal file
33
core-plugins.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"file-explorer": true,
|
||||||
|
"global-search": true,
|
||||||
|
"switcher": true,
|
||||||
|
"graph": true,
|
||||||
|
"backlink": true,
|
||||||
|
"canvas": false,
|
||||||
|
"outgoing-link": true,
|
||||||
|
"tag-pane": true,
|
||||||
|
"footnotes": false,
|
||||||
|
"properties": false,
|
||||||
|
"page-preview": true,
|
||||||
|
"daily-notes": true,
|
||||||
|
"templates": true,
|
||||||
|
"note-composer": false,
|
||||||
|
"command-palette": true,
|
||||||
|
"slash-command": false,
|
||||||
|
"editor-status": true,
|
||||||
|
"bookmarks": true,
|
||||||
|
"markdown-importer": false,
|
||||||
|
"zk-prefixer": false,
|
||||||
|
"random-note": false,
|
||||||
|
"outline": true,
|
||||||
|
"word-count": true,
|
||||||
|
"slides": false,
|
||||||
|
"audio-recorder": false,
|
||||||
|
"workspaces": true,
|
||||||
|
"file-recovery": true,
|
||||||
|
"publish": false,
|
||||||
|
"sync": false,
|
||||||
|
"bases": true,
|
||||||
|
"webviewer": false
|
||||||
|
}
|
||||||
374
hotkeys.json
Normal file
374
hotkeys.json
Normal file
@@ -0,0 +1,374 @@
|
|||||||
|
{
|
||||||
|
"editor:toggle-checklist-status": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:toggle-bullet-list": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "L"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:toggle-numbered-list": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "L"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:split-vertical": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "\\"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"app:delete-file": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "Backspace"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:toggle-comments": [],
|
||||||
|
"app:toggle-left-sidebar": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"app:toggle-right-sidebar": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "\\"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:swap-line-up": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "ArrowUp"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:swap-line-down": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "ArrowDown"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tag-pane:open": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "G"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outline:open": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "O"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"file-explorer:open": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "E"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:delete-paragraph": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "D"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:toggle-highlight": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "H"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:set-heading-1": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt"
|
||||||
|
],
|
||||||
|
"key": "1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:set-heading-2": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt"
|
||||||
|
],
|
||||||
|
"key": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:set-heading-3": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt"
|
||||||
|
],
|
||||||
|
"key": "3"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"daily-notes": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "D"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"daily-notes:goto-next": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "ArrowRight"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"daily-notes:goto-prev": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "ArrowLeft"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"open-with-default-app:show": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "R"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"file-explorer:move-file": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "M"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"insert-template": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "T"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bookmarks:open": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "B"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:goto-tab-1": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
"key": "1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:goto-tab-2": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
"key": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:goto-tab-3": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
"key": "3"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:goto-tab-4": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
"key": "4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:goto-tab-5": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
"key": "5"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:goto-tab-6": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
"key": "6"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:goto-tab-7": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
"key": "7"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"workspace:goto-tab-8": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
"key": "8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"app:open-another-vault": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "O"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"insert-current-date": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "9"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:insert-footnote": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"typewriter-mode:writing-focus-toggle": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "D"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:focus-left": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:focus-right": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
10
plugins/calendar/data.json
Normal file
10
plugins/calendar/data.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"shouldConfirmBeforeCreate": false,
|
||||||
|
"weekStart": "locale",
|
||||||
|
"wordsPerDot": 250,
|
||||||
|
"showWeeklyNote": true,
|
||||||
|
"weeklyNoteFormat": "[N°.]ggww",
|
||||||
|
"weeklyNoteTemplate": "Templates/Weekly plan template",
|
||||||
|
"weeklyNoteFolder": "02 Areas/Weekly",
|
||||||
|
"localeOverride": "system-default"
|
||||||
|
}
|
||||||
4459
plugins/calendar/main.js
Normal file
4459
plugins/calendar/main.js
Normal file
File diff suppressed because it is too large
Load Diff
10
plugins/calendar/manifest.json
Normal file
10
plugins/calendar/manifest.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "calendar",
|
||||||
|
"name": "Calendar",
|
||||||
|
"description": "Calendar view of your daily notes",
|
||||||
|
"version": "1.5.10",
|
||||||
|
"author": "Liam Cain",
|
||||||
|
"authorUrl": "https://github.com/liamcain/",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"minAppVersion": "0.9.11"
|
||||||
|
}
|
||||||
253
plugins/multi-vault-links-0.1.4/main.js
Normal file
253
plugins/multi-vault-links-0.1.4/main.js
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
"use strict";
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
var main_exports = {};
|
||||||
|
__export(main_exports, {
|
||||||
|
createLinkEl: () => createLinkEl,
|
||||||
|
default: () => MultiVaultLinksPlugin,
|
||||||
|
openVaultUri: () => openVaultUri
|
||||||
|
});
|
||||||
|
module.exports = __toCommonJS(main_exports);
|
||||||
|
var import_obsidian2 = require("obsidian");
|
||||||
|
|
||||||
|
// src/parse.ts
|
||||||
|
var LINK_RE = /\[\[([^\]]+?)\]\]/g;
|
||||||
|
var VAULT_RE = /^\s*([^#/|:]+?)\s*:\s*([\s\S]+)$/;
|
||||||
|
function parseInner(inner) {
|
||||||
|
const m = VAULT_RE.exec(inner);
|
||||||
|
if (!m)
|
||||||
|
return null;
|
||||||
|
const vault = m[1].trim();
|
||||||
|
let rest = m[2];
|
||||||
|
let alias = null;
|
||||||
|
const pipe = rest.indexOf("|");
|
||||||
|
if (pipe !== -1) {
|
||||||
|
alias = rest.slice(pipe + 1).trim();
|
||||||
|
rest = rest.slice(0, pipe);
|
||||||
|
}
|
||||||
|
const hash = rest.indexOf("#");
|
||||||
|
let file;
|
||||||
|
let subpath;
|
||||||
|
if (hash !== -1) {
|
||||||
|
file = rest.slice(0, hash).trim();
|
||||||
|
subpath = rest.slice(hash).trim();
|
||||||
|
} else {
|
||||||
|
file = rest.trim();
|
||||||
|
subpath = "";
|
||||||
|
}
|
||||||
|
if (!vault || !file)
|
||||||
|
return null;
|
||||||
|
const display = `${vault}: ${file}${subpath}`;
|
||||||
|
return { vault, file, subpath, alias, display };
|
||||||
|
}
|
||||||
|
function findVaultLinks(text) {
|
||||||
|
const out = [];
|
||||||
|
LINK_RE.lastIndex = 0;
|
||||||
|
let m;
|
||||||
|
while ((m = LINK_RE.exec(text)) !== null) {
|
||||||
|
const parsed = parseInner(m[1]);
|
||||||
|
if (!parsed)
|
||||||
|
continue;
|
||||||
|
out.push({
|
||||||
|
...parsed,
|
||||||
|
raw: m[0],
|
||||||
|
start: m.index,
|
||||||
|
end: m.index + m[0].length
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
function parseVaultTarget(target) {
|
||||||
|
return parseInner(target);
|
||||||
|
}
|
||||||
|
function buildObsidianUri(link) {
|
||||||
|
const vault = encodeURIComponent(link.vault);
|
||||||
|
const file = encodeURIComponent(`${link.file}${link.subpath}`);
|
||||||
|
return `obsidian://open?vault=${vault}&file=${file}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// src/livePreview.ts
|
||||||
|
var import_view = require("@codemirror/view");
|
||||||
|
var import_state = require("@codemirror/state");
|
||||||
|
var import_obsidian = require("obsidian");
|
||||||
|
var VaultLinkWidget = class extends import_view.WidgetType {
|
||||||
|
constructor(link) {
|
||||||
|
super();
|
||||||
|
this.link = link;
|
||||||
|
}
|
||||||
|
eq(other) {
|
||||||
|
return other.link.raw === this.link.raw;
|
||||||
|
}
|
||||||
|
toDOM() {
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.className = "multi-vault-link cm-multi-vault-link";
|
||||||
|
const uri = buildObsidianUri(this.link);
|
||||||
|
a.href = uri;
|
||||||
|
a.setAttribute("aria-label", `${this.link.vault} \u2192 ${this.link.file}${this.link.subpath}`);
|
||||||
|
a.textContent = this.link.display;
|
||||||
|
a.addEventListener("click", (evt) => {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
window.open(uri);
|
||||||
|
});
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
ignoreEvent() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function selectionTouches(view, from, to) {
|
||||||
|
return view.state.selection.ranges.some((r) => r.from <= to && r.to >= from);
|
||||||
|
}
|
||||||
|
function buildDecorations(view) {
|
||||||
|
const builder = new import_state.RangeSetBuilder();
|
||||||
|
const livePreview = view.state.field(import_obsidian.editorLivePreviewField);
|
||||||
|
for (const { from, to } of view.visibleRanges) {
|
||||||
|
const text = view.state.doc.sliceString(from, to);
|
||||||
|
for (const link of findVaultLinks(text)) {
|
||||||
|
const start = from + link.start;
|
||||||
|
const end = from + link.end;
|
||||||
|
if (!livePreview || selectionTouches(view, start, end)) {
|
||||||
|
builder.add(start, end, import_view.Decoration.mark({ class: "cm-multi-vault-source" }));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
builder.add(
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
import_view.Decoration.replace({ widget: new VaultLinkWidget(link) })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.finish();
|
||||||
|
}
|
||||||
|
var multiVaultLivePreview = import_view.ViewPlugin.fromClass(
|
||||||
|
class {
|
||||||
|
constructor(view) {
|
||||||
|
this.decorations = buildDecorations(view);
|
||||||
|
}
|
||||||
|
update(update) {
|
||||||
|
const modeChanged = update.startState.field(import_obsidian.editorLivePreviewField) !== update.state.field(import_obsidian.editorLivePreviewField);
|
||||||
|
if (update.docChanged || update.viewportChanged || update.selectionSet || modeChanged) {
|
||||||
|
this.decorations = buildDecorations(update.view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ decorations: (v) => v.decorations }
|
||||||
|
);
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
var SKIP_TAGS = /* @__PURE__ */ new Set(["CODE", "PRE", "A"]);
|
||||||
|
function isInsideSkipped(node) {
|
||||||
|
let el = node.parentElement;
|
||||||
|
while (el) {
|
||||||
|
if (SKIP_TAGS.has(el.tagName))
|
||||||
|
return true;
|
||||||
|
el = el.parentElement;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function openVaultUri(uri, win = window) {
|
||||||
|
win.open(uri);
|
||||||
|
}
|
||||||
|
function attachOpenHandler(a, uri) {
|
||||||
|
a.addEventListener("click", (evt) => {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
openVaultUri(uri, a.ownerDocument.defaultView ?? window);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function buildAnchor(doc, link, display) {
|
||||||
|
const a = doc.createElement("a");
|
||||||
|
a.addClass("multi-vault-link");
|
||||||
|
const uri = buildObsidianUri(link);
|
||||||
|
a.setAttribute("href", uri);
|
||||||
|
a.setAttribute("aria-label", `${link.vault} \u2192 ${link.file}${link.subpath}`);
|
||||||
|
a.textContent = display;
|
||||||
|
attachOpenHandler(a, uri);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
function createLinkEl(doc, link) {
|
||||||
|
return buildAnchor(doc, link, link.display);
|
||||||
|
}
|
||||||
|
function rewriteInternalLinks(el) {
|
||||||
|
el.querySelectorAll("a.internal-link").forEach((a) => {
|
||||||
|
const target = a.getAttribute("data-href") ?? a.getAttribute("href") ?? "";
|
||||||
|
const link = parseVaultTarget(target);
|
||||||
|
if (!link)
|
||||||
|
return;
|
||||||
|
a.replaceWith(buildAnchor(a.ownerDocument, link, link.display));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function rewriteTextNode(node) {
|
||||||
|
const text = node.nodeValue ?? "";
|
||||||
|
const links = findVaultLinks(text);
|
||||||
|
if (links.length === 0)
|
||||||
|
return;
|
||||||
|
const doc = node.ownerDocument;
|
||||||
|
const frag = doc.createDocumentFragment();
|
||||||
|
let cursor = 0;
|
||||||
|
for (const link of links) {
|
||||||
|
if (link.start > cursor) {
|
||||||
|
frag.appendChild(doc.createTextNode(text.slice(cursor, link.start)));
|
||||||
|
}
|
||||||
|
frag.appendChild(createLinkEl(doc, link));
|
||||||
|
cursor = link.end;
|
||||||
|
}
|
||||||
|
if (cursor < text.length) {
|
||||||
|
frag.appendChild(doc.createTextNode(text.slice(cursor)));
|
||||||
|
}
|
||||||
|
node.replaceWith(frag);
|
||||||
|
}
|
||||||
|
var MultiVaultLinksPlugin = class extends import_obsidian2.Plugin {
|
||||||
|
async onload() {
|
||||||
|
this.registerMarkdownPostProcessor((el) => {
|
||||||
|
rewriteInternalLinks(el);
|
||||||
|
const walker = el.ownerDocument.createTreeWalker(el, NodeFilter.SHOW_TEXT);
|
||||||
|
const targets = [];
|
||||||
|
let n;
|
||||||
|
while (n = walker.nextNode()) {
|
||||||
|
const t = n;
|
||||||
|
if (!t.nodeValue || !t.nodeValue.includes("[["))
|
||||||
|
continue;
|
||||||
|
if (isInsideSkipped(t))
|
||||||
|
continue;
|
||||||
|
targets.push(t);
|
||||||
|
}
|
||||||
|
targets.forEach(rewriteTextNode);
|
||||||
|
});
|
||||||
|
this.registerEditorExtension(multiVaultLivePreview);
|
||||||
|
this.patchOpenLinkText();
|
||||||
|
}
|
||||||
|
patchOpenLinkText() {
|
||||||
|
const ws = this.app.workspace;
|
||||||
|
const original = ws.openLinkText.bind(ws);
|
||||||
|
ws.openLinkText = (linktext, sourcePath, newLeaf, viewState) => {
|
||||||
|
const link = parseVaultTarget(linktext);
|
||||||
|
if (link) {
|
||||||
|
openVaultUri(buildObsidianUri(link));
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
return original(linktext, sourcePath, newLeaf, viewState);
|
||||||
|
};
|
||||||
|
this.register(() => {
|
||||||
|
ws.openLinkText = original;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
9
plugins/multi-vault-links-0.1.4/manifest.json
Normal file
9
plugins/multi-vault-links-0.1.4/manifest.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"id": "multi-vault-links",
|
||||||
|
"name": "Multi-Vault Links",
|
||||||
|
"version": "0.1.4",
|
||||||
|
"minAppVersion": "1.5.0",
|
||||||
|
"description": "Turn [[Vault: file]] links into clickable obsidian:// URIs that open the file in another vault.",
|
||||||
|
"author": "exedev",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
20
plugins/multi-vault-links-0.1.4/styles.css
Normal file
20
plugins/multi-vault-links-0.1.4/styles.css
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
.multi-vault-link {
|
||||||
|
color: var(--link-color, var(--text-accent));
|
||||||
|
text-decoration: var(--link-decoration, underline);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.multi-vault-link:hover {
|
||||||
|
color: var(--link-color-hover, var(--text-accent-hover));
|
||||||
|
text-decoration: var(--link-decoration-hover, underline);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When the raw [[…]] is shown (source mode, or cursor in the link in live
|
||||||
|
preview) Obsidian marks the cross-vault target "unresolved" and fades it with
|
||||||
|
--link-unresolved-opacity (~0.7). Restore full opacity and the normal link
|
||||||
|
colour so a multi-vault link never looks grayed. */
|
||||||
|
.cm-multi-vault-source .cm-hmd-internal-link,
|
||||||
|
.cm-multi-vault-source .is-unresolved {
|
||||||
|
color: var(--link-color, var(--text-accent)) !important;
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
13
plugins/obsidian-hider/data.json
Normal file
13
plugins/obsidian-hider/data.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"hideStatus": true,
|
||||||
|
"hideTabs": false,
|
||||||
|
"hideScroll": false,
|
||||||
|
"hideSidebarButtons": false,
|
||||||
|
"hideTooltips": true,
|
||||||
|
"hideFileNavButtons": false,
|
||||||
|
"hideSearchSuggestions": false,
|
||||||
|
"hideSearchCounts": false,
|
||||||
|
"hideInstructions": false,
|
||||||
|
"hidePropertiesReading": false,
|
||||||
|
"hideVault": false
|
||||||
|
}
|
||||||
8
plugins/obsidian-hider/main.js
Normal file
8
plugins/obsidian-hider/main.js
Normal file
File diff suppressed because one or more lines are too long
11
plugins/obsidian-hider/manifest.json
Normal file
11
plugins/obsidian-hider/manifest.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-hider",
|
||||||
|
"name": "Hider",
|
||||||
|
"version": "1.6.2",
|
||||||
|
"minAppVersion": "1.11.1",
|
||||||
|
"description": "Hide UI elements such as tooltips, status, titlebar and more.",
|
||||||
|
"author": "@kepano",
|
||||||
|
"authorUrl": "https://www.twitter.com/kepano",
|
||||||
|
"fundingUrl": "https://www.buymeacoffee.com/kepano",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
66
plugins/obsidian-hider/styles.css
Normal file
66
plugins/obsidian-hider/styles.css
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/* Hides vault name */
|
||||||
|
.hider-vault .workspace-sidedock-vault-profile,
|
||||||
|
body.hider-vault:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide tabs */
|
||||||
|
.hider-tabs .mod-root .workspace-tabs .workspace-tab-header-container {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hider-tabs .mod-top-left-space .view-header {
|
||||||
|
padding-left: var(--frame-left-space);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide sidebar buttons */
|
||||||
|
.hider-sidebar-buttons .sidebar-toggle-button.mod-right,
|
||||||
|
.hider-sidebar-buttons .sidebar-toggle-button.mod-left {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.hider-sidebar-buttons.mod-macos.is-hidden-frameless:not(.is-popout-window) .workspace .workspace-tabs.mod-top-right-space .workspace-tab-header-container {
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
.hider-sidebar-buttons.mod-macos {
|
||||||
|
--frame-left-space: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide meta */
|
||||||
|
.hider-meta .markdown-reading-view .metadata-container {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide scrollbars */
|
||||||
|
.hider-scroll ::-webkit-scrollbar {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide status */
|
||||||
|
.hider-status .status-bar {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide tooltips */
|
||||||
|
.hider-tooltips .tooltip {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide search suggestions */
|
||||||
|
.hider-search-suggestions .suggestion-container.mod-search-suggestion {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide search count flair */
|
||||||
|
.hider-search-counts .tree-item-flair:not(.tag-pane-tag-count) {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide instructions */
|
||||||
|
.hider-instructions .prompt-instructions {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide file nav header */
|
||||||
|
.hider-file-nav-header .workspace-leaf-content[data-type=file-explorer] .nav-header {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
33
plugins/obsidian-minimal-settings/data.json
Normal file
33
plugins/obsidian-minimal-settings/data.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"lightStyle": "minimal-light",
|
||||||
|
"darkStyle": "minimal-dark",
|
||||||
|
"lightScheme": "minimal-things-light",
|
||||||
|
"darkScheme": "minimal-things-dark",
|
||||||
|
"editorFont": "",
|
||||||
|
"lineHeight": 1.6,
|
||||||
|
"lineWidth": 40,
|
||||||
|
"lineWidthWide": 50,
|
||||||
|
"maxWidth": 88,
|
||||||
|
"textNormal": 18,
|
||||||
|
"textSmall": 13,
|
||||||
|
"imgGrid": false,
|
||||||
|
"imgWidth": "img-default-width",
|
||||||
|
"tableWidth": "table-default-width",
|
||||||
|
"iframeWidth": "iframe-default-width",
|
||||||
|
"mapWidth": "map-default-width",
|
||||||
|
"chartWidth": "chart-default-width",
|
||||||
|
"colorfulHeadings": false,
|
||||||
|
"colorfulFrame": false,
|
||||||
|
"colorfulActiveStates": false,
|
||||||
|
"trimNames": true,
|
||||||
|
"labeledNav": false,
|
||||||
|
"fullWidthMedia": true,
|
||||||
|
"bordersToggle": true,
|
||||||
|
"minimalStatus": true,
|
||||||
|
"focusMode": false,
|
||||||
|
"underlineInternal": true,
|
||||||
|
"underlineExternal": true,
|
||||||
|
"folding": true,
|
||||||
|
"lineNumbers": false,
|
||||||
|
"readableLineLength": true
|
||||||
|
}
|
||||||
8
plugins/obsidian-minimal-settings/main.js
Normal file
8
plugins/obsidian-minimal-settings/main.js
Normal file
File diff suppressed because one or more lines are too long
11
plugins/obsidian-minimal-settings/manifest.json
Normal file
11
plugins/obsidian-minimal-settings/manifest.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-minimal-settings",
|
||||||
|
"name": "Minimal Theme Settings",
|
||||||
|
"version": "8.2.3",
|
||||||
|
"minAppVersion": "1.11.1",
|
||||||
|
"description": "Change the colors, fonts and features of Minimal Theme.",
|
||||||
|
"author": "@kepano",
|
||||||
|
"authorUrl": "https://www.twitter.com/kepano",
|
||||||
|
"fundingUrl": "https://www.buymeacoffee.com/kepano",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
3
plugins/obsidian-minimal-settings/styles.css
Normal file
3
plugins/obsidian-minimal-settings/styles.css
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.setting-group > .setting-item-heading .setting-item-description {
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
69
plugins/typewriter-mode/data.json
Normal file
69
plugins/typewriter-mode/data.json
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"general": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"isAnnounceUpdatesEnabled": false,
|
||||||
|
"isPluginActivated": true,
|
||||||
|
"isOnlyActivateAfterFirstInteractionEnabled": true,
|
||||||
|
"enabledPlatforms": "desktop",
|
||||||
|
"enabledFilePaths": [],
|
||||||
|
"disabledFilePaths": []
|
||||||
|
},
|
||||||
|
"typewriter": {
|
||||||
|
"isTypewriterScrollEnabled": true,
|
||||||
|
"isOnlyMaintainTypewriterOffsetWhenReachedEnabled": true,
|
||||||
|
"isTypewriterOnlyUseCommandsEnabled": false,
|
||||||
|
"typewriterOffset": 0.5
|
||||||
|
},
|
||||||
|
"keepLinesAboveAndBelow": {
|
||||||
|
"isKeepLinesAboveAndBelowEnabled": false,
|
||||||
|
"linesAboveAndBelow": 5
|
||||||
|
},
|
||||||
|
"maxChars": {
|
||||||
|
"isMaxCharsPerLineEnabled": false,
|
||||||
|
"maxCharsPerLine": 64
|
||||||
|
},
|
||||||
|
"dimming": {
|
||||||
|
"isDimUnfocusedEnabled": true,
|
||||||
|
"isDimUnfocusedOnlyInWritingFocusModeEnabled": true,
|
||||||
|
"isDimHighlightListParentEnabled": false,
|
||||||
|
"isDimTableAsOneEnabled": true,
|
||||||
|
"dimUnfocusedMode": "sentences",
|
||||||
|
"dimUnfocusedEditorsBehavior": "dim",
|
||||||
|
"dimmedOpacity": 0.35,
|
||||||
|
"isPauseDimUnfocusedWhileScrollingEnabled": true,
|
||||||
|
"isPauseDimUnfocusedWhileSelectingEnabled": true
|
||||||
|
},
|
||||||
|
"currentLine": {
|
||||||
|
"isHighlightCurrentLineEnabled": false,
|
||||||
|
"isHighlightCurrentLineOnlyInWritingFocusModeEnabled": false,
|
||||||
|
"isFadeLinesEnabled": false,
|
||||||
|
"isFadeLinesOnlyInWritingFocusModeEnabled": false,
|
||||||
|
"fadeLinesIntensity": 0.25,
|
||||||
|
"isHighlightCurrentLineOnlyInFocusedEditorEnabled": false,
|
||||||
|
"isPauseCurrentLineHighlightWhileScrollingEnabled": true,
|
||||||
|
"isPauseCurrentLineHighlightWhileSelectingEnabled": false,
|
||||||
|
"currentLineHighlightStyle": "box",
|
||||||
|
"currentLineHighlightUnderlineThickness": 1,
|
||||||
|
"currentLineHighlightColor-dark": "#444444",
|
||||||
|
"currentLineHighlightColor-light": "#dddddd"
|
||||||
|
},
|
||||||
|
"writingFocus": {
|
||||||
|
"doesWritingFocusShowHeader": true,
|
||||||
|
"doesWritingFocusShowVignette": false,
|
||||||
|
"doesWritingFocusShowStatusBar": false,
|
||||||
|
"isWritingFocusFullscreen": true,
|
||||||
|
"writingFocusVignetteStyle": "box",
|
||||||
|
"writingFocusFontSize": 0
|
||||||
|
},
|
||||||
|
"restoreCursorPosition": {
|
||||||
|
"isRestoreCursorPositionEnabled": false,
|
||||||
|
"cursorPositions": {}
|
||||||
|
},
|
||||||
|
"hemingwayMode": {
|
||||||
|
"isHemingwayModeEnabled": false,
|
||||||
|
"isHemingwayModeOnlyInWritingFocusModeEnabled": false,
|
||||||
|
"isAllowBackspaceInHemingwayModeEnabled": false,
|
||||||
|
"isShowHemingwayModeStatusBarEnabled": true,
|
||||||
|
"hemingwayModeStatusBarText": "Hemingway"
|
||||||
|
}
|
||||||
|
}
|
||||||
18
plugins/typewriter-mode/main.js
Normal file
18
plugins/typewriter-mode/main.js
Normal file
File diff suppressed because one or more lines are too long
14
plugins/typewriter-mode/manifest.json
Normal file
14
plugins/typewriter-mode/manifest.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"id": "typewriter-mode",
|
||||||
|
"name": "Typewriter Mode",
|
||||||
|
"author": "Davis Riedel",
|
||||||
|
"authorUrl": "https://davis-riedel.de/en/software",
|
||||||
|
"description": "Typewriter scroll, highlight current line, dim unfocused paragraphs and sentences, writing focus, restore cursor position and more.",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"version": "1.5.0",
|
||||||
|
"minAppVersion": "1.11.0",
|
||||||
|
"fundingUrl": {
|
||||||
|
"Buy Me a Coffee": "https://www.buymeacoffee.com/davis.riedel",
|
||||||
|
"GitHub Sponsors": "https://github.com/sponsors/davisriedel"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
plugins/typewriter-mode/styles.css
Normal file
1
plugins/typewriter-mode/styles.css
Normal file
File diff suppressed because one or more lines are too long
4
templates.json
Normal file
4
templates.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"folder": "Templates",
|
||||||
|
"dateFormat": "YYYY.MM.DD"
|
||||||
|
}
|
||||||
8
themes/Minimal/manifest.json
Normal file
8
themes/Minimal/manifest.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"name": "Minimal",
|
||||||
|
"version": "8.2.1",
|
||||||
|
"minAppVersion": "1.9.0",
|
||||||
|
"author": "@kepano",
|
||||||
|
"authorUrl": "https://twitter.com/kepano",
|
||||||
|
"fundingUrl": "https://www.buymeacoffee.com/kepano"
|
||||||
|
}
|
||||||
8793
themes/Minimal/theme.css
Normal file
8793
themes/Minimal/theme.css
Normal file
File diff suppressed because it is too large
Load Diff
8
types.json
Normal file
8
types.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"types": {
|
||||||
|
"aliases": "aliases",
|
||||||
|
"cssclasses": "multitext",
|
||||||
|
"tags": "tags",
|
||||||
|
"previous": "text"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user