vault update: plugins, templates

This commit is contained in:
2026-05-14 15:05:15 +10:00
parent 0def72ea4e
commit 5c71c6b4ac
42 changed files with 32142 additions and 28 deletions

5
.obsidian/app.json vendored
View File

@@ -1 +1,4 @@
{}
{
"newFileLocation": "folder",
"newFileFolderPath": "100 inbox"
}

8
.obsidian/community-plugins.json vendored Normal file
View File

@@ -0,0 +1,8 @@
[
"github-sync",
"obsidian-relative-line-numbers",
"calendar",
"dataview",
"obsidian-tasks-plugin",
"templater-obsidian"
]

3
.obsidian/daily-notes.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"folder": "000 daily"
}

10
.obsidian/plugins/calendar/data.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
"shouldConfirmBeforeCreate": true,
"weekStart": "locale",
"wordsPerDot": 250,
"showWeeklyNote": false,
"weeklyNoteFormat": "",
"weeklyNoteTemplate": "",
"weeklyNoteFolder": "",
"localeOverride": "system-default"
}

4459
.obsidian/plugins/calendar/main.js vendored 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"
}

20876
.obsidian/plugins/dataview/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,11 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.68",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",
"authorUrl": "https://github.com/blacksmithgu",
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
"isDesktopOnly": false
}

141
.obsidian/plugins/dataview/styles.css vendored Normal file
View File

@@ -0,0 +1,141 @@
.block-language-dataview {
overflow-y: auto;
}
/*****************/
/** Table Views **/
/*****************/
/* List View Default Styling; rendered internally as a table. */
.table-view-table {
width: 100%;
}
.table-view-table > thead > tr, .table-view-table > tbody > tr {
margin-top: 1em;
margin-bottom: 1em;
text-align: left;
}
.table-view-table > tbody > tr:hover {
background-color: var(--table-row-background-hover);
}
.table-view-table > thead > tr > th {
font-weight: 700;
font-size: larger;
border-top: none;
border-left: none;
border-right: none;
border-bottom: solid;
max-width: 100%;
}
.table-view-table > tbody > tr > td {
text-align: left;
border: none;
font-weight: 400;
max-width: 100%;
}
.table-view-table ul, .table-view-table ol {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Rendered value styling for any view. */
.dataview-result-list-root-ul {
padding: 0em !important;
margin: 0em !important;
}
.dataview-result-list-ul {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Generic grouping styling. */
.dataview.result-group {
padding-left: 8px;
}
/*******************/
/** Inline Fields **/
/*******************/
.dataview.inline-field-key {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-primary-alt);
color: var(--nav-item-color-selected);
}
.dataview.inline-field-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--nav-item-color-selected);
}
.dataview.inline-field-standalone-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--nav-item-color-selected);
}
/***************/
/** Task View **/
/***************/
.dataview.task-list-item, .dataview.task-list-basic-item {
margin-top: 3px;
margin-bottom: 3px;
transition: 0.4s;
}
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
background-color: var(--text-selection);
box-shadow: -40px 0 0 var(--text-selection);
cursor: pointer;
}
/*****************/
/** Error Views **/
/*****************/
div.dataview-error-box {
width: 100%;
min-height: 150px;
display: flex;
align-items: center;
justify-content: center;
border: 4px dashed var(--background-secondary);
}
.dataview-error-message {
color: var(--text-muted);
text-align: center;
}
/*************************/
/** Additional Metadata **/
/*************************/
.dataview.small-text {
font-size: smaller;
color: var(--text-muted);
margin-left: 3px;
}
.dataview.small-text::before {
content: "(";
}
.dataview.small-text::after {
content: ")";
}

View File

@@ -0,0 +1,9 @@
{
"remoteURL": "ssh://git@gitea.lab.audasmedia.com.au:2222/sam/obsidian-vault.git",
"gitLocation": "",
"syncinterval": 15,
"isSyncOnLoad": true,
"checkStatusOnLoad": true,
"noticeLevel": "ALL",
"showSyncSuccessNotice": true
}

4907
.obsidian/plugins/github-sync/main.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,10 @@
{
"id": "github-sync",
"name": "GitHub Sync",
"version": "1.0.7",
"minAppVersion": "0.15.0",
"description": "Sync vault to personal GitHub.",
"author": "Kevin Chin",
"authorUrl": "https://kevin.gd/",
"isDesktopOnly": true
}

View File

@@ -0,0 +1,42 @@
/*
This CSS file will be included with your plugin, and
available in the app when your plugin is enabled.
If your plugin does not need CSS, delete this file.
*/
.gh-sync-ribbon
{
order: 100;
}
.gh-sync-status
{
order: -1;
}
.howto {
border: 1px solid var(--background-modifier-border);
padding: 10px;
}
.howto_title {
font-weight: 600;
}
.howto_text {
color: var(--text-muted);
font-size: smaller;
}
.my-plugin-setting-text {
width: 30em;
}
.my-plugin-setting-text2 {
width: 30em;
}

View File

@@ -0,0 +1,194 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
__markAsModule(target);
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && key !== "default")
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
}
return target;
};
var __toModule = (module2) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// main.ts
__export(exports, {
default: () => RelativeLineNumbers
});
var import_obsidian = __toModule(require("obsidian"));
// extension.ts
var import_view = __toModule(require("@codemirror/view"));
var import_state = __toModule(require("@codemirror/state"));
var import_language = __toModule(require("@codemirror/language"));
var relativeLineNumberGutter = new import_state.Compartment();
var Marker = class extends import_view.GutterMarker {
constructor(text) {
super();
this.text = text;
this.elementClass = "relative-line-numbers-mono";
}
toDOM() {
return document.createTextNode(this.text);
}
};
function linesCharLength(state) {
return state.doc.lines.toString().length;
}
var absoluteLineNumberGutter = (0, import_view.gutter)({
lineMarker: (view, line) => {
const lineNo = view.state.doc.lineAt(line.from).number;
const charLength = linesCharLength(view.state);
const absoluteLineNo = new Marker(lineNo.toString().padStart(charLength, " "));
const cursorLine = view.state.doc.lineAt(view.state.selection.asSingle().ranges[0].to).number;
if (lineNo === cursorLine) {
return absoluteLineNo;
}
return null;
},
initialSpacer: (view) => {
const spacer = new Marker("0".repeat(linesCharLength(view.state)));
return spacer;
}
});
function relativeLineNumbers(lineNo, state) {
const charLength = linesCharLength(state);
const blank = " ".padStart(charLength, " ");
if (lineNo > state.doc.lines) {
return blank;
}
const cursorLine = state.doc.lineAt(state.selection.asSingle().ranges[0].to).number;
const start = Math.min(state.doc.line(lineNo).from, state.selection.asSingle().ranges[0].to);
const stop = Math.max(state.doc.line(lineNo).from, state.selection.asSingle().ranges[0].to);
const folds = (0, import_language.foldedRanges)(state);
let foldedCount = 0;
folds.between(start, stop, (from, to) => {
let rangeStart = state.doc.lineAt(from).number;
let rangeStop = state.doc.lineAt(to).number;
foldedCount += rangeStop - rangeStart;
});
if (lineNo === cursorLine) {
return blank;
} else {
return (Math.abs(cursorLine - lineNo) - foldedCount).toString().padStart(charLength, " ");
}
}
var showLineNumbers = relativeLineNumberGutter.of((0, import_view.lineNumbers)({ formatNumber: relativeLineNumbers }));
var lineNumbersUpdateListener = import_view.EditorView.updateListener.of((viewUpdate) => {
if (viewUpdate.selectionSet) {
viewUpdate.view.dispatch({
effects: relativeLineNumberGutter.reconfigure((0, import_view.lineNumbers)({ formatNumber: relativeLineNumbers }))
});
}
});
function lineNumbersRelative() {
return [absoluteLineNumberGutter, showLineNumbers, lineNumbersUpdateListener];
}
// main.ts
var RelativeLineNumbers = class extends import_obsidian.Plugin {
isLegacy() {
var _a;
return (_a = this.app.vault.config) == null ? void 0 : _a.legacyEditor;
}
onload() {
return __async(this, null, function* () {
const showLineNumber = this.app.vault.getConfig("showLineNumber");
if (showLineNumber) {
this.enable();
}
this.setupConfigChangeListener();
});
}
onunload() {
this.disable();
}
enable() {
this.enabled = true;
if (this.isLegacy()) {
this.legacyEnable();
} else {
this.registerEditorExtension(lineNumbersRelative());
}
}
disable() {
this.enabled = false;
if (this.isLegacy) {
this.legacyDisable();
}
}
legacyEnable() {
this.registerCodeMirror((cm) => {
cm.on("cursorActivity", this.legacyRelativeLineNumbers);
});
}
legacyDisable() {
this.app.workspace.iterateCodeMirrors((cm) => {
cm.off("cursorActivity", this.legacyRelativeLineNumbers);
cm.setOption("lineNumberFormatter", CodeMirror.defaults["lineNumberFormatter"]);
});
}
setupConfigChangeListener() {
const configChangedEvent = this.app.vault.on("config-changed", () => {
const showLineNumber = this.app.vault.getConfig("showLineNumber");
if (showLineNumber && !this.enabled) {
this.enable();
} else if (!showLineNumber && this.enabled) {
this.disable();
}
});
configChangedEvent.ctx = this;
this.registerEvent(configChangedEvent);
}
legacyRelativeLineNumbers(cm) {
const current = cm.getCursor().line + 1;
if (cm.state.curLineNum === current) {
return;
}
cm.state.curLineNum = current;
cm.setOption("lineNumberFormatter", (line) => {
if (line === current) {
return String(current);
}
return String(Math.abs(current - line));
});
}
};
/* nosourcemap */

View File

@@ -0,0 +1,10 @@
{
"id": "obsidian-relative-line-numbers",
"name": "Relative Line Numbers",
"version": "3.0.0",
"minAppVersion": "1.4.16",
"description": "Enables relative line numbers in editor mode",
"author": "Nadav Spiegelman",
"authorUrl": "https://nadav.is",
"isDesktopOnly": false
}

View File

@@ -0,0 +1,10 @@
.relative-line-numbers-mono {
font-family: monospace;
white-space: pre;
}
.cm-lineNumbers {
font-family: monospace;
white-space: pre;
min-width: 25px; /* prevent relative line numbers from shifting on files with ~10-20 lines */
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,12 @@
{
"id": "obsidian-tasks-plugin",
"name": "Tasks",
"version": "8.0.0",
"minAppVersion": "1.8.7",
"description": "Track tasks across your vault. Supports due dates, recurring tasks, done dates, sub-set of checklist items, and filtering.",
"helpUrl": "https://publish.obsidian.md/tasks/",
"author": "Clare Macrae and Ilyas Landikov (created by Martin Schenck)",
"authorUrl": "https://github.com/obsidian-tasks-group",
"fundingUrl": "https://github.com/sponsors/claremacrae",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,47 @@
{
"command_timeout": 5,
"templates_folder": "",
"templates_pairs": [
[
"",
""
]
],
"trigger_on_file_creation": true,
"auto_jump_to_cursor": false,
"enable_system_commands": false,
"shell_path": "",
"user_scripts_folder": "",
"enable_folder_templates": true,
"folder_templates": [
{
"folder": "200 projects",
"template": "templates/tmpl_project.md"
},
{
"folder": "400 resources/430 Movies Books Plays Games",
"template": "templates/tmpl_media_resource.md"
},
{
"folder": "400 resources/440 Code Cheats Snips CLI",
"template": "templates/tmpl_technical_snippet.md"
}
],
"enable_file_templates": false,
"file_templates": [
{
"regex": ".*",
"template": ""
}
],
"syntax_highlighting": true,
"syntax_highlighting_mobile": false,
"enabled_templates_hotkeys": [
""
],
"startup_templates": [
""
],
"intellisense_render": 1,
"ignore_folders_on_creation": []
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,17 @@
{
"id": "templater-obsidian",
"name": "Templater",
"version": "2.20.4",
"description": "Advanced templating and automation using handlebars-like syntax.",
"minAppVersion": "1.12.2",
"author": "SilentVoid",
"authorUrl": "https://github.com/SilentVoid13",
"fundingUrl": {
"GitHub Sponser (Zachatoo, maintainer)": "https://github.com/sponsors/Zachatoo",
"Ko-fi (Zachatoo, maintainer)": "https://ko-fi.com/zachatoo",
"GitHub Sponser (SilentVoid13, creator)": "https://github.com/sponsors/SilentVoid13",
"Paypal (SilentVoid13, creator)": "https://www.paypal.com/donate?hosted_button_id=U2SRGAFYXT32Q"
},
"helpUrl": "https://silentvoid13.github.io/Templater/",
"isDesktopOnly": false
}

View File

@@ -0,0 +1,226 @@
.templater_search {
width: calc(100% - 20px);
}
.templater_div {
border-top: 1px solid var(--background-modifier-border);
}
.templater_div > .setting-item {
border-top: none !important;
align-self: center;
}
.templater_div > .setting-item > .setting-item-control {
justify-content: space-around;
padding: 0;
width: 100%;
}
.templater_div
> .setting-item
> .setting-item-control
> .setting-editor-extra-setting-button {
align-self: center;
}
.templater_donating {
margin: 10px;
}
.templater_title {
margin: 0;
padding: 0;
margin-top: 5px;
text-align: center;
}
.templater_template {
align-self: center;
margin-left: 5px;
margin-right: 5px;
width: 70%;
}
.templater_cmd {
margin-left: 5px;
margin-right: 5px;
font-size: 14px;
width: 100%;
}
.templater_div2 > .setting-item {
align-content: center;
justify-content: center;
}
.templater-prompt-div,
.templater-multisuggester-div {
display: flex;
}
.templater-prompt-form {
display: flex;
flex-grow: 1;
}
.templater-prompt-input,
.templater-multisuggester-input {
flex-grow: 1;
}
.templater-button-div {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 1rem;
}
textarea.templater-prompt-input {
height: 10rem;
}
textarea.templater-prompt-input:focus {
border-color: var(--interactive-accent);
}
.templater-multisuggester-list {
margin: 1.5em 0;
}
.cm-s-obsidian .templater-command-bg {
left: 0px;
right: 0px;
background-color: var(--background-primary-alt);
}
.cm-s-obsidian .cm-templater-command {
font-size: 0.85em;
font-family: var(--font-monospace);
line-height: 1.3;
}
.cm-s-obsidian .templater-inline .cm-templater-command {
background-color: var(--background-primary-alt);
}
.cm-s-obsidian .cm-templater-command.cm-templater-opening-tag {
font-weight: bold;
}
.cm-s-obsidian .cm-templater-command.cm-templater-closing-tag {
font-weight: bold;
}
.cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag {
color: var(--code-property, #008bff);
}
.cm-s-obsidian .cm-templater-command.cm-templater-execution-tag {
color: var(--code-function, #c0d700);
}
.cm-s-obsidian .cm-templater-command.cm-keyword {
color: var(--code-keyword, #00a7aa);
font-weight: normal;
}
.cm-s-obsidian .cm-templater-command.cm-atom {
color: var(--code-normal, #f39b35);
}
.cm-s-obsidian .cm-templater-command.cm-value,
.cm-s-obsidian .cm-templater-command.cm-number,
.cm-s-obsidian .cm-templater-command.cm-type {
color: var(--code-value, #a06fca);
}
.cm-s-obsidian .cm-templater-command.cm-def,
.cm-s-obsidian .cm-templater-command.cm-type.cm-def {
color: var(--code-normal, var(--text-normal));
}
.cm-s-obsidian .cm-templater-command.cm-property,
.cm-s-obsidian .cm-templater-command.cm-property.cm-def,
.cm-s-obsidian .cm-templater-command.cm-attribute {
color: var(--code-function, #98e342);
}
.cm-s-obsidian .cm-templater-command.cm-variable,
.cm-s-obsidian .cm-templater-command.cm-variable-2,
.cm-s-obsidian .cm-templater-command.cm-variable-3,
.cm-s-obsidian .cm-templater-command.cm-meta {
color: var(--code-property, #d4d4d4);
}
.cm-s-obsidian .cm-templater-command.cm-callee,
.cm-s-obsidian .cm-templater-command.cm-operator,
.cm-s-obsidian .cm-templater-command.cm-qualifier,
.cm-s-obsidian .cm-templater-command.cm-builtin {
color: var(--code-operator, #fc4384);
}
.cm-s-obsidian .cm-templater-command.cm-tag {
color: var(--code-tag, #fc4384);
}
.cm-s-obsidian .cm-templater-command.cm-comment,
.cm-s-obsidian .cm-templater-command.cm-comment.cm-tag,
.cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute {
color: var(--code-comment, #696d70);
}
.cm-s-obsidian .cm-templater-command.cm-string,
.cm-s-obsidian .cm-templater-command.cm-string-2 {
color: var(--code-string, #e6db74);
}
.cm-s-obsidian .cm-templater-command.cm-header,
.cm-s-obsidian .cm-templater-command.cm-hr {
color: var(--code-keyword, #da7dae);
}
.cm-s-obsidian .cm-templater-command.cm-link {
color: var(--code-normal, #696d70);
}
.cm-s-obsidian .cm-templater-command.cm-error {
border-bottom: 1px solid #c42412;
}
.CodeMirror-hints {
position: absolute;
z-index: 10;
overflow: hidden;
list-style: none;
margin: 0;
padding: 2px;
-webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
border-radius: 3px;
border: 1px solid silver;
background: white;
font-size: 90%;
font-family: monospace;
max-height: 20em;
overflow-y: auto;
}
.CodeMirror-hint {
margin: 0;
padding: 0 4px;
border-radius: 2px;
white-space: pre;
color: black;
cursor: pointer;
}
li.CodeMirror-hint-active {
background: #0088ff;
color: white;
}

4
.obsidian/templates.json vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"dateFormat": "",
"folder": "templates"
}

29
.obsidian/types.json vendored Normal file
View File

@@ -0,0 +1,29 @@
{
"types": {
"aliases": "aliases",
"cssclasses": "multitext",
"tags": "tags",
"TQ_explain": "checkbox",
"TQ_extra_instructions": "text",
"TQ_short_mode": "checkbox",
"TQ_show_backlink": "checkbox",
"TQ_show_cancelled_date": "checkbox",
"TQ_show_created_date": "checkbox",
"TQ_show_depends_on": "checkbox",
"TQ_show_done_date": "checkbox",
"TQ_show_due_date": "checkbox",
"TQ_show_edit_button": "checkbox",
"TQ_show_id": "checkbox",
"TQ_show_on_completion": "checkbox",
"TQ_show_postpone_button": "checkbox",
"TQ_show_priority": "checkbox",
"TQ_show_recurrence_rule": "checkbox",
"TQ_show_scheduled_date": "checkbox",
"TQ_show_start_date": "checkbox",
"TQ_show_tags": "checkbox",
"TQ_show_task_count": "checkbox",
"TQ_show_toolbar": "checkbox",
"TQ_show_tree": "checkbox",
"TQ_show_urgency": "checkbox"
}
}

View File

@@ -4,37 +4,17 @@
"type": "split",
"children": [
{
"id": "dba263b736568647",
"id": "6b42b5d4f561ec35",
"type": "tabs",
"children": [
{
"id": "99df94e060edf9e7",
"id": "845a8e3995ad4a8a",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Welcome.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Welcome"
}
}
]
},
{
"id": "3fb56e3c03982ab2",
"type": "tabs",
"children": [
{
"id": "773f6d58eed0c476",
"type": "leaf",
"state": {
"type": "graph",
"type": "empty",
"state": {},
"icon": "lucide-git-fork",
"title": "Graph view"
"icon": "lucide-file",
"title": "New tab"
}
}
]
@@ -180,6 +160,16 @@
"icon": "lucide-list",
"title": "Outline of Welcome"
}
},
{
"id": "6348f0a2c94b227a",
"type": "leaf",
"state": {
"type": "calendar",
"state": {},
"icon": "calendar-with-checkmark",
"title": "Calendar"
}
}
]
}
@@ -196,11 +186,39 @@
"daily-notes:Open today's daily note": false,
"templates:Insert template": false,
"command-palette:Open command palette": false,
"bases:Create new base": false
"bases:Create new base": false,
"github-sync:Sync with Remote": false,
"templater-obsidian:Templater": false
}
},
"active": "99df94e060edf9e7",
"active": "845a8e3995ad4a8a",
"lastOpenFiles": [
"daily",
"inbox",
"templates/tmpl_media_resource.md",
"templates/tmpl_technical_snippet.md",
"Untitled.canvas",
"templates/tmpl_project.md",
"templates/tmpl_generic_note.md",
"100 inbox/1778533395-ZAPX.md",
"100 inbox/1778535439-NWLI.md",
"100 inbox/1778545221-MOBT.md",
"100 inbox/1778553013-ARYX.md",
"100 inbox/1778553155-TGHR.md",
"100 inbox/1778553635-RFCE.md",
"100 inbox/1778493481-VJZL.md",
"400 resources/460 Family Archive",
"400 resources/450 Recipes",
"400 resources/440 Code Cheats Snips CLI",
"200 projects/260 Build Create Make",
"200 projects/250 IOT",
"200 projects/240 Web Sites",
"300 areas/395 Food",
"200 projects/230 Display Screen",
"300 areas/390 Dev Ops Computers.md",
"300 areas/350 AI.md",
"templates/ai_dev_ops.md",
"Pi_config_ideas.md",
"Welcome.md"
]
}

0
.trash/350 AI.md Normal file
View File

View File

View File

0
.trash/Untitled.canvas Normal file
View File

View File

@@ -0,0 +1,37 @@
---
title: pi_setup
summary: Research, ideas, suggestions for setting up pi
type: Note
client:
{client}:
project: AI
status: active
priority: 3
last_verified: 2026-05-11
tags:
- AI Pi
aliases: []
id: 1778493481-VJZL
---
# pi_setup
## 🏗 System Architecture
- **Software/Stack:** pi
- **Components:** {{components}}
- **Hardware/IOT:** {{hardware_specs}}
## 🎯 Objective
[What problem does this note solve for Graphify?]
## 📝 Technical Implementation
- **Runtime:** {{runtime}}
- **Environment:** [e.g. Production, Staging, Edge]
## 🖇️ Context & Connections
- **Upstream:** [[Parent Component]]
- **Downstream:** [[Dependent Services]]
- **Related:** https://github.com/amosblomqvist/pi-config https://www.youtube.com/watch?v=DWWrLlM3gwQ
---
*Created: 2026-05-11*

View File

@@ -0,0 +1,113 @@
---
title: Web Pages
summary: Active web sites and pages for things that need doing or I am working on.
type: websites
client: Sam
project: AI
status: active
priority: 5
last_verified: 2026-05-12
tags:
- AI Resource Website
aliases: []
id: 1778533395-ZAPX
---
# Notes
- [] Use DataView Plug in to create data table of all notes with bookmark tags etc.
- [] Intall Bookmarks Plugin so I can pin all notes with #website
- [] Install Open Link With to select a browser etc
- [] Use [Link name - browser](http://url) for links. Or just the url.
# TODO
- [] OpenCode Go subscription - https://checkout.stripe.com/c/pay/cs_live_b1Tyblb7VV4ZZnSdz3K3cYdwx9pswHyB2wq0XUfwR1i9hxi7b7ULnI5h6E#fidnandhYHdWcXxpYCc%2FJ2FgY2RwaXEnKSdicGRmZGhqaWBTZHdsZGtxJz8nZmprcXdqaScpJ2R1bE5gfCc%2FJ3VuWmlsc2BaMDRXdn9HTTdWcXBXdzVpZ11uSkZBcEAyNjRJbXx1d1dEbkxNYWh%2FfzB3cFA9QVUzf11kPU10fEdGSFRtSU9%2FVl1cU301NmNqS3wzNH1hcGx0Nm48SzdJVjw1NWhLMGhxTmI9JyknY3dqaFZgd3Ngdyc%2FcXdwYCknZ2RmbmJ3anBrYUZqaWp3Jz8nJjU1NTU1NScpJ2lkfGpwcVF8dWAnPydocGlxbFpscWBoJyknYGtkZ2lgVWlkZmBtamlhYHd2Jz9xd3BgeCUl
- [] Linear - alternative to JIRA. TODOs for development which could be looked at to integrate with an agent.
- []
# Web Pages
## Galagher
url: https://careers.gallagher.com/connect
tags: #bookmark #resource #website
- Job with company that makes farm products
## Galagher
url: https://au.seek.com/iot-developer-jobs?jobId=91658860&type=standard
tags: #bookmark #resource #website
- Job
## OpenCode GO
url: https://opencode.ai/docs/go/#usage-limits
tags: #bookmark #resource #website
- Get Open Code GO subscription and use that. Might be cheaper than OpenRouter.
## Mautic
url: https://mautic.org/
tags: #bookmark #resource #website
- Open source marketing for Emails etc.
## Google Stitch
url: https://stitch.withgoogle.com
tags: #bookmark #resource #website
- For AI design
## Graphify
url: https://graphify.net/
tags: #bookmark #resource #website
- This creates a AI map of Obsidian and other data
## Graphify Github
url: https://github.com/safishamsi/graphify
tags: #bookmark #resource #website
- Create AI map of Obsidian notes
## Archon
url: https://github.com/coleam00/archon
tags: #bookmark #resource #website
- Work flow for Ai agents. Implement it.
## Obsidian PI Youtube Channel Eero Alvar
url: https://www.youtube.com/@EeroAlvar
tags: #bookmark #resource #website
- Tutorials on set up, pi-config is good. Here is repo https://github.com/amosblomqvist/pi-config
## Plannotator
url: https://github.com/backnotprop/plannotator
tags: #bookmark #resource #website
- OpenSpec feeds into plannotator then Archon
## Langfuse
url: http://localhost:3000/auth/sign-in
tags: #bookmark #resource #website
- Langfuse .27 docker for working with langraph and langchain.
## Openrouter.ai
url: https://openrouter.ai/settings/credits
tags: #bookmark #resource #website
- Open router credits
- [] Swap to opencode Go plan. Delete T3
## {{title}}
url: {{link}}
tags: #bookmark #resource #website
- Why are you using this page
## {{title}}
url: {{link}}
tags: #bookmark #resource #website
- Why are you using this page
## {{title}}
url: {{link}}
tags: #bookmark #resource #website
- Why are you using this page

View File

@@ -0,0 +1,30 @@
---
title: AI Interface Design Resource
summary: Tools for AI interface design
type: websites
client: Sam
project: AI
status: active
priority: 5
last_verified: 2026-05-12
tags:
- AI Design Website
aliases: []
id: 1778535439-NWLI
---
# AI Interface Design Resource
- **Related:** https://github.com/VoltAgent/awesome-design-md
# Github Awesome - Design
url: https://github.com/VoltAgent/awesome-design-md
Website: [Github Votagent awesome-design-md](https://github.com/VoltAgent/awesome-design-md)
# Stich Google
url: https://stitch.withgoogle.com
Website: [Google stitch](https://stitch.withgoogle.com)
---
*Created: 2026-05-12*

View File

@@ -0,0 +1,68 @@
---
title: Local Web Pages
summary: React, router and other local pages
type: websites
client: Sam
project: AI
status: active
priority: 5
last_verified: 2026-05-12
tags:
- web pages, web sites, AI, urls
aliases: []
id: 1778545221-MOBT
---
# Local Web Pages
- [] main router
- [] secondary router
- [] react pages
- [] .13 docker containers and .27 without caddy URLS. Whisper etc
- [] put .13 and .27, particularly .27 behind 3rd caddy
- [] second pi
- [] links to front pages for docker container
- [ ]
---
## Langfuse
url: http://localhost:3000/auth/sign-in
tags: #website, #ai
- Visual GUi for langchain and langraph
## Archon
url: http://localhost:3090/chat
tags: #website, #ai
- AI project flow coordinator
## Supabase
url: http://localhost:8001/project/default
tags: #website, #ai
- This is used for verification and authentication.
## Proxmox
url: https://proxmox.home.lab/#v1:0:=qemu%2F105:4:::::::5
tags: #website, #ai
- root.
## Netcom Router
url: http://192.168.20.1:8079/login.html
- Main home router. admin
## secondary router
url: http://192.168.20.1:254
- admin.
## Snapcast
url: http://192.168.20.13:1780/
- [] Create caddy DNS name with pihole for Snapcast
- Control local speaker audio on Snapcast network. MainAudio for both spotify and announcements.
##
*Created: 2026-05-12*

View File

@@ -0,0 +1,34 @@
---
title: Docker Containers
summary: Overview of docker containers on my network
type: note
client: sam
project: ai
status: active
priority: 5
last_verified: 2026-05-12
tags:
- ai docker network
aliases: []
id: 1778553013-ARYX
---
# Docker Containers
## 🏗 System Architecture
- **Software/Stack:** docker
## 🎯 Objective
[What problem does this note solve for Graphify?]
## 📝 Technical Implementation
- **Runtime:** {{runtime}}
- **Environment:** [e.g. Production, Staging, Edge]
## 🖇️ Context & Connections
- **Upstream:** [[Parent Component]]
- **Downstream:** [[Dependent Services]]
- **Related:** {{related_links}}
---
*Created: 2026-05-12*

View File

@@ -0,0 +1,41 @@
---
title: Home Network
summary: Description and notes on home network
type: note
client: sam
project: ai
status: active
priority: 5
last_verified: 2026-05-12
tags:
- ai network
aliases: []
id: 1778553155-TGHR
---
# Home Network
## TODO
- [] RustFS for links like s3 to container.
- [] Restore back up System
- [] Fix Home Assistant - Tuya.
## 🏗 System Architecture
- **Software/Stack:** {{software}}
- **Components:** {{components}}
- **Hardware/IOT:** {{hardware_specs}}
## 🎯 Objective
[What problem does this note solve for Graphify?]
## 📝 Technical Implementation
- **Runtime:** {{runtime}}
- **Environment:** [e.g. Production, Staging, Edge]
## 🖇️ Context & Connections
- **Upstream:** [[Parent Component]]
- **Downstream:** [[Dependent Services]]
- **Related:** {{related_links}}
---
*Created: 2026-05-12*

View File

@@ -0,0 +1,77 @@
---
title: Local Web Host Set Up
summary: Transition from inmotion hosting to a local web host
type: note
client: sam
project: websites
status: active
priority: 5
last_verified: 2026-05-12
tags:
- self-hosting, networking, email, sysadmin, docker, audasmedia, inmotionhosting, email, rustfs
aliases: []
id: 1778553635-RFCE
---
# Local Web Host Set Up
## 🏗 System Architecture
- **Software/Stack:** RustFS, Cpanel, Mailcow
- **Components:** {{components}}
- **Hardware/IOT:** {{hardware_specs}}
## 🎯 Objective
## 📝 Technical Implementation
- **Runtime:** {{runtime}}
- **Environment:** [e.g. Production, Staging, Edge]
## 🖇️ Context & Connections
- **Upstream:** [[Parent Component]]
- **Downstream:** [[Dependent Services]]
- **Related:** {{related_links}}
# Local Web Host Strategy
A high-performance, cost-effective blueprint for transitioning from managed hosting to a local self-hosted environment while maintaining reliability and deliverability.
## 1. Public Access & Connectivity
To bridge your local network with the public internet without a static IP:
- **Dynamic DNS (DDNS):** Use **Cloudflare** or **Namecheap** APIs to automatically update your domain's A-record to your home IP.
- **Traffic Management:** Deploy **Nginx Proxy Manager** (Docker) as a reverse proxy. This allows you to route `site1.yourdomain.com` and `site2.yourdomain.com` to different local containers/servers via ports 80/443.
## 2. The Email Problem (Deliverability)
Residential IPs are frequently blacklisted. Use a **Hybrid Relay Model**:
- **Local Server:** Run **Mailcow** or **Mail-in-a-Box** in a Docker container for internal storage and receiving.
- **Outgoing Relay:** Use **Amazon SES** (Simple Email Service) as an SMTP relay.
- **Cost:** ~$0.10 per 1,000 emails.
- **Outcome:** High reputation and low spam-flagging compared to traditional web hosts like InMotion.
- **Security:** Ensure DNS records include **SPF**, **DKIM**, and **DMARC**.
## 3. Control Panel (cPanel Alternatives)
Manage your local environment with lightweight, Docker-friendly GUIs:
- **aaPanel:** Modular and beginner-friendly.
- **HestiaCP:** Lightweight for Linux enthusiasts.
- **OpenPanel:** Specifically built for Docker-based site isolation.
## 4. Off-Site Storage & Backups
Maintain "off-site" redundancy for your local data using S3-compatible protocols:
- **Backblaze B2:** ~$6/TB/month. Great for "set and forget" backups.
- **Hetzner Storage Box:** Extremely cheap for raw storage via SFTP/Samba.
- **Tooling:** Use **Rclone** or **Duplicati** to automate local-to-cloud sync.
## 5. Potential Role for RustFS
- **Local Object Storage:** Use **RustFS** locally if you build apps requiring an S3-compatible backend for large assets (images/video) without paying cloud egress fees.
---
**Next Steps:**
1. Configure DDNS on your router or via a local cron job.
2. Set up a Docker host (Ubuntu Server/Debian).
3. Verify Amazon SES "Sandbox" exit to start sending live mail.
---
*Created: 2026-05-12*

34
templates/ai_dev_ops.md Normal file
View File

@@ -0,0 +1,34 @@
---
title: "{{title}}"
summary: "{{summary}}"
type: {{type}}
client: {{client}}
project: {{project}}
status: {{status}}
priority: {{priority}}
last_verified: {{date:YYYY-MM-DD}}
tags:
- {{topic_tag}}
---
# {{title}}
## 🏗 System Architecture
- **Software/Stack:** {{software}}
- **Components:** {{components}}
- **Hardware/IOT:** {{hardware_specs}}
## 🎯 Objective
[What problem does this note solve for Graphify?]
## 📝 Technical Implementation
- **Runtime:** {{runtime}}
- **Environment:** [e.g. Production, Staging, Edge]
## 🖇️ Context & Connections
- **Upstream:** [[Parent Component]]
- **Downstream:** [[Dependent Services]]
- **Related:** {{related_links}}
---
*Created: {{date:YYYY-MM-DD}}*

View File

@@ -0,0 +1,10 @@
---
created: <% tp.file.creation_date("YYYY-MM-DD HH:mm") %>
modified: <% tp.file.last_modified_date("YYYY-MM-DD HH:mm") %>
type: note
tags: []
aliases: []
---
# [[<% tp.file.title %>]]

View File

@@ -0,0 +1,12 @@
---
created: <% tp.file.creation_date("YYYY-MM-DD") %>
type: media
category: #film
status: #to-watch
rating: ⭐⭐⭐⭐⭐
source_url:
---
# Review: <% tp.file.title %>
## 🧠 Summary & Thoughts
-

16
templates/tmpl_project.md Normal file
View File

@@ -0,0 +1,16 @@
---
created: <% tp.file.creation_date("YYYY-MM-DD HH:mm") %>
modified: <% tp.file.last_modified_date("YYYY-MM-DD HH:mm") %>
type: project
status: #todo
due_date: YYYY-MM-DD
project_group: <% tp.file.folder(true) %>
tags: [active-project]
---
# Project: <% tp.file.title %>
## 🎯 Objectives
- [ ]
## 📓 Log & Milestones
-

View File

@@ -0,0 +1,10 @@
---
created: <% tp.file.creation_date("YYYY-MM-DD HH:mm") %>
type: documentation
language:
environment:
source_url:
tags: [dev, snippets]
---
# Tech Snippet: <% tp.file.title %>