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:
2026-06-24 12:03:59 -04:00
commit f865b400fb
29 changed files with 14368 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
workspace.json
workspace-mobile.json
workspaces.json
.DS_Store

88
README.md Normal file
View 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
View 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
View File

@@ -0,0 +1,8 @@
{
"cssTheme": "Minimal",
"showRibbon": true,
"textFontFamily": "",
"translucency": true,
"interfaceFontFamily": "",
"baseFontSize": 18
}

7
community-plugins.json Normal file
View File

@@ -0,0 +1,7 @@
[
"obsidian-minimal-settings",
"obsidian-hider",
"calendar",
"multi-vault-links",
"typewriter-mode"
]

33
core-plugins.json Normal file
View 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
View 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"
}
]
}

View 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

File diff suppressed because it is too large Load Diff

View 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"
}

View 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;
});
}
};

View 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
}

View 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;
}

View 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
}

File diff suppressed because one or more lines are too long

View 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
}

View 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;
}

View 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
}

File diff suppressed because one or more lines are too long

View 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
}

View File

@@ -0,0 +1,3 @@
.setting-group > .setting-item-heading .setting-item-description {
margin-top: 4px;
}

View 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"
}
}

File diff suppressed because one or more lines are too long

View 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"
}
}

File diff suppressed because one or more lines are too long

4
templates.json Normal file
View File

@@ -0,0 +1,4 @@
{
"folder": "Templates",
"dateFormat": "YYYY.MM.DD"
}

View 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

File diff suppressed because it is too large Load Diff

8
types.json Normal file
View File

@@ -0,0 +1,8 @@
{
"types": {
"aliases": "aliases",
"cssclasses": "multitext",
"tags": "tags",
"previous": "text"
}
}