Init
This commit is contained in:
3
.obsidian/app.json
vendored
Executable file
3
.obsidian/app.json
vendored
Executable file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"alwaysUpdateLinks": true
|
||||
}
|
||||
4
.obsidian/appearance.json
vendored
Executable file
4
.obsidian/appearance.json
vendored
Executable file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"theme": "obsidian",
|
||||
"baseFontSize": 15
|
||||
}
|
||||
6
.obsidian/community-plugins.json
vendored
Executable file
6
.obsidian/community-plugins.json
vendored
Executable file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
"code-styler",
|
||||
"webpage-html-export",
|
||||
"obsidian-git",
|
||||
"quartz-syncer"
|
||||
]
|
||||
33
.obsidian/core-plugins.json
vendored
Executable file
33
.obsidian/core-plugins.json
vendored
Executable file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"footnotes": false,
|
||||
"properties": true,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": true,
|
||||
"bases": true,
|
||||
"webviewer": false
|
||||
}
|
||||
22
.obsidian/graph.json
vendored
Executable file
22
.obsidian/graph.json
vendored
Executable 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": true
|
||||
}
|
||||
3
.obsidian/page-preview.json
vendored
Executable file
3
.obsidian/page-preview.json
vendored
Executable file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"editor": false
|
||||
}
|
||||
457
.obsidian/plugins/code-styler/data.json
vendored
Executable file
457
.obsidian/plugins/code-styler/data.json
vendored
Executable file
@@ -0,0 +1,457 @@
|
||||
{
|
||||
"themes": {
|
||||
"Default": {
|
||||
"settings": {
|
||||
"codeblock": {
|
||||
"lineNumbers": true,
|
||||
"unwrapLines": true,
|
||||
"wrapLinesActive": false,
|
||||
"curvature": 4
|
||||
},
|
||||
"gutter": {
|
||||
"highlight": true,
|
||||
"activeLine": false
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"textFont": "",
|
||||
"textBold": false,
|
||||
"textItalic": true
|
||||
},
|
||||
"languageTag": {
|
||||
"display": "none",
|
||||
"textFont": "",
|
||||
"textBold": true,
|
||||
"textItalic": false
|
||||
},
|
||||
"languageIcon": {
|
||||
"display": "none",
|
||||
"displayColour": true
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepository": true,
|
||||
"displayVersion": true,
|
||||
"displayTimestamp": true
|
||||
},
|
||||
"fontSize": 14,
|
||||
"foldPlaceholder": ""
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLine": false,
|
||||
"activeEditorLine": false
|
||||
},
|
||||
"inline": {
|
||||
"syntaxHighlight": true,
|
||||
"style": true,
|
||||
"fontWeight": 4,
|
||||
"curvature": 6,
|
||||
"paddingVertical": 5,
|
||||
"paddingHorizontal": 5,
|
||||
"marginHorizontal": 0,
|
||||
"titleFontWeight": 8
|
||||
},
|
||||
"advanced": {
|
||||
"gradientHighlights": false,
|
||||
"gradientHighlightsColourStop": "70%",
|
||||
"languageBorderColour": false,
|
||||
"languageBorderWidth": 5,
|
||||
"iconSize": 28
|
||||
}
|
||||
},
|
||||
"colours": {
|
||||
"light": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--text-faint",
|
||||
"activeTextColour": "--text-muted"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "--code-background",
|
||||
"title": {
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#FF00FF",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "--color-base-30"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "--color-base-30",
|
||||
"activeEditorLineColour": "--color-base-20",
|
||||
"defaultColour": "--text-highlight-bg",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal",
|
||||
"activeTextColour": "--code-normal",
|
||||
"titleTextColour": "--code-comment"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
},
|
||||
"dark": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--text-faint",
|
||||
"activeTextColour": "--text-muted"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "--code-background",
|
||||
"title": {
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#FF00FF",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "--color-base-30"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "--color-base-30",
|
||||
"activeEditorLineColour": "--color-base-20",
|
||||
"defaultColour": "--text-highlight-bg",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal",
|
||||
"activeTextColour": "--code-normal",
|
||||
"titleTextColour": "--code-comment"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Solarized": {
|
||||
"settings": {
|
||||
"codeblock": {
|
||||
"lineNumbers": true,
|
||||
"unwrapLines": true,
|
||||
"wrapLinesActive": false,
|
||||
"curvature": 4
|
||||
},
|
||||
"gutter": {
|
||||
"highlight": true,
|
||||
"activeLine": false
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"textFont": "",
|
||||
"textBold": false,
|
||||
"textItalic": true
|
||||
},
|
||||
"languageTag": {
|
||||
"display": "none",
|
||||
"textFont": "",
|
||||
"textBold": true,
|
||||
"textItalic": false
|
||||
},
|
||||
"languageIcon": {
|
||||
"display": "none",
|
||||
"displayColour": true
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepository": true,
|
||||
"displayVersion": true,
|
||||
"displayTimestamp": true
|
||||
},
|
||||
"fontSize": 14,
|
||||
"foldPlaceholder": ""
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLine": false,
|
||||
"activeEditorLine": false
|
||||
},
|
||||
"inline": {
|
||||
"syntaxHighlight": true,
|
||||
"style": true,
|
||||
"fontWeight": 4,
|
||||
"curvature": 6,
|
||||
"paddingVertical": 5,
|
||||
"paddingHorizontal": 5,
|
||||
"marginHorizontal": 0,
|
||||
"titleFontWeight": 8
|
||||
},
|
||||
"advanced": {
|
||||
"gradientHighlights": false,
|
||||
"gradientHighlightsColourStop": "70%",
|
||||
"languageBorderColour": false,
|
||||
"languageBorderWidth": 5,
|
||||
"iconSize": 28
|
||||
}
|
||||
},
|
||||
"colours": {
|
||||
"light": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "#fdf6e3",
|
||||
"textColour": "#bababa"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "#eee8d5",
|
||||
"textColour": "#6c6c6c",
|
||||
"activeTextColour": "#8c8c8c"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "#D5CCB4",
|
||||
"title": {
|
||||
"textColour": "#866704"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "#B8B5AA",
|
||||
"textColour": "#C25F30"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#941100",
|
||||
"displayVersionColour": "#ff9300",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "#EDD489"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "#eee8d5",
|
||||
"activeEditorLineColour": "#60460633",
|
||||
"defaultColour": "#E9DFBA",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "#fdf6e3",
|
||||
"textColour": "#bababa",
|
||||
"activeTextColour": "#bababa",
|
||||
"titleTextColour": "#C25F30"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
},
|
||||
"dark": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "#002b36",
|
||||
"textColour": "#bababa"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "#073642",
|
||||
"textColour": "#6c6c6c",
|
||||
"activeTextColour": "#4c4c4c"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "#0a4554",
|
||||
"title": {
|
||||
"textColour": "#dadada"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "#008080",
|
||||
"textColour": "#000000"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#9437ff",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "#46cced"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "#073642",
|
||||
"activeEditorLineColour": "#468eeb33",
|
||||
"defaultColour": "#054b5c",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "#002b36",
|
||||
"textColour": "#bababa",
|
||||
"activeTextColour": "#bababa",
|
||||
"titleTextColour": "#000000"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selectedTheme": "Default",
|
||||
"currentTheme": {
|
||||
"settings": {
|
||||
"codeblock": {
|
||||
"lineNumbers": true,
|
||||
"unwrapLines": true,
|
||||
"wrapLinesActive": false,
|
||||
"curvature": 4
|
||||
},
|
||||
"gutter": {
|
||||
"highlight": true,
|
||||
"activeLine": false
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"textFont": "",
|
||||
"textBold": false,
|
||||
"textItalic": true
|
||||
},
|
||||
"languageTag": {
|
||||
"display": "always",
|
||||
"textFont": "",
|
||||
"textBold": true,
|
||||
"textItalic": false
|
||||
},
|
||||
"languageIcon": {
|
||||
"display": "always",
|
||||
"displayColour": true
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepository": true,
|
||||
"displayVersion": true,
|
||||
"displayTimestamp": true
|
||||
},
|
||||
"fontSize": 14,
|
||||
"foldPlaceholder": ""
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLine": false,
|
||||
"activeEditorLine": false
|
||||
},
|
||||
"inline": {
|
||||
"syntaxHighlight": true,
|
||||
"style": true,
|
||||
"fontWeight": 4,
|
||||
"curvature": 6,
|
||||
"paddingVertical": 5,
|
||||
"paddingHorizontal": 5,
|
||||
"marginHorizontal": 0,
|
||||
"titleFontWeight": 8
|
||||
},
|
||||
"advanced": {
|
||||
"gradientHighlights": false,
|
||||
"gradientHighlightsColourStop": "70%",
|
||||
"languageBorderColour": false,
|
||||
"languageBorderWidth": 5,
|
||||
"iconSize": 21
|
||||
}
|
||||
},
|
||||
"colours": {
|
||||
"light": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--text-faint",
|
||||
"activeTextColour": "--text-muted"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "--code-background",
|
||||
"title": {
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#FF00FF",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "--color-base-30"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "--color-base-30",
|
||||
"activeEditorLineColour": "--color-base-20",
|
||||
"defaultColour": "--text-highlight-bg",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal",
|
||||
"activeTextColour": "--code-normal",
|
||||
"titleTextColour": "--code-comment"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
},
|
||||
"dark": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--text-faint",
|
||||
"activeTextColour": "--text-muted"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "--code-background",
|
||||
"title": {
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#FF00FF",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "--color-base-30"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "--color-base-30",
|
||||
"activeEditorLineColour": "--color-base-20",
|
||||
"defaultColour": "--text-highlight-bg",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal",
|
||||
"activeTextColour": "--code-normal",
|
||||
"titleTextColour": "--code-comment"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"newTheme": "",
|
||||
"newHighlight": "",
|
||||
"exampleCodeblockParameters": "python title:foo",
|
||||
"exampleCodeblockContent": "print(\"This line is very long and should be used as an example for how the plugin deals with wrapping and unwrapping very long lines given the choice of codeblock parameters and settings.\")\nprint(\"This line is highlighted.\")",
|
||||
"exampleInlineCode": "{python icon title:foo} print(\"This is inline code\")",
|
||||
"decoratePrint": true,
|
||||
"excludedLanguages": "ad-*, reference",
|
||||
"externalReferenceUpdateOnLoad": false,
|
||||
"processedCodeblocksWhitelist": "run-*, include",
|
||||
"redirectLanguages": {},
|
||||
"version": "1.1.7"
|
||||
}
|
||||
20047
.obsidian/plugins/code-styler/main.js
vendored
Executable file
20047
.obsidian/plugins/code-styler/main.js
vendored
Executable file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/code-styler/manifest.json
vendored
Executable file
11
.obsidian/plugins/code-styler/manifest.json
vendored
Executable file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "code-styler",
|
||||
"name": "Code Styler",
|
||||
"version": "1.1.7",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Style and customize codeblocks and inline code in both editing mode and reading mode.",
|
||||
"author": "Mayuran Visakan",
|
||||
"authorUrl": "https://github.com/mayurankv",
|
||||
"fundingUrl": "https://www.buymeacoffee.com/mayurankv2",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
1
.obsidian/plugins/code-styler/reference-files/cache.json
vendored
Executable file
1
.obsidian/plugins/code-styler/reference-files/cache.json
vendored
Executable file
@@ -0,0 +1 @@
|
||||
{}
|
||||
1348
.obsidian/plugins/code-styler/styles.css
vendored
Executable file
1348
.obsidian/plugins/code-styler/styles.css
vendored
Executable file
File diff suppressed because it is too large
Load Diff
452
.obsidian/plugins/obsidian-git/main.js
vendored
Executable file
452
.obsidian/plugins/obsidian-git/main.js
vendored
Executable file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/obsidian-git/manifest.json
vendored
Executable file
10
.obsidian/plugins/obsidian-git/manifest.json
vendored
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"author": "Vinzent",
|
||||
"authorUrl": "https://github.com/Vinzent03",
|
||||
"id": "obsidian-git",
|
||||
"name": "Git",
|
||||
"description": "Integrate Git version control with automatic backup and other advanced features.",
|
||||
"isDesktopOnly": false,
|
||||
"fundingUrl": "https://ko-fi.com/vinzent",
|
||||
"version": "2.38.0"
|
||||
}
|
||||
710
.obsidian/plugins/obsidian-git/styles.css
vendored
Executable file
710
.obsidian/plugins/obsidian-git/styles.css
vendored
Executable file
@@ -0,0 +1,710 @@
|
||||
@keyframes loading {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.git-signs-gutter {
|
||||
.cm-gutterElement {
|
||||
/* Needed to align the sign properly for different line heigts. Such as
|
||||
* when having a heading or list item.
|
||||
*/
|
||||
padding-top: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-view"] .button-border {
|
||||
border: 2px solid var(--interactive-accent);
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-view"] .view-content {
|
||||
padding-left: 0;
|
||||
padding-top: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-history-view"] .view-content {
|
||||
padding-left: 0;
|
||||
padding-top: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.loading {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.loading > svg {
|
||||
animation: 2s linear infinite loading;
|
||||
transform-origin: 50% 50%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.obsidian-git-center {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.obsidian-git-textarea {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.obsidian-git-disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.obsidian-git-center-button {
|
||||
display: block;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
.tooltip.mod-left {
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
.tooltip.mod-right {
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
/* Limits the scrollbar to the view body */
|
||||
.git-view {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* Re-enable wrapping of nav buttns to prevent overflow on smaller screens #*/
|
||||
.workspace-drawer .git-view .nav-buttons-container {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.git-tools {
|
||||
display: flex;
|
||||
margin-left: auto;
|
||||
}
|
||||
.git-tools .type {
|
||||
padding-left: var(--size-2-1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 11px;
|
||||
}
|
||||
|
||||
.git-tools .type[data-type="M"] {
|
||||
color: orange;
|
||||
}
|
||||
.git-tools .type[data-type="D"] {
|
||||
color: red;
|
||||
}
|
||||
.git-tools .buttons {
|
||||
display: flex;
|
||||
}
|
||||
.git-tools .buttons > * {
|
||||
padding: 0 0;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-view"] .tree-item-self,
|
||||
.workspace-leaf-content[data-type="git-history-view"] .tree-item-self {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-view"]
|
||||
.tree-item-self:hover
|
||||
.clickable-icon,
|
||||
.workspace-leaf-content[data-type="git-history-view"]
|
||||
.tree-item-self:hover
|
||||
.clickable-icon {
|
||||
color: var(--icon-color-hover);
|
||||
}
|
||||
|
||||
/* Highlight an item as active if it's diff is currently opened */
|
||||
.is-active .git-tools .buttons > * {
|
||||
color: var(--nav-item-color-active);
|
||||
}
|
||||
|
||||
.git-author {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.git-date {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.git-ref {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
/* ====== diff2html ======
|
||||
The following styles are adapted from the obsidian-version-history plugin by
|
||||
@kometenstaub https://github.com/kometenstaub/obsidian-version-history-diff/blob/main/src/styles.scss
|
||||
which itself is adapted from the diff2html library with the following original license:
|
||||
|
||||
https://github.com/rtfpessoa/diff2html/blob/master/LICENSE.md
|
||||
|
||||
Copyright 2014-2016 Rodrigo Fernandes https://rtfpessoa.github.io/
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
.theme-dark,
|
||||
.theme-light {
|
||||
--git-delete-bg: #ff475040;
|
||||
--git-delete-hl: #96050a75;
|
||||
--git-insert-bg: #68d36840;
|
||||
--git-insert-hl: #23c02350;
|
||||
--git-change-bg: #ffd55840;
|
||||
--git-selected: #3572b0;
|
||||
|
||||
--git-delete: #c33;
|
||||
--git-insert: #399839;
|
||||
--git-change: #d0b44c;
|
||||
--git-move: #3572b0;
|
||||
}
|
||||
|
||||
.git-diff {
|
||||
.d2h-d-none {
|
||||
display: none;
|
||||
}
|
||||
.d2h-wrapper {
|
||||
text-align: left;
|
||||
border-radius: 0.25em;
|
||||
overflow: auto;
|
||||
}
|
||||
.d2h-file-header.d2h-file-header {
|
||||
background-color: var(--background-secondary);
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
font-family:
|
||||
Source Sans Pro,
|
||||
Helvetica Neue,
|
||||
Helvetica,
|
||||
Arial,
|
||||
sans-serif;
|
||||
height: 35px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.d2h-file-header,
|
||||
.d2h-file-stats {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
.d2h-file-header {
|
||||
display: none;
|
||||
}
|
||||
.d2h-file-stats {
|
||||
font-size: 14px;
|
||||
margin-left: auto;
|
||||
}
|
||||
.d2h-lines-added {
|
||||
border: 1px solid var(--color-green);
|
||||
border-radius: 5px 0 0 5px;
|
||||
color: var(--color-green);
|
||||
padding: 2px;
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.d2h-lines-deleted {
|
||||
border: 1px solid var(--color-red);
|
||||
border-radius: 0 5px 5px 0;
|
||||
color: var(--color-red);
|
||||
margin-left: 1px;
|
||||
padding: 2px;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.d2h-file-name-wrapper {
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
font-size: 15px;
|
||||
width: 100%;
|
||||
}
|
||||
.d2h-file-name {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: var(--text-normal);
|
||||
font-size: var(--h5-size);
|
||||
}
|
||||
.d2h-file-wrapper {
|
||||
border: 1px solid var(--background-secondary-alt);
|
||||
border-radius: 3px;
|
||||
margin-bottom: 1em;
|
||||
max-height: 100%;
|
||||
}
|
||||
.d2h-file-collapse {
|
||||
-webkit-box-pack: end;
|
||||
-ms-flex-pack: end;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
border: 1px solid var(--background-secondary-alt);
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 12px;
|
||||
justify-content: flex-end;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
.d2h-file-collapse.d2h-selected {
|
||||
background-color: var(--git-selected);
|
||||
}
|
||||
.d2h-file-collapse-input {
|
||||
margin: 0 4px 0 0;
|
||||
}
|
||||
.d2h-diff-table {
|
||||
border-collapse: collapse;
|
||||
font-family: var(--font-monospace);
|
||||
font-size: var(--code-size);
|
||||
width: 100%;
|
||||
}
|
||||
.d2h-files-diff {
|
||||
width: 100%;
|
||||
}
|
||||
.d2h-file-diff {
|
||||
/*
|
||||
overflow-y: scroll;
|
||||
*/
|
||||
border-radius: 5px;
|
||||
font-size: var(--font-text-size);
|
||||
line-height: var(--line-height-normal);
|
||||
}
|
||||
.d2h-file-side-diff {
|
||||
display: inline-block;
|
||||
margin-bottom: -8px;
|
||||
margin-right: -4px;
|
||||
overflow-x: scroll;
|
||||
overflow-y: hidden;
|
||||
width: 50%;
|
||||
}
|
||||
.d2h-code-line {
|
||||
padding-left: 6em;
|
||||
padding-right: 1.5em;
|
||||
}
|
||||
.d2h-code-line,
|
||||
.d2h-code-side-line {
|
||||
display: inline-block;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
.d2h-code-side-line {
|
||||
/* needed to be changed */
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
.d2h-code-line-ctn {
|
||||
word-wrap: normal;
|
||||
background: none;
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
-webkit-user-select: text;
|
||||
-moz-user-select: text;
|
||||
-ms-user-select: text;
|
||||
user-select: text;
|
||||
vertical-align: middle;
|
||||
width: 100%;
|
||||
/* only works for line-by-line */
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.d2h-code-line del,
|
||||
.d2h-code-side-line del {
|
||||
background-color: var(--git-delete-hl);
|
||||
color: var(--text-normal);
|
||||
}
|
||||
.d2h-code-line del,
|
||||
.d2h-code-line ins,
|
||||
.d2h-code-side-line del,
|
||||
.d2h-code-side-line ins {
|
||||
border-radius: 0.2em;
|
||||
display: inline-block;
|
||||
margin-top: -1px;
|
||||
text-decoration: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.d2h-code-line ins,
|
||||
.d2h-code-side-line ins {
|
||||
background-color: var(--git-insert-hl);
|
||||
text-align: left;
|
||||
}
|
||||
.d2h-code-line-prefix {
|
||||
word-wrap: normal;
|
||||
background: none;
|
||||
display: inline;
|
||||
padding: 0;
|
||||
white-space: pre;
|
||||
}
|
||||
.line-num1 {
|
||||
float: left;
|
||||
}
|
||||
.line-num1,
|
||||
.line-num2 {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
/*
|
||||
padding: 0 0.5em;
|
||||
*/
|
||||
text-overflow: ellipsis;
|
||||
width: 2.5em;
|
||||
padding-left: 0;
|
||||
}
|
||||
.line-num2 {
|
||||
float: right;
|
||||
}
|
||||
.d2h-code-linenumber {
|
||||
background-color: var(--background-primary);
|
||||
border: solid var(--background-modifier-border);
|
||||
border-width: 0 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: var(--text-faint);
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
width: 5.5em;
|
||||
}
|
||||
.d2h-code-linenumber:after {
|
||||
content: "\200b";
|
||||
}
|
||||
.d2h-code-side-linenumber {
|
||||
background-color: var(--background-primary);
|
||||
border: solid var(--background-modifier-border);
|
||||
border-width: 0 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: var(--text-faint);
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
padding: 0 0.5em;
|
||||
text-align: right;
|
||||
text-overflow: ellipsis;
|
||||
width: 4em;
|
||||
/* needed to be changed */
|
||||
display: table-cell;
|
||||
position: relative;
|
||||
}
|
||||
.d2h-code-side-linenumber:after {
|
||||
content: "\200b";
|
||||
}
|
||||
.d2h-code-side-emptyplaceholder,
|
||||
.d2h-emptyplaceholder {
|
||||
background-color: var(--background-primary);
|
||||
border-color: var(--background-modifier-border);
|
||||
}
|
||||
.d2h-code-line-prefix,
|
||||
.d2h-code-linenumber,
|
||||
.d2h-code-side-linenumber,
|
||||
.d2h-emptyplaceholder {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.d2h-code-linenumber,
|
||||
.d2h-code-side-linenumber {
|
||||
direction: rtl;
|
||||
}
|
||||
.d2h-del {
|
||||
background-color: var(--git-delete-bg);
|
||||
border-color: var(--git-delete-hl);
|
||||
}
|
||||
.d2h-ins {
|
||||
background-color: var(--git-insert-bg);
|
||||
border-color: var(--git-insert-hl);
|
||||
}
|
||||
.d2h-info {
|
||||
background-color: var(--background-primary);
|
||||
border-color: var(--background-modifier-border);
|
||||
color: var(--text-faint);
|
||||
}
|
||||
.d2h-del,
|
||||
.d2h-ins,
|
||||
.d2h-file-diff .d2h-change {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
.d2h-file-diff .d2h-del.d2h-change {
|
||||
background-color: var(--git-change-bg);
|
||||
}
|
||||
.d2h-file-diff .d2h-ins.d2h-change {
|
||||
background-color: var(--git-insert-bg);
|
||||
}
|
||||
.d2h-file-list-wrapper {
|
||||
a {
|
||||
text-decoration: none;
|
||||
cursor: default;
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
|
||||
svg {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.d2h-file-list-header {
|
||||
text-align: left;
|
||||
}
|
||||
.d2h-file-list-title {
|
||||
display: none;
|
||||
}
|
||||
.d2h-file-list-line {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
text-align: left;
|
||||
}
|
||||
.d2h-file-list {
|
||||
}
|
||||
.d2h-file-list > li {
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
margin: 0;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.d2h-file-list > li:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
.d2h-file-switch {
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 10px;
|
||||
}
|
||||
.d2h-icon {
|
||||
fill: currentColor;
|
||||
margin-right: 10px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.d2h-deleted {
|
||||
color: var(--git-delete);
|
||||
}
|
||||
.d2h-added {
|
||||
color: var(--git-insert);
|
||||
}
|
||||
.d2h-changed {
|
||||
color: var(--git-change);
|
||||
}
|
||||
.d2h-moved {
|
||||
color: var(--git-move);
|
||||
}
|
||||
.d2h-tag {
|
||||
background-color: var(--background-secondary);
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
font-size: 10px;
|
||||
margin-left: 5px;
|
||||
padding: 0 2px;
|
||||
}
|
||||
.d2h-deleted-tag {
|
||||
border: 1px solid var(--git-delete);
|
||||
}
|
||||
.d2h-added-tag {
|
||||
border: 1px solid var(--git-insert);
|
||||
}
|
||||
.d2h-changed-tag {
|
||||
border: 1px solid var(--git-change);
|
||||
}
|
||||
.d2h-moved-tag {
|
||||
border: 1px solid var(--git-move);
|
||||
}
|
||||
|
||||
/* needed for line-by-line*/
|
||||
|
||||
.d2h-diff-tbody {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
/* ====================== Line Authoring Information ====================== */
|
||||
|
||||
.cm-gutterElement.obs-git-blame-gutter {
|
||||
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
|
||||
border-width: 0px 2px 0.2px 2px;
|
||||
border-style: solid;
|
||||
border-color: var(--background-secondary);
|
||||
background-color: var(--background-secondary);
|
||||
}
|
||||
|
||||
.cm-gutterElement.obs-git-blame-gutter > div,
|
||||
.line-author-settings-preview {
|
||||
/* delegate text color to settings */
|
||||
color: var(--obs-git-gutter-text);
|
||||
font-family: monospace;
|
||||
height: 100%; /* ensure, that age-based background color occupies entire parent */
|
||||
text-align: right;
|
||||
padding: 0px 6px 0px 6px;
|
||||
white-space: pre; /* Keep spaces and do not collapse them. */
|
||||
}
|
||||
|
||||
@media (max-width: 800px) {
|
||||
/* hide git blame gutter not to superpose text */
|
||||
.cm-gutterElement.obs-git-blame-gutter {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.git-unified-diff-view,
|
||||
.git-split-diff-view .cm-deletedLine .cm-changedText {
|
||||
background-color: #ee443330;
|
||||
}
|
||||
|
||||
.git-unified-diff-view,
|
||||
.git-split-diff-view .cm-insertedLine .cm-changedText {
|
||||
background-color: #22bb2230;
|
||||
}
|
||||
|
||||
.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after {
|
||||
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>');
|
||||
}
|
||||
|
||||
.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after {
|
||||
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>');
|
||||
}
|
||||
|
||||
/* Override styling of Codemirror merge view "collapsed lines" indicator */
|
||||
.git-split-diff-view .ͼ2 .cm-collapsedLines {
|
||||
background: var(--interactive-normal);
|
||||
border-radius: var(--radius-m);
|
||||
color: var(--text-accent);
|
||||
font-size: var(--font-small);
|
||||
padding: var(--size-4-1) var(--size-4-1);
|
||||
}
|
||||
.git-split-diff-view .ͼ2 .cm-collapsedLines:hover {
|
||||
background: var(--interactive-hover);
|
||||
color: var(--text-accent-hover);
|
||||
}
|
||||
|
||||
.git-signs-gutter {
|
||||
.cm-gutterElement {
|
||||
display: grid;
|
||||
}
|
||||
}
|
||||
|
||||
.git-gutter-marker:hover {
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.git-gutter-marker.git-add {
|
||||
background-color: var(--color-green);
|
||||
justify-self: center;
|
||||
height: inherit;
|
||||
width: 0.2rem;
|
||||
}
|
||||
|
||||
.git-gutter-marker.git-change {
|
||||
background-color: var(--color-yellow);
|
||||
justify-self: center;
|
||||
height: inherit;
|
||||
width: 0.2rem;
|
||||
}
|
||||
|
||||
.git-gutter-marker.git-changedelete {
|
||||
color: var(--color-yellow);
|
||||
font-weight: var(--font-bold);
|
||||
font-size: 1rem;
|
||||
justify-self: center;
|
||||
height: inherit;
|
||||
}
|
||||
|
||||
.git-gutter-marker.git-delete {
|
||||
background-color: var(--color-red);
|
||||
height: 0.2rem;
|
||||
width: 0.8rem;
|
||||
align-self: end;
|
||||
}
|
||||
|
||||
.git-gutter-marker.git-topdelete {
|
||||
background-color: var(--color-red);
|
||||
height: 0.2rem;
|
||||
width: 0.8rem;
|
||||
align-self: start;
|
||||
}
|
||||
|
||||
div:hover > .git-gutter-marker.git-change {
|
||||
width: 0.6rem;
|
||||
}
|
||||
|
||||
div:hover > .git-gutter-marker.git-add {
|
||||
width: 0.6rem;
|
||||
}
|
||||
|
||||
div:hover > .git-gutter-marker.git-delete {
|
||||
height: 0.6rem;
|
||||
}
|
||||
|
||||
div:hover > .git-gutter-marker.git-topdelete {
|
||||
height: 0.6rem;
|
||||
}
|
||||
|
||||
div:hover > .git-gutter-marker.git-changedelete {
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
|
||||
.git-gutter-marker.staged {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.git-diff {
|
||||
.cm-merge-revert {
|
||||
width: 4em;
|
||||
}
|
||||
/* Ensure that merge revert markers are positioned correctly */
|
||||
.cm-merge-revert > * {
|
||||
position: absolute;
|
||||
background-color: var(--background-secondary);
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
/* Prevent shifting of the editor when git signs gutter is the only gutter present */
|
||||
.cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) {
|
||||
margin-inline-end: 0;
|
||||
.git-signs-gutter {
|
||||
margin-inline-start: -1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.git-changes-status-bar-colored {
|
||||
.git-add {
|
||||
color: var(--color-green);
|
||||
}
|
||||
.git-change {
|
||||
color: var(--color-yellow);
|
||||
}
|
||||
.git-delete {
|
||||
color: var(--color-red);
|
||||
}
|
||||
}
|
||||
|
||||
.git-changes-status-bar .git-add {
|
||||
margin-right: 0.3em;
|
||||
}
|
||||
|
||||
.git-changes-status-bar .git-change {
|
||||
margin-right: 0.3em;
|
||||
}
|
||||
50
.obsidian/plugins/quartz-syncer/data.json
vendored
Executable file
50
.obsidian/plugins/quartz-syncer/data.json
vendored
Executable file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"git": {
|
||||
"remoteUrl": "",
|
||||
"branch": "v4",
|
||||
"corsProxyUrl": "",
|
||||
"auth": {
|
||||
"type": "basic",
|
||||
"username": ""
|
||||
},
|
||||
"providerHint": "github"
|
||||
},
|
||||
"vaultPath": "/",
|
||||
"contentFolder": "content",
|
||||
"useFullResolutionImages": false,
|
||||
"applyEmbeds": true,
|
||||
"publishFrontmatterKey": "publish",
|
||||
"allNotesPublishableByDefault": false,
|
||||
"showCreatedTimestamp": true,
|
||||
"showUpdatedTimestamp": true,
|
||||
"showPublishedTimestamp": false,
|
||||
"usePermalink": false,
|
||||
"includeAllFrontmatter": false,
|
||||
"frontmatterFormat": "yaml",
|
||||
"pathRewriteRules": "",
|
||||
"createdTimestampKey": "created, created_at, date",
|
||||
"updatedTimestampKey": "modified, lastmod, updated, last-modified",
|
||||
"publishedTimestampKey": "published, publishDate, date",
|
||||
"timestampFormat": "MMM dd, yyyy h:mm a",
|
||||
"useCache": true,
|
||||
"syncCache": true,
|
||||
"persistCache": false,
|
||||
"cacheTimestamp": 0,
|
||||
"cache": "{}",
|
||||
"useAutoCardLink": false,
|
||||
"useDataview": true,
|
||||
"useDatacore": false,
|
||||
"useExcalidraw": false,
|
||||
"useFantasyStatblocks": false,
|
||||
"manageSyncerStyles": true,
|
||||
"useThemes": false,
|
||||
"lastUsedSettingsTab": "git",
|
||||
"noteSettingsIsInitialized": true,
|
||||
"pluginVersion": "1.9.2",
|
||||
"diffViewStyle": "auto",
|
||||
"ENABLE_DEVELOPER_TOOLS": false,
|
||||
"logLevel": {
|
||||
"value": 99,
|
||||
"name": "OFF"
|
||||
}
|
||||
}
|
||||
51424
.obsidian/plugins/quartz-syncer/main.js
vendored
Executable file
51424
.obsidian/plugins/quartz-syncer/main.js
vendored
Executable file
File diff suppressed because one or more lines are too long
15
.obsidian/plugins/quartz-syncer/manifest.json
vendored
Executable file
15
.obsidian/plugins/quartz-syncer/manifest.json
vendored
Executable file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "quartz-syncer",
|
||||
"name": "Quartz Syncer",
|
||||
"version": "1.9.2",
|
||||
"minAppVersion": "1.11.4",
|
||||
"description": "Manage and publish your notes to Quartz, the fast, batteries-included static-site generator.",
|
||||
"author": "Emile Bangma",
|
||||
"authorUrl": "https://github.com/saberzero1",
|
||||
"fundingUrl": {
|
||||
"Buy Me a Coffee": "https://buymeacoffee.com/saberzero1",
|
||||
"GitHub Sponsor": "https://github.com/sponsors/saberzero1",
|
||||
"Ko-Fi": "https://ko-fi.com/saberzero1"
|
||||
},
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
577
.obsidian/plugins/quartz-syncer/styles.css
vendored
Executable file
577
.obsidian/plugins/quartz-syncer/styles.css
vendored
Executable file
@@ -0,0 +1,577 @@
|
||||
/* Quartz Syncer Publication Center */
|
||||
.quartz-syncer-publisher-title-separator {
|
||||
margin-top: 0px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.quartz-syncer-publisher-footer-separator {
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.quartz-syncer-publisher-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.quartz-syncer-publisher-loading-msg {
|
||||
font-size: var(--font-ui-larger);
|
||||
display: flex;
|
||||
flex-grow: 0; /* Prevnets the loading message from stretching the container */
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.quartz-syncer-progress-bar-container {
|
||||
width: 100%;
|
||||
}
|
||||
.quartz-syncer-progress-bar-text {
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
button.quartz-syncer-publisher-button {
|
||||
background-color: var(--interactive-accent);
|
||||
color: var(--text-on-accent);
|
||||
cursor: var(--cursor);
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
.quartz-syncer-publisher-loading-container {
|
||||
width: 100%;
|
||||
height: 5px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.quartz-syncer-publisher-loading-bar {
|
||||
background-color: var(--interactive-accent);
|
||||
height: 100%;
|
||||
transition: all 0.5s ease-in-out;
|
||||
}
|
||||
.quartz-syncer-publisher-published {
|
||||
color: var(--text-success, var(--color-green));
|
||||
}
|
||||
.quartz-syncer-publisher-deleted {
|
||||
color: var(--text-error, var(--color-red));
|
||||
}
|
||||
|
||||
/* Quartz Syncer Diff View */
|
||||
.modal:has(div.quartz-syncer-diff-view) {
|
||||
max-width: var(--modal-max-width, 100%);
|
||||
width: var(--modal-width, 100%);
|
||||
}
|
||||
|
||||
body.is-mobile .modal:has(div.quartz-syncer-diff-view) {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
body.is-mobile .quartz-syncer-diff-view-container {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
pre.quartz-syncer-diff-view {
|
||||
display: block;
|
||||
white-space: pre;
|
||||
word-wrap: break-word;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
pre.quartz-syncer-diff-view.quartz-syncer-diff-added {
|
||||
background-color: rgba(
|
||||
var(--background-modifier-success-rgb, var(--color-green-rgb)),
|
||||
0.5
|
||||
);
|
||||
color: var(--text-on-accent);
|
||||
}
|
||||
|
||||
pre.quartz-syncer-diff-view.quartz-syncer-diff-removed {
|
||||
background-color: rgba(
|
||||
var(--background-modifier-error-rgb, var(--color-red-rgb)),
|
||||
0.5
|
||||
);
|
||||
color: var(--text-on-accent);
|
||||
}
|
||||
|
||||
.quartz-syncer-diff-line {
|
||||
white-space: pre;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.quartz-syncer-diff-line-added {
|
||||
background-color: var(--text-success, var(--color-green));
|
||||
color: var(--text-on-accent);
|
||||
text-decoration: overline;
|
||||
}
|
||||
|
||||
.quartz-syncer-diff-line-removed {
|
||||
background-color: var(--text-error, var(--color-red));
|
||||
color: var(--text-on-accent);
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
/* Quartz Syncer Tree Selectors */
|
||||
.quartz-syncer-modal-content ul {
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
padding-left: 1.2rem;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.quartz-syncer-modal-content li {
|
||||
margin: 0.2rem 0;
|
||||
}
|
||||
|
||||
.quartz-syncer-modal-content .no-arrow {
|
||||
padding-left: calc(var(--icon-size) + 2px);
|
||||
}
|
||||
.quartz-syncer-modal-content .arrow {
|
||||
cursor: var(--cursor);
|
||||
display: inline-block;
|
||||
transition: transform 200ms;
|
||||
}
|
||||
/* arrowDown svelte variable */
|
||||
.quartz-syncer-modal-content .arrowDown {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
/* isRoot svelte variable */
|
||||
.quartz-syncer-modal-content ul.isRoot {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.quartz-syncer-modal-content .root-header {
|
||||
font-weight: var(--font-bold);
|
||||
font-size: var(--font-ui-larger);
|
||||
}
|
||||
input:indeterminate {
|
||||
background-color: var(--checkbox-color);
|
||||
border-color: var(--checkbox-color);
|
||||
}
|
||||
input[type="checkbox"]:indeterminate:after {
|
||||
content: "";
|
||||
top: -1px;
|
||||
left: -1px;
|
||||
position: absolute;
|
||||
width: var(--checkbox-size);
|
||||
height: var(--checkbox-size);
|
||||
display: block;
|
||||
background-color: var(--checkbox-marker-color);
|
||||
-webkit-mask-position: 52% 52%;
|
||||
mask-position: 52% 52%;
|
||||
-webkit-mask-size: 65%;
|
||||
mask-size: 65%;
|
||||
-webkit-mask-repeat: no-repeat;
|
||||
mask-repeat: no-repeat;
|
||||
-webkit-mask-image: url('data:image/svg+xml; utf8,<svg fill="none" width="12px" height="12px" viewBox="0 0 32 32" id="icon" xmlns="http://www.w3.org/2000/svg"><rect fill="%23000000" x="4" y="4" width="24" height="24"/></svg>');
|
||||
mask-image: url('data:image/svg+xml; utf8,<svg fill="none" width="12px" height="12px" viewBox="0 0 32 32" id="icon" xmlns="http://www.w3.org/2000/svg"><rect fill="%23000000" x="4" y="4" width="24" height="24"/></svg>');
|
||||
}
|
||||
|
||||
.quartz-syncer-icon-diff {
|
||||
cursor: var(--cursor);
|
||||
display: inline-block;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
/* Quartz Syncer Settings */
|
||||
|
||||
.quartz-syncer-settings button:disabled,
|
||||
.quartz-syncer-publish-status-view button:disabled {
|
||||
pointer-events: none;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.quartz-syncer-publish-status-view ul {
|
||||
list-style-type: none;
|
||||
position: relative;
|
||||
margin-left: 5px;
|
||||
margin-top: 0;
|
||||
max-height: 250px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.quartz-syncer-publish-status-view h2 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.quartz-syncer-publish-status-view .collapsable {
|
||||
cursor: var(--cursor);
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.quartz-syncer-settings-enabled
|
||||
> .setting-item-info
|
||||
> .setting-item-name:after {
|
||||
content: " (plugin enabled)";
|
||||
color: var(--text-success, var(--color-green));
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
|
||||
.quartz-syncer-settings-disabled > .setting-item-info > .setting-item-name {
|
||||
color: var(--text-error, var(--color-red));
|
||||
}
|
||||
|
||||
.quartz-syncer-settings-disabled
|
||||
> .setting-item-info
|
||||
> .setting-item-name:after {
|
||||
content: " (plugin disabled)";
|
||||
color: var(--text-error, var(--color-red));
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
|
||||
.quartz-syncer-settings-disabled > .setting-item-control > .checkbox-container {
|
||||
background-color: var(--text-error, var(--color-red));
|
||||
}
|
||||
|
||||
.quartz-syncer-settings-upcoming
|
||||
> .setting-item-info
|
||||
> .setting-item-name:after {
|
||||
content: " (upcoming feature)";
|
||||
color: var(--text-warning, var(--color-orange));
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
|
||||
.quartz-syncer-settings .setting-item-heading {
|
||||
margin-top: var(--heading-spacing);
|
||||
}
|
||||
|
||||
.quartz-syncer-settings-description {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.quartz-syncer-settings .svg-icon {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.quartz-syncer-navigation-item-icon > svg.svg-icon {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.quartz-syncer-svg-icon {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
/* GitHub connection status */
|
||||
.quartz-syncer-connection-status {
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
|
||||
.quartz-syncer-connection-status-failed {
|
||||
color: var(--text-error, var(--color-red));
|
||||
}
|
||||
|
||||
.quartz-syncer-connection-status-success {
|
||||
color: var(--text-success, var(--color-green));
|
||||
}
|
||||
|
||||
.quartz-syncer-connection-status-pending {
|
||||
color: var(--text-warning, var(--color-orange));
|
||||
}
|
||||
|
||||
/* Cog animation */
|
||||
@keyframes quartz-syncer-rotate-animation {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.quartz-syncer-rotate {
|
||||
animation: quartz-syncer-rotate-animation 4s linear infinite;
|
||||
}
|
||||
|
||||
.quartz-syncer-cog {
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.quartz-syncer-cog-big {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
/* Progress bar */
|
||||
.quartz-syncer-progress-bar-container {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* Publication center */
|
||||
.quartz-syncer-modal-title {
|
||||
}
|
||||
|
||||
.quartz-syncer-modal-content:first-child {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Folder select */
|
||||
.quartz-syncer-settings .search-input-container::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.quartz-syncer-settings .search-input-container input {
|
||||
padding-inline-start: 0px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.quartz-syncer-settings.quartz-syncer-desktop .search-input-container input {
|
||||
width: unset;
|
||||
}
|
||||
|
||||
/* Settings tabs */
|
||||
.quartz-syncer-navigation-item {
|
||||
cursor: var(--cursor);
|
||||
border: var(--border-width) solid var(--background-modifier-border);
|
||||
border-radius: var(--radius-m) var(--radius-m) var(--radius-s)
|
||||
var(--radius-s);
|
||||
|
||||
font-weight: var(--font-bold);
|
||||
font-size: var(--font-text-size);
|
||||
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
flex-direction: row;
|
||||
white-space: nowrap;
|
||||
|
||||
padding: 4px 6px;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
overflow: hidden;
|
||||
|
||||
background-color: var(--background-secondary-alt);
|
||||
|
||||
transition:
|
||||
color 0.25s ease-in-out,
|
||||
padding 0.25s ease-in-out,
|
||||
background-color 0.35s cubic-bezier(0.45, 0.25, 0.83, 0.67),
|
||||
max-width 0.35s cubic-bezier(0.57, 0.04, 0.58, 1);
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1325px) {
|
||||
.quartz-syncer-navigation-item.quartz-syncer-desktop {
|
||||
max-width: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 800px) {
|
||||
.quartz-syncer-navigation-item.quartz-syncer-mobile {
|
||||
max-width: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.quartz-syncer-navigation-item-icon,
|
||||
.quartz-syncer-warning {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.quartz-syncer-navigation-item:hover {
|
||||
border-color: var(--interactive-accent-hover);
|
||||
border-bottom: 0px;
|
||||
}
|
||||
|
||||
.quartz-syncer-navigation-item-active {
|
||||
background-color: var(--interactive-accent) !important;
|
||||
color: var(--text-on-accent);
|
||||
padding: 4px 9px !important;
|
||||
max-width: 100% !important;
|
||||
border: var(--border-width) solid var(--background-modifier-border);
|
||||
border-radius: var(--radius-m) var(--radius-m) var(--radius-s)
|
||||
var(--radius-s);
|
||||
border-bottom: 0px;
|
||||
transition:
|
||||
color 0.25s ease-in-out,
|
||||
padding 0.25s ease-in-out,
|
||||
background-color 0.35s cubic-bezier(0.45, 0.25, 0.83, 0.67),
|
||||
max-width 0.45s cubic-bezier(0.57, 0.04, 0.58, 1) 0.2s;
|
||||
}
|
||||
|
||||
.quartz-syncer-settings {
|
||||
transition: transform 400ms 0s;
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-title {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
justify-content: space-between;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-title.quartz-syncer-mobile {
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-title h1 {
|
||||
font-weight: 900;
|
||||
margin-top: 6px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-header {
|
||||
margin-bottom: 24px;
|
||||
overflow-y: hidden;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-header .quartz-syncer-setting-tab-group {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
overflow-x: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-tab-group {
|
||||
margin-top: 6px;
|
||||
padding-left: 2px;
|
||||
padding-right: 2px;
|
||||
border-bottom: var(--border-width) solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-header .quartz-syncer-tab-settings {
|
||||
padding: 6px 12px;
|
||||
font-weight: 600;
|
||||
cursor: var(--cursor);
|
||||
white-space: nowrap;
|
||||
border-left: var(--border-width) solid var(--background-modifier-border);
|
||||
border-right: var(--border-width) solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-header .quartz-syncer-tab-settings:first-child {
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-header
|
||||
.quartz-syncer-tab-settings.quartz-syncer-tab-settings-active {
|
||||
border-bottom: var(--border-width) solid var(--background-primary);
|
||||
transform: translateY(2px);
|
||||
border-radius: var(--radius-s);
|
||||
border-left: var(--border-width) solid var(--background-modifier-border);
|
||||
border-top: var(--border-width) solid var(--background-modifier-border);
|
||||
border-right: var(--border-width) solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-content
|
||||
.quartz-syncer-tab-settings.quartz-syncer-tab-settings-active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.quartz-syncer-setting-content
|
||||
.quartz-syncer-tab-settings:not(.quartz-syncer-tab-settings-active) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body.is-phone
|
||||
.quartz-syncer-navigation-item:not(.quartz-syncer-navigation-item-active)
|
||||
> span:nth-child(2),
|
||||
body.is-tablet
|
||||
.quartz-syncer-navigation-item:not(.quartz-syncer-navigation-item-active)
|
||||
> span:nth-child(2),
|
||||
body.is-mobile
|
||||
.quartz-syncer-navigation-item:not(.quartz-syncer-navigation-item-active)
|
||||
> span:nth-child(2) {
|
||||
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;
|
||||
width: 1px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Token/Secret Storage UI */
|
||||
.quartz-syncer-token-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.quartz-syncer-token-status {
|
||||
font-size: var(--font-ui-smaller);
|
||||
padding: 4px 8px;
|
||||
border-radius: var(--radius-s);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.quartz-syncer-token-status::before {
|
||||
content: "";
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.quartz-syncer-token-status-set {
|
||||
background-color: rgba(var(--color-green-rgb), 0.15);
|
||||
color: var(--text-success, var(--color-green));
|
||||
}
|
||||
|
||||
.quartz-syncer-token-status-set::before {
|
||||
background-color: var(--text-success, var(--color-green));
|
||||
}
|
||||
|
||||
.quartz-syncer-token-status-unset {
|
||||
background-color: rgba(var(--color-orange-rgb), 0.15);
|
||||
color: var(--text-warning, var(--color-orange));
|
||||
}
|
||||
|
||||
.quartz-syncer-token-status-unset::before {
|
||||
background-color: var(--text-warning, var(--color-orange));
|
||||
}
|
||||
|
||||
.quartz-syncer-token-input-container {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.quartz-syncer-token-input {
|
||||
flex: 1;
|
||||
padding: 6px 10px;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: var(--radius-s);
|
||||
background-color: var(--background-primary);
|
||||
color: var(--text-normal);
|
||||
font-family: var(--font-monospace);
|
||||
}
|
||||
|
||||
.quartz-syncer-token-input:focus {
|
||||
border-color: var(--interactive-accent);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.quartz-syncer-token-toggle {
|
||||
padding: 6px;
|
||||
border: none;
|
||||
background: transparent;
|
||||
cursor: var(--cursor);
|
||||
color: var(--text-muted);
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
.quartz-syncer-token-toggle:hover {
|
||||
color: var(--text-normal);
|
||||
background-color: var(--background-modifier-hover);
|
||||
}
|
||||
|
||||
.quartz-syncer-token-buttons {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.quartz-syncer-token-buttons button {
|
||||
padding: 6px 12px;
|
||||
border-radius: var(--radius-s);
|
||||
cursor: var(--cursor);
|
||||
font-size: var(--font-ui-small);
|
||||
}
|
||||
243
.obsidian/plugins/webpage-html-export/data.json
vendored
Executable file
243
.obsidian/plugins/webpage-html-export/data.json
vendored
Executable file
@@ -0,0 +1,243 @@
|
||||
{
|
||||
"settingsVersion": "0.0.0",
|
||||
"exportOptions": {
|
||||
"createDocumentContainer": true,
|
||||
"keepModHeaderFooter": false,
|
||||
"addPageIcon": true,
|
||||
"unifyTitleFormat": true,
|
||||
"createPusherElement": true,
|
||||
"makeHeadersTrees": true,
|
||||
"postProcess": true,
|
||||
"displayProgress": true,
|
||||
"inlineHTML": false,
|
||||
"exportPath": "/home/kevin/Desktop/test2",
|
||||
"filesToExport": [],
|
||||
"useFallbackRenderer": false,
|
||||
"addBodyClasses": true,
|
||||
"addMathjaxStyles": true,
|
||||
"addHeadTag": true,
|
||||
"backlinkOptions": {
|
||||
"featureId": "backlinks",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": ".footer",
|
||||
"type": "start"
|
||||
},
|
||||
"displayTitle": "Backlinks"
|
||||
},
|
||||
"tagOptions": {
|
||||
"featureId": "tags",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": ".header .data-bar",
|
||||
"type": "end"
|
||||
},
|
||||
"displayTitle": "",
|
||||
"showInlineTags": true,
|
||||
"showFrontmatterTags": true
|
||||
},
|
||||
"aliasOptions": {
|
||||
"featureId": "aliases",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": ".header .data-bar",
|
||||
"type": "start"
|
||||
},
|
||||
"displayTitle": "Aliases"
|
||||
},
|
||||
"propertiesOptions": {
|
||||
"featureId": "properties",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": ".header",
|
||||
"type": "start"
|
||||
},
|
||||
"displayTitle": "Properties"
|
||||
},
|
||||
"fileNavigationOptions": {
|
||||
"featureId": "file-navigation",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": "#left-sidebar-content",
|
||||
"type": "end"
|
||||
},
|
||||
"showCustomIcons": false,
|
||||
"showDefaultFolderIcons": false,
|
||||
"showDefaultFileIcons": false,
|
||||
"defaultFolderIcon": "lucide//folder",
|
||||
"defaultFileIcon": "lucide//file",
|
||||
"defaultMediaIcon": "lucide//file-image",
|
||||
"exposeStartingPath": true,
|
||||
"includePath": "site-lib/html/file-tree.html"
|
||||
},
|
||||
"searchOptions": {
|
||||
"featureId": "search",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": "#left-sidebar .topbar-content",
|
||||
"type": "start"
|
||||
},
|
||||
"displayTitle": "Search..."
|
||||
},
|
||||
"outlineOptions": {
|
||||
"featureId": "outline",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": "#right-sidebar-content",
|
||||
"type": "end"
|
||||
},
|
||||
"displayTitle": "Outline",
|
||||
"startCollapsed": false,
|
||||
"minCollapseDepth": 0
|
||||
},
|
||||
"themeToggleOptions": {
|
||||
"featureId": "theme-toggle",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": "#right-sidebar .topbar-content",
|
||||
"type": "start"
|
||||
},
|
||||
"displayTitle": ""
|
||||
},
|
||||
"graphViewOptions": {
|
||||
"featureId": "graph-view",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": "#right-sidebar-content",
|
||||
"type": "start"
|
||||
},
|
||||
"displayTitle": "Graph View",
|
||||
"showOrphanNodes": true,
|
||||
"showAttachments": false,
|
||||
"allowGlobalGraph": true,
|
||||
"allowExpand": true,
|
||||
"attractionForce": 1,
|
||||
"linkLength": 15,
|
||||
"repulsionForce": 80,
|
||||
"centralForce": 2,
|
||||
"edgePruning": 100,
|
||||
"minNodeRadius": 3,
|
||||
"maxNodeRadius": 7
|
||||
},
|
||||
"sidebarOptions": {
|
||||
"featureId": "sidebar",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"allowResizing": true,
|
||||
"allowCollapsing": true,
|
||||
"rightDefaultWidth": "20em",
|
||||
"leftDefaultWidth": "20em"
|
||||
},
|
||||
"customHeadOptions": {
|
||||
"featureId": "custom-head",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"featurePlacement": {
|
||||
"selector": "head",
|
||||
"type": "end"
|
||||
},
|
||||
"sourcePath": "",
|
||||
"includePath": "site-lib/html/custom-head.html"
|
||||
},
|
||||
"documentOptions": {
|
||||
"featureId": "obsidian-document",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": true,
|
||||
"hideSettingsButton": false,
|
||||
"allowFoldingLists": true,
|
||||
"allowFoldingHeadings": true,
|
||||
"documentWidth": "40em"
|
||||
},
|
||||
"rssOptions": {
|
||||
"featureId": "rss",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": false,
|
||||
"siteUrl": "",
|
||||
"authorName": ""
|
||||
},
|
||||
"linkPreviewOptions": {
|
||||
"featureId": "link-preview",
|
||||
"enabled": true,
|
||||
"unavailable": false,
|
||||
"alwaysEnabled": false,
|
||||
"hideSettingsButton": true
|
||||
},
|
||||
"relativeHeaderLinks": true,
|
||||
"includeJS": true,
|
||||
"includeCSS": true,
|
||||
"inlineMedia": false,
|
||||
"inlineCSS": false,
|
||||
"inlineJS": false,
|
||||
"inlineFonts": false,
|
||||
"inlineOther": false,
|
||||
"combineAsSingleFile": false,
|
||||
"offlineResources": false,
|
||||
"themeName": "",
|
||||
"slugifyPaths": true,
|
||||
"flattenExportPaths": false,
|
||||
"fixLinks": true,
|
||||
"faviconPath": "",
|
||||
"siteName": "JiboDocs",
|
||||
"iconEmojiStyle": "Native",
|
||||
"exportRoot": "",
|
||||
"includePluginCss": [
|
||||
"code-styler",
|
||||
"code-styler-styles"
|
||||
],
|
||||
"includeStyleCssIds": [
|
||||
"code-styler",
|
||||
"code-styler-styles"
|
||||
],
|
||||
"autoDisposeWebpages": true
|
||||
},
|
||||
"logLevel": "warning",
|
||||
"titleProperty": "JRD",
|
||||
"rssDateProperty": "date",
|
||||
"onlyExportModified": true,
|
||||
"deleteOldFiles": true,
|
||||
"exportPreset": "online",
|
||||
"openAfterExport": true,
|
||||
"filePickerBlacklist": [
|
||||
"(^|\\/)node_modules\\/",
|
||||
"(^|\\/)dist\\/",
|
||||
"(^|\\/)dist-ssr\\/",
|
||||
"(^|\\/)\\.vscode\\/"
|
||||
],
|
||||
"filePickerWhitelist": [
|
||||
"\\.\\w+$"
|
||||
]
|
||||
}
|
||||
82245
.obsidian/plugins/webpage-html-export/main.js
vendored
Executable file
82245
.obsidian/plugins/webpage-html-export/main.js
vendored
Executable file
File diff suppressed because one or more lines are too long
12
.obsidian/plugins/webpage-html-export/manifest.json
vendored
Executable file
12
.obsidian/plugins/webpage-html-export/manifest.json
vendored
Executable file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "webpage-html-export",
|
||||
"name": "Webpage HTML Export",
|
||||
"version": "1.9.2",
|
||||
"minAppVersion": "1.6.0",
|
||||
"description": "Export html from single files, canvas pages, or whole vaults. Direct access to the exported HTML files allows you to publish your digital garden anywhere. Focuses on flexibility, features, and style parity.",
|
||||
"author": "Nathan George",
|
||||
"authorUrl": "https://github.com/KosmosisDire/obsidian-webpage-export",
|
||||
"isDesktopOnly": true,
|
||||
"fundingUrl": "https://www.buymeacoffee.com/nathangeorge",
|
||||
"updateNote": "- Local and global graph view\n- Backlinks view!\n- Show tags, properties, and aliases views\n- Hover previews of pages\n- Local exports will now export only a single file containing the whole vault!\n- Notifications system\n- Place components anywhere you want on the page."
|
||||
}
|
||||
303
.obsidian/plugins/webpage-html-export/styles.css
vendored
Executable file
303
.obsidian/plugins/webpage-html-export/styles.css
vendored
Executable file
@@ -0,0 +1,303 @@
|
||||
/* THIS FILE IS NOT EXPORTED WITH THE HTML FILE! */
|
||||
|
||||
body.html-export-running .workspace-tabs:has(.html-progress-wrapper) .workspace-tab-header-container
|
||||
{
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
body.html-export-running :is(.nav-files-container, .side-dock-actions, .workspace-tab-header-container, .workspace-drawer-vault-actions, .nav-buttons-container)
|
||||
{
|
||||
opacity: 0.2 !important;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
/* Flow list used on the settings page */
|
||||
.flow-list {
|
||||
contain: inline-size;
|
||||
gap: 0.2em;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
width: -webkit-fill-available;
|
||||
background-color: var(--background-secondary);
|
||||
border: 1px solid var(--divider-color);
|
||||
border-radius: 5px;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
.flow-item {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
border-radius: 100px;
|
||||
border: 1px solid var(--divider-color);
|
||||
font-size: 0.9em;
|
||||
height: min-content;
|
||||
width: max-content;
|
||||
padding: 3px 8px 3px 8px;
|
||||
margin: 0.1em 0em 0.1em 0.0em;
|
||||
background-color: var(--background-primary);
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flow-item:has(input:checked) {
|
||||
background-color: hsla(var(--color-accent-hsl), 0.3);
|
||||
}
|
||||
|
||||
.flow-item input[type="checkbox"] {
|
||||
padding: 0;
|
||||
margin: 0.1em;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
|
||||
.webpage-html-settings .setting-item.is-disabled
|
||||
{
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* Progressbar used in the render progress */
|
||||
|
||||
.html-progress-bar
|
||||
{
|
||||
width: 300px;
|
||||
height: 15px;
|
||||
background-color: transparent;
|
||||
color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.html-progress-bar::-webkit-progress-bar {
|
||||
background-color: var(--background-secondary);
|
||||
border-radius: 500px;
|
||||
}
|
||||
|
||||
.html-progress-bar::-webkit-progress-value {
|
||||
background-color: currentColor;
|
||||
border-radius: 500px;
|
||||
}
|
||||
|
||||
button.html-progress-cancel
|
||||
{
|
||||
background-color: var(--color-red);
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 0.5em 1em;
|
||||
border-radius: 5px;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
|
||||
.file-list-wrapper
|
||||
{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
height: -webkit-fill-available;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
.file-list
|
||||
{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: auto;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
font-size: 12px;
|
||||
line-height: 1.6em;
|
||||
border-right: 1px solid var(--divider-color);
|
||||
padding-bottom: 4em;
|
||||
}
|
||||
|
||||
.file-list-title
|
||||
{
|
||||
font-size: 20px;
|
||||
padding: 0.2em 0 0.5em 0;
|
||||
margin-right: 2em;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.file-list-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.file-list-item-icon
|
||||
{
|
||||
margin-right: 0.5em;
|
||||
width: 1.1em !important;
|
||||
height: 1.1em !important;
|
||||
}
|
||||
|
||||
.html-progress-wrapper
|
||||
{
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
min-width: 100%;
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
background-color: var(--background-primary);
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.workspace-tab-container:has(.html-progress-wrapper)
|
||||
{
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.html-progress-content
|
||||
{
|
||||
display: flex;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.html-progress-inner
|
||||
{
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.html-progress-sub
|
||||
{
|
||||
margin-block-start: 2em;
|
||||
}
|
||||
|
||||
.html-progress-log
|
||||
{
|
||||
display:none;
|
||||
flex-direction: column;
|
||||
border-left: 1px solid var(--divider-color);
|
||||
overflow-y: auto;
|
||||
width: 300px;
|
||||
max-width: 300px;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.html-progress-log > h1
|
||||
{
|
||||
color: var(--color-yellow);
|
||||
padding: 0.3em;
|
||||
background-color: rgba(100, 70, 20, 0.1);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* File picker */
|
||||
|
||||
.file-picker .tree-icon {
|
||||
border: 1px solid transparent;
|
||||
margin: 0px 4px 0px 0px;
|
||||
display: flex;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.file-picker .tree-icon :is(svg, img)
|
||||
{
|
||||
width: 16px !important;
|
||||
height: 16px !important;
|
||||
}
|
||||
|
||||
.file-picker .tree-icon *:has(svg, img) {
|
||||
display: contents !important;
|
||||
}
|
||||
|
||||
.file-picker a.tree-item-self.is-clickable
|
||||
{
|
||||
text-decoration: none !important;
|
||||
text-decoration-line: none !important;
|
||||
outline: none !important;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.file-picker .tree-item-inner > p
|
||||
{
|
||||
display: contents !important;
|
||||
}
|
||||
|
||||
.feature-title
|
||||
{
|
||||
margin: 0 0 1em 0;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
}
|
||||
|
||||
.select-all
|
||||
{
|
||||
border-bottom: 1px solid var(--divider-color);
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
.file-picker *:before
|
||||
{
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.file-picker .tree-item > .tree-item-self,
|
||||
.file-picker .tree-item .tree-item-self:has(> .tree-item-icon)
|
||||
{
|
||||
padding-left: 5px !important;
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
}
|
||||
|
||||
.file-picker .tree-item-self > *:not(.nav-file-tag, .file-checkbox)
|
||||
{
|
||||
position: relative !important;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
translate: none !important;
|
||||
}
|
||||
|
||||
.file-picker .tree-item-self > .file-checkbox
|
||||
{
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
.file-picker .tree-item-self > .tree-item-inner
|
||||
{
|
||||
padding: 0 0.3em !important;
|
||||
}
|
||||
|
||||
.file-picker .tree-item-children > *
|
||||
{
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.file-picker .collapse-icon,
|
||||
.file-picker .collapse-icon *
|
||||
{
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
|
||||
/* Settings sections */
|
||||
details.settings-section
|
||||
{
|
||||
padding-left: 2em;
|
||||
border-left: 1px solid var(--interactive-accent);
|
||||
}
|
||||
|
||||
details.settings-section > summary
|
||||
{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1em;
|
||||
margin-left: -1em;
|
||||
}
|
||||
|
||||
details.settings-section > summary > svg
|
||||
{
|
||||
min-width: 18px;
|
||||
min-height: 18px;
|
||||
rotate: 0deg;
|
||||
transition: rotate 0.2s;
|
||||
}
|
||||
|
||||
details.settings-section[open] > summary > svg
|
||||
{
|
||||
rotate: 90deg;
|
||||
}
|
||||
284
.obsidian/workspace.json
vendored
Executable file
284
.obsidian/workspace.json
vendored
Executable file
@@ -0,0 +1,284 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "7c72c759e61382c9",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "05bab3d2778ffeca",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "6d78e1847f72f5de",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Getting Started/Welcome to the Jibo Revival Project.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Welcome to the Jibo Revival Project"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "c3f7d6e3edde93cc",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Jibo Reval Project/Attack Vectors/Hardware and Tegra Exploitation.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Hardware and Tegra Exploitation"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0806f039bf8a940e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Jibo Reval Project/Getting Started/Modifying the Firmware/1. Get your environment ready!.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "1. Get your environment ready!"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "8f09013cb382a9eb",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "release-notes",
|
||||
"state": {
|
||||
"currentVersion": "1.12.4"
|
||||
},
|
||||
"icon": "lucide-book-up",
|
||||
"title": "Release Notes 1.12.4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "bca83b8556c51cdb",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Jibo Reval Project/Getting Started/Developing for Jibo/Introduction to the New Jibo SDK.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Introduction to the New Jibo SDK"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 4
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "1c00c42f394b5901",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "2e90b506700a0368",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "1895b61c1551dd83",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical",
|
||||
"autoReveal": false
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "377b8ce99cae8215",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "973220d5857f4048",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 486.5
|
||||
},
|
||||
"right": {
|
||||
"id": "91e7f8a05d9903c5",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "d35704a09699652f",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "c3b4cc5dd9a8ee43",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "Welcome.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-coming-in",
|
||||
"title": "Backlinks for Welcome"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0aff8481f5c550bc",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "Welcome.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-going-out",
|
||||
"title": "Outgoing links from Welcome"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "3a001ed975698282",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "Tags"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "5e9193fbd9a431ee",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "all-properties",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-archive",
|
||||
"title": "All properties"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "72759473a88f1003",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "Welcome.md",
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of Welcome"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "00c16361afb9f9f2",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "git-view",
|
||||
"state": {},
|
||||
"icon": "git-pull-request",
|
||||
"title": "Source Control"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 5
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"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,
|
||||
"bases:Create new base": false,
|
||||
"webpage-html-export:Export as HTML": false,
|
||||
"obsidian-git:Open Git source control": false,
|
||||
"quartz-syncer:Quartz Syncer publication center": false
|
||||
}
|
||||
},
|
||||
"active": "bca83b8556c51cdb",
|
||||
"lastOpenFiles": [
|
||||
"Jibo Reval Project/Getting Started/Developing for Jibo/About - Jibo SDK V2!.md",
|
||||
"Jibo Reval Project/Getting Started/Developing for Jibo/Introduction to the New Jibo SDK.md",
|
||||
"Jibo Reval Project/Getting Started/Modifying the Firmware/Using the install script.md",
|
||||
"Jibo Reval Project/Getting Started/Developing for Jibo",
|
||||
"Jibo Reval Project/Getting Started/Modifying the Firmware/1. Get your environment ready!.md",
|
||||
"Jibo Reval Project/Getting Started/Welcome to the Jibo Revival Project.md",
|
||||
"Jibo Reval Project/Dictionary/Robot Os.md",
|
||||
"Jibo Reval Project/Dictionary/ESML.md",
|
||||
"Jibo Reval Project/Uncategorized/Jibo Workshop HRI 2024.md",
|
||||
"Jibo Reval Project/Dictionary/NVIDIA Tegra K1 (T124) Soc.md",
|
||||
"Jibo Reval Project/Dictionary/ShofEL2 - Fusée Gelée Exploit.md",
|
||||
"Jibo Reval Project/Attack Vectors/Hardware and Tegra Exploitation.md",
|
||||
"Jibo Reval Project/Discoveries/Network Profiling & Traffic Analysis.md",
|
||||
"Jibo Reval Project/Welcome.md",
|
||||
"Jibo Reval Project/Documentation/Validated memory adresses.md",
|
||||
"Jibo Reval Project/Assets/Jibo RCM.jpg",
|
||||
"Jibo Reval Project/Getting Started/Modifying the Firmware",
|
||||
"Jibo Reval Project/Getting Started",
|
||||
"Jibo Reval Project/Uncategorized/The \"MIT Application\" Mystery saga.md",
|
||||
"Jibo Reval Project/Attack Vectors",
|
||||
"Jibo Reval Project/ESML/Jibo-Animations.pdf",
|
||||
"Jibo Reval Project/ESML/ESML-SDK.pdf",
|
||||
"Jibo Reval Project",
|
||||
"Untitled.base",
|
||||
"Jibo Reval Project/Assets/JiboChatGPT.png",
|
||||
"Jibo Reval Project/Assets",
|
||||
"Jibo Reval Project/ESML"
|
||||
]
|
||||
}
|
||||
BIN
Jibo Reval Project/Assets/Jibo RCM.jpg
Executable file
BIN
Jibo Reval Project/Assets/Jibo RCM.jpg
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
BIN
Jibo Reval Project/Assets/JiboChatGPT.png
Executable file
BIN
Jibo Reval Project/Assets/JiboChatGPT.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
37
Jibo Reval Project/Attack Vectors/Hardware and Tegra Exploitation.md
Executable file
37
Jibo Reval Project/Attack Vectors/Hardware and Tegra Exploitation.md
Executable file
@@ -0,0 +1,37 @@
|
||||
## Overview
|
||||
|
||||
So jibos brain is powered by an [[NVIDIA Tegra K1 (T124) Soc]] To gain full control over the device and bypass the "original jibo servers", we are attempting to achieve code execution at the bootloader level via **RCM (Recovery Mode)**.
|
||||
|
||||
- - -
|
||||
|
||||
## Device Identification
|
||||
|
||||
When Jibo is put into RCM, it identifies itself as an NVIDIA APX device. Note that the Product ID (PID) may shift after an initial handshake or reboot as it did with mine , but i haven't seen any other documented cases of this behavior.
|
||||
|
||||
|
||||
| Parameter | Value | Notes |
|
||||
| ----------------- | ------ | ------------------------------------------------------------------------------- |
|
||||
| Vendor ID (VID) | 0x0955 | Standard NVIDIA Corp. |
|
||||
| Product ID (PID) | 0x7740 | Confirmed Tegra T124 <- **==This is the one that should be used in any case==** |
|
||||
| Alternative (PID) | 0x9134 | Observer on initial RCM |
|
||||
|
||||
- - -
|
||||
|
||||
## Current Exploitation Status
|
||||
|
||||
### 1. The ShofEL2 Attempt
|
||||
|
||||
I am currently adapting [[ShofEL2 - Fusée Gelée Exploit]] to work with the **T124** architecture.
|
||||
|
||||
- **Progress:** Modified the USB declarations in `include/t124.h` (Lines 4-9) to match Jibo’s specific PID/VID.
|
||||
|
||||
- **Result:** The exploit initializes but **hangs** before executing the payload. We are currently auditing the source code to determine if the memory offsets for the T124 stack buffer overflow differ from the standard T210 implementation.
|
||||
|
||||
|
||||
### 2. C# Payload Loader
|
||||
|
||||
A custom loader has been developed by (Community Member : Jaked) in **C#** to interface with the Tegra USB stack.
|
||||
|
||||
- **Status:** The loader successfully "talks" to the APX interface.
|
||||
|
||||
- **Blocker:** We lack a functional **Payload Binary** that the Tegra chip accepts. Most generic payloads fail to return debug info, making it difficult to map the internal memory.
|
||||
22
Jibo Reval Project/Dictionary/ESML.md
Executable file
22
Jibo Reval Project/Dictionary/ESML.md
Executable file
@@ -0,0 +1,22 @@
|
||||
**Embodied Speech Markup Language (ESML)** is a specialized XML-based markup language designed to control how virtual humans, avatars, or robots communicate. Unlike standard text-to-speech (TTS) which only focuses on audio, ESML "embodies" the speech by synchronizing the voice with non-verbal behaviors like gestures, facial expressions, and posture.
|
||||
|
||||
It acts as a bridge between the "brain" of an AI (the text it wants to say) and the "body" of the character (how it should move while saying it).
|
||||
|
||||
---
|
||||
|
||||
### 1. Key Components of ESML
|
||||
|
||||
ESML allows developers to tag text with specific instructions that the animation engine interprets in real-time.
|
||||
|
||||
- **Prosody Control:** Adjusting pitch, rate, and volume to make the voice sound more human and less robotic.
|
||||
|
||||
- **Gestural Markers:** Telling the avatar exactly when to point, shrug, or nod during a sentence.
|
||||
|
||||
- **Facial Expression Tags:** Triggering emotions like `<smile>` or `<frown>` that coincide with the spoken words.
|
||||
|
||||
- **Synchronization:** Ensuring that a "pointing" gesture happens exactly when the avatar says the word "there."
|
||||
|
||||
|
||||
|
||||
> [!warning]
|
||||
> The Above explanations is AI Generated, Learn more at : [[ESML-SDK.pdf]]
|
||||
82
Jibo Reval Project/Dictionary/NVIDIA Tegra K1 (T124) Soc.md
Executable file
82
Jibo Reval Project/Dictionary/NVIDIA Tegra K1 (T124) Soc.md
Executable file
@@ -0,0 +1,82 @@
|
||||
The Tegra K1 (T124) was a landmark SoC for NVIDIA, being the first mobile processor to feature a **Unified Shader Architecture** using the same **Kepler** architecture found in desktop GeForce 700 series GPUs. It effectively bridged the gap between mobile and PC gaming, enabling support for DirectX 11 and Unreal Engine 4 on mobile devices.
|
||||
|
||||
|
||||
|
||||
|
||||
## Resources & Documentation
|
||||
|
||||
### Official NVIDIA Docs
|
||||
|
||||
- [Tegra K1 Technical Reference Manual (TRM)](https://developer.nvidia.com/embedded/tegra-k1-reference) - _Requires Developer Registration (2,300+ pages)._
|
||||
|
||||
- [NVIDIA Newsroom: Tegra K1 Unveil](https://nvidianews.nvidia.com/news/nvidia-unveils-tegra-k1-a-192-core-super-chip-that-brings-dna-of-world-s-fastest-gpu-to-mobile)
|
||||
|
||||
- [Jetson TK1 Support Page](https://www.google.com/search?q=https://developer.nvidia.com/embedded/jetson-tk1)
|
||||
|
||||
|
||||
### Technical Analysis
|
||||
|
||||
- [NotebookCheck: Tegra K1 SoC Deep Dive](https://www.notebookcheck.net/NVIDIA-Tegra-K1-SoC.108310.0.html)
|
||||
|
||||
- [AnandTech: NVIDIA Tegra K1 Review](https://www.anandtech.com/show/7622/nvidia-tegra-k1)
|
||||
|
||||
- [postmarketOS Wiki: Tegra K1 (T124)](https://wiki.postmarketos.org/wiki/Nvidia_Tegra_K1_\(T124/T132\)) - _Great for mainline Linux kernel status._
|
||||
|
||||
|
||||
### Industrial/Module Datasheets
|
||||
|
||||
- [Toradex Apalis TK1 Datasheet](https://www.toradex.com/computer-on-modules/apalis-arm-family/nvidia-tegra-k1)
|
||||
|
||||
|
||||
|
||||
|
||||
## Technical Specifications
|
||||
|
||||
### CPU: 4-Plus-1™ Architecture
|
||||
|
||||
- **Main Cores:** 4x ARM Cortex-A15 r3p3
|
||||
|
||||
- **Clock Speed:** Up to 2.3 GHz
|
||||
|
||||
- **Companion Core:** 1x low-power "Battery Saver" core (Cortex-A15) clocked up to 500 MHz–1 GHz.
|
||||
|
||||
- **L2 Cache:** 2 MB
|
||||
|
||||
|
||||
### GPU: Kepler Mobile
|
||||
|
||||
- **Cores:** 192 CUDA cores (1 SMX unit)
|
||||
|
||||
- **Compute Power:** ~326 GFLOPS (FP32)
|
||||
|
||||
- **APIs:** OpenGL 4.4, OpenGL ES 3.1, DirectX 11, CUDA 6.0, OpenCL 1.1.
|
||||
|
||||
- **Hardware Features:** Tessellation, Geometry Shaders, Global Illumination.
|
||||
|
||||
|
||||
### Memory & Storage
|
||||
|
||||
- **Memory Controller:** Dual-channel 64-bit (2x 32-bit).
|
||||
|
||||
- **Support:** DDR3L and LPDDR3.
|
||||
|
||||
- **Bandwidth:** Up to 14.9 GB/s.
|
||||
|
||||
- **Max Capacity:** Typically 4 GB (some industrial modules support up to 8 GB).
|
||||
|
||||
|
||||
### Multimedia & I/O
|
||||
|
||||
- **Video:** 4K H.264 decode (30 fps), 4K H.264 encode (24 fps).
|
||||
|
||||
- **ISP:** Dual Image Signal Processors (1.2 Gigapixel/sec throughput).
|
||||
|
||||
- **Display:** Supports up to 3840x2160 (4K) over HDMI 1.4a or eDP.
|
||||
|
||||
- **PCIe:** 1x Gen 2 (4 lanes).
|
||||
|
||||
|
||||
> [!warning]
|
||||
> The Above explanations is AI Generated, Learn more at : https://developer.nvidia.com/embedded/tegra-k1-reference
|
||||
|
||||
|
||||
21
Jibo Reval Project/Dictionary/Robot Os.md
Executable file
21
Jibo Reval Project/Dictionary/Robot Os.md
Executable file
@@ -0,0 +1,21 @@
|
||||
Robot Operating System (**ROS**) is not actually a traditional operating system like Windows or Linux. Instead, it is a flexible **middleware** framework—a collection of tools, libraries, and conventions designed to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.
|
||||
|
||||
The core philosophy of ROS is "don't reinvent the wheel." It allows roboticists to focus on their specific high-level logic while relying on community-tested packages for low-level tasks like motor control, sensor fusion, and navigation.
|
||||
|
||||
---
|
||||
|
||||
## Core Concepts: The Computation Graph
|
||||
|
||||
ROS operates on a "graph" architecture where different processes are represented as nodes. These nodes connect to each other to share information.
|
||||
|
||||
- **Nodes:** These are the basic building blocks. A node is a single process that performs a specific task (e.g., one node for the camera, one for path planning, one for wheel motors).
|
||||
|
||||
- **Messages:** Nodes communicate with each other by passing "messages." A message is a simple data structure, like an integer, a string, or a complex array of sensor data.
|
||||
|
||||
- **Topics:** This is the most common communication method (the **Publish/Subscribe** model). A node "publishes" a message to a specific topic (e.g., `/camera_images`), and any other node that needs that data "subscribes" to that topic.
|
||||
|
||||
- **Services:** Unlike the continuous stream of topics, services use a **Request/Response** model. One node sends a request (e.g., "Take a photo") and waits for the other node to send back a result.
|
||||
|
||||
|
||||
> [!warning]
|
||||
> The Above explanations is AI Generated, Learn more at : https://docs.ros.org/
|
||||
26
Jibo Reval Project/Dictionary/ShofEL2 - Fusée Gelée Exploit.md
Executable file
26
Jibo Reval Project/Dictionary/ShofEL2 - Fusée Gelée Exploit.md
Executable file
@@ -0,0 +1,26 @@
|
||||
**ShofEL2** (and its sister exploit **Fusée Gelée**) is an unpatchable hardware vulnerability found in the NVIDIA Tegra X1's USB Recovery Mode (RCM). Because the flaw exists in the **Read-Only Memory (Boot ROM)** of the SoC, it cannot be fixed via software or firmware updates by Nintendo or NVIDIA.
|
||||
|
||||
The exploit allows for **Unsigned Code Execution** at the highest privilege level (EL3) before the operating system even begins to load.
|
||||
|
||||
- - -
|
||||
|
||||
|
||||
## How It Works (The Vulnerability)
|
||||
|
||||
The exploit leverages a **heap overflow** in the Tegra X1’s USB RCM stack.
|
||||
|
||||
1. **RCM Mode:** The Tegra X1 enters a recovery mode designed to receive factory images via USB.
|
||||
|
||||
2. **Control Request:** The attacker sends a massive `USB Control Request` (Get Status) with an invalid length field.
|
||||
|
||||
3. **Buffer Overflow:** The Boot ROM fails to properly validate the length of the data being requested. It copies more data than the internal buffer can hold, overflowing into the **execution stack**.
|
||||
|
||||
4. **Arbitrary Execution:** By carefully crafting the overflow (a technique known as "smashing the stack"), the attacker overwrites the return address to point to their own payload loaded in the SoC's Internal RAM (IRAM).
|
||||
|
||||
|
||||
> [!IMPORTANT] Since the Boot ROM is "burned" into the silicon at the factory, the only way to "patch" this was for NVIDIA to release a new hardware revision (the "Mariko" / T210B01 chip found in V2 and OLED Switches).
|
||||
|
||||
---
|
||||
|
||||
> [!warning]
|
||||
> The Above explanations is AI Generated, Learn more at : https://github.com/erdzan12/switch-fusee
|
||||
74
Jibo Reval Project/Discoveries/Network Profiling & Traffic Analysis.md
Executable file
74
Jibo Reval Project/Discoveries/Network Profiling & Traffic Analysis.md
Executable file
@@ -0,0 +1,74 @@
|
||||
Since Jibo’s official servers were decommissioned, the robot hangs during the "Checking for Updates" phase, and of course. By sniffing its network traffic, (Community member : Jaked) has identified several hardcoded endpoints. Our goal is to redirect this traffic to a local server to simulate a "Success" response and unlock the robot’s full functionality.
|
||||
- - -
|
||||
Initial scans show that Jibo uses a standard network stack but maintains a strict internal firewall.
|
||||
|
||||
- **Primary DNS:** Hardcoded to `8.8.8.8` (Google DNS).
|
||||
- **Web Config:** Ports `80`and `443` are closed/filtered by default.
|
||||
- **ROS Bridge:** Port `9090` (used for MIT Workspace/SDK) is **blocked**. It appears to require a specific "Skill" (likely the _be-skill_) to be running before the port opens.
|
||||
|
||||
---
|
||||
|
||||
## Known Target Endpoints
|
||||
|
||||
The following table lists the IPs Jibo attempts to contact immediately after connecting to WiFi.
|
||||
|
||||
### **Time Synchronization (NTP)**
|
||||
|
||||
Jibo hits these IPs repeatedly to sync its internal clock. Without a successful time sync, SSL handshakes for other services will fail.
|
||||
|
||||
```
|
||||
-45.115.225.48
|
||||
216.229.4.66
|
||||
93.57.144.50
|
||||
66.231.64.28
|
||||
194.195.253.58
|
||||
```
|
||||
|
||||
### **Persistent AWS Infrastructure**
|
||||
|
||||
These are the most critical targets. Jibo hits these over and over, likely checking for signals or update manifests.
|
||||
|
||||
- **IP 1:** `35.172.208.31`
|
||||
- **IP 2:** `44.198.39.206`
|
||||
|
||||
> **Hypothesis:** These were likely the primary API endpoints for `jibo.com`. I am investigating the packet payload to see if they are expecting JSON or XML responses.
|
||||
|
||||
### **Legacy & Third-Party Hits**
|
||||
|
||||
These appear less frequently, possibly for analytics or legacy newsletter/resource loading.
|
||||
|
||||
|
||||
|
||||
| IP Address | Ownership (potential) | Purpose |
|
||||
| ---------------- | --------------------- | -------------------------- |
|
||||
| `66.118.231.14` | Constant Contact | Maybe email or newsletter? |
|
||||
| `172.232.15.202` | Akamai | Content Delivery? |
|
||||
| `72.30.35.89` | Yahoo | Weather / News API |
|
||||
| `67.210.96.32` | Host Papa | Domain hosting |
|
||||
|
||||
---
|
||||
|
||||
## Current Observations
|
||||
|
||||
### **The Update Loop**
|
||||
|
||||
When Jibo reaches the "Checking for Updates" screen, it isn't "dead." Even while the screen is stuck loading , the background :
|
||||
|
||||
1. **Audio Processing stays active:** Saying _"Hey Jibo"_ causes the robot to turn toward the sound source.
|
||||
2. **Network Persistence:** It continues to attempt connections to the AWS IPs listed above.
|
||||
3. **Timeout Behavior:** It is unclear if the timeout is extremely long or if it is failing a specific SSL handshake.
|
||||
|
||||
### **Domain Discrepancy**
|
||||
|
||||
- **jibo.com:** Officially shut down; no longer resolves to an active site.
|
||||
- **jibo.net:** Currently active with a "Coming Soon" page. I am monitoring this to see if any hardcoded traffic redirects here.
|
||||
|
||||
---
|
||||
|
||||
## Next Steps for Contributors
|
||||
|
||||
1. **SSL Decryption:** We need to perform a Man-in-the-Middle (MITM) attack using a tool like `mitmproxy` to see the actual content of the HTTPS requests.
|
||||
2. **DNS Poisoning:** Set up a local DNS server (like Pi-hole or a custom BIND server) to redirect `8.8.8.8` calls to a local gateway.
|
||||
3. **Endpoint Mocking:** Create a Python or Flask server to return dummy `200 OK` responses to the AWS IPs to see if Jibo bypasses the update screen.
|
||||
|
||||
---
|
||||
176
Jibo Reval Project/Documentation/Validated memory adresses.md
Executable file
176
Jibo Reval Project/Documentation/Validated memory adresses.md
Executable file
@@ -0,0 +1,176 @@
|
||||
|
||||
|
||||
- - -
|
||||
# Power Management Controller (PMC)
|
||||
|
||||
### `0x7000E400` — PMC Base Address
|
||||
|
||||
**Use:** The starting point for all Power Management operations.
|
||||
|
||||
### `0x7000E450` — PMC_SCRATCH0
|
||||
|
||||
- **Use:** undefined but i used it as a Data Safe.
|
||||
|
||||
- **Example:** When the USB connection dies, store 4 bytes of data here.
|
||||
|
||||
- **C Code exampple:**
|
||||
|
||||
```c
|
||||
// Store a 4-byte value from IRAM into the scratch register
|
||||
uint32_t leaked_data = *(volatile uint32_t *)0x40001000;
|
||||
*(volatile uint32_t *)0x7000E450 = leaked_data;
|
||||
```
|
||||
|
||||
|
||||
### `0x7000E414` — PMC_CNTRL (Reset Control)
|
||||
|
||||
- **Use:** The Reboot Trigger.
|
||||
|
||||
- **Bit 4:** Setting this bit triggers a Warm Reset.
|
||||
|
||||
- **Example:** use this immediately after writing to `SCRATCH0` to force Jibo back into RCM mode.
|
||||
|
||||
- **C Code Implementation:**
|
||||
|
||||
```c
|
||||
// Trigger Warm Reset to return to RCM mode
|
||||
*(volatile uint32_t *)0x7000E414 |= (1 << 4);
|
||||
```
|
||||
|
||||
# Timer and Watchdog (TMR/WDT)
|
||||
|
||||
These addresses allow us to cut the system’s security features from what i can tell so they don't interfere with the payload.
|
||||
|
||||
### `0x6000501c` — TMR_WDT_RESTART
|
||||
|
||||
- **Use:** The Watchdog cut.
|
||||
|
||||
- **Mechanism:** The Tegra K1 has a timer that reboots the device if it doesn't receive a clock signal within a few seconds.
|
||||
|
||||
- **Example:** We write the magic value `0xcafe` here in every loop to prevent Jibo from panic-resetting during a dump.
|
||||
|
||||
- **C Code Implementation:**
|
||||
|
||||
```c
|
||||
while(1) {
|
||||
// (reset)
|
||||
*(volatile uint32_t *)0x6000501c = 0xcafe;
|
||||
|
||||
// ... rest of the exploit ...
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
# Internal RAM (IRAM/SRAM)
|
||||
|
||||
This is the part where the BootROM is.
|
||||
|
||||
### `0x40000000` — IRAM Base (Start)
|
||||
|
||||
- **Use:** The beginning of the 256KB internal memory.
|
||||
|
||||
- **Significance:** This is where the payload is injected. If u dump from here, u get the "Leftovers" of the boot process (keys, signatures, and config data) from what i could tell.
|
||||
|
||||
### `0x4003FFFF` — IRAM End
|
||||
|
||||
- **Use:** The boundary of the volatile memory. (not 100% Sure but pretty certain)
|
||||
|
||||
- **Constraint:** If we try to read past this address, the system will hard-crash because we are hitting undefined memory space.
|
||||
|
||||
# BootROM Service Functions
|
||||
|
||||
The BootROM (at `0x00000000`) is read-only memory etched into the silicon. It contains pre-written functions for USB communication that we can "borrow" so we don't have to write a full USB driver from scratch.
|
||||
|
||||
### `0x00003551` — usb_send (Standard)
|
||||
|
||||
- **Use:** Sends a structured data packet over the RCM USB connection.
|
||||
|
||||
- **Significance:** This is the basically the proper way i could get it to talk. It handles some of the USB protocol handshaking automatically.
|
||||
|
||||
- **Example:**
|
||||
|
||||
```C
|
||||
// Define the function signature based on BootROM
|
||||
typedef int (*usb_send_ptr)(void *buffer, unsigned int length);
|
||||
usb_send_ptr usb_send = (usb_send_ptr)0x00003551;
|
||||
|
||||
//push 64 bytes of IRAM to the PC
|
||||
usb_send((void *)0x40000000, 64);
|
||||
```
|
||||
|
||||
|
||||
### `0x000035e5` — usb_send_raw (Bulk)
|
||||
|
||||
- **Use:** A lower-level function that bypasses some of the standard RCM state checks i think.
|
||||
|
||||
- **Significance:** This is how i got those first **16 bytes** out. It is open data pushing.
|
||||
|
||||
- **Example:** I used this when the standard `usb_send` was stalling, as it forces the hardware to dump the buffer to the endpoint immediately.
|
||||
|
||||
```c
|
||||
// Define the raw function pointer
|
||||
typedef void (*usb_send_raw_ptr)(void *buffer, unsigned int length);
|
||||
usb_send_raw_ptr usb_send_raw = (usb_send_raw_ptr)0x000035e5;
|
||||
|
||||
//Force dump a 16-byte chunk of IRAM regardless of USB state
|
||||
void dump_raw_chunk() {
|
||||
uint8_t buffer[16];
|
||||
// Copy the data from a target address (e.g.sstart of IRAM)
|
||||
memcpy(buffer, (void*)0x40000000, 16);
|
||||
|
||||
// Push it out. On the PC side
|
||||
usb_send_raw(buffer, 16);
|
||||
}
|
||||
```
|
||||
|
||||
# Hardware Fuse Registers
|
||||
|
||||
The Fuses are permanent oly set at the factory so we cant change these
|
||||
|
||||
### `0x7000F800` — FUSE_BASE
|
||||
|
||||
- **Use:** The starting point for reading the hardware id & status.
|
||||
|
||||
- **Significance:** Reading from here tells us if Jibo is in "Production" mode (Locked) or "Development" mode (Unlocked).
|
||||
|
||||
|
||||
### `0x7000F800 + 0x60` — Security Config Fuse
|
||||
|
||||
- **Use:** Determines if **Secure Boot** is active.
|
||||
|
||||
- **Discovery:** In my tests, reading this offset returned random data.
|
||||
|
||||
- **The Verdict:** This confirmed that Jibo is a **Secure Boot** device. He will only boot software that has been digitally signed by Jibo Inc.’s private keys.
|
||||
|
||||
|
||||
### `0x7000F900` — FUSE_RESERVED_ODM (The SBK/SSK Area)
|
||||
|
||||
- **Use:** This is where the **Secure Boot Key (SBK)** usually is.
|
||||
|
||||
- **The Goal:** If we can successfully read this entire block, we might find the AES keys needed to decrypt the Jibo OS files on the EMMC.
|
||||
|
||||
# The Boot Configuration Table (BCT)
|
||||
|
||||
The BCT is a piece of data usually found at the very start of the boot process (and often cached in IRAM).
|
||||
|
||||
### `0x400000f0` — BCT Pointer / Entry Point
|
||||
|
||||
- **Use:** I identified this address in on of the `hexdumps` i sent on discord.
|
||||
|
||||
- **Significance:** This is where the BootROM hands over control to the next stage of the bootloader.
|
||||
|
||||
- **The Hack:** By targeting our leaker near this address, we can see how the Tegra sets up its memory controllers before it realizes we've hijacked the process.
|
||||
|
||||
```C
|
||||
void inspect_bct_handoff() {
|
||||
// Read the instruction at the BCT entry point
|
||||
uint32_t entry_instruction = *(volatile uint32_t *)0x400000f0;
|
||||
|
||||
// Often, this is a 'Branch' (B) instruction in ARM hex: 0xEAXXXXXX
|
||||
// If 0xEA, we know Jibo is ready run the bootloader
|
||||
if ((entry_instruction >> 24) == 0xEA) {
|
||||
// Log it for the PC to see
|
||||
*(volatile uint32_t *)0x7000E450 = 0xBC7DE4D; // "BCT DEAD" hex flag
|
||||
}
|
||||
}
|
||||
```
|
||||
36228
Jibo Reval Project/ESML/ESML-SDK.pdf
Executable file
36228
Jibo Reval Project/ESML/ESML-SDK.pdf
Executable file
File diff suppressed because one or more lines are too long
BIN
Jibo Reval Project/ESML/Jibo-Animations.pdf
Executable file
BIN
Jibo Reval Project/ESML/Jibo-Animations.pdf
Executable file
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
- - -
|
||||
Were working on a new sdk for jibo , im too bored to write this page now , i will fill it later
|
||||
@@ -0,0 +1,3 @@
|
||||
- - -
|
||||
|
||||
I will leave this to the community for now
|
||||
@@ -0,0 +1,268 @@
|
||||
- - -
|
||||
|
||||
Before starting ANY work , lets get you up to speed with the enviroment and what you will need ...
|
||||
|
||||
1. Some sort of linux device with at least 32Gb storage, that could be a : Spare laptop , Raspberry Pi , a PC etc...
|
||||
|
||||
> [!info]
|
||||
> 1. for the sake of this guide we will be using my main computer running on CachyOS with the 6.19... kernel but you dont have to replicate my setup
|
||||
> 2. This guide **requires** you have basic knowledge of the linux terminal
|
||||
|
||||
>[!Warning]
|
||||
>I Throw around the word shofel , and i do mean the shofel version **SPECIFICALLY** in devsparx repo (using the improvements brach for now) i show later on how to clone it , if anything should change i will try my best to update this guide as fast as possible , but do note our build of shofel will be undergoing some updates!
|
||||
|
||||
> [!WARNING]
|
||||
> # Please do inform yourself
|
||||
> we are NOT liable for any damage caused to your device if you proceed with this guide , if you are not sure remotely on what youre doing i recommend either wait for the easier installation method , or find someone on the discord to guide you!!! (they arent liable for any damage either)
|
||||
|
||||
2. A micro usb cable ==**that you know is reliable**==
|
||||
3. Like 4-5 Hours
|
||||
4. A Jibo **(THAT IS SETUP TO YOUR NETWORK, AND YOU KNOW ITS IP)**
|
||||
5. An the mindset of (everything will be fine!)
|
||||
|
||||
- - -
|
||||
# Part 1 | Connecting your jibo
|
||||
|
||||
So first , go ahead and plug jibo in to your host device that you are going to dump the firmware into using your usb cable
|
||||
|
||||
Hold the RCM button and press the reset button (or the power button if yours is off), and you should see a red light at his face but he **wont boot normally**
|
||||
|
||||
![[Jibo RCM.jpg]]
|
||||
|
||||
|
||||
in the terminal were gonna execute `lsusb` to check for `NVIDIA Corp. APX`
|
||||
|
||||
```shell
|
||||
|
||||
kevin lsusb
|
||||
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 001 Device 002: ID 1532:023f Uhhh no
|
||||
Bus 001 Device 003: ID 0a12:0001 Ltd Bluetooth Dongle (HCI mode why tho)
|
||||
Bus 001 Device 004: ID 08bb:2902 cant see me :)
|
||||
Bus 001 Device 005: ID 1bcf:08b8 nope not me, its the guy below
|
||||
Bus 001 Device 007: ID 0955:7740 NVIDIA Corp. APX <<<<<< LOOK FOR THIS ENTRY!!!!
|
||||
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 003 Device 002: ID 0644:800f TEAC Corp. US-144 yes i use a 144 deal with it
|
||||
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||
Bus 004 Device 002: ID 0951:1666 Kingston wanna be drive
|
||||
|
||||
kevin
|
||||
```
|
||||
|
||||
- - -
|
||||
|
||||
# Part 2 | Now before building shofel , get your packages ready
|
||||
|
||||
```bash
|
||||
|
||||
#for cachy / Arch users:
|
||||
sudo pacman -S --needed base-devel libusb git python python-pip
|
||||
|
||||
#for Ubuntu / debian users:
|
||||
sudo apt update
|
||||
sudo apt install build-essential libusb-1.0-0-dev git python3 python3-pip
|
||||
|
||||
#for fedora its whatever that is (i chatgpt'd it)
|
||||
sudo dnf groupinstall "Development Tools"
|
||||
sudo dnf install libusb1-devel python3-pip
|
||||
|
||||
```
|
||||
|
||||
Now time to clone & build shofel!
|
||||
|
||||
change to your home directory and use `git` to clone the branch and then use `make` to build it!
|
||||
|
||||
```bash
|
||||
|
||||
cd ~
|
||||
|
||||
git clone -b improvements/IncreasedUSBReadWriteSpeed https://github.com/devsparx/ShofEL2-for-T124.git
|
||||
|
||||
cd ShofEL2-for-T124/
|
||||
|
||||
make
|
||||
# if it exits with error code 1 dont be alarmed , if you have a shofel executable in your directory , it compiled fine :)
|
||||
```
|
||||
|
||||
|
||||
# Part 3 | Dumping your jibo!
|
||||
|
||||
Now , to get that full image (roughly about ==15Gb==)
|
||||
we will run our newly build `shofel` using the `EMMC_READ` function , starting from 0 `0x0` to 30480896 `0x1D60000`
|
||||
|
||||
```bash
|
||||
sudo ./shofel2_t124 EMMC_READ 0x0 0x1D60000 full_jibo_dump.bin
|
||||
```
|
||||
|
||||
this may crash due to that im not sure how large exactly each jibos storage is (they should be the same from what i have seen in the community)
|
||||
|
||||
But if it crashes like 98.9% or 99.9% in then you have most of the image cloned so you should be good (we can repair it later , or you might not need to since the last partition is basically empty space!)
|
||||
|
||||
>[!Info]
|
||||
>Techically you dont need a full dump , BUT! I havent confirmed enough yet that all jibos have the same stuff stored in the same sectors , but its good to to have a back up to calculate your own sectors **and to most importantly , read below :**
|
||||
|
||||
|
||||
>[!WARNING]
|
||||
>Make sure you make a backup of the filesystem ... this is basically YOUR jibo , and it also contains YOUR jibos calibration data that might not be able to get restored by someone else... so keep a backup of the `.bin` in case of an emergency
|
||||
|
||||
# Part 4 | Modifying the /var partition
|
||||
|
||||
Now that you have your image `.bin` ready and backed up its time to edit the /var partition!, thats Partition 5 at around 500mb
|
||||
|
||||
|
||||
we can use `fdisk` to list the partitions in our bin
|
||||
|
||||
```bash
|
||||
fdisk -l jibo_full_dump.bin`
|
||||
```
|
||||
|
||||
|
||||
```shell
|
||||
|
||||
kevin fdisk -l jibo_full_dump.bin
|
||||
GPT PMBR size mismatch (30777343 != 30777341) will be corrected by write.
|
||||
The backup GPT table is corrupt, but the primary appears OK, so that will be used.
|
||||
The backup GPT table is not on the end of the device.
|
||||
Disk jibo_full_dump.bin: 14,68 GiB, 15757999104 bytes, 30777342 sectors
|
||||
Units: sectors of 1 * 512 = 512 bytes
|
||||
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
||||
Disklabel type: gpt
|
||||
Disk identifier: 00042021-0408-4601-9DCC-A8C51255994F
|
||||
|
||||
Device Start End Sectors Size Type
|
||||
jibo_full_dump.bin1 34 2048033 2048000 1000M Microsoft basic data
|
||||
jibo_full_dump.bin2 2048034 4096033 2048000 1000M Microsoft basic data
|
||||
jibo_full_dump.bin3 4096034 4198433 102400 50M Microsoft basic data
|
||||
jibo_full_dump.bin4 4198434 8294433 4096000 2G Microsoft basic data
|
||||
jibo_full_dump.bin5 8294434 9318433 1024000 500M Mic<<< This is the one!
|
||||
jibo_full_dump.bin6 9318434 30777310 21458877 10,2G Microsoft basic data
|
||||
|
||||
kevin
|
||||
|
||||
```
|
||||
|
||||
now lets chop off the partition...
|
||||
|
||||
Look for the line ending in `p5` or labeled as the 5th partition. You need two numbers from that line: **Start** and **End**
|
||||
|
||||
> My Numbers:
|
||||
> - **Start:** `8294434`
|
||||
> - **End:** `9318433`
|
||||
|
||||
To tell the computer exactly how much data to "chop off," we need the total count of sectors
|
||||
|
||||
The formula is:
|
||||
$$(End - Start) + 1 = Count$$
|
||||
|
||||
**My Math:**
|
||||
$$(9318433 - 8294434) + 1 = 1,024,000$$
|
||||
|
||||
Write your result down,this is your **Count**. We will now extract the Partition
|
||||
We use `dd` (Disk Destroyer... but here, it's the Disk Dumb joke... i couldnt think of something funny).
|
||||
|
||||
`skip` = Your **Start** sector.
|
||||
`count` = Your calculated **Count**.
|
||||
|
||||
```Bash
|
||||
dd if=jibo_full_dump.bin of=var_partition.bin skip=8294434 count=1024000
|
||||
```
|
||||
|
||||
|
||||
## Part 4.2 | Mounting as a loop device
|
||||
|
||||
Now lets make a "loop" device and mount the `var_partition.bin` to it!
|
||||
|
||||
```Bash
|
||||
mkdir jibo_var
|
||||
sudo mount -o loop var_partition.bin jibo_var/
|
||||
```
|
||||
|
||||
you should see it appear as a mounted disk drive on your system!, now you have to navigate to `jibo_var/jibo/mode.json`
|
||||
|
||||
Open it with any text editor (like `vim` or `vscode` or notepad i dont care)
|
||||
|
||||
Find the line: `"mode": "normal"` (its legit the only line in there)
|
||||
|
||||
**Change it to:** `"mode": "int-developer"`
|
||||
Save the file and exit
|
||||
|
||||
>[!IMPORTANT]
|
||||
> **Unmount** the partition to save the changes to the `.bin` file!!!!
|
||||
|
||||
Now mode `int-developer` basically disables everything the robot runs (including firewall , so you can just ssh into it .. maybe in later guides you might be informed to change this value to something else , but currently its the simplest & easiest way to get root shell in the robot , and from there since you have root you can do everything you could by manually rewriting the entire dump)
|
||||
|
||||
Anyway you are free to mount the rest of the fs partitions to parouse the file system or if you want live editing , i will make a guide on how to connect to ftp...
|
||||
but if you have legit reached this point you really should know by now how to setup ftp yourself :|
|
||||
|
||||
```Bash
|
||||
sudo umount jibo_var
|
||||
```
|
||||
|
||||
|
||||
# Part 5 | Writing our modified var partition to jibo!
|
||||
|
||||
We are ready to put the modified chunk back into the robot. To do this, we must convert your **Start Sector** from a normal number (Decimal) to a computer number (Hexadecimal) because thats what shofel requires at this point of time.
|
||||
|
||||
|
||||
|
||||
### 1. The Conversion
|
||||
|
||||
Take your Start Sector (mine was `8294434`) and use an online converter or your Linux calculator to get the **Hex** value.
|
||||
|
||||
**My Hex was** `0x7E9022`
|
||||
|
||||
here is a quick calculator site i found on the web,
|
||||
https://www.inchcalculator.com/decimal-to-hex-converter/
|
||||
|
||||
|
||||
If you dont know hex you can validate your calculation by punching in my value and see if it returns the same hex as mine
|
||||
|
||||
### 2. The Flash
|
||||
|
||||
time to run the write command, this sends your modified `/var` partition directly to that specific starting point on Jibo's memory.
|
||||
|
||||
|
||||
```shell
|
||||
|
||||
./shofel2_t124 EMMC_WRITE <Your HEX Sector> var_partition.bin
|
||||
|
||||
#my version example
|
||||
#./shofel2_t124 EMMC_WRITE 0x7E9022 var_partition.bin
|
||||
```
|
||||
|
||||
|
||||
|
||||
# Part 6 | Almost there!
|
||||
|
||||
Actually who am i tricking , you typed the write command , it hopefully succeeded so why are we not done?
|
||||
|
||||
well its done but i like to do a check myself to make sure its done correctly, SO
|
||||
|
||||
were gonna read back that part of memory:
|
||||
|
||||
```Bash
|
||||
./shofel2_t124 EMMC_READ 0x7E9022 0xFA000 verify_var.bin
|
||||
```
|
||||
|
||||
and were gonna compare their hashes If the two files are identical, the math was right.
|
||||
|
||||
```Bash
|
||||
md5sum var_partition.bin verify_var.bin
|
||||
```
|
||||
|
||||
**If the strings of letters/numbers match exactly WERE DONE!!!!
|
||||
|
||||
Go and unplug your jibo , and to be safe hold the power button until the red LED goes off
|
||||
then power him on , and wait for it to boot normally
|
||||
|
||||
what we expect is to not start his eye but show a big check mark on his display, if thats the case , go ssh to jibos IP
|
||||
|
||||
```shell
|
||||
ssh root@<jibos-ip>
|
||||
password: jibo
|
||||
```
|
||||
|
||||
|
||||
And Boom , you are IN!
|
||||
@@ -0,0 +1,3 @@
|
||||
- - -
|
||||
More on that coming soon
|
||||
|
||||
81
Jibo Reval Project/Getting Started/Welcome to the Jibo Revival Project.md
Executable file
81
Jibo Reval Project/Getting Started/Welcome to the Jibo Revival Project.md
Executable file
@@ -0,0 +1,81 @@
|
||||
- - -
|
||||
Hello! If you’ve been keeping a "sleeping" Jibo on your shelf, hoping for the day his screen might light up again let me tell you **today is basically Christmas.**
|
||||
|
||||
The **Jibo Revival Project** is a community-driven effort to wake up our favorite social robot. We believe that great hardware shouldn't become "e-waste" just because a server went dark. And we are working to give Jibo a new brain, new voice, and a new lease on life!
|
||||
|
||||
# **The Problem:**
|
||||
Originally, Jibo needed to "talk" to a big computer (a server) in the cloud to understand you. When those computers were turned off, Jibo became a glorified paperweight.
|
||||
|
||||
# **The Solution:**
|
||||
We are using a "backdoor" (technically called **RCM Mode** or **R**e**C**overy **M**ode) to get inside his system. Think of it like using a master key to get into the basement so we can rewire the house.
|
||||
|
||||
|
||||
# **What we're doing:**
|
||||
|
||||
We now have the actual files that run Jibo’s "brain" (the OS). **The future is bright** because we can now basically do anything with his software! If you want to see this in action, be sure to have joined out discord server and check the reddit for any posts i or the community makes!
|
||||
|
||||
|
||||
- - -
|
||||
## 2. For the Programmers (or the nerds)
|
||||
|
||||
If you speak Python, C++,NodeJS or know your way around an **Nvidia Tegra T124** chipset, we might need your support.
|
||||
|
||||
Detailed technical documentation, payloads, and the source code for our custom tooling can be found here:
|
||||
|
||||
> **Documentation & Project Sources:** <yeah coming soon bud , its 4:30AM , im going to bed... i mean i am committed but not this much>
|
||||
|
||||
|
||||
- - -
|
||||
## 3. Q&A: What can Jibo do right now?
|
||||
|
||||
**Q: Is Jibo fully back to normal?**
|
||||
**A:** Not quite yet. We are in the "Restoration Phase." We can currently access his internal files and are working on replacing the old, broken links so we can replace them with new stuff.
|
||||
|
||||
**Q: Can he talk yet?**
|
||||
**A:** We are working on it! By redirecting his "ears" to local servers or modern AI models (like ChatGPT), we can aim to make him even smarter than he was in 2017.
|
||||
|
||||
**Q: Do I need to be a genius to do this?**
|
||||
**A:** Eventually, no. Our goal is to create a as close to"one-click" style tool so every Jibo owner can apply these fixes easily. Now this is wayy to oversold , it probably wont be a one click install but you get the point , currently to mod your jibo you do need some technical know how
|
||||
|
||||
**Q: Can I use Jibo to control my smart home?**
|
||||
**A:** That is the plan! I would like us to make **Home Assistant integration** so Jibo can become the face and voice of your automated house.
|
||||
|
||||
**Q: Is there a way to manage him since the original app is gone?**
|
||||
**A:** I have some ideas for a **custom phone app** specifically for this revival, giving you back control without needing the original company’s servers. But its really early on to discuss this and i wanna get the rest of the community's opinions
|
||||
|
||||
**Q: Can we still use the MIT Scratch extension?**
|
||||
**A:** I wanna give it a shot at fixing the **Scratch extension** so that tinkerers can start coding Jibo without any coding knowledge , that would also be quite simple for anyone who has a V2 Jibo since the software is already on their unit.
|
||||
|
||||
**Q: Can I use Jibo's hardware for other things, like my PC?**
|
||||
**A:** yes! One of my personal goals is to let Jibo function as a **camera for your PC**.
|
||||
fun fact , thats also one of the reasons i bought him in the first place xD
|
||||
|
||||
**Q: I’m a developer; can I build my own stuff for him?**
|
||||
**A:** Absolutely. We will start putting together a **Developer SDK** so the community can build and share brand-new "skills" for Jibo. As far as i am aware devsparx has already started on one , but idk for sure.
|
||||
|
||||
**Q: So Whats this page
|
||||
**A:** Everything you will need to **Mod , Code , Update and Setup your jibo...***
|
||||
And im planning to make in depth guides as well, more coming soon :)
|
||||
|
||||
- - -
|
||||
|
||||
## 4. How We Got Here: A Quick Story
|
||||
|
||||
Jibo was the world’s first "social robot" a piece of the future that lived on our kitchen counters. When the original company folded, thousands of Jibos performed a final "goodbye dance" and went silent. For years, people tried to break in, but the security was too tough.
|
||||
|
||||
Recently, a few dedicated people (JRG Community) decided to try one last time. We realized that with the right tools and a little patience (and a lot of crying ... like a lot ... like wayy to much i can admit on from my side), Jibo doesn't have to stay a paperweight.
|
||||
|
||||
|
||||
- - -
|
||||
## 5. A Message from Me (KevinKor)
|
||||
|
||||
> "I want to be very clear: **I am not charging any money for this.**
|
||||
> This project isn't a business;
|
||||
> it’s a labor of love. As a representative of the Jibo Revival Group, my goal is to distribute these modifications for free. I want everyone with a warm heart and a desire to tinker to be able to get their Jibo back.
|
||||
>
|
||||
> We’re doing this for the community, for the history of robotics, and because Jibo deserves to be more than a memory. Let's get him back to work!"
|
||||
>
|
||||
> — **Kevin (Eva) from the JRG**
|
||||
|
||||
- - -
|
||||
Created for the Jibo Revival Project | 2026
|
||||
49
Jibo Reval Project/Uncategorized/Jibo Workshop HRI 2024.md
Executable file
49
Jibo Reval Project/Uncategorized/Jibo Workshop HRI 2024.md
Executable file
@@ -0,0 +1,49 @@
|
||||
|
||||
### Resources:
|
||||
https://github.com/jibodev/ShofEL2-for-T124-Jibo/tree/t124 - Github Repo
|
||||
https://hri2024.jibo.media.mit.edu/Setting-Up-Your-Codespace - Guide to setup a repo
|
||||
|
||||
- - -
|
||||
### About:
|
||||
From the jibo workshop i have discovered that they have actually included a lot of info on how jibo expects the server to give it data, and by that i dont mean that it uses [[ESML]], but what is available to use in every response!. Furthermore we also have access to some "examples" through the git repo on how to setup a [[Robot Os|ROS]] container, and I was able to extract the source code from the scratch extension over at [Scratch Playground](https://playground.raise.mit.edu/firebase-scratch/).
|
||||
|
||||
- - -
|
||||
|
||||
|
||||
Were gonna have to analyse the stuff to go further one , and as i was looking at the files i discovered a file named `jibo_chatGPT.ipynb` which sparked some attention, and it appears that they have made a honest attempt at trying to hook it up to chat gpt
|
||||
|
||||
![[JiboChatGPT.png]]
|
||||
|
||||
And there is a section where they clearly tried to make it act like jibo
|
||||
|
||||
```python
|
||||
|
||||
def main(args=None):
|
||||
|
||||
teleop_connection = JiboTeleop()
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
|
||||
|
||||
system_message = "You are Jibo, a friendly social robot who likes to chat about different topics." \
|
||||
|
||||
"Pick a random topic to discuss and use personalized stories." \
|
||||
|
||||
"Always respond in one short fun and exciting sentence, " \
|
||||
|
||||
"and use language that is easy to understand for all ages." \
|
||||
|
||||
" Give turns to user to respond."
|
||||
|
||||
# Spin in a separate thread
|
||||
|
||||
thread = threading.Thread(target=rclpy.spin, args=(teleop_connection, ), daemon=True)
|
||||
|
||||
thread.start()
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
|
||||
31
Jibo Reval Project/Welcome.md
Executable file
31
Jibo Reval Project/Welcome.md
Executable file
@@ -0,0 +1,31 @@
|
||||
# To the jibo revival project :)
|
||||
|
||||
This is a vault base around the jibo revival project, everything we have discovered , coming soon , documentation etc , ALL in here for your convenience ... also please take your time to read any page in your interests because i am not that good at documenting and you probably could very easily miss stuff, thats all .... take a tour either using the table of contents below or the graph view :)
|
||||
- - -
|
||||
|
||||
### Table Of Contents
|
||||
|
||||
[[Hardware and Tegra Exploitation]]
|
||||
|
||||
[[Network Profiling & Traffic Analysis]]
|
||||
|
||||
|
||||
|
||||
|
||||
- - -
|
||||
|
||||
Uncategorized:
|
||||
[[Jibo Workshop HRI 2024]]
|
||||
|
||||
|
||||
Documentation:
|
||||
ESML:
|
||||
[[ESML-SDK.pdf]]
|
||||
[[Jibo-Animations.pdf]]
|
||||
Dictionary:
|
||||
[[ESML]]
|
||||
[[Robot Os]]
|
||||
|
||||
|
||||
|
||||
More stuff will be coming soon :)
|
||||
Reference in New Issue
Block a user