2025-04-07 13:07:53: ...
This commit is contained in:
parent
7bf77f5282
commit
4380e95e00
BIN
.obsidian/.DS_Store
vendored
Normal file
BIN
.obsidian/.DS_Store
vendored
Normal file
Binary file not shown.
19
.obsidian/app.json
vendored
19
.obsidian/app.json
vendored
@ -1,14 +1,11 @@
|
||||
{
|
||||
"promptDelete": false,
|
||||
"pdfExportSettings": {
|
||||
"pageSize": "Letter",
|
||||
"landscape": false,
|
||||
"margin": "0",
|
||||
"downscalePercent": 100
|
||||
},
|
||||
"newFileLocation": "folder",
|
||||
"newFileFolderPath": "new notes",
|
||||
"showUnsupportedFiles": true,
|
||||
"attachmentFolderPath": "./attachments",
|
||||
"vimMode": true,
|
||||
"attachmentFolderPath": "attachments",
|
||||
"useMarkdownLinks": true,
|
||||
"newLinkFormat": "relative",
|
||||
"alwaysUpdateLinks": true
|
||||
"showLineNumber": true,
|
||||
"alwaysUpdateLinks": true,
|
||||
"promptDelete": false,
|
||||
"livePreview": false
|
||||
}
|
7
.obsidian/appearance.json
vendored
7
.obsidian/appearance.json
vendored
@ -1,4 +1,7 @@
|
||||
{
|
||||
"showRibbon": true,
|
||||
"translucency": true
|
||||
"cssTheme": "Wasp",
|
||||
"enabledCssSnippets": [
|
||||
"allnotelist"
|
||||
],
|
||||
"showRibbon": true
|
||||
}
|
9
.obsidian/bookmarks.json
vendored
Normal file
9
.obsidian/bookmarks.json
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"type": "file",
|
||||
"ctime": 1743939086946,
|
||||
"path": "kanban/mainboard.md"
|
||||
}
|
||||
]
|
||||
}
|
6
.obsidian/canvas.json
vendored
Normal file
6
.obsidian/canvas.json
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"snapToObjects": true,
|
||||
"snapToGrid": true,
|
||||
"newFileLocation": "folder",
|
||||
"newFileFolderPath": "canvas"
|
||||
}
|
16
.obsidian/community-plugins.json
vendored
16
.obsidian/community-plugins.json
vendored
@ -1,7 +1,17 @@
|
||||
[
|
||||
"obsidian-git",
|
||||
"obsidian-linter",
|
||||
"terminal",
|
||||
"table-editor-obsidian",
|
||||
"dataview",
|
||||
"obsidian-day-planner",
|
||||
"obsidian-importer",
|
||||
"weather-fetcher",
|
||||
"geocoding-properties",
|
||||
"metaedit",
|
||||
"kanban-status-updater",
|
||||
"obsidian-kanban",
|
||||
"obsidian-git"
|
||||
"templater-obsidian",
|
||||
"homepage",
|
||||
"pane-relief",
|
||||
"recent-files-obsidian",
|
||||
"copilot"
|
||||
]
|
1
.obsidian/copilot-index-3c389a9361368debaf33a4d3b19b1fd0.json
vendored
Normal file
1
.obsidian/copilot-index-3c389a9361368debaf33a4d3b19b1fd0.json
vendored
Normal file
File diff suppressed because one or more lines are too long
1
.obsidian/copilot-index-67e92c8765a9bc7fb2d335c459de9eb5.json
vendored
Normal file
1
.obsidian/copilot-index-67e92c8765a9bc7fb2d335c459de9eb5.json
vendored
Normal file
File diff suppressed because one or more lines are too long
2
.obsidian/core-plugins.json
vendored
2
.obsidian/core-plugins.json
vendored
@ -16,7 +16,7 @@
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
|
4
.obsidian/daily-notes.json
vendored
Normal file
4
.obsidian/daily-notes.json
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"template": "templates/daily_template",
|
||||
"autorun": false
|
||||
}
|
4
.obsidian/graph.json
vendored
4
.obsidian/graph.json
vendored
@ -17,6 +17,6 @@
|
||||
"repelStrength": 10,
|
||||
"linkStrength": 1,
|
||||
"linkDistance": 250,
|
||||
"scale": 1.3486109551319057,
|
||||
"close": false
|
||||
"scale": 1.2959324124840048,
|
||||
"close": true
|
||||
}
|
98
.obsidian/hotkeys.json
vendored
Normal file
98
.obsidian/hotkeys.json
vendored
Normal file
@ -0,0 +1,98 @@
|
||||
{
|
||||
"workspace:split-vertical": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "V"
|
||||
}
|
||||
],
|
||||
"window:zoom-in": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "="
|
||||
}
|
||||
],
|
||||
"window:zoom-out": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "-"
|
||||
}
|
||||
],
|
||||
"terminal:open-terminal.integrated.current": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "T"
|
||||
}
|
||||
],
|
||||
"obsidian-git:commit-push-specified-message": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "M"
|
||||
}
|
||||
],
|
||||
"obsidian-git:push": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "G"
|
||||
}
|
||||
],
|
||||
"table-editor-obsidian:format-all-tables": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "L"
|
||||
}
|
||||
],
|
||||
"copilot:chat-toggle-window": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "J"
|
||||
}
|
||||
],
|
||||
"workspace:split-horizontal": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "H"
|
||||
}
|
||||
],
|
||||
"editor:toggle-source": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "W"
|
||||
}
|
||||
],
|
||||
"markdown:toggle-preview": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "E"
|
||||
}
|
||||
]
|
||||
}
|
BIN
.obsidian/plugins/.DS_Store
vendored
Normal file
BIN
.obsidian/plugins/.DS_Store
vendored
Normal file
Binary file not shown.
346
.obsidian/plugins/copilot/data.json
vendored
Normal file
346
.obsidian/plugins/copilot/data.json
vendored
Normal file
@ -0,0 +1,346 @@
|
||||
{
|
||||
"isPlusUser": false,
|
||||
"plusLicenseKey": "",
|
||||
"openAIApiKey": "",
|
||||
"openAIOrgId": "",
|
||||
"huggingfaceApiKey": "",
|
||||
"cohereApiKey": "",
|
||||
"anthropicApiKey": "",
|
||||
"azureOpenAIApiKey": "",
|
||||
"azureOpenAIApiInstanceName": "",
|
||||
"azureOpenAIApiDeploymentName": "",
|
||||
"azureOpenAIApiVersion": "",
|
||||
"azureOpenAIApiEmbeddingDeploymentName": "",
|
||||
"googleApiKey": "",
|
||||
"openRouterAiApiKey": "",
|
||||
"mistralApiKey": "",
|
||||
"deepseekApiKey": "",
|
||||
"defaultChainType": "vault_qa",
|
||||
"defaultModelKey": "qwen-max-latest|openai",
|
||||
"embeddingModelKey": "chsword/DeepSeek-V3:latest|ollama",
|
||||
"temperature": 0.1,
|
||||
"maxTokens": 1000,
|
||||
"contextTurns": 15,
|
||||
"userSystemPrompt": "",
|
||||
"openAIProxyBaseUrl": "",
|
||||
"openAIEmbeddingProxyBaseUrl": "",
|
||||
"stream": true,
|
||||
"defaultSaveFolder": "copilot-conversations",
|
||||
"defaultConversationTag": "copilot-conversation",
|
||||
"autosaveChat": false,
|
||||
"defaultOpenArea": "view",
|
||||
"customPromptsFolder": "copilot-custom-prompts",
|
||||
"indexVaultToVectorStore": "ON MODE SWITCH",
|
||||
"qaExclusions": "",
|
||||
"qaInclusions": "",
|
||||
"chatNoteContextPath": "",
|
||||
"chatNoteContextTags": [],
|
||||
"enableIndexSync": true,
|
||||
"debug": false,
|
||||
"enableEncryption": false,
|
||||
"maxSourceChunks": 3,
|
||||
"groqApiKey": "",
|
||||
"activeModels": [
|
||||
{
|
||||
"name": "copilot-plus-flash",
|
||||
"provider": "copilot-plus",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"plusExclusive": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gpt-4o",
|
||||
"provider": "openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gpt-4o-mini",
|
||||
"provider": "openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claude-3-5-sonnet-latest",
|
||||
"provider": "anthropic",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "o1-mini",
|
||||
"provider": "openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"capabilities": [
|
||||
"reasoning"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "o3-mini",
|
||||
"provider": "openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"capabilities": [
|
||||
"reasoning"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claude-3-5-haiku-latest",
|
||||
"provider": "anthropic",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "command-r",
|
||||
"provider": "cohereai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "command-r-plus",
|
||||
"provider": "cohereai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "gemini-2.0-pro-exp",
|
||||
"provider": "google",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gemini-2.0-flash",
|
||||
"provider": "google",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "azure-openai",
|
||||
"provider": "azure openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "deepseek-chat",
|
||||
"provider": "deepseek",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "deepseek-reasoner",
|
||||
"provider": "deepseek",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"capabilities": [
|
||||
"reasoning"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "qwen-max-latest",
|
||||
"provider": "openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": false,
|
||||
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||
"apiKey": "sk-24a6af9eea55494b8f465a01cb92d461",
|
||||
"isEmbeddingModel": false,
|
||||
"capabilities": [],
|
||||
"stream": true,
|
||||
"displayName": "qwen-max-latest",
|
||||
"enableCors": true
|
||||
},
|
||||
{
|
||||
"name": "chsword/DeepSeek-V3:latest",
|
||||
"provider": "3rd party (openai-format)",
|
||||
"enabled": true,
|
||||
"isBuiltIn": false,
|
||||
"baseUrl": "http://localhost:11434/v1/",
|
||||
"apiKey": "",
|
||||
"isEmbeddingModel": false,
|
||||
"capabilities": [],
|
||||
"stream": true,
|
||||
"displayName": "chsword/DeepSeek-V3:latest",
|
||||
"enableCors": true
|
||||
}
|
||||
],
|
||||
"activeEmbeddingModels": [
|
||||
{
|
||||
"name": "copilot-plus-small",
|
||||
"provider": "copilot-plus",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true,
|
||||
"core": true,
|
||||
"plusExclusive": true
|
||||
},
|
||||
{
|
||||
"name": "copilot-plus-large",
|
||||
"provider": "copilot-plus-jina",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true,
|
||||
"core": true,
|
||||
"plusExclusive": true,
|
||||
"believerExclusive": true,
|
||||
"dimensions": 1024
|
||||
},
|
||||
{
|
||||
"name": "copilot-plus-multilingual",
|
||||
"provider": "copilot-plus-jina",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true,
|
||||
"core": true,
|
||||
"plusExclusive": true,
|
||||
"dimensions": 512
|
||||
},
|
||||
{
|
||||
"name": "text-embedding-3-small",
|
||||
"provider": "openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true,
|
||||
"core": true
|
||||
},
|
||||
{
|
||||
"name": "text-embedding-3-large",
|
||||
"provider": "openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true
|
||||
},
|
||||
{
|
||||
"name": "embed-multilingual-light-v3.0",
|
||||
"provider": "cohereai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true
|
||||
},
|
||||
{
|
||||
"name": "text-embedding-004",
|
||||
"provider": "google",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true
|
||||
},
|
||||
{
|
||||
"name": "azure-openai",
|
||||
"provider": "azure openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true
|
||||
},
|
||||
{
|
||||
"name": "chsword/DeepSeek-V3:latest",
|
||||
"provider": "ollama",
|
||||
"enabled": true,
|
||||
"isBuiltIn": false,
|
||||
"baseUrl": "",
|
||||
"apiKey": "",
|
||||
"isEmbeddingModel": true,
|
||||
"capabilities": [],
|
||||
"displayName": "chsword/DeepSeek-V3:latest"
|
||||
}
|
||||
],
|
||||
"embeddingRequestsPerMin": 90,
|
||||
"embeddingBatchSize": 16,
|
||||
"disableIndexOnMobile": true,
|
||||
"showSuggestedPrompts": true,
|
||||
"showRelevantNotes": true,
|
||||
"numPartitions": 1,
|
||||
"promptUsageTimestamps": {},
|
||||
"defaultConversationNoteName": "{$topic}@{$date}_{$time}",
|
||||
"inlineEditCommands": [
|
||||
{
|
||||
"name": "Fix grammar and spelling",
|
||||
"prompt": "<instruction>Fix the grammar and spelling of the text below. Preserve all formatting, line breaks, and special characters. Do not add or remove any content. Return only the corrected text.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": true
|
||||
},
|
||||
{
|
||||
"name": "Translate to Chinese",
|
||||
"prompt": "<instruction>Translate the text below into Chinese:\n 1. Preserve the meaning and tone\n 2. Maintain appropriate cultural context\n 3. Keep formatting and structure\n Return only the translated text.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": true
|
||||
},
|
||||
{
|
||||
"name": "Summarize",
|
||||
"prompt": "<instruction>Create a bullet-point summary of the text below. Each bullet point should capture a key point. Return only the bullet-point summary.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": true
|
||||
},
|
||||
{
|
||||
"name": "Simplify",
|
||||
"prompt": "<instruction>Simplify the text below to a 6th-grade reading level (ages 11-12). Use simple sentences, common words, and clear explanations. Maintain the original key concepts. Return only the simplified text.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": true
|
||||
},
|
||||
{
|
||||
"name": "Emojify",
|
||||
"prompt": "<instruction>Add relevant emojis to enhance the text below. Follow these rules:\n 1. Insert emojis at natural breaks in the text\n 2. Never place two emojis next to each other\n 3. Keep all original text unchanged\n 4. Choose emojis that match the context and tone\n Return only the emojified text.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": true
|
||||
},
|
||||
{
|
||||
"name": "Make shorter",
|
||||
"prompt": "<instruction>Reduce the text below to half its length while preserving these elements:\n 1. Main ideas and key points\n 2. Essential details\n 3. Original tone and style\n Return only the shortened text.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": true
|
||||
},
|
||||
{
|
||||
"name": "Make longer",
|
||||
"prompt": "<instruction>Expand the text below to twice its length by:\n 1. Adding relevant details and examples\n 2. Elaborating on key points\n 3. Maintaining the original tone and style\n Return only the expanded text.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": true
|
||||
},
|
||||
{
|
||||
"name": "Generate table of contents",
|
||||
"prompt": "<instruction>Generate a hierarchical table of contents for the text below. Use appropriate heading levels (H1, H2, H3, etc.). Include page numbers if present. Return only the table of contents.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": false
|
||||
},
|
||||
{
|
||||
"name": "Generate glossary",
|
||||
"prompt": "<instruction>Create a glossary of important terms, concepts, and phrases from the text below. Format each entry as \"Term: Definition\". Sort entries alphabetically. Return only the glossary.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": false
|
||||
},
|
||||
{
|
||||
"name": "Remove URLs",
|
||||
"prompt": "<instruction>Remove all URLs from the text below. Preserve all other content and formatting. URLs may be in various formats (http, https, www). Return only the text with URLs removed.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": false
|
||||
},
|
||||
{
|
||||
"name": "Rewrite as tweet",
|
||||
"prompt": "<instruction>Rewrite the text below as a single tweet with these requirements:\n 1. Maximum 280 characters\n 2. Use concise, impactful language\n 3. Maintain the core message\n Return only the tweet text.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": false
|
||||
},
|
||||
{
|
||||
"name": "Rewrite as tweet thread",
|
||||
"prompt": "<instruction>Convert the text below into a Twitter thread following these rules:\n 1. Each tweet must be under 240 characters\n 2. Start with \"THREAD START\" on its own line\n 3. Separate tweets with \"\n\n---\n\n\"\n 4. End with \"THREAD END\" on its own line\n 5. Make content engaging and clear\n Return only the formatted thread.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": false
|
||||
},
|
||||
{
|
||||
"name": "Explain like I am 5",
|
||||
"prompt": "<instruction>Explain the text below in simple terms that a 5-year-old would understand:\n 1. Use basic vocabulary\n 2. Include simple analogies\n 3. Break down complex concepts\n Return only the simplified explanation.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": false
|
||||
},
|
||||
{
|
||||
"name": "Rewrite as press release",
|
||||
"prompt": "<instruction>Transform the text below into a professional press release:\n 1. Use formal, journalistic style\n 2. Include headline and dateline\n 3. Follow inverted pyramid structure\n Return only the press release format.</instruction>\n\n<text>{copilot-selection}</text>",
|
||||
"showInContextMenu": false
|
||||
}
|
||||
]
|
||||
}
|
1447
.obsidian/plugins/copilot/main.js
vendored
Normal file
1447
.obsidian/plugins/copilot/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
13
.obsidian/plugins/copilot/manifest.json
vendored
Normal file
13
.obsidian/plugins/copilot/manifest.json
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "copilot",
|
||||
"name": "Copilot",
|
||||
"version": "2.8.8",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "An AI Copilot in Obsidian.",
|
||||
"author": "Logan Yang",
|
||||
"authorUrl": "https://twitter.com/logancyang",
|
||||
"fundingUrl": {
|
||||
"Buy Me a Coffee": "https://www.buymeacoffee.com/logancyang",
|
||||
"GitHub Sponsor": "https://github.com/sponsors/logancyang"
|
||||
}
|
||||
}
|
1
.obsidian/plugins/copilot/styles.css
vendored
Normal file
1
.obsidian/plugins/copilot/styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
27
.obsidian/plugins/dataview/data.json
vendored
Normal file
27
.obsidian/plugins/dataview/data.json
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"renderNullAs": "\\-",
|
||||
"taskCompletionTracking": false,
|
||||
"taskCompletionUseEmojiShorthand": false,
|
||||
"taskCompletionText": "completion",
|
||||
"taskCompletionDateFormat": "yyyy-MM-dd",
|
||||
"recursiveSubTaskCompletion": false,
|
||||
"warnOnEmptyResult": true,
|
||||
"refreshEnabled": true,
|
||||
"refreshInterval": 2500,
|
||||
"defaultDateFormat": "MMMM dd, yyyy",
|
||||
"defaultDateTimeFormat": "h:mm a - MMMM dd, yyyy",
|
||||
"maxRecursiveRenderDepth": 4,
|
||||
"tableIdColumnName": "File",
|
||||
"tableGroupColumnName": "Group",
|
||||
"showResultCount": true,
|
||||
"allowHtml": true,
|
||||
"inlineQueryPrefix": "=",
|
||||
"inlineJsQueryPrefix": "$=",
|
||||
"inlineQueriesInCodeblocks": true,
|
||||
"enableInlineDataview": true,
|
||||
"enableDataviewJs": true,
|
||||
"enableInlineDataviewJs": true,
|
||||
"prettyRenderInlineFields": true,
|
||||
"prettyRenderInlineFieldsInLivePreview": true,
|
||||
"dataviewJsKeyword": "dataviewjs"
|
||||
}
|
32
.obsidian/plugins/geocoding-properties/data.json
vendored
Normal file
32
.obsidian/plugins/geocoding-properties/data.json
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"properties": {
|
||||
"address": {
|
||||
"frontmatterKey": "address",
|
||||
"enabled": true
|
||||
},
|
||||
"lat": {
|
||||
"frontmatterKey": "lat",
|
||||
"enabled": true
|
||||
},
|
||||
"lng": {
|
||||
"frontmatterKey": "lng",
|
||||
"enabled": true
|
||||
},
|
||||
"location": {
|
||||
"frontmatterKey": "location",
|
||||
"enabled": true
|
||||
},
|
||||
"map_link": {
|
||||
"frontmatterKey": "map_link",
|
||||
"enabled": false
|
||||
},
|
||||
"map_view_link": {
|
||||
"frontmatterKey": "map_view_link",
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"overrideExistingProperties": false,
|
||||
"mapLinkProvider": "osm",
|
||||
"apiProvider": "free-geocoding-api",
|
||||
"apiKey": ""
|
||||
}
|
602
.obsidian/plugins/geocoding-properties/main.js
vendored
Normal file
602
.obsidian/plugins/geocoding-properties/main.js
vendored
Normal file
@ -0,0 +1,602 @@
|
||||
/*
|
||||
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 __commonJS = (cb, mod) => function __require() {
|
||||
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
||||
};
|
||||
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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// node_modules/deepmerge/dist/cjs.js
|
||||
var require_cjs = __commonJS({
|
||||
"node_modules/deepmerge/dist/cjs.js"(exports, module2) {
|
||||
"use strict";
|
||||
var isMergeableObject = function isMergeableObject2(value) {
|
||||
return isNonNullObject(value) && !isSpecial(value);
|
||||
};
|
||||
function isNonNullObject(value) {
|
||||
return !!value && typeof value === "object";
|
||||
}
|
||||
function isSpecial(value) {
|
||||
var stringValue = Object.prototype.toString.call(value);
|
||||
return stringValue === "[object RegExp]" || stringValue === "[object Date]" || isReactElement(value);
|
||||
}
|
||||
var canUseSymbol = typeof Symbol === "function" && Symbol.for;
|
||||
var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for("react.element") : 60103;
|
||||
function isReactElement(value) {
|
||||
return value.$$typeof === REACT_ELEMENT_TYPE;
|
||||
}
|
||||
function emptyTarget(val) {
|
||||
return Array.isArray(val) ? [] : {};
|
||||
}
|
||||
function cloneUnlessOtherwiseSpecified(value, options) {
|
||||
return options.clone !== false && options.isMergeableObject(value) ? deepmerge(emptyTarget(value), value, options) : value;
|
||||
}
|
||||
function defaultArrayMerge(target, source, options) {
|
||||
return target.concat(source).map(function(element) {
|
||||
return cloneUnlessOtherwiseSpecified(element, options);
|
||||
});
|
||||
}
|
||||
function getMergeFunction(key, options) {
|
||||
if (!options.customMerge) {
|
||||
return deepmerge;
|
||||
}
|
||||
var customMerge = options.customMerge(key);
|
||||
return typeof customMerge === "function" ? customMerge : deepmerge;
|
||||
}
|
||||
function getEnumerableOwnPropertySymbols(target) {
|
||||
return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function(symbol) {
|
||||
return Object.propertyIsEnumerable.call(target, symbol);
|
||||
}) : [];
|
||||
}
|
||||
function getKeys(target) {
|
||||
return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));
|
||||
}
|
||||
function propertyIsOnObject(object, property) {
|
||||
try {
|
||||
return property in object;
|
||||
} catch (_) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
function propertyIsUnsafe(target, key) {
|
||||
return propertyIsOnObject(target, key) && !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key));
|
||||
}
|
||||
function mergeObject(target, source, options) {
|
||||
var destination = {};
|
||||
if (options.isMergeableObject(target)) {
|
||||
getKeys(target).forEach(function(key) {
|
||||
destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
|
||||
});
|
||||
}
|
||||
getKeys(source).forEach(function(key) {
|
||||
if (propertyIsUnsafe(target, key)) {
|
||||
return;
|
||||
}
|
||||
if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
|
||||
destination[key] = getMergeFunction(key, options)(target[key], source[key], options);
|
||||
} else {
|
||||
destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
|
||||
}
|
||||
});
|
||||
return destination;
|
||||
}
|
||||
function deepmerge(target, source, options) {
|
||||
options = options || {};
|
||||
options.arrayMerge = options.arrayMerge || defaultArrayMerge;
|
||||
options.isMergeableObject = options.isMergeableObject || isMergeableObject;
|
||||
options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;
|
||||
var sourceIsArray = Array.isArray(source);
|
||||
var targetIsArray = Array.isArray(target);
|
||||
var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;
|
||||
if (!sourceAndTargetTypesMatch) {
|
||||
return cloneUnlessOtherwiseSpecified(source, options);
|
||||
} else if (sourceIsArray) {
|
||||
return options.arrayMerge(target, source, options);
|
||||
} else {
|
||||
return mergeObject(target, source, options);
|
||||
}
|
||||
}
|
||||
deepmerge.all = function deepmergeAll(array, options) {
|
||||
if (!Array.isArray(array)) {
|
||||
throw new Error("first argument should be an array");
|
||||
}
|
||||
return array.reduce(function(prev, next) {
|
||||
return deepmerge(prev, next, options);
|
||||
}, {});
|
||||
};
|
||||
var deepmerge_1 = deepmerge;
|
||||
module2.exports = deepmerge_1;
|
||||
}
|
||||
});
|
||||
|
||||
// src/main.ts
|
||||
var main_exports = {};
|
||||
__export(main_exports, {
|
||||
default: () => GeocodingPlugin
|
||||
});
|
||||
module.exports = __toCommonJS(main_exports);
|
||||
var import_deepmerge = __toESM(require_cjs());
|
||||
var import_obsidian6 = require("obsidian");
|
||||
|
||||
// src/search-modal.ts
|
||||
var import_obsidian2 = require("obsidian");
|
||||
|
||||
// src/results-modal.ts
|
||||
var import_obsidian = require("obsidian");
|
||||
var GeocodingResultsModal = class extends import_obsidian.SuggestModal {
|
||||
constructor(plugin, results) {
|
||||
super(plugin.app);
|
||||
this.plugin = plugin;
|
||||
this.results = results;
|
||||
this.setPlaceholder("Select result");
|
||||
}
|
||||
getSuggestions(query) {
|
||||
return this.results.filter(
|
||||
(result) => result.address.toLowerCase().includes(query.toLowerCase())
|
||||
);
|
||||
}
|
||||
onChooseSuggestion(result) {
|
||||
this.plugin.insertProperties(result);
|
||||
}
|
||||
renderSuggestion({ address, lat, lng, info }, el) {
|
||||
el.createEl("div", {
|
||||
text: `${address} (${lat}, ${lng})`
|
||||
});
|
||||
if (info) {
|
||||
el.createEl("small", {
|
||||
text: info
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// src/search-modal.ts
|
||||
var GeocodingSearchModal = class extends import_obsidian2.Modal {
|
||||
constructor(plugin, searchTerm) {
|
||||
super(plugin.app);
|
||||
this.plugin = plugin;
|
||||
this.searchTerm = searchTerm;
|
||||
}
|
||||
async onSubmit() {
|
||||
this.close();
|
||||
const results = await this.plugin.getResults(this.searchTerm);
|
||||
new GeocodingResultsModal(this.plugin, results).open();
|
||||
}
|
||||
onOpen() {
|
||||
const { contentEl } = this;
|
||||
contentEl.createEl("h1", {
|
||||
text: "Confirm search term"
|
||||
});
|
||||
new import_obsidian2.Setting(contentEl).setName("Name").addText((text) => {
|
||||
const component = text.setValue(this.searchTerm).onChange((value) => {
|
||||
this.searchTerm = value;
|
||||
});
|
||||
component.inputEl.style.width = "100%";
|
||||
});
|
||||
new import_obsidian2.Setting(contentEl).addButton(
|
||||
(btn) => btn.setButtonText("Submit").setCta().onClick(async () => {
|
||||
await this.onSubmit();
|
||||
})
|
||||
);
|
||||
contentEl.addEventListener("keypress", async (e) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
await this.onSubmit();
|
||||
}
|
||||
});
|
||||
}
|
||||
onClose() {
|
||||
const { contentEl } = this;
|
||||
contentEl.empty();
|
||||
}
|
||||
};
|
||||
|
||||
// src/settings.ts
|
||||
var propertyDescriptions = {
|
||||
address: {
|
||||
name: "Address",
|
||||
detail: "Format varies by provider"
|
||||
},
|
||||
lat: {
|
||||
name: "Latitude"
|
||||
},
|
||||
lng: {
|
||||
name: "Longitude"
|
||||
},
|
||||
location: {
|
||||
name: "Location",
|
||||
detail: "Coordinates in [lat, lng] format"
|
||||
},
|
||||
map_link: {
|
||||
name: "Map link"
|
||||
},
|
||||
map_view_link: {
|
||||
name: "Map view link",
|
||||
detail: "A link in [](geo:lat,lng) format"
|
||||
}
|
||||
};
|
||||
var defaultSettings = {
|
||||
properties: {
|
||||
address: {
|
||||
frontmatterKey: "address",
|
||||
enabled: true
|
||||
},
|
||||
lat: {
|
||||
frontmatterKey: "lat",
|
||||
enabled: false
|
||||
},
|
||||
lng: {
|
||||
frontmatterKey: "lng",
|
||||
enabled: false
|
||||
},
|
||||
location: {
|
||||
frontmatterKey: "location",
|
||||
enabled: false
|
||||
},
|
||||
map_link: {
|
||||
frontmatterKey: "map_link",
|
||||
enabled: false
|
||||
},
|
||||
map_view_link: {
|
||||
frontmatterKey: "map_view_link",
|
||||
enabled: false
|
||||
}
|
||||
},
|
||||
overrideExistingProperties: false,
|
||||
mapLinkProvider: "google",
|
||||
apiProvider: "free-geocoding-api",
|
||||
apiKey: ""
|
||||
};
|
||||
|
||||
// src/settings-tab.ts
|
||||
var import_obsidian3 = require("obsidian");
|
||||
var GeocodingPluginSettingTab = class extends import_obsidian3.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
display() {
|
||||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
containerEl.createEl("h2", { text: "Properties" });
|
||||
for (const [key, description] of Object.entries(
|
||||
propertyDescriptions
|
||||
)) {
|
||||
const property = this.plugin.settings.properties[key];
|
||||
new import_obsidian3.Setting(containerEl).setName(description.name || key).setDesc(description.detail || "").addText(
|
||||
(text) => text.setValue(property.frontmatterKey).onChange(async (value) => {
|
||||
if (!value) {
|
||||
return;
|
||||
}
|
||||
property.frontmatterKey = value;
|
||||
await this.plugin.saveSettings();
|
||||
})
|
||||
).addToggle(
|
||||
(toggle) => toggle.setValue(property.enabled).onChange(async (value) => {
|
||||
property.enabled = value;
|
||||
await this.plugin.saveSettings();
|
||||
})
|
||||
);
|
||||
}
|
||||
containerEl.createEl("h2", { text: "Behavior" });
|
||||
new import_obsidian3.Setting(containerEl).setName("Override existing properties").setDesc(
|
||||
"Whether to override existing properties with the same name"
|
||||
).addToggle(
|
||||
(toggle) => toggle.setValue(this.plugin.settings.overrideExistingProperties).onChange(async (value) => {
|
||||
this.plugin.settings.overrideExistingProperties = value;
|
||||
await this.plugin.saveSettings();
|
||||
})
|
||||
);
|
||||
new import_obsidian3.Setting(containerEl).setName("Map link provider").setDesc("Provider for the map_link property, if enabled").addDropdown(
|
||||
(dropdown) => dropdown.addOptions({
|
||||
google: "Google Maps",
|
||||
apple: "Apple Maps",
|
||||
osm: "OpenStreetMap"
|
||||
}).setValue(this.plugin.settings.mapLinkProvider).onChange(async (value) => {
|
||||
switch (value) {
|
||||
case "google":
|
||||
case "apple":
|
||||
case "osm":
|
||||
this.plugin.settings.mapLinkProvider = value;
|
||||
break;
|
||||
}
|
||||
await this.plugin.saveSettings();
|
||||
})
|
||||
);
|
||||
containerEl.createEl("h2", { text: "API" });
|
||||
new import_obsidian3.Setting(containerEl).setName("API provider").addDropdown(
|
||||
(dropdown) => dropdown.addOptions({
|
||||
["free-geocoding-api"]: "Free Geocoding API",
|
||||
["google-geocoding"]: "Google Geocoding"
|
||||
}).setValue(this.plugin.settings.apiProvider).onChange(async (value) => {
|
||||
switch (value) {
|
||||
case "free-geocoding-api":
|
||||
case "google-geocoding":
|
||||
this.plugin.settings.apiProvider = value;
|
||||
break;
|
||||
}
|
||||
await this.plugin.saveSettings();
|
||||
})
|
||||
);
|
||||
new import_obsidian3.Setting(containerEl).setName("API key").setDisabled(
|
||||
this.plugin.settings.apiProvider !== "google-geocoding"
|
||||
).addText(
|
||||
(text) => text.setValue(this.plugin.settings.apiKey).onChange(async (value) => {
|
||||
this.plugin.settings.apiKey = value;
|
||||
await this.plugin.saveSettings();
|
||||
})
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
// src/utils/fetch-free-geocoding-api-results.ts
|
||||
var import_obsidian4 = require("obsidian");
|
||||
var fetchFreeGeocodingAPIResults = async (searchTerm, apiKey) => {
|
||||
const params = new URLSearchParams({
|
||||
q: searchTerm,
|
||||
api_key: apiKey
|
||||
});
|
||||
const url = `https://geocode.maps.co/search?${params.toString()}`;
|
||||
const response = await (0, import_obsidian4.requestUrl)({
|
||||
url,
|
||||
throw: false
|
||||
});
|
||||
const retryAfter = response.headers["Retry-After"];
|
||||
switch (response.status) {
|
||||
case 200:
|
||||
break;
|
||||
case 401:
|
||||
throw new Error("Unauthorized. Please check your API key.");
|
||||
case 409:
|
||||
case 503:
|
||||
if (retryAfter) {
|
||||
throw new Error(
|
||||
`Too many requests. Please try again in ${retryAfter} seconds.`
|
||||
);
|
||||
}
|
||||
throw new Error("Too many requests. Please try again later.");
|
||||
default:
|
||||
throw new Error(`Server responded with ${response.status}`);
|
||||
}
|
||||
const results = response.json;
|
||||
return results.map((result) => ({
|
||||
address: result.display_name,
|
||||
lat: Number(result.lat),
|
||||
lng: Number(result.lon),
|
||||
info: `${result.class} ${result.type}`,
|
||||
id: result.osm_id.toString(),
|
||||
provider: "free-geocoding-api"
|
||||
}));
|
||||
};
|
||||
|
||||
// src/utils/fetch-google-geocoding-results.ts
|
||||
var import_obsidian5 = require("obsidian");
|
||||
var fetchGoogleGeocodingResults = async (searchTerm, apiKey) => {
|
||||
const params = new URLSearchParams({
|
||||
address: searchTerm,
|
||||
key: apiKey
|
||||
});
|
||||
const url = `https://maps.googleapis.com/maps/api/geocode/json?${params.toString()}`;
|
||||
const response = await (0, import_obsidian5.requestUrl)({
|
||||
url,
|
||||
throw: false
|
||||
});
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Server responded with ${response.status}`);
|
||||
}
|
||||
const { status, results } = response.json;
|
||||
switch (status) {
|
||||
case "OK":
|
||||
break;
|
||||
case "ZERO_RESULTS":
|
||||
throw new Error("No results found");
|
||||
case "OVER_DAILY_LIMIT":
|
||||
throw new Error("Over daily limit");
|
||||
case "OVER_QUERY_LIMIT":
|
||||
throw new Error("Over query limit");
|
||||
case "REQUEST_DENIED":
|
||||
throw new Error("Request denied (invalid API key?)");
|
||||
default:
|
||||
throw new Error("Unknown API response");
|
||||
}
|
||||
return results.map((result) => ({
|
||||
address: result.formatted_address,
|
||||
lat: result.geometry.location.lat,
|
||||
lng: result.geometry.location.lng,
|
||||
info: result.types.join(", "),
|
||||
id: result.place_id,
|
||||
provider: "google-geocoding"
|
||||
}));
|
||||
};
|
||||
|
||||
// src/utils/make-apple-maps-link.ts
|
||||
var makeAppleMapsLink = ({ address, lat, lng }) => {
|
||||
const params = new URLSearchParams({
|
||||
ll: `${lat},${lng}`,
|
||||
address
|
||||
// used only for display
|
||||
});
|
||||
return `https://maps.apple.com/?${params.toString()}`;
|
||||
};
|
||||
|
||||
// src/utils/make-google-maps-link.ts
|
||||
var makeGoogleMapsLink = ({
|
||||
id,
|
||||
provider,
|
||||
lat,
|
||||
lng
|
||||
}) => {
|
||||
if (provider === "google-geocoding") {
|
||||
return `https://www.google.com/maps/search/?api=1&query=Google&query_place_id=${id}`;
|
||||
}
|
||||
const params = new URLSearchParams({
|
||||
api: "1",
|
||||
// we can only query by lat,lng or address, so we choose the more precise option
|
||||
query: `${lat},${lng}`
|
||||
});
|
||||
return `https://www.google.com/maps/search/?${params.toString()}`;
|
||||
};
|
||||
|
||||
// src/utils/make-osm-link.ts
|
||||
var makeOsmLink = ({ id, provider, lat, lng }) => {
|
||||
if (provider === "free-geocoding-api") {
|
||||
}
|
||||
const params = new URLSearchParams({
|
||||
mlat: lat.toString(),
|
||||
mlon: lng.toString()
|
||||
});
|
||||
return `https://openstreetmap.org/?${params.toString()}`;
|
||||
};
|
||||
|
||||
// src/main.ts
|
||||
var GeocodingPlugin = class extends import_obsidian6.Plugin {
|
||||
async onload() {
|
||||
await this.loadSettings();
|
||||
this.addSettingTab(new GeocodingPluginSettingTab(this.app, this));
|
||||
this.addCommand({
|
||||
id: "insert-into-current-note",
|
||||
name: "Insert properties into current note",
|
||||
editorCallback: async (_, ctx) => {
|
||||
const currentFile = ctx.file;
|
||||
if (!currentFile) {
|
||||
return;
|
||||
}
|
||||
const searchTerm = this.getSearchTerm(currentFile);
|
||||
new GeocodingSearchModal(this, searchTerm).open();
|
||||
}
|
||||
});
|
||||
this.addCommand({
|
||||
id: "insert-into-current-note-no-confirmation",
|
||||
name: "Insert properties into current note (no confirmation)",
|
||||
editorCallback: async (_, ctx) => {
|
||||
const currentFile = ctx.file;
|
||||
if (!currentFile) {
|
||||
return;
|
||||
}
|
||||
const searchTerm = this.getSearchTerm(currentFile);
|
||||
const results = await this.getResults(searchTerm);
|
||||
await this.insertProperties(results[0]);
|
||||
}
|
||||
});
|
||||
}
|
||||
getSearchTerm(file) {
|
||||
let searchTerm = file.basename;
|
||||
const metadataCache = this.app.metadataCache.getFileCache(file);
|
||||
if (metadataCache == null ? void 0 : metadataCache.frontmatter) {
|
||||
searchTerm = metadataCache.frontmatter.address || metadataCache.frontmatter.title || searchTerm;
|
||||
}
|
||||
return searchTerm;
|
||||
}
|
||||
async getResults(searchTerm) {
|
||||
const results = [];
|
||||
try {
|
||||
const { apiProvider, apiKey } = this.settings;
|
||||
switch (apiProvider) {
|
||||
case "free-geocoding-api":
|
||||
results.push(
|
||||
...await fetchFreeGeocodingAPIResults(
|
||||
searchTerm,
|
||||
apiKey
|
||||
)
|
||||
);
|
||||
break;
|
||||
case "google-geocoding":
|
||||
results.push(
|
||||
...await fetchGoogleGeocodingResults(
|
||||
searchTerm,
|
||||
apiKey
|
||||
)
|
||||
);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Invalid API provider: ${apiProvider}`);
|
||||
}
|
||||
} catch (error) {
|
||||
new import_obsidian6.Notice(String(error));
|
||||
throw error;
|
||||
}
|
||||
if (!(results == null ? void 0 : results.length)) {
|
||||
new import_obsidian6.Notice(`No results found for "${searchTerm}"`);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
async insertProperties(result) {
|
||||
const currentFile = this.app.workspace.getActiveFile();
|
||||
if (!currentFile) {
|
||||
return;
|
||||
}
|
||||
const { overrideExistingProperties, mapLinkProvider, properties } = this.settings;
|
||||
this.app.fileManager.processFrontMatter(currentFile, (frontmatter) => {
|
||||
for (const [key, property] of Object.entries(properties)) {
|
||||
const shouldInsert = property.enabled && (overrideExistingProperties || frontmatter[property.frontmatterKey] === void 0);
|
||||
if (!shouldInsert) {
|
||||
continue;
|
||||
}
|
||||
switch (key) {
|
||||
case "location":
|
||||
frontmatter[property.frontmatterKey] = [
|
||||
result.lat.toString(),
|
||||
result.lng.toString()
|
||||
];
|
||||
break;
|
||||
case "map_link":
|
||||
switch (mapLinkProvider) {
|
||||
case "google":
|
||||
frontmatter[property.frontmatterKey] = makeGoogleMapsLink(result);
|
||||
break;
|
||||
case "apple":
|
||||
frontmatter[property.frontmatterKey] = makeAppleMapsLink(result);
|
||||
break;
|
||||
case "osm":
|
||||
frontmatter[property.frontmatterKey] = makeOsmLink(result);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "map_view_link": {
|
||||
frontmatter[property.frontmatterKey] = `[](geo:${result.lat},${result.lng})`;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
frontmatter[property.frontmatterKey] = result[key];
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
async loadSettings() {
|
||||
this.settings = (0, import_deepmerge.default)(defaultSettings, await this.loadData() || {});
|
||||
}
|
||||
async saveSettings() {
|
||||
await this.saveData(this.settings);
|
||||
}
|
||||
};
|
||||
|
||||
/* nosourcemap */
|
10
.obsidian/plugins/geocoding-properties/manifest.json
vendored
Normal file
10
.obsidian/plugins/geocoding-properties/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "geocoding-properties",
|
||||
"name": "Geocoding Properties",
|
||||
"version": "2.0.2",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Insert address / location data from geocoding APIs as Obsidian properties.",
|
||||
"author": "Jose Elias Alvarez",
|
||||
"authorUrl": "https://github.com/jose-elias-alvarez",
|
||||
"isDesktopOnly": false
|
||||
}
|
185
.obsidian/plugins/global-proxy/main.js
vendored
Normal file
185
.obsidian/plugins/global-proxy/main.js
vendored
Normal file
@ -0,0 +1,185 @@
|
||||
var import_obsidian = require("obsidian");
|
||||
|
||||
const DEFAULT_SETTINGS = {
|
||||
enableProxy: false,
|
||||
httpProxy: "",
|
||||
httpsProxy: "",
|
||||
socksProxy: "",
|
||||
bypassRules: "<local>,127.*,10.*,172.16.*,172.17.*,172.18.*,172.19.*,172.20.*,172.21.*,172.22.*,172.23.*,172.24.*,172.25.*,172.26.*,172.27.*,172.28.*,172.29.*,172.30.*,172.31.*,192.168.*",
|
||||
pluginTokens: "persist:surfing-vault-${appId}"
|
||||
};
|
||||
|
||||
var GlobalProxyPlugin = class extends import_obsidian.Plugin {
|
||||
async onload() {
|
||||
await this.loadSettings();
|
||||
this.addSettingTab(new GlobalProxySettingTab(this.app, this));
|
||||
}
|
||||
|
||||
async onunload() {
|
||||
this.disableProxy()
|
||||
}
|
||||
|
||||
async loadSettings() {
|
||||
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
||||
this.sessionMap = {}
|
||||
this.enableProxy();
|
||||
}
|
||||
async saveSettings() {
|
||||
await this.saveData(this.settings);
|
||||
}
|
||||
|
||||
async enableProxy() {
|
||||
if (!this.settings.enableProxy) {
|
||||
return;
|
||||
}
|
||||
|
||||
let sessions = []
|
||||
this.sessionMap.default = electron.remote.session.defaultSession
|
||||
sessions.push(this.sessionMap.default)
|
||||
|
||||
if (!!this.settings.pluginTokens) {
|
||||
let pluginTokens = this.settings.pluginTokens.split("\n");
|
||||
for (var i = 0; i < pluginTokens.length; i++) {
|
||||
if (!pluginTokens[i]) {
|
||||
continue;
|
||||
}
|
||||
let token = pluginTokens[i].replace("${appId}", this.app.appId)
|
||||
let session = await electron.remote.session.fromPartition(token)
|
||||
sessions.push(session)
|
||||
this.sessionMap[token] = session
|
||||
}
|
||||
}
|
||||
|
||||
let proxyRules = this.composeProxyRules(),
|
||||
proxyBypassRules = proxyRules ? this.settings.bypassRules : undefined;
|
||||
|
||||
for (var i = 0; i < sessions.length; i++) {
|
||||
await sessions[i].setProxy({ proxyRules, proxyBypassRules });
|
||||
}
|
||||
|
||||
if (proxyRules) {
|
||||
new import_obsidian.Notice('Enable proxy!');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async disableProxy() {
|
||||
let sessions = []
|
||||
for (const key in this.sessionMap) {
|
||||
sessions.push(this.sessionMap[key])
|
||||
}
|
||||
|
||||
for (var i = 0; i < sessions.length; i++) {
|
||||
await sessions[i].setProxy({});
|
||||
await sessions[i].closeAllConnections();
|
||||
}
|
||||
new import_obsidian.Notice('Disable proxy!');
|
||||
}
|
||||
|
||||
|
||||
composeProxyRules() {
|
||||
if (!["socksProxy", "httpProxy", "httpsProxy"].
|
||||
map((p) => !this.settings[p] || isValidFormat(this.settings[p])).reduce((res, check)=>{return res && check}, true)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
||||
const httpProxy= isValidFormat(this.settings.httpProxy) ? ";http=" + this.settings.httpProxy : "";
|
||||
const httpsProxy= isValidFormat(this.settings.httpsProxy) ? ";https=" + this.settings.httpsProxy : "";
|
||||
if (isValidFormat(this.settings.socksProxy)) {
|
||||
return this.settings.socksProxy + httpProxy + httpsProxy + ",direct://"
|
||||
} else if (!!httpProxy) {
|
||||
return !!httpsProxy ? "http=" + this.settings.httpProxy + httpsProxy + ",direct://"
|
||||
: this.settings.httpProxy + ",direct://"
|
||||
} else if (!!httpsProxy) {
|
||||
return this.settings.httpsProxy + ",direct://"
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
var GlobalProxySettingTab = class extends import_obsidian.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
display() {
|
||||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
new import_obsidian.Setting(containerEl)
|
||||
.setName("Enable proxy")
|
||||
.setDesc("Change your proxy status")
|
||||
.addToggle((val) => val
|
||||
.setValue(this.plugin.settings.enableProxy)
|
||||
.onChange(async (value) => {
|
||||
this.plugin.settings.enableProxy = value;
|
||||
await this.plugin.saveSettings();
|
||||
value ? this.plugin.enableProxy() : this.plugin.disableProxy();
|
||||
}));
|
||||
new import_obsidian.Setting(containerEl)
|
||||
.setName("Socks Proxy")
|
||||
.setDesc("Set up your socks proxy")
|
||||
.addText((text) => text
|
||||
.setPlaceholder("<scheme>://<host>:<port>")
|
||||
.setValue(this.plugin.settings.socksProxy)
|
||||
.onChange((value) => {
|
||||
this.refreshProxy("socksProxy", value);
|
||||
}));
|
||||
new import_obsidian.Setting(containerEl)
|
||||
.setName("Http Proxy")
|
||||
.setDesc("Set up your http proxy")
|
||||
.addText((text) => text
|
||||
.setPlaceholder("<scheme>://<host>:<port>")
|
||||
.setValue(this.plugin.settings.httpProxy)
|
||||
.onChange((value) => {
|
||||
this.refreshProxy("httpProxy", value);
|
||||
}));
|
||||
new import_obsidian.Setting(containerEl)
|
||||
.setName("Https Proxy")
|
||||
.setDesc("Set up your https proxy")
|
||||
.addText((text) => text
|
||||
.setPlaceholder("<scheme>://<host>:<port>")
|
||||
.setValue(this.plugin.settings.httpsProxy)
|
||||
.onChange((value) => {
|
||||
this.refreshProxy("httpsProxy", value);
|
||||
}));
|
||||
new import_obsidian.Setting(containerEl)
|
||||
.setName("Plugin Tokens")
|
||||
.setDesc("For proxy specified plugins")
|
||||
.addTextArea((text) => text
|
||||
.setValue(this.plugin.settings.pluginTokens)
|
||||
.onChange((value) => {
|
||||
this.refreshProxy("pluginTokens", value);
|
||||
}));
|
||||
new import_obsidian.Setting(containerEl)
|
||||
.setName("Blacklist")
|
||||
.setDesc("Proxy blacklist")
|
||||
.addTextArea((text) => text
|
||||
.setPlaceholder("[URL_SCHEME://] HOSTNAME_PATTERN [:<port>]\n. HOSTNAME_SUFFIX_PATTERN [:PORT]\n[SCHEME://] IP_LITERAL [:PORT]\nIP_LITERAL / PREFIX_LENGTH_IN_BITS\n<local>")
|
||||
.setValue(this.plugin.settings.bypassRules)
|
||||
.onChange((value) => {
|
||||
this.refreshProxy("bypassRules", value);
|
||||
}));
|
||||
}
|
||||
async refreshProxy(key, value) {
|
||||
this.plugin.settings[key] = value;
|
||||
this.plugin.saveSettings();
|
||||
|
||||
this.plugin.enableProxy();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function isValidFormat(proxyUrl) {
|
||||
if (!!proxyUrl) {
|
||||
const regex = /^(\w+):\/\/([^:/]+):(\d+)$/;
|
||||
const matches = proxyUrl.match(regex);
|
||||
return !!matches;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = GlobalProxyPlugin;
|
||||
|
||||
/* nosourcemap */
|
11
.obsidian/plugins/global-proxy/manifest.json
vendored
Normal file
11
.obsidian/plugins/global-proxy/manifest.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "global-proxy",
|
||||
"name": "Global Proxy",
|
||||
"version": "1.0.4",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Use network proxy throughout Obsidian according to the rules configured in this plugin.",
|
||||
"author": "windingblack",
|
||||
"fundingUrl": "https://www.buymeacoffee.com/windingblack",
|
||||
"authorUrl": "https://github.com/windingblack",
|
||||
"isDesktopOnly": true
|
||||
}
|
4
.obsidian/plugins/homepage/main.js
vendored
Normal file
4
.obsidian/plugins/homepage/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
13
.obsidian/plugins/homepage/manifest.json
vendored
Normal file
13
.obsidian/plugins/homepage/manifest.json
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "homepage",
|
||||
"name": "Homepage",
|
||||
"version": "4.2",
|
||||
"minAppVersion": "1.4.10",
|
||||
"description": "Open a specified note, canvas, or workspace on startup, or set it for quick access later.",
|
||||
"author": "novov",
|
||||
"authorUrl": "https://novov.me",
|
||||
"isDesktopOnly": false,
|
||||
"fundingUrl": {
|
||||
"Ko-fi": "https://ko-fi.com/novov"
|
||||
}
|
||||
}
|
238
.obsidian/plugins/homepage/styles.css
vendored
Normal file
238
.obsidian/plugins/homepage/styles.css
vendored
Normal file
@ -0,0 +1,238 @@
|
||||
.nv-homepage-interstitial {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background: var(--background-primary);
|
||||
z-index: 9999;
|
||||
animation: 0.02s ease-in 0.5s forwards nv-interstitial-destroy;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@keyframes nv-interstitial-destroy {
|
||||
from { opacity: 1; }
|
||||
to { opacity: 0; }
|
||||
}
|
||||
|
||||
.setting-item[nv-greyed] {
|
||||
opacity: .5;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
#nv-main-setting {
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control {
|
||||
padding-top: var(--size-4-2);
|
||||
flex-basis: 100%;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control input, #nv-main-setting .setting-item-control select {
|
||||
font-size: var(--font-ui-medium);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control select {
|
||||
padding: var(--size-4-3) var(--size-4-4);
|
||||
padding-right: var(--size-4-8);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control input {
|
||||
flex-grow: 1;
|
||||
padding: var(--size-4-5) var(--size-4-4);
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control input[disabled] {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc, #nv-main-setting #nv-info {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc {
|
||||
font-weight: 500;
|
||||
color: var(--text-normal);
|
||||
font-size: var(--font-ui-small);
|
||||
padding: 10px 0 0;
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc.mod-warning {
|
||||
color: var(--text-error);
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc code {
|
||||
font-family: var(--font-monospace);
|
||||
font-size: var(--font-smaller);
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc small {
|
||||
display: block;
|
||||
font-weight: 400;
|
||||
color: var(--text-muted);
|
||||
font-size: calc(var(--font-ui-smaller) * 0.9);
|
||||
padding: 5px 0 0;
|
||||
}
|
||||
|
||||
.nv-mobile-setting {
|
||||
flex-wrap: wrap;
|
||||
row-gap: var(--size-2-2);
|
||||
}
|
||||
|
||||
.nv-mobile-setting .nv-mobile-info {
|
||||
font-size: var(--font-ui-smaller);
|
||||
width: 100%;
|
||||
margin-right: var(--size-4-18);
|
||||
}
|
||||
|
||||
.nv-command-desc {
|
||||
padding: 1.2em 0 0;
|
||||
border-top: 1px solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.nv-command-box {
|
||||
margin: 1em 0 1.75em;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.nv-command-pill {
|
||||
background-color: var(--background-secondary);
|
||||
border: 1px solid var(--background-modifier-border-hover);
|
||||
border-radius: var(--radius-s);
|
||||
font-size: var(--font-ui-small);
|
||||
padding: var(--size-2-1) var(--size-2-2) var(--size-2-1) var(--size-2-3) ;
|
||||
}
|
||||
|
||||
.nv-command-pill.nv-command-invalid {
|
||||
color: var(--text-faint);
|
||||
}
|
||||
|
||||
.nv-command-pill button {
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
margin: 0 0 0 3px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.nv-command-pill button:first-of-type {
|
||||
margin-left: var(--size-4-2);
|
||||
}
|
||||
|
||||
.nv-command-pill button.nv-command-selected {
|
||||
margin-left: var(--size-2-2);
|
||||
padding: 0 var(--size-2-1);
|
||||
}
|
||||
|
||||
.nv-command-pill button.nv-command-selected span {
|
||||
color: var(--text-accent);
|
||||
display: inline-block;
|
||||
font-size: 0.9em;
|
||||
vertical-align: top;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
|
||||
.nv-command-pill > .svg-icon, .nv-command-pill button .svg-icon {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
}
|
||||
|
||||
.nv-command-pill > .svg-icon {
|
||||
vertical-align: text-bottom;
|
||||
position: relative;
|
||||
margin: 0 var(--size-2-1) 0 0;
|
||||
}
|
||||
|
||||
.nv-command-pill.nv-dragging {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.nv-command-add-button {
|
||||
font-size: var(--font-ui-small);
|
||||
padding: var(--size-2-2) var(--size-4-2);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#nv-main-setting + .setting-item, .nv-command-desc + .setting-item {
|
||||
padding-top: 20px;
|
||||
border-top: none !important;
|
||||
}
|
||||
|
||||
.nv-debug-button {
|
||||
margin: 3em 0 -0.2em;
|
||||
font-size: var(--font-ui-smaller);
|
||||
padding: 0;
|
||||
height: auto;
|
||||
float: right;
|
||||
box-shadow: none !important;
|
||||
background: none !important;
|
||||
color: var(--text-accent);
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.nv-debug-button:hover, .nv-debug-button:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.is-phone #nv-main-setting .setting-item-control {
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.is-phone #nv-main-setting .setting-item-control select {
|
||||
width: auto;
|
||||
max-width: auto;
|
||||
}
|
||||
|
||||
.is-phone .nv-mobile-setting {
|
||||
row-gap: var(--size-4-2);
|
||||
}
|
||||
|
||||
.is-phone .nv-mobile-setting .setting-item-info {
|
||||
max-width: calc(100% - 100px);
|
||||
}
|
||||
|
||||
.is-phone .nv-mobile-setting {
|
||||
row-gap: var(--size-4-2);
|
||||
}
|
||||
|
||||
.is-phone .nv-mobile-setting .setting-item-info {
|
||||
max-width: calc(100% - 100px);
|
||||
}
|
||||
|
||||
.is-phone .nv-command-pill {
|
||||
width: 100%;
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 0 0 var(--size-4-2);
|
||||
display: flex;
|
||||
gap: var(--size-4-4);
|
||||
align-items: baseline;
|
||||
}
|
||||
|
||||
.is-phone .nv-command-pill .nv-command-text {
|
||||
flex-grow: 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.is-phone .nv-command-pill, .is-phone .nv-command-add-button {
|
||||
font-size: var(--font-ui-medium);
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.is-phone .nv-command-pill button {
|
||||
line-height: var(--font-ui-medium);
|
||||
height: 100%;
|
||||
margin: 0 !important;
|
||||
}
|
56293
.obsidian/plugins/infranodus-graph-view/main.js
vendored
Normal file
56293
.obsidian/plugins/infranodus-graph-view/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
9
.obsidian/plugins/infranodus-graph-view/manifest.json
vendored
Normal file
9
.obsidian/plugins/infranodus-graph-view/manifest.json
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "infranodus-graph-view",
|
||||
"name": "InfraNodus AI Graph View",
|
||||
"version": "0.9.0",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Interactive 3D graph view: text analysis, topic modeling, gap detection, and AI.",
|
||||
"author": "Nodus Labs",
|
||||
"isDesktopOnly": false
|
||||
}
|
1
.obsidian/plugins/infranodus-graph-view/styles.css
vendored
Normal file
1
.obsidian/plugins/infranodus-graph-view/styles.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
.infranodus-plugin-yellow-highlight { background-color: yellow !important; }
|
5
.obsidian/plugins/kanban-status-updater/data.json
vendored
Normal file
5
.obsidian/plugins/kanban-status-updater/data.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"statusPropertyName": "status",
|
||||
"showNotifications": true,
|
||||
"debugMode": true
|
||||
}
|
480
.obsidian/plugins/kanban-status-updater/main.js
vendored
Normal file
480
.obsidian/plugins/kanban-status-updater/main.js
vendored
Normal file
@ -0,0 +1,480 @@
|
||||
'use strict';
|
||||
|
||||
var obsidian = require('obsidian');
|
||||
|
||||
/******************************************************************************
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
***************************************************************************** */
|
||||
|
||||
function __awaiter(thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
}
|
||||
|
||||
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
||||
var e = new Error(message);
|
||||
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
||||
};
|
||||
|
||||
const DEFAULT_SETTINGS = {
|
||||
statusPropertyName: 'status',
|
||||
showNotifications: false,
|
||||
debugMode: false // Default to false for better performance
|
||||
};
|
||||
class KanbanStatusUpdaterPlugin extends obsidian.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
// Track active observers to disconnect them when not needed
|
||||
this.currentObserver = null;
|
||||
this.isProcessing = false;
|
||||
this.activeKanbanBoard = null;
|
||||
}
|
||||
onload() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
console.log('Loading Kanban Status Updater plugin');
|
||||
// Load settings
|
||||
yield this.loadSettings();
|
||||
// Display startup notification
|
||||
if (this.settings.showNotifications) {
|
||||
new obsidian.Notice('Kanban Status Updater activated');
|
||||
}
|
||||
this.log('Plugin loaded');
|
||||
// Register DOM event listener for drag events - but only process if active leaf is Kanban
|
||||
this.registerDomEvent(document, 'dragend', this.onDragEnd.bind(this));
|
||||
this.log('Registered drag event listener');
|
||||
// Watch for active leaf changes to only observe the current Kanban board
|
||||
this.registerEvent(this.app.workspace.on('active-leaf-change', this.onActiveLeafChange.bind(this)));
|
||||
// Initial check for active Kanban board
|
||||
this.app.workspace.onLayoutReady(() => {
|
||||
this.checkForActiveKanbanBoard();
|
||||
});
|
||||
// Add settings tab
|
||||
this.addSettingTab(new KanbanStatusUpdaterSettingTab(this.app, this));
|
||||
});
|
||||
}
|
||||
onunload() {
|
||||
// Disconnect any active observers to prevent memory leaks
|
||||
this.disconnectObservers();
|
||||
this.log('Plugin unloaded');
|
||||
}
|
||||
loadSettings() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
||||
});
|
||||
}
|
||||
saveSettings() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
yield this.saveData(this.settings);
|
||||
});
|
||||
}
|
||||
// Log helper with debug mode check
|
||||
log(message) {
|
||||
if (this.settings.debugMode) {
|
||||
console.log(`[KSU] ${message}`);
|
||||
}
|
||||
}
|
||||
// Clean up observers when switching away from a Kanban board
|
||||
disconnectObservers() {
|
||||
if (this.currentObserver) {
|
||||
this.log('Disconnecting observer for performance');
|
||||
this.currentObserver.disconnect();
|
||||
this.currentObserver = null;
|
||||
}
|
||||
this.activeKanbanBoard = null;
|
||||
}
|
||||
// Check if the active leaf is a Kanban board
|
||||
onActiveLeafChange(leaf) {
|
||||
this.checkForActiveKanbanBoard();
|
||||
}
|
||||
checkForActiveKanbanBoard() {
|
||||
var _a;
|
||||
// First disconnect any existing observers
|
||||
this.disconnectObservers();
|
||||
// Get the active leaf using the non-deprecated API
|
||||
const activeLeaf = this.app.workspace.getLeaf(false);
|
||||
if (!activeLeaf)
|
||||
return;
|
||||
try {
|
||||
// Find the content element safely
|
||||
let contentEl = null;
|
||||
// Use type assertions to avoid TypeScript errors
|
||||
if (activeLeaf.view) {
|
||||
// Try to access the contentEl property using type assertion
|
||||
contentEl = activeLeaf.view.contentEl || null;
|
||||
}
|
||||
// If that didn't work, try another approach
|
||||
if (!contentEl) {
|
||||
// Try to get the Kanban board directly from the DOM
|
||||
// Leaf containers have 'view-content' elements that contain the actual view
|
||||
const viewContent = (_a = activeLeaf.containerEl) === null || _a === void 0 ? void 0 : _a.querySelector('.view-content');
|
||||
if (viewContent) {
|
||||
contentEl = viewContent;
|
||||
}
|
||||
else {
|
||||
// Last resort - look for Kanban boards anywhere in the workspace
|
||||
contentEl = document.querySelector('.workspace-leaf.mod-active .view-content');
|
||||
}
|
||||
}
|
||||
if (!contentEl) {
|
||||
this.log('Could not access content element for active leaf');
|
||||
return;
|
||||
}
|
||||
// Check if this is a Kanban board
|
||||
const kanbanBoard = contentEl.querySelector('.kanban-plugin__board');
|
||||
if (kanbanBoard) {
|
||||
this.log('Found active Kanban board, setting up observer');
|
||||
// Store reference to active board
|
||||
this.activeKanbanBoard = kanbanBoard;
|
||||
// Set up observer only for this board
|
||||
this.setupObserverForBoard(kanbanBoard);
|
||||
}
|
||||
else {
|
||||
this.log('Active leaf is not a Kanban board');
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
this.log(`Error detecting Kanban board: ${error.message}`);
|
||||
}
|
||||
}
|
||||
setupObserverForBoard(boardElement) {
|
||||
// Create a new observer for this specific board
|
||||
this.currentObserver = new MutationObserver((mutations) => {
|
||||
if (this.isProcessing)
|
||||
return;
|
||||
// Simple debounce to prevent rapid-fire processing
|
||||
this.isProcessing = true;
|
||||
setTimeout(() => {
|
||||
this.handleMutations(mutations);
|
||||
this.isProcessing = false;
|
||||
}, 300);
|
||||
});
|
||||
// Observe only this board with minimal options needed
|
||||
this.currentObserver.observe(boardElement, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
attributes: false // Don't need attribute changes for performance
|
||||
});
|
||||
this.log('Observer set up for active Kanban board');
|
||||
}
|
||||
handleMutations(mutations) {
|
||||
if (!this.activeKanbanBoard)
|
||||
return;
|
||||
try {
|
||||
const max_mutations = 10;
|
||||
// Only process a sample of mutations for performance
|
||||
const mutationsToProcess = mutations.length > max_mutations ?
|
||||
mutations.slice(0, max_mutations) : mutations;
|
||||
this.log(`Got ${mutationsToProcess.length} mutations of ${mutations.length}`);
|
||||
// Look for Kanban items in mutation
|
||||
let i = 0;
|
||||
for (const mutation of mutationsToProcess) {
|
||||
this.log(`Mutation #${++i} - Type: ${mutation.type}`);
|
||||
if (mutation.type === 'childList') {
|
||||
// Check added nodes for Kanban items
|
||||
for (const node of Array.from(mutation.addedNodes)) {
|
||||
try {
|
||||
// Check if node is any kind of Element (HTML or SVG)
|
||||
if (node instanceof Element) {
|
||||
this.log(`Processing Element of type: ${node.tagName}`);
|
||||
// Handle the node according to its type
|
||||
if (node instanceof HTMLElement || node instanceof HTMLDivElement) {
|
||||
// Direct processing for HTML elements
|
||||
this.log(`Found HTML element of type ${node.className}`);
|
||||
this.processElement(node);
|
||||
}
|
||||
else if (node instanceof SVGElement) {
|
||||
// For SVG elements, look for parent HTML element
|
||||
const parentElement = node.closest('.kanban-plugin__item');
|
||||
if (parentElement) {
|
||||
this.log('Found Kanban item parent of SVG element');
|
||||
this.processElement(parentElement);
|
||||
}
|
||||
else {
|
||||
// Look for any kanban items in the document that might have changed
|
||||
// This is for cases where the SVG update is related to a card movement
|
||||
const items = this.activeKanbanBoard.querySelectorAll('.kanban-plugin__item');
|
||||
if (items.length > 0) {
|
||||
// Process only the most recently modified item
|
||||
const recentItems = Array.from(items).slice(-1);
|
||||
for (const item of recentItems) {
|
||||
this.log('Processing recent item after SVG change');
|
||||
this.processElement(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (node.nodeType === Node.TEXT_NODE) {
|
||||
// For text nodes, check the parent element
|
||||
const parentElement = node.parentElement;
|
||||
if (parentElement && (parentElement.classList.contains('kanban-plugin__item-title') ||
|
||||
parentElement.closest('.kanban-plugin__item'))) {
|
||||
this.log('Found text change in Kanban item');
|
||||
const itemElement = parentElement.closest('.kanban-plugin__item');
|
||||
if (itemElement) {
|
||||
this.processElement(itemElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.log(`Skipping node type: ${node.nodeType}`);
|
||||
}
|
||||
}
|
||||
catch (nodeError) {
|
||||
this.log(`Error processing node: ${nodeError.message}`);
|
||||
// Continue with next node even if this one fails
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.log('Ignoring mutation type: ' + mutation.type);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
this.log(`Error in handleMutations: ${error.message}`);
|
||||
}
|
||||
}
|
||||
onDragEnd(event) {
|
||||
// Only process if we have an active Kanban board
|
||||
if (!this.activeKanbanBoard || this.isProcessing) {
|
||||
this.log('Drag end detected but no active Kanban board or already processing');
|
||||
this.log('activeKanbanBoard: ' + (this.activeKanbanBoard ? 'Yes' : 'No'));
|
||||
this.log('isProcessing: ' + (this.isProcessing ? 'Yes' : 'No'));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
this.log('Drag end detected');
|
||||
// Set processing flag to prevent multiple processing
|
||||
this.isProcessing = true;
|
||||
const target = event.target;
|
||||
if (!target)
|
||||
return;
|
||||
this.processElement(target);
|
||||
}
|
||||
catch (error) {
|
||||
this.log(`Error in onDragEnd: ${error.message}`);
|
||||
}
|
||||
finally {
|
||||
// Reset processing flag after a delay to debounce
|
||||
setTimeout(() => {
|
||||
this.isProcessing = false;
|
||||
}, 300);
|
||||
}
|
||||
}
|
||||
processElement(element) {
|
||||
try {
|
||||
// Only process if inside our active Kanban board
|
||||
if (!this.activeKanbanBoard || !element.closest('.kanban-plugin__board')) {
|
||||
this.log('Element NOT in active Kanban board. Skipping.');
|
||||
return;
|
||||
}
|
||||
// Use different strategies to find the Kanban item
|
||||
this.log("👀 Looking for Kanban item element");
|
||||
// Check if element is a Kanban item or contains one
|
||||
const kanbanItem = element.classList.contains('kanban-plugin__item')
|
||||
? element
|
||||
: element.querySelector('.kanban-plugin__item');
|
||||
if (kanbanItem) {
|
||||
this.log(`✅ Found Kanban item: ${kanbanItem}`);
|
||||
this.log('classList of kanbanItem: ' + kanbanItem.classList);
|
||||
this.processKanbanItem(kanbanItem);
|
||||
return;
|
||||
}
|
||||
this.log('Not a Kanban item, checking for parent');
|
||||
// If element is inside a Kanban item, find the parent
|
||||
const parentItem = element.closest('.kanban-plugin__item');
|
||||
this.log(`Parent item: ${parentItem ? parentItem : 'Not found'}`);
|
||||
if (parentItem) {
|
||||
this.processKanbanItem(parentItem);
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
this.log(`Error in processElement: ${error.message}`);
|
||||
}
|
||||
}
|
||||
processKanbanItem(itemElement) {
|
||||
try {
|
||||
// TODO: Select the title
|
||||
const internalLink = itemElement.querySelector('.kanban-plugin__item-title .kanban-plugin__item-markdown a.internal-link');
|
||||
if (!internalLink) {
|
||||
this.log('🚫 No internal link found in item');
|
||||
return;
|
||||
}
|
||||
this.log(`Found internal link: ${internalLink.textContent}`);
|
||||
// Get the link path from data-href or href attribute
|
||||
const linkPath = internalLink.getAttribute('data-href') ||
|
||||
internalLink.getAttribute('href');
|
||||
if (!linkPath)
|
||||
return;
|
||||
this.log(`🔗 Link path: ${linkPath}`);
|
||||
// Find the lane (column) this item is in
|
||||
const lane = itemElement.closest('.kanban-plugin__lane');
|
||||
if (!lane) {
|
||||
this.log('🚫 No lane found for item');
|
||||
return;
|
||||
}
|
||||
// Get column name from the lane header
|
||||
const laneHeader = lane.querySelector('.kanban-plugin__lane-header-wrapper .kanban-plugin__lane-title');
|
||||
if (!laneHeader) {
|
||||
this.log('🚫 No laneHeader found for item');
|
||||
return;
|
||||
}
|
||||
const columnName = laneHeader.textContent.trim();
|
||||
this.log(`✅ Got lane name: ${columnName}`);
|
||||
this.log(`Processing card with link to "${linkPath}" in column "${columnName}"`);
|
||||
// Update the linked note's status
|
||||
this.updateNoteStatus(linkPath, columnName);
|
||||
}
|
||||
catch (error) {
|
||||
this.log(`Error in processKanbanItem: ${error.message}`);
|
||||
}
|
||||
}
|
||||
updateNoteStatus(notePath, status) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
// Find the linked file
|
||||
const file = this.app.metadataCache.getFirstLinkpathDest(notePath, '');
|
||||
if (!file) {
|
||||
if (this.settings.showNotifications) {
|
||||
new obsidian.Notice(`⚠️ Note "${notePath}" not found`, 3000);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Get current status if it exists
|
||||
const metadata = this.app.metadataCache.getFileCache(file);
|
||||
let oldStatus = null;
|
||||
if ((metadata === null || metadata === void 0 ? void 0 : metadata.frontmatter) && metadata.frontmatter[this.settings.statusPropertyName]) {
|
||||
oldStatus = metadata.frontmatter[this.settings.statusPropertyName];
|
||||
}
|
||||
// Only update if status has changed
|
||||
if (oldStatus !== status) {
|
||||
// Use the processFrontMatter API to update the frontmatter
|
||||
yield this.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
// Set the status property
|
||||
frontmatter[this.settings.statusPropertyName] = status;
|
||||
});
|
||||
// Show notification if enabled
|
||||
if (this.settings.showNotifications) {
|
||||
if (oldStatus) {
|
||||
new obsidian.Notice(`Updated ${this.settings.statusPropertyName}: "${oldStatus}" → "${status}" for ${file.basename}`, 3000);
|
||||
}
|
||||
else {
|
||||
new obsidian.Notice(`Set ${this.settings.statusPropertyName}: "${status}" for ${file.basename}`, 3000);
|
||||
}
|
||||
}
|
||||
this.log(`Updated status for ${file.basename} to "${status}"`);
|
||||
}
|
||||
else {
|
||||
this.log(`Status already set to "${status}" for ${file.basename}, skipping update`);
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
this.log(`Error updating note status: ${error.message}`);
|
||||
if (this.settings.showNotifications) {
|
||||
new obsidian.Notice(`⚠️ Error updating status: ${error.message}`, 3000);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
// Method for the test button to use
|
||||
runTest() {
|
||||
this.log('Running test...');
|
||||
// Make sure we're using the current active board
|
||||
this.checkForActiveKanbanBoard();
|
||||
if (!this.activeKanbanBoard) {
|
||||
new obsidian.Notice('⚠️ No active Kanban board found - open a Kanban board first', 5000);
|
||||
return;
|
||||
}
|
||||
// Find items in the active board
|
||||
const items = this.activeKanbanBoard.querySelectorAll('.kanban-plugin__item');
|
||||
const count = items.length;
|
||||
new obsidian.Notice(`Found ${count} cards in active Kanban board`, 3000);
|
||||
if (count > 0) {
|
||||
// Process the first item with a link
|
||||
for (let i = 0; i < count; i++) {
|
||||
const item = items[i];
|
||||
if (item.querySelector('a.internal-link')) {
|
||||
new obsidian.Notice(`Testing with card: "${item.textContent.substring(0, 20)}..."`, 3000);
|
||||
this.processKanbanItem(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
class KanbanStatusUpdaterSettingTab extends obsidian.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
display() {
|
||||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
new obsidian.Setting(containerEl)
|
||||
.setName('Status property name')
|
||||
.setDesc('The name of the property to update when a card is moved')
|
||||
.addText(text => text
|
||||
.setPlaceholder('status')
|
||||
.setValue(this.plugin.settings.statusPropertyName)
|
||||
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||||
this.plugin.settings.statusPropertyName = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})));
|
||||
new obsidian.Setting(containerEl)
|
||||
.setName('Show notifications')
|
||||
.setDesc('Show a notification when a status is updated')
|
||||
.addToggle(toggle => toggle
|
||||
.setValue(this.plugin.settings.showNotifications)
|
||||
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||||
this.plugin.settings.showNotifications = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})));
|
||||
new obsidian.Setting(containerEl)
|
||||
.setName('Debug mode')
|
||||
.setDesc('Enable detailed logging (reduces performance)')
|
||||
.addToggle(toggle => toggle
|
||||
.setValue(this.plugin.settings.debugMode)
|
||||
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||||
this.plugin.settings.debugMode = value;
|
||||
yield this.plugin.saveSettings();
|
||||
if (value) {
|
||||
new obsidian.Notice('Debug mode enabled - check console for logs', 3000);
|
||||
}
|
||||
else {
|
||||
new obsidian.Notice('Debug mode disabled', 3000);
|
||||
}
|
||||
})));
|
||||
// Add a test button
|
||||
new obsidian.Setting(containerEl)
|
||||
.setName('Test plugin')
|
||||
.setDesc('Test with current Kanban board')
|
||||
.addButton(button => button
|
||||
.setButtonText('Run Test')
|
||||
.onClick(() => {
|
||||
this.plugin.runTest();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = KanbanStatusUpdaterPlugin;
|
||||
|
||||
|
||||
/* nosourcemap */
|
10
.obsidian/plugins/kanban-status-updater/manifest.json
vendored
Normal file
10
.obsidian/plugins/kanban-status-updater/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "kanban-status-updater",
|
||||
"name": "Kanban Status Updater",
|
||||
"version": "1.0.0",
|
||||
"minAppVersion": "1.1.0",
|
||||
"description": "Automatically updates a 'status' property in a note when its card is moved on a Kanban board",
|
||||
"author": "Ankit Kapur",
|
||||
"authorUrl": "https://github.com/ankit-kapur",
|
||||
"isDesktopOnly": false
|
||||
}
|
13
.obsidian/plugins/kanban-status-updater/styles.css
vendored
Normal file
13
.obsidian/plugins/kanban-status-updater/styles.css
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
/* styles.css for Kanban Status Updater */
|
||||
|
||||
/* Status bar styling - minimal to ensure good performance */
|
||||
.kanban-status-updater-statusbar {
|
||||
color: var(--text-accent);
|
||||
font-size: 0.8em;
|
||||
padding: 0 8px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.kanban-status-updater-statusbar:hover {
|
||||
opacity: 1;
|
||||
}
|
25
.obsidian/plugins/metaedit/data.json
vendored
Normal file
25
.obsidian/plugins/metaedit/data.json
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"ProgressProperties": {
|
||||
"enabled": true,
|
||||
"properties": []
|
||||
},
|
||||
"IgnoredProperties": {
|
||||
"enabled": false,
|
||||
"properties": []
|
||||
},
|
||||
"AutoProperties": {
|
||||
"enabled": true,
|
||||
"properties": []
|
||||
},
|
||||
"EditMode": {
|
||||
"mode": "All Single",
|
||||
"properties": []
|
||||
},
|
||||
"KanbanHelper": {
|
||||
"enabled": true,
|
||||
"boards": []
|
||||
},
|
||||
"UIElements": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
5540
.obsidian/plugins/metaedit/main.js
vendored
Normal file
5540
.obsidian/plugins/metaedit/main.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
.obsidian/plugins/metaedit/manifest.json
vendored
Normal file
10
.obsidian/plugins/metaedit/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "metaedit",
|
||||
"name": "MetaEdit",
|
||||
"version": "1.8.2",
|
||||
"minAppVersion": "1.4.1",
|
||||
"description": "MetaEdit helps you manage your metadata.",
|
||||
"author": "Christian B. B. Houmann",
|
||||
"authorUrl": "https://bagerbach.com",
|
||||
"isDesktopOnly": false
|
||||
}
|
15
.obsidian/plugins/metaedit/styles.css
vendored
Normal file
15
.obsidian/plugins/metaedit/styles.css
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
.centerSettingContent {
|
||||
display: grid;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.not-a-button {
|
||||
background: none;
|
||||
color: inherit;
|
||||
border: none;
|
||||
padding: 0;
|
||||
font: inherit;
|
||||
cursor: pointer;
|
||||
outline: inherit;
|
||||
}
|
6
.obsidian/plugins/obsidian-git/data.json
vendored
6
.obsidian/plugins/obsidian-git/data.json
vendored
@ -28,7 +28,7 @@
|
||||
"gitDir": "",
|
||||
"showFileMenu": true,
|
||||
"authorInHistoryView": "hide",
|
||||
"dateInHistoryView": false,
|
||||
"dateInHistoryView": true,
|
||||
"diffStyle": "split",
|
||||
"lineAuthor": {
|
||||
"show": false,
|
||||
@ -51,7 +51,9 @@
|
||||
},
|
||||
"textColorCss": "var(--text-muted)",
|
||||
"ignoreWhitespace": false,
|
||||
"gutterSpacingFallbackLength": 5
|
||||
"gutterSpacingFallbackLength": 5,
|
||||
"lastShownAuthorDisplay": "initials",
|
||||
"lastShownDateTimeFormatOptions": "date"
|
||||
},
|
||||
"autoCommitMessage": "vault backup: {{date}}"
|
||||
}
|
15
.obsidian/plugins/obsidian-kanban/data.json
vendored
Normal file
15
.obsidian/plugins/obsidian-kanban/data.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"new-note-template": "templates/kanban_template.md",
|
||||
"show-checkboxes": false,
|
||||
"hide-card-count": true,
|
||||
"link-date-to-daily-note": true,
|
||||
"metadata-keys": [
|
||||
{
|
||||
"metadataKey": "status",
|
||||
"label": "status",
|
||||
"shouldHideLabel": false,
|
||||
"containsMarkdown": false
|
||||
}
|
||||
],
|
||||
"new-note-folder": "kanban/notes"
|
||||
}
|
292
.obsidian/plugins/obsidian-linter/data.json
vendored
Normal file
292
.obsidian/plugins/obsidian-linter/data.json
vendored
Normal file
@ -0,0 +1,292 @@
|
||||
{
|
||||
"ruleConfigs": {
|
||||
"add-blank-line-after-yaml": {
|
||||
"enabled": false
|
||||
},
|
||||
"dedupe-yaml-array-values": {
|
||||
"enabled": false,
|
||||
"dedupe-alias-key": true,
|
||||
"dedupe-tag-key": true,
|
||||
"dedupe-array-keys": true,
|
||||
"ignore-keys": ""
|
||||
},
|
||||
"escape-yaml-special-characters": {
|
||||
"enabled": false,
|
||||
"try-to-escape-single-line-arrays": false
|
||||
},
|
||||
"force-yaml-escape": {
|
||||
"enabled": false,
|
||||
"force-yaml-escape-keys": ""
|
||||
},
|
||||
"format-tags-in-yaml": {
|
||||
"enabled": false
|
||||
},
|
||||
"format-yaml-array": {
|
||||
"enabled": false,
|
||||
"alias-key": true,
|
||||
"tag-key": true,
|
||||
"default-array-style": "single-line",
|
||||
"default-array-keys": true,
|
||||
"force-single-line-array-style": "",
|
||||
"force-multi-line-array-style": ""
|
||||
},
|
||||
"insert-yaml-attributes": {
|
||||
"enabled": false,
|
||||
"text-to-insert": "aliases: \ntags: "
|
||||
},
|
||||
"move-tags-to-yaml": {
|
||||
"enabled": false,
|
||||
"how-to-handle-existing-tags": "Nothing",
|
||||
"tags-to-ignore": ""
|
||||
},
|
||||
"remove-yaml-keys": {
|
||||
"enabled": false,
|
||||
"yaml-keys-to-remove": ""
|
||||
},
|
||||
"sort-yaml-array-values": {
|
||||
"enabled": false,
|
||||
"sort-alias-key": true,
|
||||
"sort-tag-key": true,
|
||||
"sort-array-keys": true,
|
||||
"ignore-keys": "",
|
||||
"sort-order": "Ascending Alphabetical"
|
||||
},
|
||||
"yaml-key-sort": {
|
||||
"enabled": false,
|
||||
"yaml-key-priority-sort-order": "",
|
||||
"priority-keys-at-start-of-yaml": true,
|
||||
"yaml-sort-order-for-other-keys": "None"
|
||||
},
|
||||
"yaml-timestamp": {
|
||||
"enabled": false,
|
||||
"date-created": true,
|
||||
"date-created-key": "date created",
|
||||
"date-created-source-of-truth": "file system",
|
||||
"date-modified": true,
|
||||
"date-modified-key": "date modified",
|
||||
"date-modified-source-of-truth": "file system",
|
||||
"format": "dddd, MMMM Do YYYY, h:mm:ss a",
|
||||
"convert-to-utc": false,
|
||||
"update-on-file-contents-updated": "never"
|
||||
},
|
||||
"yaml-title": {
|
||||
"enabled": false,
|
||||
"title-key": "title",
|
||||
"mode": "first-h1-or-filename-if-h1-missing"
|
||||
},
|
||||
"yaml-title-alias": {
|
||||
"enabled": false,
|
||||
"preserve-existing-alias-section-style": true,
|
||||
"keep-alias-that-matches-the-filename": false,
|
||||
"use-yaml-key-to-keep-track-of-old-filename-or-heading": true,
|
||||
"alias-helper-key": "linter-yaml-title-alias"
|
||||
},
|
||||
"capitalize-headings": {
|
||||
"enabled": false,
|
||||
"style": "Title Case",
|
||||
"ignore-case-words": true,
|
||||
"ignore-words": "macOS, iOS, iPhone, iPad, JavaScript, TypeScript, AppleScript, I",
|
||||
"lowercase-words": "a, an, the, aboard, about, abt., above, abreast, absent, across, after, against, along, aloft, alongside, amid, amidst, mid, midst, among, amongst, anti, apropos, around, round, as, aslant, astride, at, atop, ontop, bar, barring, before, B4, behind, below, beneath, neath, beside, besides, between, 'tween, beyond, but, by, chez, circa, c., ca., come, concerning, contra, counting, cum, despite, spite, down, during, effective, ere, except, excepting, excluding, failing, following, for, from, in, including, inside, into, less, like, minus, modulo, mod, near, nearer, nearest, next, notwithstanding, of, o', off, offshore, on, onto, opposite, out, outside, over, o'er, pace, past, pending, per, plus, post, pre, pro, qua, re, regarding, respecting, sans, save, saving, short, since, sub, than, through, thru, throughout, thruout, till, times, to, t', touching, toward, towards, under, underneath, unlike, until, unto, up, upon, versus, vs., v., via, vice, vis-à-vis, wanting, with, w/, w., c̄, within, w/i, without, 'thout, w/o, abroad, adrift, aft, afterward, afterwards, ahead, apart, ashore, aside, away, back, backward, backwards, beforehand, downhill, downstage, downstairs, downstream, downward, downwards, downwind, east, eastward, eastwards, forth, forward, forwards, heavenward, heavenwards, hence, henceforth, here, hereby, herein, hereof, hereto, herewith, home, homeward, homewards, indoors, inward, inwards, leftward, leftwards, north, northeast, northward, northwards, northwest, now, onward, onwards, outdoors, outward, outwards, overboard, overhead, overland, overseas, rightward, rightwards, seaward, seawards, skywards, skyward, south, southeast, southwards, southward, southwest, then, thence, thenceforth, there, thereby, therein, thereof, thereto, therewith, together, underfoot, underground, uphill, upstage, upstairs, upstream, upward, upwards, upwind, west, westward, westwards, when, whence, where, whereby, wherein, whereto, wherewith, although, because, considering, given, granted, if, lest, once, provided, providing, seeing, so, supposing, though, unless, whenever, whereas, wherever, while, whilst, ago, according to, as regards, counter to, instead of, owing to, pertaining to, at the behest of, at the expense of, at the hands of, at risk of, at the risk of, at variance with, by dint of, by means of, by virtue of, by way of, for the sake of, for sake of, for lack of, for want of, from want of, in accordance with, in addition to, in case of, in charge of, in compliance with, in conformity with, in contact with, in exchange for, in favor of, in front of, in lieu of, in light of, in the light of, in line with, in place of, in point of, in quest of, in relation to, in regard to, with regard to, in respect to, with respect to, in return for, in search of, in step with, in touch with, in terms of, in the name of, in view of, on account of, on behalf of, on grounds of, on the grounds of, on the part of, on top of, with a view to, with the exception of, à la, a la, as soon as, as well as, close to, due to, far from, in case, other than, prior to, pursuant to, regardless of, subsequent to, as long as, as much as, as far as, by the time, in as much as, inasmuch, in order to, in order that, even, provide that, if only, whether, whose, whoever, why, how, or not, whatever, what, both, and, or, not only, but also, either, neither, nor, just, rather, no sooner, such, that, yet, is, it"
|
||||
},
|
||||
"file-name-heading": {
|
||||
"enabled": false
|
||||
},
|
||||
"header-increment": {
|
||||
"enabled": false,
|
||||
"start-at-h2": false
|
||||
},
|
||||
"headings-start-line": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-trailing-punctuation-in-heading": {
|
||||
"enabled": false,
|
||||
"punctuation-to-remove": ".,;:!。,;:!"
|
||||
},
|
||||
"footnote-after-punctuation": {
|
||||
"enabled": false
|
||||
},
|
||||
"move-footnotes-to-the-bottom": {
|
||||
"enabled": false
|
||||
},
|
||||
"re-index-footnotes": {
|
||||
"enabled": false
|
||||
},
|
||||
"auto-correct-common-misspellings": {
|
||||
"enabled": false,
|
||||
"ignore-words": "",
|
||||
"skip-words-with-multiple-capitals": false,
|
||||
"extra-auto-correct-files": []
|
||||
},
|
||||
"blockquote-style": {
|
||||
"enabled": false,
|
||||
"style": "space"
|
||||
},
|
||||
"convert-bullet-list-markers": {
|
||||
"enabled": false
|
||||
},
|
||||
"default-language-for-code-fences": {
|
||||
"enabled": false,
|
||||
"default-language": ""
|
||||
},
|
||||
"emphasis-style": {
|
||||
"enabled": false,
|
||||
"style": "consistent"
|
||||
},
|
||||
"no-bare-urls": {
|
||||
"enabled": false,
|
||||
"no-bare-uris": false
|
||||
},
|
||||
"ordered-list-style": {
|
||||
"enabled": false,
|
||||
"number-style": "ascending",
|
||||
"list-end-style": "."
|
||||
},
|
||||
"proper-ellipsis": {
|
||||
"enabled": false
|
||||
},
|
||||
"quote-style": {
|
||||
"enabled": false,
|
||||
"single-quote-enabled": true,
|
||||
"single-quote-style": "''",
|
||||
"double-quote-enabled": true,
|
||||
"double-quote-style": "\"\""
|
||||
},
|
||||
"remove-consecutive-list-markers": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-empty-list-markers": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-hyphenated-line-breaks": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-multiple-spaces": {
|
||||
"enabled": false
|
||||
},
|
||||
"strong-style": {
|
||||
"enabled": false,
|
||||
"style": "consistent"
|
||||
},
|
||||
"two-spaces-between-lines-with-content": {
|
||||
"enabled": false,
|
||||
"line-break-indicator": " "
|
||||
},
|
||||
"unordered-list-style": {
|
||||
"enabled": false,
|
||||
"list-style": "consistent"
|
||||
},
|
||||
"compact-yaml": {
|
||||
"enabled": false,
|
||||
"inner-new-lines": false
|
||||
},
|
||||
"consecutive-blank-lines": {
|
||||
"enabled": false
|
||||
},
|
||||
"convert-spaces-to-tabs": {
|
||||
"enabled": false,
|
||||
"tabsize": 4
|
||||
},
|
||||
"empty-line-around-blockquotes": {
|
||||
"enabled": false
|
||||
},
|
||||
"empty-line-around-code-fences": {
|
||||
"enabled": false
|
||||
},
|
||||
"empty-line-around-horizontal-rules": {
|
||||
"enabled": false
|
||||
},
|
||||
"empty-line-around-math-blocks": {
|
||||
"enabled": false
|
||||
},
|
||||
"empty-line-around-tables": {
|
||||
"enabled": false
|
||||
},
|
||||
"heading-blank-lines": {
|
||||
"enabled": false,
|
||||
"bottom": true,
|
||||
"empty-line-after-yaml": true
|
||||
},
|
||||
"line-break-at-document-end": {
|
||||
"enabled": false
|
||||
},
|
||||
"move-math-block-indicators-to-their-own-line": {
|
||||
"enabled": false
|
||||
},
|
||||
"paragraph-blank-lines": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-empty-lines-between-list-markers-and-checklists": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-link-spacing": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-space-around-characters": {
|
||||
"enabled": false,
|
||||
"include-fullwidth-forms": true,
|
||||
"include-cjk-symbols-and-punctuation": true,
|
||||
"include-dashes": true,
|
||||
"other-symbols": ""
|
||||
},
|
||||
"remove-space-before-or-after-characters": {
|
||||
"enabled": false,
|
||||
"characters-to-remove-space-before": ",!?;:).’”]",
|
||||
"characters-to-remove-space-after": "¿¡‘“(["
|
||||
},
|
||||
"space-after-list-markers": {
|
||||
"enabled": false
|
||||
},
|
||||
"space-between-chinese-japanese-or-korean-and-english-or-numbers": {
|
||||
"enabled": false,
|
||||
"english-symbols-punctuation-before": "-+;:'\"°%$)]",
|
||||
"english-symbols-punctuation-after": "-+'\"([¥$"
|
||||
},
|
||||
"trailing-spaces": {
|
||||
"enabled": false,
|
||||
"twp-space-line-break": false
|
||||
},
|
||||
"add-blockquote-indentation-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"prevent-double-checklist-indicator-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"prevent-double-list-item-indicator-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"proper-ellipsis-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-hyphens-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-leading-or-trailing-whitespace-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-leftover-footnotes-from-quote-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-multiple-blank-lines-on-paste": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"lintOnSave": true,
|
||||
"recordLintOnSaveLogs": false,
|
||||
"displayChanged": true,
|
||||
"lintOnFileChange": true,
|
||||
"displayLintOnFileChangeNotice": true,
|
||||
"settingsConvertedToConfigKeyValues": true,
|
||||
"foldersToIgnore": [],
|
||||
"filesToIgnore": [],
|
||||
"linterLocale": "system-default",
|
||||
"logLevel": "ERROR",
|
||||
"lintCommands": [],
|
||||
"customRegexes": [],
|
||||
"commonStyles": {
|
||||
"aliasArrayStyle": "single-line",
|
||||
"tagArrayStyle": "single-line",
|
||||
"minimumNumberOfDollarSignsToBeAMathBlock": 2,
|
||||
"escapeCharacter": "\"",
|
||||
"removeUnnecessaryEscapeCharsForMultiLineArrays": false
|
||||
}
|
||||
}
|
325
.obsidian/plugins/obsidian-linter/main.js
vendored
Normal file
325
.obsidian/plugins/obsidian-linter/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/obsidian-linter/manifest.json
vendored
Normal file
11
.obsidian/plugins/obsidian-linter/manifest.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "obsidian-linter",
|
||||
"name": "Linter",
|
||||
"version": "1.28.0",
|
||||
"minAppVersion": "1.5.7",
|
||||
"description": "Formats and styles your notes. It can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular markdown contents like list, italics, and bold styles; and more with the use of custom rule options as well.",
|
||||
"author": "Victor Tao",
|
||||
"authorUrl": "https://github.com/platers",
|
||||
"helpUrl": "https://platers.github.io/obsidian-linter/",
|
||||
"isDesktopOnly": false
|
||||
}
|
1
.obsidian/plugins/obsidian-linter/styles.css
vendored
Normal file
1
.obsidian/plugins/obsidian-linter/styles.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
.linter-navigation-item{align-items:center;background-color:var(--background-primary-secondary-alt);border:1px solid var(--background-modifier-border);border-radius:100px;border-radius:8px 8px 2px 2px;cursor:pointer;display:flex;flex-direction:row;font-size:16px;font-weight:700;gap:4px;height:32px;overflow:hidden;padding:4px 6px;transition:color .25s ease-in-out,padding .25s ease-in-out,background-color .35s cubic-bezier(.45,.25,.83,.67),max-width .35s cubic-bezier(.57,.04,.58,1);white-space:nowrap}@media screen and (max-width:1325px){.linter-navigation-item.linter-desktop{max-width:32px}}@media screen and (max-width:800px){.linter-navigation-item.linter-mobile{max-width:32px}}.linter-navigation-item-icon,.linter-warning{padding-top:5px}.linter-navigation-item:hover{border-color:var(--interactive-accent-hover);border-bottom:0}.linter-navigation-item-selected{background-color:var(--interactive-accent)!important;border:1px solid var(--background-modifier-border);border-bottom:0;border-radius:8px 8px 2px 2px;color:var(--text-on-accent);max-width:100%!important;padding:4px 9px!important;transition:color .25s ease-in-out,padding .25s ease-in-out,background-color .35s cubic-bezier(.45,.25,.83,.67),max-width .45s cubic-bezier(.57,.04,.58,1) .2s}.linter{transition:transform .4s 0s}.linter-setting-title{align-items:baseline;display:flex;gap:30px;justify-content:space-between}.linter-setting-title.linter-mobile{justify-content:space-around}.linter-setting-title h1{font-weight:900;margin-bottom:12px;margin-top:6px}.linter-setting-header{margin-bottom:24px;overflow-x:auto;overflow-y:hidden}.linter-setting-header .linter-setting-tab-group{align-items:flex-end;display:flex;flex-wrap:wrap;width:100%}.linter-setting-tab-group{border-bottom:2px solid var(--background-modifier-border);margin-top:6px;padding-left:2px;padding-right:2px}.linter-setting-header .linter-tab-settings{border-left:2px solid transparent;border-right:2px solid transparent;cursor:pointer;font-weight:600;padding:6px 12px;white-space:nowrap}.linter-setting-header .linter-tab-settings:first-child{margin-left:6px}.linter-setting-header .linter-tab-settings.linter-tab-settings-active{border:2px solid var(--background-modifier-border);border-bottom-color:var(--background-primary);border-radius:2px;transform:translateY(2px)}.linter-navigation-item:not(.linter-navigation-item-selected)>span:nth-child(2),.linter-visually-hidden{border:0;clip:rect(0 0 0 0);clip-path:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}textarea.full-width{margin-bottom:.8em;margin-top:.8em;min-height:10em;width:100%}.full-width-textbox-input-wrapper{position:relative}.settings-copy-button{margin:0 0 0 auto;padding:4px;position:absolute;right:.8em;top:.8em}.settings-copy-button svg.linter-clipboard path{fill:var(--text-faint)}.settings-copy-button svg.linter-success path{fill:var(--interactive-success)}.settings-copy-button:active,.settings-copy-button:hover{cursor:pointer}.settings-copy-button:active svg path,.settings-copy-button:hover svg path{fill:var(--text-accent-hover);transition:all .3s ease}.settings-copy-button:focus{outline:0}.linter-custom-regex-replacement-container div:last-child{border:none}.linter-custom-regex-replacement{border:none;border-bottom:var(--hr-thickness) solid;border-color:var(--hr-color);margin-bottom:15px}.linter-custom-regex-replacement-row2{flex-wrap:wrap}.linter-custom-regex-replacement-normal-input{width:40%}.linter-custom-regex-replacement-flags{width:15%}.linter-custom-regex-replacement-label{flex-direction:row-reverse}.linter-custom-regex-replacement-label-input{width:50%}.linter-files-to-ignore-container div:last-child{border:none}.linter-files-to-ignore{border:none;border-bottom:var(--hr-thickness) solid;border-color:var(--hr-color);margin-bottom:15px}.linter-files-to-ignore-normal-input{width:40%}.linter-files-to-ignore-flags{width:15%}.linter-no-border{border:none}.linter-border-bottom{border-bottom:1px solid var(--background-modifier-border);border-top:0;margin-bottom:.75em}.linter-no-padding-top{padding-top:0}.custom-row-description{margin-top:0}.modal-warn,.search-zero-state{font-weight:700}.modal-heading,.search-zero-state{text-align:center}
|
42
.obsidian/plugins/omnisearch/data.json
vendored
Normal file
42
.obsidian/plugins/omnisearch/data.json
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
{
|
||||
"useCache": true,
|
||||
"hideExcluded": false,
|
||||
"recencyBoost": "0",
|
||||
"downrankedFoldersFilters": [],
|
||||
"ignoreDiacritics": true,
|
||||
"ignoreArabicDiacritics": false,
|
||||
"indexedFileTypes": [],
|
||||
"displayTitle": "",
|
||||
"PDFIndexing": false,
|
||||
"officeIndexing": false,
|
||||
"imagesIndexing": false,
|
||||
"aiImageIndexing": false,
|
||||
"unsupportedFilesIndexing": "default",
|
||||
"splitCamelCase": false,
|
||||
"openInNewPane": false,
|
||||
"vimLikeNavigationShortcut": true,
|
||||
"ribbonIcon": true,
|
||||
"showExcerpt": true,
|
||||
"maxEmbeds": 5,
|
||||
"renderLineReturnInExcerpts": true,
|
||||
"showCreateButton": false,
|
||||
"highlight": true,
|
||||
"showPreviousQueryResults": true,
|
||||
"simpleSearch": true,
|
||||
"tokenizeUrls": false,
|
||||
"fuzziness": "1",
|
||||
"weightBasename": 10,
|
||||
"weightDirectory": 7,
|
||||
"weightH1": 6,
|
||||
"weightH2": 5,
|
||||
"weightH3": 4,
|
||||
"weightUnmarkedTags": 2,
|
||||
"weightCustomProperties": [],
|
||||
"httpApiEnabled": false,
|
||||
"httpApiPort": "51361",
|
||||
"httpApiNotice": true,
|
||||
"welcomeMessage": "1.21.0",
|
||||
"verboseLogging": false,
|
||||
"DANGER_httpHost": null,
|
||||
"DANGER_forceSaveCache": false
|
||||
}
|
109
.obsidian/plugins/omnisearch/main.js
vendored
Normal file
109
.obsidian/plugins/omnisearch/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
14
.obsidian/plugins/omnisearch/manifest.json
vendored
Normal file
14
.obsidian/plugins/omnisearch/manifest.json
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"id": "omnisearch",
|
||||
"name": "Omnisearch",
|
||||
"version": "1.26.1",
|
||||
"minAppVersion": "1.7.2",
|
||||
"description": "A search engine that just works",
|
||||
"author": "Simon Cambier",
|
||||
"authorUrl": "https://github.com/scambier/obsidian-omnisearch",
|
||||
"fundingUrl": {
|
||||
"Github": "https://github.com/sponsors/scambier",
|
||||
"Ko-fi": "https://ko-fi.com/scambier"
|
||||
},
|
||||
"isDesktopOnly": false
|
||||
}
|
135
.obsidian/plugins/omnisearch/styles.css
vendored
Normal file
135
.obsidian/plugins/omnisearch/styles.css
vendored
Normal file
@ -0,0 +1,135 @@
|
||||
.omnisearch-modal {
|
||||
}
|
||||
|
||||
.omnisearch-result {
|
||||
white-space: normal;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
/* justify-content: space-between; */
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.omnisearch-result__title-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
column-gap: 5px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.omnisearch-result__title {
|
||||
white-space: pre-wrap;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.omnisearch-result__title > span {
|
||||
}
|
||||
|
||||
.omnisearch-result__folder-path {
|
||||
font-size: 0.75rem;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.omnisearch-result__extension {
|
||||
font-size: 0.7rem;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.omnisearch-result__counter {
|
||||
font-size: 0.7rem;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.omnisearch-result__body {
|
||||
white-space: normal;
|
||||
font-size: small;
|
||||
word-wrap: normal;
|
||||
|
||||
overflow: hidden;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 3;
|
||||
-webkit-box-orient: vertical;
|
||||
|
||||
color: var(--text-muted);
|
||||
margin-inline-start: 0.5em;
|
||||
}
|
||||
|
||||
.omnisearch-result__embed {
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
|
||||
.omnisearch-result__image-container {
|
||||
flex-basis: 20%;
|
||||
text-align: end;
|
||||
}
|
||||
|
||||
.omnisearch-highlight {
|
||||
}
|
||||
|
||||
.omnisearch-default-highlight {
|
||||
text-decoration: underline;
|
||||
text-decoration-color: var(--text-highlight-bg);
|
||||
text-decoration-thickness: 3px;
|
||||
text-underline-offset: -1px;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
.omnisearch-input-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.omnisearch-result__icon {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.omnisearch-result__icon svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.omnisearch-result__icon--emoji {
|
||||
font-size: 16px;
|
||||
vertical-align: middle;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px) {
|
||||
.omnisearch-input-container {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.omnisearch-input-container__buttons {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
padding: 0 1em 0 1em;
|
||||
gap: 1em;
|
||||
}
|
||||
.omnisearch-input-container__buttons > button {
|
||||
flex-grow: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 600px) {
|
||||
.omnisearch-input-container__buttons {
|
||||
margin-inline-end: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
.omnisearch-input-field {
|
||||
position: relative;
|
||||
flex-grow: 1;
|
||||
}
|
6
.obsidian/plugins/pane-relief/main.js
vendored
Normal file
6
.obsidian/plugins/pane-relief/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/pane-relief/manifest.json
vendored
Normal file
10
.obsidian/plugins/pane-relief/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "pane-relief",
|
||||
"name": "Pane Relief",
|
||||
"version": "0.5.9",
|
||||
"minAppVersion": "1.5.8",
|
||||
"description": "Per-tab history, hotkeys for pane/tab movement, navigation, sliding workspace, and more",
|
||||
"author": "PJ Eby",
|
||||
"authorUrl": "https://github.com/pjeby",
|
||||
"isDesktopOnly": true
|
||||
}
|
28
.obsidian/plugins/pane-relief/styles.css
vendored
Normal file
28
.obsidian/plugins/pane-relief/styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
180
.obsidian/plugins/recent-files-obsidian/data.json
vendored
Normal file
180
.obsidian/plugins/recent-files-obsidian/data.json
vendored
Normal file
@ -0,0 +1,180 @@
|
||||
{
|
||||
"recentFiles": [
|
||||
{
|
||||
"basename": "freqtrade_基础",
|
||||
"path": "new notes/freqtrade_基础.md"
|
||||
},
|
||||
{
|
||||
"basename": "freqtrade_理解消化",
|
||||
"path": "new notes/freqtrade_理解消化.md"
|
||||
},
|
||||
{
|
||||
"basename": "freqtrade",
|
||||
"path": "new notes/freqtrade.md"
|
||||
},
|
||||
{
|
||||
"basename": "节点角色更新",
|
||||
"path": "new notes/节点角色更新.md"
|
||||
},
|
||||
{
|
||||
"basename": "如何触发",
|
||||
"path": "new notes/如何触发.md"
|
||||
},
|
||||
{
|
||||
"basename": "04_Go语言相关工具",
|
||||
"path": "量化交易系统建议/04_Go语言相关工具.md"
|
||||
},
|
||||
{
|
||||
"basename": "09_解耦设计实现灵活架构",
|
||||
"path": "量化交易系统建议/09_解耦设计实现灵活架构.md"
|
||||
},
|
||||
{
|
||||
"basename": "01_量化交易辅助决策开源项目",
|
||||
"path": "量化交易系统建议/01_量化交易辅助决策开源项目.md"
|
||||
},
|
||||
{
|
||||
"basename": "06_传统量化交易路线图",
|
||||
"path": "量化交易系统建议/06_传统量化交易路线图.md"
|
||||
},
|
||||
{
|
||||
"basename": "07_基于机器学习的量化交易路线图",
|
||||
"path": "量化交易系统建议/07_基于机器学习的量化交易路线图.md"
|
||||
},
|
||||
{
|
||||
"basename": "02_CCXT详细介绍",
|
||||
"path": "量化交易系统建议/02_CCXT详细介绍.md"
|
||||
},
|
||||
{
|
||||
"basename": "05_机器学习相关工具",
|
||||
"path": "量化交易系统建议/05_机器学习相关工具.md"
|
||||
},
|
||||
{
|
||||
"basename": "08_Redis与Elasticsearch的应用",
|
||||
"path": "量化交易系统建议/08_Redis与Elasticsearch的应用.md"
|
||||
},
|
||||
{
|
||||
"basename": "03_辅助决策工具",
|
||||
"path": "量化交易系统建议/03_辅助决策工具.md"
|
||||
},
|
||||
{
|
||||
"basename": "kanban_template",
|
||||
"path": "templates/kanban_template.md"
|
||||
},
|
||||
{
|
||||
"basename": "allNotes.md",
|
||||
"path": "templates/allNotes.md.md"
|
||||
},
|
||||
{
|
||||
"basename": "daily_template",
|
||||
"path": "templates/daily_template.md"
|
||||
},
|
||||
{
|
||||
"basename": "base_template",
|
||||
"path": "templates/base_template.md"
|
||||
},
|
||||
{
|
||||
"basename": "阅读笔记",
|
||||
"path": "templates/阅读笔记.md"
|
||||
},
|
||||
{
|
||||
"basename": "Untitled 1",
|
||||
"path": "new notes/Untitled 1.md"
|
||||
},
|
||||
{
|
||||
"basename": "Untitled",
|
||||
"path": "new notes/Untitled.md"
|
||||
},
|
||||
{
|
||||
"basename": "populate_indicators函数",
|
||||
"path": "new notes/populate_indicators函数.md"
|
||||
},
|
||||
{
|
||||
"basename": "neo-vim_ai 编程辅助插件-avante_扩展使用指南",
|
||||
"path": "new notes/neo-vim_ai 编程辅助插件-avante_扩展使用指南.md"
|
||||
},
|
||||
{
|
||||
"basename": "Getting_started",
|
||||
"path": "new notes/Getting_started.md"
|
||||
},
|
||||
{
|
||||
"basename": "ccxt-go中文文档, 豆包生成",
|
||||
"path": "new notes/ccxt-go中文文档, 豆包生成.md"
|
||||
},
|
||||
{
|
||||
"basename": "ccxt",
|
||||
"path": "new notes/ccxt.md"
|
||||
},
|
||||
{
|
||||
"basename": "AnythinyLLM key",
|
||||
"path": "new notes/AnythinyLLM key.md"
|
||||
},
|
||||
{
|
||||
"basename": "最大回撤",
|
||||
"path": "new notes/最大回撤.md"
|
||||
},
|
||||
{
|
||||
"basename": "英文文章可读性量化",
|
||||
"path": "new notes/英文文章可读性量化.md"
|
||||
},
|
||||
{
|
||||
"basename": "未命名",
|
||||
"path": "new notes/未命名.canvas"
|
||||
},
|
||||
{
|
||||
"basename": "量化交易系统建议",
|
||||
"path": "new notes/量化交易系统建议.md"
|
||||
},
|
||||
{
|
||||
"basename": "2025-03-26",
|
||||
"path": "kanban/2025-03-26.md"
|
||||
},
|
||||
{
|
||||
"basename": "2025-02-02 要做的事情",
|
||||
"path": "kanban/2025-02-02 要做的事情.md"
|
||||
},
|
||||
{
|
||||
"basename": "三个运动定律",
|
||||
"path": "demo/三个运动定律.md"
|
||||
},
|
||||
{
|
||||
"basename": "New Chat",
|
||||
"path": "Chats/New Chat.md"
|
||||
},
|
||||
{
|
||||
"basename": "restruct",
|
||||
"path": "archived/restruct.md"
|
||||
},
|
||||
{
|
||||
"basename": "go_wire 循环依赖",
|
||||
"path": "archived/go_wire 循环依赖.md"
|
||||
},
|
||||
{
|
||||
"basename": "重构",
|
||||
"path": "archived/重构.md"
|
||||
},
|
||||
{
|
||||
"basename": "循环依赖相关对话",
|
||||
"path": "archived/循环依赖相关对话.md"
|
||||
},
|
||||
{
|
||||
"basename": "循环依赖问题",
|
||||
"path": "archived/循环依赖问题.md"
|
||||
},
|
||||
{
|
||||
"basename": "开车时听的音乐",
|
||||
"path": "随便/开车时听的音乐.md"
|
||||
},
|
||||
{
|
||||
"basename": "甘特图流程图各种图",
|
||||
"path": "随便/甘特图流程图各种图.md"
|
||||
}
|
||||
],
|
||||
"omittedPaths": [
|
||||
""
|
||||
],
|
||||
"omittedTags": [
|
||||
""
|
||||
],
|
||||
"updateOn": "file-edit",
|
||||
"omitBookmarks": true
|
||||
}
|
53
.obsidian/plugins/recent-files-obsidian/main.js
vendored
Normal file
53
.obsidian/plugins/recent-files-obsidian/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
16
.obsidian/plugins/recent-files-obsidian/manifest.json
vendored
Normal file
16
.obsidian/plugins/recent-files-obsidian/manifest.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "recent-files-obsidian",
|
||||
"name": "Recent Files",
|
||||
"version": "1.7.4",
|
||||
"minAppVersion": "0.16.3",
|
||||
"description": "List files by most recently opened",
|
||||
"author": "Tony Grosinger",
|
||||
"authorUrl": "https://grosinger.net",
|
||||
"isDesktopOnly": false,
|
||||
"fundingUrl": {
|
||||
"Github Sponsor": "https://github.com/sponsors/tgrosinger",
|
||||
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
|
||||
"Paypal": "https://paypal.me/tgrosinger"
|
||||
},
|
||||
"donation": "https://buymeacoffee.com/tgrosinger"
|
||||
}
|
34
.obsidian/plugins/recent-files-obsidian/styles.css
vendored
Normal file
34
.obsidian/plugins/recent-files-obsidian/styles.css
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
.recent-files-file {
|
||||
.tree-item-spacer {
|
||||
flex-grow: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.recent-files-title {
|
||||
justify-content: flex-start;
|
||||
align-items: unset;
|
||||
}
|
||||
|
||||
.recent-files-file-delete {
|
||||
justify-content: right;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.recent-files-title:hover .recent-files-file-delete {
|
||||
display: flex;
|
||||
cursor: var(--cursor);
|
||||
}
|
||||
|
||||
.recent-files-file-delete:hover {
|
||||
color: var(--nav-item-color-hover);
|
||||
}
|
||||
|
||||
.recent-files-donation {
|
||||
width: 70%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.recent-files-donate-button {
|
||||
margin: 10px;
|
||||
}
|
3
.obsidian/plugins/smart-connections/data.json
vendored
Normal file
3
.obsidian/plugins/smart-connections/data.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"version": "2.5.8"
|
||||
}
|
29012
.obsidian/plugins/smart-connections/main.js
vendored
Normal file
29012
.obsidian/plugins/smart-connections/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/smart-connections/manifest.json
vendored
Normal file
10
.obsidian/plugins/smart-connections/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "smart-connections",
|
||||
"name": "Smart Connections",
|
||||
"author": "Brian Petro",
|
||||
"description": "Find links to similar notes using artificial intelligence from OpenAI.",
|
||||
"minAppVersion": "1.1.0",
|
||||
"authorUrl": "https://wfhbrian.com",
|
||||
"isDesktopOnly": false,
|
||||
"version": "2.5.8"
|
||||
}
|
993
.obsidian/plugins/smart-connections/styles.css
vendored
Normal file
993
.obsidian/plugins/smart-connections/styles.css
vendored
Normal file
@ -0,0 +1,993 @@
|
||||
/* deprecated positioning, use bottom bar instead */
|
||||
.view-content > .sc-brand {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: var(--titlebar-background);
|
||||
}
|
||||
|
||||
.sc-brand {
|
||||
> svg,
|
||||
> p {
|
||||
display: inline;
|
||||
margin: 0 0.1rem 0 0.3rem;
|
||||
color: var(--text-muted);
|
||||
font-size: var(--font-smallest);
|
||||
line-height: 1;
|
||||
height: 0.88rem;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
> p > a {
|
||||
color: var(--text-muted);
|
||||
}
|
||||
}
|
||||
|
||||
.sc-list {
|
||||
.tree-item-self {
|
||||
cursor: pointer;
|
||||
|
||||
small {
|
||||
color: var(--color-gray-40);
|
||||
}
|
||||
}
|
||||
|
||||
> .sc-collapsed ul {
|
||||
display: none;
|
||||
}
|
||||
|
||||
> .sc-collapsed span svg {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
|
||||
> :not(.sc-collapsed) span svg {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
> div {
|
||||
span svg {
|
||||
height: auto;
|
||||
margin: auto 0.5em auto 0;
|
||||
flex: none;
|
||||
}
|
||||
|
||||
> span {
|
||||
display: inline-flex;
|
||||
width: 100%;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
padding-left: 1.3rem;
|
||||
}
|
||||
|
||||
> a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
> ul > li {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.sc-result {
|
||||
> ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.sc-result.sc-result-plaintext {
|
||||
font-size: var(--font-ui-smaller);
|
||||
line-height: var(--line-height-tight);
|
||||
background-color: var(--search-result-background);
|
||||
border-radius: var(--radius-s);
|
||||
overflow: hidden;
|
||||
margin: var(--size-4-1) 0 var(--size-4-2);
|
||||
color: var(--text-muted);
|
||||
box-shadow: 0 0 0 1px var(--background-modifier-border);
|
||||
|
||||
& > * li {
|
||||
cursor: var(--cursor);
|
||||
position: relative;
|
||||
padding: var(--size-4-2) var(--size-4-5) var(--size-4-2) var(--size-4-3);
|
||||
white-space: pre-wrap;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
}
|
||||
}
|
||||
|
||||
.sc-result:not(.sc-result-plaintext) {
|
||||
cursor: pointer;
|
||||
padding: var(--nav-item-padding);
|
||||
padding-left: 10px;
|
||||
margin-bottom: 1px;
|
||||
align-items: baseline;
|
||||
border-radius: var(--radius-s);
|
||||
font-weight: var(--nav-item-weight);
|
||||
|
||||
&:hover {
|
||||
color: var(--nav-item-color-active);
|
||||
background-color: var(--nav-item-background-active);
|
||||
font-weight: var(--nav-item-weight-active);
|
||||
}
|
||||
|
||||
span {
|
||||
color: var(--h5-color);
|
||||
}
|
||||
|
||||
small {
|
||||
color: var(--h5-color);
|
||||
font-size: 0.8rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0.3rem;
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
ul > li {
|
||||
h1 {
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.15rem;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1.05rem;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin-block-start: calc(var(--p-spacing)/2);
|
||||
margin-block-end: calc(var(--p-spacing)/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
} /* end .sc-list */
|
||||
|
||||
/* Only on right sidebar */
|
||||
.mod-right-split .sc-list .sc-result {
|
||||
font-size: var(--font-text-size);
|
||||
font-size: 0.88rem;
|
||||
}
|
||||
|
||||
.sc-top-bar {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: end;
|
||||
|
||||
.search-input-container {
|
||||
width: calc(100% - var(--size-4-8));
|
||||
margin: 4px auto;
|
||||
}
|
||||
|
||||
.sc-context {
|
||||
color: var(--nav-item-color);
|
||||
font-size: var(--nav-item-size);
|
||||
margin: 0.5em 0.5em 1em;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* Chat */
|
||||
.sc-chat-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
height: 100%;
|
||||
|
||||
.sc-top-bar-container {
|
||||
align-self: flex-end;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
|
||||
.sc-chat-name-input {
|
||||
flex-grow: 1;
|
||||
min-width: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.sc-thread {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
user-select: text;
|
||||
overflow-y: auto;
|
||||
|
||||
.sc-message-container {
|
||||
border: 1px solid var(--divider-color);
|
||||
border-radius: 10px;
|
||||
margin: 0.5rem 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
background-color: var(--background-primary-alt);
|
||||
|
||||
.sc-message {
|
||||
max-width: 90ch;
|
||||
width: 90%;
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
border-radius: 1.5rem;
|
||||
word-break: break-word;
|
||||
|
||||
&.user {
|
||||
align-self: flex-end;
|
||||
color: var(--text-normal);
|
||||
background-color: var(--background-primary);
|
||||
}
|
||||
|
||||
&.assistant,
|
||||
&.system {
|
||||
background-color: var(--background-primary-alt);
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.sc-message-content {
|
||||
margin: 0;
|
||||
padding: 1rem;
|
||||
|
||||
> * p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sc-chat-form {
|
||||
display: flex;
|
||||
padding: 0 10px 1rem 0;
|
||||
width: 100%;
|
||||
max-height: 50%;
|
||||
|
||||
.sc-chat-input {
|
||||
flex-grow: 1;
|
||||
padding: 0.88rem;
|
||||
border: none;
|
||||
border-radius: 1.5rem;
|
||||
resize: none;
|
||||
height: auto;
|
||||
min-height: 4.2lh;
|
||||
max-height: 100%;
|
||||
background-color: var(--background-primary);
|
||||
color: var(--text-normal);
|
||||
margin-right: -2.7rem;
|
||||
padding-right: 3rem;
|
||||
}
|
||||
|
||||
.sc-btn-container {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
margin: auto;
|
||||
|
||||
> button.send-button {
|
||||
border-radius: 99999px;
|
||||
cursor: pointer;
|
||||
outline: 2px solid transparent;
|
||||
padding: 0;
|
||||
outline-offset: 2px;
|
||||
background: none !important;
|
||||
|
||||
&:focus-visible {
|
||||
outline-color: var(--text-faint);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
> svg {
|
||||
> circle {
|
||||
fill: var(--text-faint);
|
||||
}
|
||||
> path {
|
||||
fill: var(--background-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#settings {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.sc-system {
|
||||
align-self: center;
|
||||
font-style: italic;
|
||||
color: var(--text-faint);
|
||||
}
|
||||
|
||||
.sc-msg-button {
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
opacity: 0.8;
|
||||
|
||||
&.cycle-branch {
|
||||
float: left;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
#sc-abort-button {
|
||||
cursor: pointer;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--background-primary);
|
||||
}
|
||||
}
|
||||
|
||||
.sc-change {
|
||||
.sc-change-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
& > * {
|
||||
display: inline-block;
|
||||
color: var(--text-muted);
|
||||
font-size: var(--font-smallest);
|
||||
}
|
||||
|
||||
.sc-brand {
|
||||
position: unset;
|
||||
background-color: var(--background-primary);
|
||||
}
|
||||
}
|
||||
|
||||
.sc-variation {
|
||||
--new-content-color: hsl(124, 75%, 55%, 0.13);
|
||||
--old-content-color: hsl(3, 43%, 47%, 0.13);
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
justify-content: space-between;
|
||||
margin: 0 -300px;
|
||||
padding: 0 300px;
|
||||
|
||||
&:has(.new-content) {
|
||||
background-color: var(--new-content-color);
|
||||
|
||||
> button {
|
||||
background-color: var(--new-content-color) !important;
|
||||
}
|
||||
}
|
||||
|
||||
&:has(.old-content) {
|
||||
background-color: var(--old-content-color);
|
||||
|
||||
> button {
|
||||
background-color: var(--old-content-color) !important;
|
||||
}
|
||||
}
|
||||
|
||||
> div {
|
||||
> *:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.old-content {
|
||||
color: var(--text-muted);
|
||||
text-decoration: line-through;
|
||||
|
||||
> *:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget):hover:has(.sc-change) {
|
||||
overflow: unset;
|
||||
box-shadow: unset;
|
||||
cursor: unset;
|
||||
}
|
||||
|
||||
.notice .sc-notice-actions {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
|
||||
.sc-chat-container {
|
||||
#settings {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sc-config-error-notice {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 10px;
|
||||
background-color: #ffcccc;
|
||||
border: 1px solid #ff0000;
|
||||
border-radius: 5px;
|
||||
margin: 10px 0;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
color: #ff0000;
|
||||
width: 100%;
|
||||
|
||||
span {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
button {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sc-supporters {
|
||||
max-height: 37ch;
|
||||
border: 1px solid var(--h1-color);
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
margin-left: -10px;
|
||||
box-shadow: 0 1px 0 1px var(--shadow-300);
|
||||
overflow: auto;
|
||||
text-wrap: balance;
|
||||
|
||||
> p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
> ul {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
> * li {
|
||||
margin-top: 0.37em;
|
||||
}
|
||||
}
|
||||
|
||||
/* settings */
|
||||
.vertical-tab-content:has(> .sc-supporters) {
|
||||
.setting-item-control {
|
||||
> select {
|
||||
max-width: 500px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sc-bottom-bar {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background-color: var(--titlebar-background);
|
||||
padding: 0 0.5rem;
|
||||
|
||||
.sc-brand {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.sc-context {
|
||||
flex-grow: 1;
|
||||
font-size: var(--font-smallest);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
.setting-component[data-setting*="/"][data-setting*="api_key"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.setting-component[data-setting*="gpu"]:not([data-setting*="/"]) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* SINCE COMPONENT PATTERN SETTINGS */
|
||||
.setting-component[data-setting="is_obsidian_vault"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.setting-component[data-setting="smart_change.active"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.group-header {
|
||||
display: flex;
|
||||
text-wrap: nowrap;
|
||||
flex-wrap: wrap;
|
||||
align-items: baseline;
|
||||
|
||||
> h2 {
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
> * {
|
||||
flex-grow: 1;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
/* SMART CHAT v2 */
|
||||
.sc-context-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0 1rem 1rem;
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.sc-context-header[aria-expanded="true"] + .sc-context-list {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.sc-context-header[aria-expanded="false"] + .sc-context-list {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sc-context-toggle-icon {
|
||||
margin-left: 0.5rem;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.sc-context-header[aria-expanded="true"] .sc-context-toggle-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.sc-context-container {
|
||||
border: 1px solid var(--divider-color);
|
||||
border-radius: 10px;
|
||||
margin: 0.5rem 0;
|
||||
background-color: var(--background-primary-alt);
|
||||
overflow: auto;
|
||||
max-width: 95%;
|
||||
margin: 10px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.sc-context-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0.88rem 1rem;
|
||||
background-color: var(--background-primary);
|
||||
color: var(--text-muted);
|
||||
font-weight: var(--font-medium);
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--background-primary-hover);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: 2px solid var(--text-muted);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.sc-context-item {
|
||||
padding: 0.5rem;
|
||||
border-radius: var(--radius-s);
|
||||
background-color: var(--background-secondary);
|
||||
color: var(--text-normal);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
font-size: var(--font-smallest);
|
||||
flex-wrap: wrap;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--background-secondary-hover);
|
||||
}
|
||||
}
|
||||
|
||||
.sc-context-item-path {
|
||||
font-weight: var(--font-medium);
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
max-width: 70%;
|
||||
}
|
||||
|
||||
.sc-context-item-score {
|
||||
font-size: var(--font-small);
|
||||
color: var(--color-gray-40);
|
||||
}
|
||||
|
||||
/* Tool Calls Component Styles */
|
||||
.sc-tool-calls-container {
|
||||
border: 1px solid var(--divider-color);
|
||||
border-radius: 10px;
|
||||
margin: 0.5rem 0;
|
||||
background-color: var(--background-primary-alt);
|
||||
overflow: auto;
|
||||
max-width: 95%;
|
||||
margin: 10px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.sc-tool-call {
|
||||
margin-bottom: 0.5rem;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.sc-tool-call-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0.88rem 1rem;
|
||||
background-color: var(--background-primary);
|
||||
color: var(--text-muted);
|
||||
font-weight: var(--font-medium);
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--background-primary-hover);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: 2px solid var(--text-muted);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
&[aria-expanded="true"] .sc-tool-call-toggle-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
|
||||
.sc-tool-call-content {
|
||||
padding: 0.5rem 1rem;
|
||||
background-color: var(--background-secondary);
|
||||
font-size: var(--font-smallest);
|
||||
|
||||
pre {
|
||||
margin: 0;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: var(--font-monospace);
|
||||
}
|
||||
}
|
||||
|
||||
/* Hide content when collapsed */
|
||||
.sc-tool-call-header[aria-expanded="false"] + .sc-tool-call-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Show content when expanded */
|
||||
.sc-tool-call-header[aria-expanded="true"] + .sc-tool-call-content {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* System Message Styles */
|
||||
.sc-system-message-container {
|
||||
margin: 1rem 0;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 6px;
|
||||
background: var(--background-secondary);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.sc-system-message-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0.75rem 1rem;
|
||||
cursor: pointer;
|
||||
font-weight: 500;
|
||||
border-bottom: 1px solid transparent;
|
||||
transition: background-color 0.2s ease;
|
||||
|
||||
&:hover {
|
||||
background: var(--background-modifier-hover);
|
||||
}
|
||||
|
||||
span {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.sc-system-message-toggle-icon {
|
||||
transition: transform 0.2s ease;
|
||||
}
|
||||
|
||||
&[aria-expanded="true"] {
|
||||
border-bottom-color: var(--background-modifier-border);
|
||||
}
|
||||
}
|
||||
|
||||
.sc-system-message-content {
|
||||
padding: 1rem;
|
||||
position: relative;
|
||||
background: var(--background-primary);
|
||||
border-bottom-left-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
|
||||
.sc-system-message-text {
|
||||
font-family: var(--font-monospace);
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
margin-right: 2rem;
|
||||
}
|
||||
|
||||
.sc-system-message-copy {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
padding: 0.4rem;
|
||||
background: transparent;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
opacity: 0.6;
|
||||
transition: opacity 0.2s ease;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&.sc-copied {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sc-chat-container {
|
||||
.smart-chat-overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: var(--background-primary-alt);
|
||||
z-index: 100;
|
||||
overflow: auto;
|
||||
|
||||
.smart-chat-overlay-header {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.setting-item {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sc-typing-indicator {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 12px 16px;
|
||||
display: none;
|
||||
|
||||
&.visible {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.sc-typing-dots {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
|
||||
.sc-typing-dot {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background: var(--text-muted);
|
||||
border-radius: 50%;
|
||||
animation: typing-bounce 1.4s infinite ease-in-out;
|
||||
|
||||
&:nth-child(1) {
|
||||
animation-delay: 0s;
|
||||
}
|
||||
|
||||
&:nth-child(2) {
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
|
||||
&:nth-child(3) {
|
||||
animation-delay: 0.4s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/* keyframes must be at root level */
|
||||
@keyframes typing-bounce {
|
||||
0%,
|
||||
80%,
|
||||
100% {
|
||||
transform: scale(0.6);
|
||||
}
|
||||
40% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Smart Directories */
|
||||
.sg-top-bar {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.sg-list {
|
||||
> .sg-collapsed .sg-directory-header svg {
|
||||
transform: rotate(-90deg);
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
> :not(.sg-collapsed) .sg-directory-header svg {
|
||||
transform: rotate(0deg);
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
.sg-directory-header {
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--nav-item-background-hover);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Add this to handle content visibility */
|
||||
.sg-directory-item.sg-collapsed .sg-directory-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Lookup */
|
||||
#sc-lookup-view {
|
||||
.sc-container {
|
||||
.sc-textarea-container {
|
||||
display: flex;
|
||||
padding: 0 10px 1rem 0;
|
||||
width: 100%;
|
||||
max-height: 50%;
|
||||
|
||||
> textarea {
|
||||
flex-grow: 1;
|
||||
padding: 0.88rem;
|
||||
border: none;
|
||||
border-radius: 1.5rem;
|
||||
resize: none;
|
||||
height: auto;
|
||||
min-height: 4.2lh;
|
||||
max-height: 100%;
|
||||
background-color: var(--background-primary);
|
||||
color: var(--text-normal);
|
||||
margin-right: -2.7rem;
|
||||
padding-right: 3rem;
|
||||
}
|
||||
.sc-textarea-btn-container {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
margin: auto;
|
||||
|
||||
> button.send-button {
|
||||
border-radius: 99999px;
|
||||
cursor: pointer;
|
||||
outline: 2px solid transparent;
|
||||
padding: 0;
|
||||
outline-offset: 2px;
|
||||
background: none !important;
|
||||
|
||||
&:focus-visible {
|
||||
outline-color: var(--text-faint);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
> svg {
|
||||
> circle {
|
||||
fill: var(--text-faint);
|
||||
}
|
||||
> path {
|
||||
fill: var(--background-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Side Panes */
|
||||
div.workspace-leaf-content[data-type^="smart-"] {
|
||||
> .view-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.sc-overlay {
|
||||
background-color: var(--background-primary-alt);
|
||||
max-width: 100%;
|
||||
max-height: 42%;
|
||||
|
||||
&:has(.setting-component) {
|
||||
overflow-y: auto;
|
||||
padding: var(--size-4-4);
|
||||
flex: none;
|
||||
|
||||
.setting-item {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sc-pro {
|
||||
.sc-settings {
|
||||
padding: var(--size-4-4);
|
||||
|
||||
textarea {
|
||||
min-height: 4rem;
|
||||
flex-grow: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sc-inline-confirm-row {
|
||||
margin-top: 10px;
|
||||
padding: 6px;
|
||||
border: 1px solid var(--interactive-normal);
|
||||
}
|
||||
.sc-inline-confirm-row-buttons {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 10px;
|
||||
margin-top: 10px;
|
||||
|
||||
& .sc-inline-confirm-yes {
|
||||
font-weight: bold;
|
||||
}
|
||||
& .sc-inline-confirm-cancel {
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
129
.obsidian/plugins/smart-second-brain/data.json
vendored
Normal file
129
.obsidian/plugins/smart-second-brain/data.json
vendored
Normal file
@ -0,0 +1,129 @@
|
||||
{
|
||||
"isChatComfy": true,
|
||||
"isUsingRag": false,
|
||||
"assistantLanguage": "en",
|
||||
"initialAssistantMessageContent": "Hello, I am your assistant. How can I help you?",
|
||||
"isIncognitoMode": true,
|
||||
"ollamaGenModel": {
|
||||
"model": "deepseek-r1:8b",
|
||||
"baseUrl": "http://localhost:11434",
|
||||
"temperature": 0.5,
|
||||
"contextWindow": 1848,
|
||||
"lcModel": {
|
||||
"lc": 1,
|
||||
"type": "constructor",
|
||||
"id": [
|
||||
"langchain",
|
||||
"chat_models",
|
||||
"ollama",
|
||||
"ChatOllama"
|
||||
],
|
||||
"kwargs": {
|
||||
"model": "deepseek-r1:8b",
|
||||
"base_url": "http://localhost:11434",
|
||||
"temperature": 0.5,
|
||||
"context_window": 1848,
|
||||
"lc_model": {
|
||||
"lc": 1,
|
||||
"type": "constructor",
|
||||
"id": [
|
||||
"langchain",
|
||||
"chat_models",
|
||||
"ollama",
|
||||
"ChatOllama"
|
||||
],
|
||||
"kwargs": {
|
||||
"model": "deepseek-r1:8b",
|
||||
"base_url": "http://localhost:11434",
|
||||
"temperature": 0.5,
|
||||
"context_window": 1948,
|
||||
"lc_model": {
|
||||
"lc": 1,
|
||||
"type": "constructor",
|
||||
"id": [
|
||||
"langchain",
|
||||
"chat_models",
|
||||
"ollama",
|
||||
"ChatOllama"
|
||||
],
|
||||
"kwargs": {
|
||||
"model": "deepseek-r1:14b",
|
||||
"base_url": "http://localhost:11434",
|
||||
"temperature": 0.5,
|
||||
"context_window": 1948,
|
||||
"lc_model": {
|
||||
"lc": 1,
|
||||
"type": "constructor",
|
||||
"id": [
|
||||
"langchain",
|
||||
"chat_models",
|
||||
"ollama",
|
||||
"ChatOllama"
|
||||
],
|
||||
"kwargs": {
|
||||
"model": "gemma3:12b",
|
||||
"base_url": "http://localhost:11434",
|
||||
"temperature": 0.5,
|
||||
"context_window": 1948
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ollamaEmbedModel": {
|
||||
"model": "nomic-embed-text",
|
||||
"baseUrl": "http://localhost:11434",
|
||||
"similarityThreshold": 0.75,
|
||||
"k": 100
|
||||
},
|
||||
"openAIGenModel": {
|
||||
"model": "gpt-3.5-turbo",
|
||||
"openAIApiKey": "sk-24a6af9eea55494b8f465a01cb92d461",
|
||||
"temperature": 0.5,
|
||||
"contextWindow": 1948,
|
||||
"lcModel": {
|
||||
"lc": 1,
|
||||
"type": "constructor",
|
||||
"id": [
|
||||
"langchain",
|
||||
"chat_models",
|
||||
"openai",
|
||||
"ChatOpenAI"
|
||||
],
|
||||
"kwargs": {
|
||||
"model": "gpt-3.5-turbo",
|
||||
"openai_api_key": {
|
||||
"lc": 1,
|
||||
"type": "secret",
|
||||
"id": [
|
||||
"OPENAI_API_KEY"
|
||||
]
|
||||
},
|
||||
"temperature": 0.5,
|
||||
"context_window": 1948,
|
||||
"streaming": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"openAIEmbedModel": {
|
||||
"model": "text-embedding-ada-002",
|
||||
"openAIApiKey": "sk-24a6af9eea55494b8f465a01cb92d461",
|
||||
"similarityThreshold": 0.75,
|
||||
"k": 100
|
||||
},
|
||||
"targetFolder": "Chats",
|
||||
"defaultChatName": "New Chat",
|
||||
"excludeFF": [
|
||||
"Chats",
|
||||
"*.excalidraw.md"
|
||||
],
|
||||
"isQuickSettingsOpen": true,
|
||||
"isVerbose": false,
|
||||
"isOnboarded": true,
|
||||
"hideIncognitoWarning": false,
|
||||
"isAutostart": false
|
||||
}
|
575
.obsidian/plugins/smart-second-brain/main.js
vendored
Normal file
575
.obsidian/plugins/smart-second-brain/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/smart-second-brain/manifest.json
vendored
Normal file
10
.obsidian/plugins/smart-second-brain/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "smart-second-brain",
|
||||
"name": "Smart Second Brain",
|
||||
"description": "Interact with your privacy focused assistant, leveraging Ollama or OpenAI, making your second brain even smarter.",
|
||||
"author": "Leo310, nicobrauchtgit",
|
||||
"authorUrl": "https://github.com/nicobrauchtgit",
|
||||
"version": "1.3.0",
|
||||
"minAppVersion": "1.5.0",
|
||||
"isDesktopOnly": true
|
||||
}
|
1
.obsidian/plugins/smart-second-brain/styles.css
vendored
Normal file
1
.obsidian/plugins/smart-second-brain/styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
.obsidian/plugins/smart-second-brain/vectorstores/nomic-embed-text.bin
vendored
Normal file
BIN
.obsidian/plugins/smart-second-brain/vectorstores/nomic-embed-text.bin
vendored
Normal file
Binary file not shown.
6
.obsidian/plugins/table-editor-obsidian/data.json
vendored
Normal file
6
.obsidian/plugins/table-editor-obsidian/data.json
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"formatType": "normal",
|
||||
"showRibbonIcon": true,
|
||||
"bindEnter": true,
|
||||
"bindTab": true
|
||||
}
|
236
.obsidian/plugins/table-editor-obsidian/main.js
vendored
Normal file
236
.obsidian/plugins/table-editor-obsidian/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
17
.obsidian/plugins/table-editor-obsidian/manifest.json
vendored
Normal file
17
.obsidian/plugins/table-editor-obsidian/manifest.json
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "table-editor-obsidian",
|
||||
"name": "Advanced Tables",
|
||||
"author": "Tony Grosinger",
|
||||
"authorUrl": "https://grosinger.net",
|
||||
"description": "Improved table navigation, formatting, manipulation, and formulas",
|
||||
"isDesktopOnly": false,
|
||||
"minAppVersion": "1.0.0",
|
||||
"version": "0.22.1",
|
||||
"js": "main.js",
|
||||
"fundingUrl": {
|
||||
"Github Sponsor": "https://github.com/sponsors/tgrosinger",
|
||||
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
|
||||
"Paypal": "https://paypal.me/tgrosinger"
|
||||
},
|
||||
"donation": "https://buymeacoffee.com/tgrosinger"
|
||||
}
|
78
.obsidian/plugins/table-editor-obsidian/styles.css
vendored
Normal file
78
.obsidian/plugins/table-editor-obsidian/styles.css
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
:root {
|
||||
--advanced-tables-helper-size: 28px;
|
||||
}
|
||||
|
||||
.HyperMD-table-row span.cm-inline-code {
|
||||
font-size: 100%;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.advanced-tables-buttons>div>.title {
|
||||
font-weight: var(--font-medium);
|
||||
font-size: var(--nav-item-size);
|
||||
color: var(--nav-item-color);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container {
|
||||
column-gap: 0.2rem;
|
||||
margin: 0.2rem 0 0.2rem 0;
|
||||
justify-content: start;
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container::before {
|
||||
min-width: 2.6rem;
|
||||
line-height: var(--advanced-tables-helper-size);
|
||||
font-size: var(--nav-item-size);
|
||||
font-weight: var(--nav-item-weight);
|
||||
color: var(--nav-item-color);
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container>* {
|
||||
height: var(--advanced-tables-helper-size);
|
||||
line-height: var(--advanced-tables-helper-size);
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container .nav-action-button {
|
||||
width: var(--advanced-tables-helper-size);
|
||||
height: var(--advanced-tables-helper-size);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container .nav-action-button:hover {
|
||||
background-color: var(--nav-item-background-hover);
|
||||
color: var(--nav-item-color-hover);
|
||||
font-weight: var(--nav-item-weight-hover);
|
||||
}
|
||||
|
||||
.advanced-tables-row-label {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.widget-icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
fill: var(--text-muted);
|
||||
}
|
||||
|
||||
.widget-icon:hover {
|
||||
fill: var(--text-normal);
|
||||
}
|
||||
|
||||
.advanced-tables-csv-export textarea {
|
||||
height: 200px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.advanced-tables-donation {
|
||||
width: 70%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.advanced-tables-donate-button {
|
||||
margin: 10px;
|
||||
}
|
36
.obsidian/plugins/templater-obsidian/data.json
vendored
Normal file
36
.obsidian/plugins/templater-obsidian/data.json
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"command_timeout": 5,
|
||||
"templates_folder": "templates",
|
||||
"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": "new notes",
|
||||
"template": "templates/base_template.md"
|
||||
}
|
||||
],
|
||||
"enable_file_templates": false,
|
||||
"file_templates": [
|
||||
{
|
||||
"regex": ".*",
|
||||
"template": ""
|
||||
}
|
||||
],
|
||||
"syntax_highlighting": true,
|
||||
"syntax_highlighting_mobile": false,
|
||||
"enabled_templates_hotkeys": [
|
||||
""
|
||||
],
|
||||
"startup_templates": [],
|
||||
"intellisense_render": 1
|
||||
}
|
29
.obsidian/plugins/templater-obsidian/main.js
vendored
Normal file
29
.obsidian/plugins/templater-obsidian/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/templater-obsidian/manifest.json
vendored
Normal file
11
.obsidian/plugins/templater-obsidian/manifest.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "templater-obsidian",
|
||||
"name": "Templater",
|
||||
"version": "2.11.1",
|
||||
"description": "Create and use templates",
|
||||
"minAppVersion": "1.5.0",
|
||||
"author": "SilentVoid",
|
||||
"authorUrl": "https://github.com/SilentVoid13",
|
||||
"helpUrl": "https://silentvoid13.github.io/Templater/",
|
||||
"isDesktopOnly": false
|
||||
}
|
220
.obsidian/plugins/templater-obsidian/styles.css
vendored
Normal file
220
.obsidian/plugins/templater-obsidian/styles.css
vendored
Normal file
@ -0,0 +1,220 @@
|
||||
.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 {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.templater-prompt-form {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.templater-prompt-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);
|
||||
}
|
||||
|
||||
.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: #08f;
|
||||
color: white;
|
||||
}
|
147
.obsidian/plugins/terminal/data.json
vendored
Normal file
147
.obsidian/plugins/terminal/data.json
vendored
Normal file
@ -0,0 +1,147 @@
|
||||
{
|
||||
"addToCommand": true,
|
||||
"addToContextMenu": true,
|
||||
"createInstanceNearExistingOnes": true,
|
||||
"errorNoticeTimeout": 0,
|
||||
"exposeInternalModules": true,
|
||||
"focusOnNewInstance": true,
|
||||
"hideStatusBar": "focused",
|
||||
"interceptLogging": true,
|
||||
"language": "zh-Hans",
|
||||
"newInstanceBehavior": "newHorizontalSplit",
|
||||
"noticeTimeout": 5,
|
||||
"openChangelogOnUpdate": true,
|
||||
"pinNewInstance": true,
|
||||
"preferredRenderer": "webgl",
|
||||
"profiles": {
|
||||
"darwinExternalDefault": {
|
||||
"args": [
|
||||
"\"$PWD\""
|
||||
],
|
||||
"executable": "/System/Applications/Utilities/Terminal.app/Contents/macOS/Terminal",
|
||||
"name": "",
|
||||
"platforms": {
|
||||
"darwin": true
|
||||
},
|
||||
"restoreHistory": true,
|
||||
"successExitCodes": [
|
||||
"0",
|
||||
"SIGINT",
|
||||
"SIGTERM"
|
||||
],
|
||||
"terminalOptions": {
|
||||
"documentOverride": null
|
||||
},
|
||||
"type": "external"
|
||||
},
|
||||
"darwinIntegratedDefault": {
|
||||
"args": [],
|
||||
"executable": "/bin/zsh",
|
||||
"name": "",
|
||||
"platforms": {
|
||||
"darwin": true
|
||||
},
|
||||
"pythonExecutable": "python3",
|
||||
"restoreHistory": true,
|
||||
"successExitCodes": [
|
||||
"0",
|
||||
"SIGINT",
|
||||
"SIGTERM"
|
||||
],
|
||||
"terminalOptions": {
|
||||
"documentOverride": null
|
||||
},
|
||||
"type": "integrated",
|
||||
"useWin32Conhost": true
|
||||
},
|
||||
"developerConsole": {
|
||||
"name": "",
|
||||
"restoreHistory": true,
|
||||
"successExitCodes": [
|
||||
"0",
|
||||
"SIGINT",
|
||||
"SIGTERM"
|
||||
],
|
||||
"terminalOptions": {
|
||||
"documentOverride": null
|
||||
},
|
||||
"type": "developerConsole"
|
||||
},
|
||||
"linuxExternalDefault": {
|
||||
"args": [],
|
||||
"executable": "xterm",
|
||||
"name": "",
|
||||
"platforms": {
|
||||
"linux": true
|
||||
},
|
||||
"restoreHistory": true,
|
||||
"successExitCodes": [
|
||||
"0",
|
||||
"SIGINT",
|
||||
"SIGTERM"
|
||||
],
|
||||
"terminalOptions": {
|
||||
"documentOverride": null
|
||||
},
|
||||
"type": "external"
|
||||
},
|
||||
"linuxIntegratedDefault": {
|
||||
"args": [],
|
||||
"executable": "/bin/sh",
|
||||
"name": "",
|
||||
"platforms": {
|
||||
"linux": true
|
||||
},
|
||||
"pythonExecutable": "python3",
|
||||
"restoreHistory": true,
|
||||
"successExitCodes": [
|
||||
"0",
|
||||
"SIGINT",
|
||||
"SIGTERM"
|
||||
],
|
||||
"terminalOptions": {
|
||||
"documentOverride": null
|
||||
},
|
||||
"type": "integrated",
|
||||
"useWin32Conhost": true
|
||||
},
|
||||
"win32ExternalDefault": {
|
||||
"args": [],
|
||||
"executable": "C:\\Windows\\System32\\cmd.exe",
|
||||
"name": "",
|
||||
"platforms": {
|
||||
"win32": true
|
||||
},
|
||||
"restoreHistory": true,
|
||||
"successExitCodes": [
|
||||
"0",
|
||||
"SIGINT",
|
||||
"SIGTERM"
|
||||
],
|
||||
"terminalOptions": {
|
||||
"documentOverride": null
|
||||
},
|
||||
"type": "external"
|
||||
},
|
||||
"win32IntegratedDefault": {
|
||||
"args": [],
|
||||
"executable": "C:\\Windows\\System32\\cmd.exe",
|
||||
"name": "",
|
||||
"platforms": {
|
||||
"win32": true
|
||||
},
|
||||
"pythonExecutable": "python3",
|
||||
"restoreHistory": true,
|
||||
"successExitCodes": [
|
||||
"0",
|
||||
"SIGINT",
|
||||
"SIGTERM"
|
||||
],
|
||||
"terminalOptions": {
|
||||
"documentOverride": null
|
||||
},
|
||||
"type": "integrated",
|
||||
"useWin32Conhost": true
|
||||
}
|
||||
}
|
||||
}
|
194
.obsidian/plugins/terminal/main.js
vendored
Normal file
194
.obsidian/plugins/terminal/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
14
.obsidian/plugins/terminal/manifest.json
vendored
Normal file
14
.obsidian/plugins/terminal/manifest.json
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"author": "polyipseity",
|
||||
"description": "Integrate consoles, shells, and terminals inside Obsidian.",
|
||||
"fundingUrl": {
|
||||
"Buy Me a Coffee": "https://buymeacoffee.com/polyipseity",
|
||||
"GitHub Sponsors": "https://github.com/sponsors/polyipseity"
|
||||
},
|
||||
"version": "3.16.0",
|
||||
"authorUrl": "https://github.com/polyipseity",
|
||||
"id": "terminal",
|
||||
"isDesktopOnly": false,
|
||||
"minAppVersion": "1.4.11",
|
||||
"name": "Terminal"
|
||||
}
|
32
.obsidian/plugins/terminal/styles.css
vendored
Normal file
32
.obsidian/plugins/terminal/styles.css
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
||||
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
||||
* https://github.com/chjj/term.js
|
||||
* @license MIT
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
* Originally forked from (with the author's permission):
|
||||
* Fabrice Bellard's javascript vt100 for jslinux:
|
||||
* http://bellard.org/jslinux/
|
||||
* Copyright (c) 2011 Fabrice Bellard
|
||||
* The original design remains. The terminal itself
|
||||
* has been extended to include xterm CSI codes, among
|
||||
* other features.
|
||||
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.workspace-leaf-content[data-type="terminal:terminal"] .view-content{overflow:clip;display:flex;flex-direction:column}.terminal\:terminal{flex:1;min-width:0;min-height:0}.is-phone .workspace-leaf-content[data-type="terminal:terminal"] .view-content{padding-bottom:max(var(--size-4-4),calc(var(--icon-l) + var(--size-4-2) + max(var(--size-4-2),var(--safe-area-inset-bottom))))}.obsidian-plugin-library\:icon{fill:none;stroke:currentColor}.obsidian-plugin-library\:await-css{display:unset!important}.obsidian-plugin-library\:hide-status-bar{display:none}
|
5
.obsidian/plugins/weather-fetcher/data.json
vendored
Normal file
5
.obsidian/plugins/weather-fetcher/data.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"source": "wttr",
|
||||
"cacheSeconds": 300,
|
||||
"addRibbon": true
|
||||
}
|
1698
.obsidian/plugins/weather-fetcher/main.js
vendored
Normal file
1698
.obsidian/plugins/weather-fetcher/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/weather-fetcher/manifest.json
vendored
Normal file
10
.obsidian/plugins/weather-fetcher/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "weather-fetcher",
|
||||
"name": "Weather Fetcher",
|
||||
"version": "0.0.3",
|
||||
"minAppVersion": "0.12.0",
|
||||
"description": "Fetch and insert current weather into the editor of Obsidian.",
|
||||
"author": "fyears",
|
||||
"authorUrl": "https://github.com/fyears/obsidian-weather",
|
||||
"isDesktopOnly": false
|
||||
}
|
3
.obsidian/plugins/weather-fetcher/styles.css
vendored
Normal file
3
.obsidian/plugins/weather-fetcher/styles.css
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*
|
||||
body {
|
||||
} */
|
63
.obsidian/snippets/allnotelist.css
vendored
Normal file
63
.obsidian/snippets/allnotelist.css
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
.dataview.list-view-ul {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* 每个列表项的样式 */
|
||||
.dataview.list-view-ul li {
|
||||
padding: 8px;
|
||||
border-bottom: 1px solid #444;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* 标题样式 */
|
||||
.note-title a {
|
||||
text-decoration: none !important; /* 移除下划线 */
|
||||
color: var(--text-normal); /* 使用主题默认文字颜色 */
|
||||
}
|
||||
|
||||
/* 日期样式 */
|
||||
.note-date {
|
||||
opacity: 0.5; /* 半透明 */
|
||||
margin-left: 10px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
/* 文件夹样式 */
|
||||
.note-folder {
|
||||
font-size: 0.8em; /* 字体更小 */
|
||||
opacity: 0.5; /* 半透明 */
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
/* Tags 样式 */
|
||||
.note-tags {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
/* 每个 Tag 的样式 */
|
||||
.note-tags span::before {
|
||||
content: "#";
|
||||
color: var(--text-accent); /* Tag 的 # 颜色 */
|
||||
}
|
||||
|
||||
.note-tags span {
|
||||
background-color: var(--background-secondary); /* 背景色 */
|
||||
border-radius: 10px; /* 圆角 */
|
||||
padding: 2px 6px;
|
||||
font-size: 0.8em;
|
||||
color: var(--text-accent); /* Tag 文字颜色 */
|
||||
}
|
||||
.note-date {
|
||||
opacity: 0.5;
|
||||
margin-left: 10px;
|
||||
font-size: 0.8em; /* 更小 */
|
||||
}
|
||||
.note-tags span {
|
||||
background-color: #555; /* 自定义背景色 */
|
||||
border-radius: 10px;
|
||||
padding: 2px 6px;
|
||||
font-size: 0.8em;
|
||||
color: var(--text-accent);
|
||||
}
|
7
.obsidian/themes/Obsidianite/manifest.json
vendored
Normal file
7
.obsidian/themes/Obsidianite/manifest.json
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "Obsidianite",
|
||||
"version": "2.0.2",
|
||||
"minAppVersion": "1.1.0",
|
||||
"author": "@bennyxguo",
|
||||
"authorUrl": "https://github.com/bennyxguo"
|
||||
}
|
1481
.obsidian/themes/Obsidianite/theme.css
vendored
Normal file
1481
.obsidian/themes/Obsidianite/theme.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
.obsidian/themes/Wasp/manifest.json
vendored
Normal file
6
.obsidian/themes/Wasp/manifest.json
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "Wasp",
|
||||
"version": "0.0.0",
|
||||
"minAppVersion": "0.16.0",
|
||||
"author": "Santi Younger"
|
||||
}
|
322
.obsidian/themes/Wasp/theme.css
vendored
Normal file
322
.obsidian/themes/Wasp/theme.css
vendored
Normal file
@ -0,0 +1,322 @@
|
||||
/* This Theme is called "Wasp" and Obsidian Theme created by Santi Younger */
|
||||
|
||||
:root
|
||||
{
|
||||
--font-monospace: "Source Code Pro", monospace;
|
||||
}
|
||||
|
||||
.theme-dark
|
||||
{
|
||||
--button-hover-bg-color: #DAA520; /* Darker Yellow Background for Hover */
|
||||
--button-hover-text-color: #ffffff; /* White Text for Hover */
|
||||
--button-bg-color: #D49335; /* Gray-Black Background */
|
||||
--button-text-color: #242424; /* Light Gray Text */
|
||||
--background-primary: #242424;
|
||||
--background-primary-alt: #242424;
|
||||
--background-secondary: #191919;
|
||||
--background-secondary-alt: #3D3D3D;
|
||||
--text-normal: #faf2d6;
|
||||
--text-faint: #bdae93;
|
||||
--text-title-h1: #E0E0E0;
|
||||
--text-title-h2: #E0E0E0;
|
||||
--text-title-h3: #E0E0E0;
|
||||
--text-title-h4: #E0E0E0;
|
||||
--text-title-h5: #E0E0E0;
|
||||
--text-title-h6: #E0E0E0;
|
||||
--text-highlight-bg: #640211;
|
||||
--text-link: #83a598;
|
||||
--text-a-hover: #83a598;
|
||||
--text-accent-hover: #D49335;
|
||||
/* ^^^ added for hover over bracket internal links */
|
||||
--inline-code: #83a598;
|
||||
--code-block: #83a598;
|
||||
--text-a: #f8c537;
|
||||
--interactive-accent: #f8c537;
|
||||
--text-accent: #f8c537;
|
||||
--text-on-accent: #fff;
|
||||
--interactive-accent-rgb: #f8c537;
|
||||
--vim-cursor: #f8c537;
|
||||
/* --text-mark: add text-mark if needed, this should work together with 'mark' */
|
||||
--pre-code: #;
|
||||
--interactive-before: #7c6f64;
|
||||
--background-modifier-border: #f8c537;
|
||||
--text-selection: #f8c537;
|
||||
}
|
||||
|
||||
.theme-dark .cm-s-obsidian span.obsidian-search-match-highlight {
|
||||
color: var(--text-normal);
|
||||
background-color: #483699;
|
||||
}
|
||||
|
||||
.theme-light
|
||||
{
|
||||
--background-primary: #EDEDED;
|
||||
--background-secondary: #C4C4C4;
|
||||
/* thick menu border */
|
||||
--background-primary-alt: #;
|
||||
--background-secondary-alt: #707070; /* ← ↓ corner */
|
||||
--text-normal: #1A2023;
|
||||
--text-faint: #DEDEDE;
|
||||
--text-title-h1: #D49335;
|
||||
--text-title-h2: #D49335;
|
||||
--text-title-h3: #D49335;
|
||||
--text-title-h4: #D49335;
|
||||
--text-title-h5: #D49335;
|
||||
--text-link: #D49335;
|
||||
--text-a-hover: #D49335;
|
||||
--text-accent-hover: #D49335;
|
||||
/* ^^^ added for hover over bracket internal links */
|
||||
--inline-code: #458588;
|
||||
/* --text-mark: add if needed */
|
||||
--pre-code: #bebebe;
|
||||
/* --text-highlight-bg: add if needed */
|
||||
--interactive-before: #a89984;
|
||||
--background-modifier-border: #D49335;
|
||||
--text-a: #961327;
|
||||
--interactive-accent: #f8c537;
|
||||
--text-accent: #961327;
|
||||
--interactive-accent-rgb: #961327;
|
||||
--vim-cursor: #961327;
|
||||
--text-selection: #EDC180;
|
||||
--text-white: #ffffff;
|
||||
}
|
||||
|
||||
.nav-file-title, .nav-folder-title {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.nav-file-title.is-active, .nav-folder-title.is-active, body:not(.is-grabbing) .nav-file-title:hover, body:not(.is-grabbing) .nav-folder-title:hover {
|
||||
background-color: var(--background-modifier-border);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.cm-s-obsidian span.cm-formatting-link {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.CodeMirror-guttermarker-subtle {
|
||||
color: var(--text-normal) !important;
|
||||
}
|
||||
|
||||
button.mod-cta {
|
||||
background-color: var(--interactive-accent);
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.vertical-tab-header-group-title {
|
||||
color: var(--text-white);
|
||||
}
|
||||
|
||||
.cm-header-1 {
|
||||
font-size: 18px;
|
||||
color: var(--text-title-h1) !important;
|
||||
}
|
||||
|
||||
.cm-header-2 {
|
||||
font-size: 18px;
|
||||
color: var(--text-title-h2) !important;
|
||||
}
|
||||
|
||||
.cm-header-3 {
|
||||
font-size: 18px;
|
||||
color: var(--text-title-h3) !important;
|
||||
}
|
||||
|
||||
.cm-header-4 {
|
||||
font-size: 18px;
|
||||
color: var(--text-title-h4) !important;
|
||||
}
|
||||
|
||||
.cm-header-5 {
|
||||
font-size: 18px;
|
||||
color: var(--text-title-h5) !important;
|
||||
}
|
||||
|
||||
.cm-header-6 {
|
||||
font-size: 18px;
|
||||
color: --text-normal;
|
||||
color: var(--text-title-h6) !important;
|
||||
}
|
||||
|
||||
.markdown-preview-view h1 {
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
color: var(--text-title-h1) !important;
|
||||
}
|
||||
|
||||
.markdown-preview-view h2 {
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
color: var(--text-title-h2) !important;
|
||||
}
|
||||
|
||||
.markdown-preview-view h3 {
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
color: var(--text-title-h3) !important;
|
||||
}
|
||||
|
||||
.markdown-preview-view h4 {
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
color: var(--text-title-h4) !important;
|
||||
}
|
||||
|
||||
.markdown-preview-view h5 {
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
color: var(--text-title-h5) !important;
|
||||
}
|
||||
|
||||
.markdown-preview-view h6 {
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
color: --text-normal;
|
||||
color: var(--text-title-h6) !important;
|
||||
}
|
||||
|
||||
/*-----------------------------------------*/
|
||||
/* End of main theme, extra functionality can be added below */
|
||||
|
||||
.markdown-source-view { font-family: var(--font-monospace)
|
||||
}
|
||||
|
||||
.cm-fat-cursor .CodeMirror-cursor {
|
||||
background-color: #f8c537 !important;
|
||||
opacity: 80% !important;
|
||||
width: 9px !important;
|
||||
visibility: visible !important
|
||||
}
|
||||
|
||||
.plugin-tabs .stayopen .view-header {
|
||||
border-bottom: 2px solid var(--interactive-accent)!important;
|
||||
}
|
||||
|
||||
.plugin-tabs .mod-root.workspace-split.mod-vertical div.workspace-leaf:not(.stayopen) > .workspace-leaf-content > .view-header .view-header-title::before{
|
||||
background-color:transparent!important
|
||||
}
|
||||
|
||||
.plugin-tabs .mod-root.workspace-split.mod-vertical .workspace-split.mod-vertical > div.workspace-leaf:not(.stayopen),
|
||||
.plugin-tabs .mod-root.workspace-split.mod-vertical > div.workspace-leaf:not(.stayopen){
|
||||
border-radius: 5px 5px 0px 0px!important;
|
||||
}
|
||||
|
||||
.plugin-tabs .mod-root.workspace-split.mod-vertical div.workspace-leaf{
|
||||
border-color: var(--background-secondary-alt)!important;
|
||||
border-bottom-width: 0px!important;
|
||||
border-right-width: 0px!important
|
||||
}
|
||||
|
||||
.theme-light.plugin-tabs .mod-root.workspace-split.mod-vertical div.workspace-leaf{
|
||||
border-color: var(--background-secondary-alt)!important;
|
||||
border-left-width:3px!important;
|
||||
border-bottom-width: 0px!important;
|
||||
border-right-width: 0px!important
|
||||
}
|
||||
|
||||
.plugin-tabs .mod-root.workspace-split.mod-vertical > div.workspace-leaf hr.workspace-leaf-resize-handle,
|
||||
.plugin-tabs .mod-root.workspace-split.mod-vertical > .mod-vertical hr.workspace-leaf-resize-handle{
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.plugin-tabs .mod-root.workspace-split.mod-vertical div.workspace-leaf .view-header{
|
||||
border-left-color: transparent!important
|
||||
}
|
||||
|
||||
.plugin-tabs .workspace-split.mod-root > .workspace-leaf:last-of-type .workspace-leaf-content,
|
||||
.plugin-tabs .workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content {
|
||||
border-radius: 0px!important;
|
||||
}
|
||||
|
||||
.plugin-tabs .theme-dark .mod-root.workspace-split.mod-vertical .workspace-split.mod-vertical > div.workspace-leaf.mod-active,
|
||||
.plugin-tabs .theme-dark .mod-root.workspace-split.mod-vertical > div.workspace-leaf.mod-active {
|
||||
border: 0!important;
|
||||
border-radius: 0px 0px 0px 0px!important;
|
||||
}
|
||||
|
||||
button.mod-cta {
|
||||
background-color: var(--button-bg-color); /* Uses variable for background color */
|
||||
color: var(--button-text-color); /* Uses variable for text color */
|
||||
font-weight: 600; /* Makes text bold but less than standard bold */
|
||||
|
||||
}
|
||||
|
||||
button.mod-cta:hover, button.mod-cta:focus {
|
||||
background-color: var(--button-hover-bg-color); /* Darker Yellow Background for Hover */
|
||||
color: var(--button-text-color); /* Keeps the default light gray text color on hover */
|
||||
font-weight: 600; /* Makes text bold but less than standard bold */
|
||||
}
|
||||
|
||||
.vertical-tab-nav-item.is-active {
|
||||
background-color: var(--button-bg-color); /* Gray-Black Background */
|
||||
color: var(--button-text-color); /* Light Gray Text */
|
||||
font-weight: bold; /* Makes text bold */
|
||||
font-weight: 600; /* Makes text bold but less than standard bold */
|
||||
}
|
||||
|
||||
.vertical-tab-nav-item.is-active:hover, .vertical-tab-nav-item.is-active:focus {
|
||||
background-color: var(--button-hover-bg-color); /* Darker Yellow Background for Hover */
|
||||
color: var(--button-text-color); /* Keeps the default light gray text color on hover */
|
||||
font-weight: 600; /* Makes text bold but less than standard bold */
|
||||
}
|
||||
|
||||
body:not(.is-phone) .vertical-tab-nav-item.is-active {
|
||||
--background-modifier-hover: var(--button-hover-bg-color); /* More specific variable for hover */
|
||||
--icon-color: var(--button-text-color);
|
||||
background-color: var(--button-bg-color);
|
||||
color: var(--button-text-color);
|
||||
font-weight: 600; /* Makes text bold but less than standard bold */
|
||||
}
|
||||
|
||||
body:not(.is-phone) .vertical-tab-nav-item.is-active:hover,
|
||||
body:not(.is-phone) .vertical-tab-nav-item.is-active:focus {
|
||||
background-color: var(--button-hover-bg-color);
|
||||
color: var(--button-text-color);
|
||||
font-weight: 600; /* Makes text bold but less than standard bold */
|
||||
}
|
||||
.checkbox-container.is-enabled {
|
||||
background-color: var(--button-bg-color); /* Gray-Black Background */
|
||||
color: var(--button-text-color); /* Light Gray Text */
|
||||
}
|
||||
|
||||
.checkbox-container.is-enabled:hover, .checkbox-container.is-enabled:focus {
|
||||
background-color: var(--button-hover-bg-color); /* Darker Yellow Background for Hover */
|
||||
color: var(--button-text-color); /* Keeps the default light gray text color on hover */
|
||||
}
|
||||
|
||||
.flair.mod-pop {
|
||||
background-color: var(--button-bg-color); /* Gray-Black Background */
|
||||
color: var(--button-text-color); /* Light Gray Text */
|
||||
}
|
||||
|
||||
.flair.mod-pop:hover, .flair.mod-pop:focus {
|
||||
background-color: var(--button-hover-bg-color); /* Darker Yellow Background for Hover */
|
||||
color: var(--button-text-color); /* Keeps the default light gray text color on hover */
|
||||
}
|
||||
|
||||
/** hr styles -- PREVIEW MODE */
|
||||
.cm-line hr,
|
||||
.markdown-preview-view hr {
|
||||
margin-block-start: 4em;
|
||||
margin-block-end: 4em;
|
||||
border: none;
|
||||
height: 0;
|
||||
border-bottom: 1px solid;
|
||||
border-image-slice: 1;
|
||||
border-width: 1px;
|
||||
border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent);
|
||||
}
|
||||
|
||||
.cm-line hr::after,
|
||||
.markdown-preview-view hr::after {
|
||||
/* content: '\1f41d'; */
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
transform-origin: 50% 50%;
|
||||
padding: 0.5rem;
|
||||
color: var(--text-sub-accent);
|
||||
background-color: var(--background-primary);
|
||||
}
|
466
.obsidian/workspace.json
vendored
466
.obsidian/workspace.json
vendored
@ -1,21 +1,186 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "089e59043add2840",
|
||||
"id": "5324373015726ba8",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "779ce2da10685674",
|
||||
"id": "4509724f8bf84da7",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "232557ff1641c4e1",
|
||||
"id": "e7a7b303c61786dc",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "empty",
|
||||
"state": {},
|
||||
"icon": "lucide-file",
|
||||
"title": "New tab"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "4a16ceff2f188a44",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "c45d5472a01fa0c3",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "09d53b405976b21c",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "byModifiedTime",
|
||||
"autoReveal": false
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ad3f6423219ed8e7",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": true,
|
||||
"collapseAll": true,
|
||||
"extraContext": true,
|
||||
"sortOrder": "byModifiedTime"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1803f8a17f23709",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cc4acd597507c478",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "recent-files",
|
||||
"state": {},
|
||||
"icon": "clock",
|
||||
"title": "Recent Files"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 303.5024719238281
|
||||
},
|
||||
"right": {
|
||||
"id": "97b6734b8c030920",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "32b176fd8dff1165",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "ef29c0acdfab7689",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "Tags"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f230e766ab61c912",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "demo/三个运动定律.md",
|
||||
"mode": "source",
|
||||
"source": false,
|
||||
"file": "templates/allNotes.md.md",
|
||||
"mode": "preview",
|
||||
"source": true,
|
||||
"backlinks": true,
|
||||
"backlinkOpts": {
|
||||
"collapseAll": false,
|
||||
@ -28,83 +193,24 @@
|
||||
}
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "三个运动定律"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "f02b8f0203ad6798",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "9aba6106d1ffe45f",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "76751a9e5608cd89",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical",
|
||||
"autoReveal": false
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "文件列表"
|
||||
"title": "allNotes.md"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f7237a916e3ce339",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "搜索"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0333b2220dd4771e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "书签"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300
|
||||
},
|
||||
"right": {
|
||||
"id": "ed0ff6ed65987e7a",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "07d6c74723a4610e",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "0abf9d6487bcfaea",
|
||||
"id": "445ac2f458bd24b6",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "freqtrade 理解消化.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
@ -114,168 +220,118 @@
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-coming-in",
|
||||
"title": "freqtrade 理解消化 的反向链接列表"
|
||||
"title": "Backlinks"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "5ebaa2ee70419203",
|
||||
"id": "8c579b681aaaa178",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "随便/甘特图 流程图 各种图.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-going-out",
|
||||
"title": "甘特图 流程图 各种图 的出链列表"
|
||||
"title": "Outgoing links"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "d070d7c7c7fd043e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "标签"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "61b570e21fca7b37",
|
||||
"id": "cf7a4dcbb71782cb",
|
||||
"type": "leaf",
|
||||
"pane-relief:history-v1": {
|
||||
"pos": 0,
|
||||
"stack": [
|
||||
{
|
||||
"state": "{}",
|
||||
"eState": "{}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "AI相关/未命名.canvas",
|
||||
"followCursor": true,
|
||||
"showSearch": true,
|
||||
"file": "量化交易相关/收益预估直方图.md",
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "未命名 的大纲"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "24165256c8d78be3",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "planner-timeline",
|
||||
"state": {},
|
||||
"icon": "lucide-file",
|
||||
"title": "插件不再活动"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "5369911ec89f6d64",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "planner-timeline",
|
||||
"state": {},
|
||||
"icon": "lucide-file",
|
||||
"title": "插件不再活动"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cbd56a01a6cbccd6",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "git-view",
|
||||
"state": {},
|
||||
"icon": "git-pull-request",
|
||||
"title": "Source Control"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0974c29258d370bd",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "planner-timeline",
|
||||
"state": {},
|
||||
"icon": "calendar-with-checkmark",
|
||||
"title": "Timeline"
|
||||
"title": "Outline of 收益预估直方图"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 6
|
||||
"currentTab": 4
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 200
|
||||
"width": 493.5
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"switcher:打开快速切换": false,
|
||||
"graph:查看关系图谱": false,
|
||||
"canvas:新建白板": false,
|
||||
"daily-notes:打开/创建今天的日记": false,
|
||||
"templates:插入模板": false,
|
||||
"command-palette:打开命令面板": false,
|
||||
"markdown-importer:打开 Markdown 格式转换器": false,
|
||||
"obsidian-day-planner:Open Timeline": false,
|
||||
"obsidian-day-planner:Open Multi-Day View": false,
|
||||
"obsidian-importer:Open Importer": false,
|
||||
"obsidian-kanban:创建新看板": false,
|
||||
"obsidian-git:Open Git source control": false
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"obsidian-kanban:Create new board": false,
|
||||
"copilot:Open Copilot Chat": false,
|
||||
"obsidian-git:Open Git source control": false,
|
||||
"terminal:Open terminal": false,
|
||||
"table-editor-obsidian:Advanced Tables Toolbar": false,
|
||||
"weather-fetcher:Insert Weather": false,
|
||||
"templater-obsidian:Templater": false,
|
||||
"homepage:Open homepage": false
|
||||
}
|
||||
},
|
||||
"active": "232557ff1641c4e1",
|
||||
"active": "e7a7b303c61786dc",
|
||||
"lastOpenFiles": [
|
||||
"`freqtrade.md",
|
||||
"demo/三个运动定律.md",
|
||||
"Pasted image 20250204021453.png",
|
||||
"freqtrade_理解消化.md",
|
||||
"freqtrade_基础.md",
|
||||
"Pasted image 20250222113205.png",
|
||||
"backtrader.md",
|
||||
"backtrader 事件回调函数.md",
|
||||
"backtrader_&_okx.md",
|
||||
"未命名.canvas",
|
||||
"core/go_wire 循环依赖.md",
|
||||
"生成像素风格图片 (4).png",
|
||||
"templates/阅读笔记.md",
|
||||
"n8n/Getting_started.md",
|
||||
"core/循环依赖相关对话.md",
|
||||
"avante/neo-vim_ai 编程辅助插件-avante_扩展使用指南.md",
|
||||
"量化交易相关/收益预估直方图.md",
|
||||
"new notes/英文文章可读性量化.md",
|
||||
"templates/allNotes.md.md",
|
||||
"new notes/未命名.canvas",
|
||||
"new notes/最大回撤.md",
|
||||
"new notes/freqtrade_基础.md",
|
||||
"量化交易系统建议/02_CCXT详细介绍.md",
|
||||
"随便/开车时听的音乐.md",
|
||||
"随便/甘特图流程图各种图.md",
|
||||
"populate_indicators函数.md",
|
||||
"freqtrade.md",
|
||||
"populate_indicators.md",
|
||||
"populate_indicator.md",
|
||||
"AI相关/英文文章可读性量化.md",
|
||||
"core/restruct.md",
|
||||
"车位诉讼策略.md",
|
||||
"策略.md",
|
||||
"2025-03-21.md",
|
||||
"2025-02-02 要做的事情.md",
|
||||
"n8n/如何触发.md",
|
||||
"core/循环依赖问题.md",
|
||||
"AI相关/未命名.canvas",
|
||||
"未命名 4.canvas",
|
||||
"templates",
|
||||
"未命名 3.canvas",
|
||||
"未命名 2.canvas",
|
||||
"法律",
|
||||
"未命名 1.canvas",
|
||||
"blingo",
|
||||
"Pasted image 20250222115616.png",
|
||||
"Pasted image 20250204022601.png",
|
||||
"core",
|
||||
"avante",
|
||||
"demo",
|
||||
"学英语",
|
||||
"n8n",
|
||||
"随便",
|
||||
"要做的事情",
|
||||
"AA5B1439-F6D4-4633-8F3B-A30A2538D674_1_105_c.jpeg",
|
||||
"AA5B1439-F6D4-4633-8F3B-A30A2538D674_1_105_c 2.jpeg",
|
||||
"AA5B1439-F6D4-4633-8F3B-A30A2538D674_1_105_c 1.jpeg",
|
||||
"代订附加产品(服务包)发票_订单31324101513471184053056 3_副本.png",
|
||||
"【飞猪】订单7224154890106-机票款凭证 报销凭证 3_副本.png"
|
||||
"量化交易系统建议/05_机器学习相关工具.md",
|
||||
"new notes/freqtrade.md",
|
||||
"new notes/freqtrade_理解消化.md",
|
||||
"new notes/如何触发.md",
|
||||
"new notes/节点角色更新.md",
|
||||
"new notes/ccxt.md",
|
||||
"new notes/量化交易系统建议.md",
|
||||
"new notes/Untitled.md",
|
||||
"new notes/Untitled 1.md",
|
||||
"archived/重构.md",
|
||||
"量化交易系统建议/03_辅助决策工具.md",
|
||||
"量化交易系统建议/08_Redis与Elasticsearch的应用.md",
|
||||
"量化交易系统建议/07_基于机器学习的量化交易路线图.md",
|
||||
"量化交易系统建议/06_传统量化交易路线图.md",
|
||||
"量化交易系统建议/01_量化交易辅助决策开源项目.md",
|
||||
"kanban/mainboard.md",
|
||||
"量化交易系统建议/09_解耦设计实现灵活架构.md",
|
||||
"量化交易系统建议/04_Go语言相关工具.md",
|
||||
"量化交易系统建议",
|
||||
"Untitled",
|
||||
"Chats",
|
||||
"canvas/Untitled.canvas",
|
||||
"kanban/notes",
|
||||
"canvas/Untitled 1.canvas",
|
||||
"canvas",
|
||||
"Untitled.canvas",
|
||||
"kanban",
|
||||
"templates"
|
||||
]
|
||||
}
|
BIN
.obsidian_back/.DS_Store
vendored
Normal file
BIN
.obsidian_back/.DS_Store
vendored
Normal file
Binary file not shown.
16
.obsidian_back/app.json
Normal file
16
.obsidian_back/app.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"promptDelete": false,
|
||||
"pdfExportSettings": {
|
||||
"pageSize": "Letter",
|
||||
"landscape": false,
|
||||
"margin": "0",
|
||||
"downscalePercent": 100
|
||||
},
|
||||
"vimMode": true,
|
||||
"attachmentFolderPath": "attachments",
|
||||
"useMarkdownLinks": true,
|
||||
"newLinkFormat": "relative",
|
||||
"alwaysUpdateLinks": true,
|
||||
"newFileLocation": "folder",
|
||||
"newFileFolderPath": "materials"
|
||||
}
|
4
.obsidian_back/appearance.json
Normal file
4
.obsidian_back/appearance.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"showRibbon": true,
|
||||
"translucency": true
|
||||
}
|
3
.obsidian_back/backlink.json
Normal file
3
.obsidian_back/backlink.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"backlinkInDocument": true
|
||||
}
|
6
.obsidian_back/canvas.json
Normal file
6
.obsidian_back/canvas.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"snapToObjects": true,
|
||||
"snapToGrid": true,
|
||||
"newFileLocation": "folder",
|
||||
"newFileFolderPath": "canvas"
|
||||
}
|
8
.obsidian_back/community-plugins.json
Normal file
8
.obsidian_back/community-plugins.json
Normal file
@ -0,0 +1,8 @@
|
||||
[
|
||||
"dataview",
|
||||
"obsidian-day-planner",
|
||||
"obsidian-importer",
|
||||
"obsidian-kanban",
|
||||
"obsidian-git",
|
||||
"global-proxy"
|
||||
]
|
31
.obsidian_back/core-plugins.json
Normal file
31
.obsidian_back/core-plugins.json
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"properties": false,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": true,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": true,
|
||||
"webviewer": false
|
||||
}
|
3
.obsidian_back/daily-notes.json
Normal file
3
.obsidian_back/daily-notes.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"folder": "daily"
|
||||
}
|
22
.obsidian_back/graph.json
Normal file
22
.obsidian_back/graph.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"collapse-filter": true,
|
||||
"search": "",
|
||||
"showTags": false,
|
||||
"showAttachments": false,
|
||||
"hideUnresolved": false,
|
||||
"showOrphans": true,
|
||||
"collapse-color-groups": true,
|
||||
"colorGroups": [],
|
||||
"collapse-display": true,
|
||||
"showArrow": false,
|
||||
"textFadeMultiplier": 0,
|
||||
"nodeSizeMultiplier": 1,
|
||||
"lineSizeMultiplier": 1,
|
||||
"collapse-forces": true,
|
||||
"centerStrength": 0.518713248970312,
|
||||
"repelStrength": 10,
|
||||
"linkStrength": 1,
|
||||
"linkDistance": 250,
|
||||
"scale": 1,
|
||||
"close": false
|
||||
}
|
26
.obsidian_back/hotkeys.json
Normal file
26
.obsidian_back/hotkeys.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"app:delete-file": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "D"
|
||||
}
|
||||
],
|
||||
"workspace:split-horizontal": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "H"
|
||||
}
|
||||
],
|
||||
"workspace:split-vertical": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "V"
|
||||
}
|
||||
]
|
||||
}
|
20876
.obsidian_back/plugins/dataview/main.js
Normal file
20876
.obsidian_back/plugins/dataview/main.js
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian_back/plugins/dataview/manifest.json
Normal file
11
.obsidian_back/plugins/dataview/manifest.json
Normal 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_back/plugins/dataview/styles.css
Normal file
141
.obsidian_back/plugins/dataview/styles.css
Normal 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: ")";
|
||||
}
|
8
.obsidian_back/plugins/global-proxy/data.json
Normal file
8
.obsidian_back/plugins/global-proxy/data.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"enableProxy": true,
|
||||
"httpProxy": "socks5://192.168.65.5:1080",
|
||||
"httpsProxy": "socks5://192.168.65.5:1080",
|
||||
"socksProxy": "socks5://192.168.65.5:1080",
|
||||
"bypassRules": "<local>,127.*,10.*,172.16.*,172.17.*,172.18.*,172.19.*,172.20.*,172.21.*,172.22.*,172.23.*,172.24.*,172.25.*,172.26.*,172.27.*,172.28.*,172.29.*,172.30.*,172.31.*,192.168.*",
|
||||
"pluginTokens": "persist:surfing-vault-${appId}"
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user