From c6f0d3b0f3c9589ba04fa9e3f3ce5fbf61dc93b4 Mon Sep 17 00:00:00 2001 From: Jordan Del Pilar Date: Tue, 14 Jul 2026 08:05:36 -0700 Subject: [PATCH] Initial Commit --- .obsidian/app.json | 7 + .obsidian/appearance.json | 4 + .obsidian/bookmarks.json | 46 + .obsidian/core-plugins.json | 33 + .obsidian/daily-notes.json | 4 + .obsidian/graph.json | 22 + .../themes/Dracula Official/manifest.json | 7 + .obsidian/themes/Dracula Official/theme.css | 860 ++++++++++++ .../themes/Dracula for Obsidian/manifest.json | 6 + .../themes/Dracula for Obsidian/theme.css | 717 ++++++++++ .obsidian/themes/GitHub Theme/manifest.json | 7 + .obsidian/themes/GitHub Theme/theme.css | 1245 +++++++++++++++++ .obsidian/types.json | 31 + .obsidian/workspace.json | 254 ++++ 01-daily_notes/2026-02-13.md | 0 01-daily_notes/2026-02-14.md | 0 01-daily_notes/2026-02-15.md | 0 01-daily_notes/2026-02-20.md | 0 01-daily_notes/2026-02-27.md | 0 01-daily_notes/2026-06-30.md | 0 01-daily_notes/2026-07-14.md | 0 01-daily_notes/Untitled.md | 0 02-projects/Desk Build/Dimensions.md | 19 + 02-projects/Uplink/Uplink.md | 13 + 02-projects/Uplink/interfaces.py.md | 28 + 02-projects/Uplink/misc_notes.md | 3 + 02-projects/Uplink/models.py.md | 71 + 02-projects/Uplink/rclone_engine.py.md | 246 ++++ 02-projects/o2o/Day One.md | 4 + 2026-01-22 Career Accelerator Meeting.md | 16 + Desk build out.md | 6 + Questions for housing.md | 13 + Shopping List 2025-02-09.md | 33 + Shopping list 2025-02-20.md | 11 + Shopping list.md | 2 + _ARCHIVE/00_inbox/windows/Activation.md | 7 + _ARCHIVE/00_tasks_list.md | 12 + _ARCHIVE/01_personal_tickets.md | 94 ++ _ARCHIVE/02_work_tickets.md | 93 ++ _ARCHIVE/Daily Logs/2025-09-06.md | 1 + .../00_Apartment Hunt 2025.md | 13 + .../Antelope Ridge Apartments.md | 38 + .../Temp Apartment 2025/Canopy.md | 66 + .../Cantabria Apartments.md | 52 + .../Temp Apartment 2025/Delhaven Pointe.md | 38 + .../Temp Apartment 2025/Murrieta Meadows.md | 40 + .../Temp Apartment 2025/Solaire.md | 38 + .../Temp Apartment 2025/Solana Ridge.md | 34 + .../Temp Apartment 2025/Sycamore Terrace.md | 38 + .../Temp Apartment 2025/The Enclave.md | 38 + .../Waterstone at Murrieta.md | 38 + _ARCHIVE/assets/Go-Bag NVME.md | 19 + _ARCHIVE/bugs/BUG - 422 Bug.md | 43 + _ARCHIVE/daily_logs/2025-06-18.md | 17 + _ARCHIVE/daily_logs/2025-06-19.md | 25 + _ARCHIVE/daily_logs/2025-06-20.md | 27 + _ARCHIVE/daily_logs/2025-06-21.md | 5 + _ARCHIVE/daily_logs/2025-06-22.md | 5 + _ARCHIVE/daily_logs/2025-06-23.md | 18 + _ARCHIVE/daily_logs/2025-06-24.md | 15 + _ARCHIVE/daily_logs/2025-06-25.md | 9 + _ARCHIVE/daily_logs/2025-06-26.md | 20 + _ARCHIVE/daily_logs/2025-06-27.md | 12 + _ARCHIVE/daily_logs/2025-07-01.md | 14 + _ARCHIVE/daily_logs/2025-07-02.md | 11 + _ARCHIVE/daily_logs/2025-07-03.md | 12 + _ARCHIVE/daily_logs/2025-07-07.md | 15 + _ARCHIVE/daily_logs/2025-07-08.md | 12 + _ARCHIVE/daily_logs/2025-07-10.md | 9 + _ARCHIVE/daily_logs/2025-07-13.md | 5 + _ARCHIVE/daily_logs/2025-07-14.md | 21 + _ARCHIVE/daily_logs/2025-07-15.md | 3 + _ARCHIVE/daily_logs/2025-07-16.md | 6 + _ARCHIVE/daily_logs/2025-07-17.md | 1 + _ARCHIVE/daily_logs/2025-07-18.md | 5 + _ARCHIVE/daily_logs/2025-07-19.md | 1 + _ARCHIVE/daily_logs/2025-07-21.md | 7 + _ARCHIVE/daily_logs/2025-07-22.md | 3 + _ARCHIVE/daily_logs/2025-07-24.md | 1 + _ARCHIVE/daily_logs/2025-07-25.md | 1 + _ARCHIVE/daily_logs/2025-07-27.md | 1 + _ARCHIVE/daily_logs/2025-07-28.md | 1 + _ARCHIVE/daily_logs/2025-07-30.md | 1 + _ARCHIVE/daily_logs/2025-07-31.md | 1 + _ARCHIVE/daily_logs/2025-08-04.md | 5 + _ARCHIVE/gyudon_beef.md | 0 .../homelab/Build Out/Build Out Planning.md | 6 + _ARCHIVE/homelab/Naming Scheme.md | 38 + .../meeting_notes/Automated Report Review.md | 50 + .../meeting_notes/BRT Equipment Management.md | 13 + .../Biltright - HubSport Intro.md | 36 + _ARCHIVE/meeting_notes/Call System Review.md | 74 + _ARCHIVE/meeting_notes/DG Moonlight Sync.md | 38 + _ARCHIVE/meeting_notes/FSM Meeting.md | 40 + .../Ian James Kyle Jazzy Tech Stack.md | 50 + .../Onboarding Readiness Call.md | 39 + .../TD Netsuite Project Kickoff.md | 33 + _ARCHIVE/misc_notes/3CX Extensions.md | 13 + _ARCHIVE/misc_notes/Conflict Fix.md | 4 + _ARCHIVE/misc_notes/Games to check out.md | 92 ++ _ARCHIVE/misc_notes/Naming Scheme.md | 48 + _ARCHIVE/misc_notes/Realm Notes.md | 217 +++ _ARCHIVE/project_index.md | 101 ++ _ARCHIVE/projects/chiron-relay.md | 91 ++ _ARCHIVE/recipe_list.md | 33 + _ARCHIVE/shopping_list/2025-06-19.md | 43 + _ARCHIVE/shopping_list/2025-07-16.md | 8 + _ARCHIVE/templates/TPL_apartment_recon.md | 39 + _ARCHIVE/templates/TPL_asset.md | 107 ++ _ARCHIVE/templates/TPL_bug_report.md | 48 + _ARCHIVE/templates/TPL_daily_note.md | 37 + _ARCHIVE/templates/TPL_meeting_notes.md | 33 + _ARCHIVE/templates/TPL_project.md | 3 + _ARCHIVE/templates/TPL_recipe.md | 87 ++ _ARCHIVE/templates/TPL_ticket.md | 70 + _ARCHIVE/the_bug_board.md | 21 + .../tickets/TICKET-001 - Courtney Laptop.md | 26 + .../TICKET-002 - Create Decision Logic.md | 25 + .../TICKET-003 - Create Email Sender.md | 25 + .../tickets/TICKET-004 - Create SMS Sender.md | 25 + .../TICKET-005 - Creat Discord Sender.md | 27 + .../tickets/TICKET-006 - Kristofer Bailey.md | 24 + .../tickets/TICKET-007 - Matthew Lacek.md | 29 + ...CKET-008 - 3CX Caller ID Dial Code Test.md | 26 + _ARCHIVE/tickets/TICKET-009 - Book Flight.md | 24 + .../TICKET-010 - Elizabeth's Graduation.md | 26 + .../tickets/TICKET-011 - Get Rental Car.md | 25 + _ARCHIVE/tickets/TICKET-012 - Get Hotel.md | 29 + .../tickets/TICKET-013 - Get Military ID.md | 24 + .../tickets/TICKET-014 - Prep Go bag nvme.md | 25 + .../TICKET-015 - Knowledge Base Setup.md | 42 + .../tickets/TICKET-016 - Prod Deployment.md | 22 + .../TICKET-017 - Docker Development.md | 22 + .../travel_plans/Chicago 2025/Packing List.md | 38 + ...RIP - Boot Camp Graduation - 2025-07-23.md | 63 + daily_logs/2026-01-22.md | 0 136 files changed, 6758 insertions(+) create mode 100644 .obsidian/app.json create mode 100644 .obsidian/appearance.json create mode 100644 .obsidian/bookmarks.json create mode 100644 .obsidian/core-plugins.json create mode 100644 .obsidian/daily-notes.json create mode 100644 .obsidian/graph.json create mode 100644 .obsidian/themes/Dracula Official/manifest.json create mode 100644 .obsidian/themes/Dracula Official/theme.css create mode 100644 .obsidian/themes/Dracula for Obsidian/manifest.json create mode 100644 .obsidian/themes/Dracula for Obsidian/theme.css create mode 100644 .obsidian/themes/GitHub Theme/manifest.json create mode 100644 .obsidian/themes/GitHub Theme/theme.css create mode 100644 .obsidian/types.json create mode 100644 .obsidian/workspace.json create mode 100644 01-daily_notes/2026-02-13.md create mode 100644 01-daily_notes/2026-02-14.md create mode 100644 01-daily_notes/2026-02-15.md create mode 100644 01-daily_notes/2026-02-20.md create mode 100644 01-daily_notes/2026-02-27.md create mode 100644 01-daily_notes/2026-06-30.md create mode 100644 01-daily_notes/2026-07-14.md create mode 100644 01-daily_notes/Untitled.md create mode 100644 02-projects/Desk Build/Dimensions.md create mode 100644 02-projects/Uplink/Uplink.md create mode 100644 02-projects/Uplink/interfaces.py.md create mode 100644 02-projects/Uplink/misc_notes.md create mode 100644 02-projects/Uplink/models.py.md create mode 100644 02-projects/Uplink/rclone_engine.py.md create mode 100644 02-projects/o2o/Day One.md create mode 100644 2026-01-22 Career Accelerator Meeting.md create mode 100644 Desk build out.md create mode 100644 Questions for housing.md create mode 100644 Shopping List 2025-02-09.md create mode 100644 Shopping list 2025-02-20.md create mode 100644 Shopping list.md create mode 100644 _ARCHIVE/00_inbox/windows/Activation.md create mode 100644 _ARCHIVE/00_tasks_list.md create mode 100644 _ARCHIVE/01_personal_tickets.md create mode 100644 _ARCHIVE/02_work_tickets.md create mode 100644 _ARCHIVE/Daily Logs/2025-09-06.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/00_Apartment Hunt 2025.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Antelope Ridge Apartments.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Canopy.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Cantabria Apartments.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Delhaven Pointe.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Murrieta Meadows.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Solaire.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Solana Ridge.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Sycamore Terrace.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/The Enclave.md create mode 100644 _ARCHIVE/apartment_hunts/Temp Apartment 2025/Waterstone at Murrieta.md create mode 100644 _ARCHIVE/assets/Go-Bag NVME.md create mode 100644 _ARCHIVE/bugs/BUG - 422 Bug.md create mode 100644 _ARCHIVE/daily_logs/2025-06-18.md create mode 100644 _ARCHIVE/daily_logs/2025-06-19.md create mode 100644 _ARCHIVE/daily_logs/2025-06-20.md create mode 100644 _ARCHIVE/daily_logs/2025-06-21.md create mode 100644 _ARCHIVE/daily_logs/2025-06-22.md create mode 100644 _ARCHIVE/daily_logs/2025-06-23.md create mode 100644 _ARCHIVE/daily_logs/2025-06-24.md create mode 100644 _ARCHIVE/daily_logs/2025-06-25.md create mode 100644 _ARCHIVE/daily_logs/2025-06-26.md create mode 100644 _ARCHIVE/daily_logs/2025-06-27.md create mode 100644 _ARCHIVE/daily_logs/2025-07-01.md create mode 100644 _ARCHIVE/daily_logs/2025-07-02.md create mode 100644 _ARCHIVE/daily_logs/2025-07-03.md create mode 100644 _ARCHIVE/daily_logs/2025-07-07.md create mode 100644 _ARCHIVE/daily_logs/2025-07-08.md create mode 100644 _ARCHIVE/daily_logs/2025-07-10.md create mode 100644 _ARCHIVE/daily_logs/2025-07-13.md create mode 100644 _ARCHIVE/daily_logs/2025-07-14.md create mode 100644 _ARCHIVE/daily_logs/2025-07-15.md create mode 100644 _ARCHIVE/daily_logs/2025-07-16.md create mode 100644 _ARCHIVE/daily_logs/2025-07-17.md create mode 100644 _ARCHIVE/daily_logs/2025-07-18.md create mode 100644 _ARCHIVE/daily_logs/2025-07-19.md create mode 100644 _ARCHIVE/daily_logs/2025-07-21.md create mode 100644 _ARCHIVE/daily_logs/2025-07-22.md create mode 100644 _ARCHIVE/daily_logs/2025-07-24.md create mode 100644 _ARCHIVE/daily_logs/2025-07-25.md create mode 100644 _ARCHIVE/daily_logs/2025-07-27.md create mode 100644 _ARCHIVE/daily_logs/2025-07-28.md create mode 100644 _ARCHIVE/daily_logs/2025-07-30.md create mode 100644 _ARCHIVE/daily_logs/2025-07-31.md create mode 100644 _ARCHIVE/daily_logs/2025-08-04.md create mode 100644 _ARCHIVE/gyudon_beef.md create mode 100644 _ARCHIVE/homelab/Build Out/Build Out Planning.md create mode 100644 _ARCHIVE/homelab/Naming Scheme.md create mode 100644 _ARCHIVE/meeting_notes/Automated Report Review.md create mode 100644 _ARCHIVE/meeting_notes/BRT Equipment Management.md create mode 100644 _ARCHIVE/meeting_notes/Biltright - HubSport Intro.md create mode 100644 _ARCHIVE/meeting_notes/Call System Review.md create mode 100644 _ARCHIVE/meeting_notes/DG Moonlight Sync.md create mode 100644 _ARCHIVE/meeting_notes/FSM Meeting.md create mode 100644 _ARCHIVE/meeting_notes/Ian James Kyle Jazzy Tech Stack.md create mode 100644 _ARCHIVE/meeting_notes/Onboarding Readiness Call.md create mode 100644 _ARCHIVE/meeting_notes/TD Netsuite Project Kickoff.md create mode 100644 _ARCHIVE/misc_notes/3CX Extensions.md create mode 100644 _ARCHIVE/misc_notes/Conflict Fix.md create mode 100644 _ARCHIVE/misc_notes/Games to check out.md create mode 100644 _ARCHIVE/misc_notes/Naming Scheme.md create mode 100644 _ARCHIVE/misc_notes/Realm Notes.md create mode 100644 _ARCHIVE/project_index.md create mode 100644 _ARCHIVE/projects/chiron-relay.md create mode 100644 _ARCHIVE/recipe_list.md create mode 100644 _ARCHIVE/shopping_list/2025-06-19.md create mode 100644 _ARCHIVE/shopping_list/2025-07-16.md create mode 100644 _ARCHIVE/templates/TPL_apartment_recon.md create mode 100644 _ARCHIVE/templates/TPL_asset.md create mode 100644 _ARCHIVE/templates/TPL_bug_report.md create mode 100644 _ARCHIVE/templates/TPL_daily_note.md create mode 100644 _ARCHIVE/templates/TPL_meeting_notes.md create mode 100644 _ARCHIVE/templates/TPL_project.md create mode 100644 _ARCHIVE/templates/TPL_recipe.md create mode 100644 _ARCHIVE/templates/TPL_ticket.md create mode 100644 _ARCHIVE/the_bug_board.md create mode 100644 _ARCHIVE/tickets/TICKET-001 - Courtney Laptop.md create mode 100644 _ARCHIVE/tickets/TICKET-002 - Create Decision Logic.md create mode 100644 _ARCHIVE/tickets/TICKET-003 - Create Email Sender.md create mode 100644 _ARCHIVE/tickets/TICKET-004 - Create SMS Sender.md create mode 100644 _ARCHIVE/tickets/TICKET-005 - Creat Discord Sender.md create mode 100644 _ARCHIVE/tickets/TICKET-006 - Kristofer Bailey.md create mode 100644 _ARCHIVE/tickets/TICKET-007 - Matthew Lacek.md create mode 100644 _ARCHIVE/tickets/TICKET-008 - 3CX Caller ID Dial Code Test.md create mode 100644 _ARCHIVE/tickets/TICKET-009 - Book Flight.md create mode 100644 _ARCHIVE/tickets/TICKET-010 - Elizabeth's Graduation.md create mode 100644 _ARCHIVE/tickets/TICKET-011 - Get Rental Car.md create mode 100644 _ARCHIVE/tickets/TICKET-012 - Get Hotel.md create mode 100644 _ARCHIVE/tickets/TICKET-013 - Get Military ID.md create mode 100644 _ARCHIVE/tickets/TICKET-014 - Prep Go bag nvme.md create mode 100644 _ARCHIVE/tickets/TICKET-015 - Knowledge Base Setup.md create mode 100644 _ARCHIVE/tickets/TICKET-016 - Prod Deployment.md create mode 100644 _ARCHIVE/tickets/TICKET-017 - Docker Development.md create mode 100644 _ARCHIVE/travel_plans/Chicago 2025/Packing List.md create mode 100644 _ARCHIVE/travel_plans/Chicago 2025/TRIP - Boot Camp Graduation - 2025-07-23.md create mode 100644 daily_logs/2026-01-22.md diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 0000000..80b6939 --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1,7 @@ +{ + "livePreview": false, + "alwaysUpdateLinks": true, + "openBehavior": "daily", + "promptDelete": false, + "newFileLocation": "current" +} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 0000000..cd51caa --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1,4 @@ +{ + "theme": "obsidian", + "cssTheme": "GitHub Theme" +} \ No newline at end of file diff --git a/.obsidian/bookmarks.json b/.obsidian/bookmarks.json new file mode 100644 index 0000000..7a874aa --- /dev/null +++ b/.obsidian/bookmarks.json @@ -0,0 +1,46 @@ +{ + "items": [ + { + "type": "graph", + "ctime": 1750451554455, + "title": "Projects and Bugs", + "options": { + "collapse-filter": false, + "search": "tag:#bug OR tag:#project-dashboard OR file:The Bug Board", + "showTags": false, + "showAttachments": false, + "hideUnresolved": false, + "showOrphans": false, + "collapse-color-groups": false, + "colorGroups": [ + { + "query": "tag:#bug", + "color": { + "a": 1, + "rgb": 14701138 + } + }, + { + "query": " tag:#project-dashboard ", + "color": { + "a": 1, + "rgb": 14725458 + } + } + ], + "collapse-display": true, + "showArrow": false, + "textFadeMultiplier": 0, + "nodeSizeMultiplier": 1, + "lineSizeMultiplier": 1, + "collapse-forces": true, + "centerStrength": 0.518713248970312, + "repelStrength": 10, + "linkStrength": 1, + "linkDistance": 250, + "scale": 0.6144820631812324, + "close": true + } + } + ] +} \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json new file mode 100644 index 0000000..639b90d --- /dev/null +++ b/.obsidian/core-plugins.json @@ -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 +} \ No newline at end of file diff --git a/.obsidian/daily-notes.json b/.obsidian/daily-notes.json new file mode 100644 index 0000000..9958f1b --- /dev/null +++ b/.obsidian/daily-notes.json @@ -0,0 +1,4 @@ +{ + "folder": "01-daily_notes", + "template": "" +} \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json new file mode 100644 index 0000000..5dd11c2 --- /dev/null +++ b/.obsidian/graph.json @@ -0,0 +1,22 @@ +{ + "collapse-filter": false, + "search": "", + "showTags": false, + "showAttachments": false, + "hideUnresolved": false, + "showOrphans": true, + "collapse-color-groups": false, + "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": 0.5573777280641029, + "close": true +} \ No newline at end of file diff --git a/.obsidian/themes/Dracula Official/manifest.json b/.obsidian/themes/Dracula Official/manifest.json new file mode 100644 index 0000000..c25c97e --- /dev/null +++ b/.obsidian/themes/Dracula Official/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Dracula Official", + "version": "1.1.3", + "minAppVersion": "0.16.0", + "author": "Dracula", + "authorUrl": "https://gitlab.com/chrismettal" +} \ No newline at end of file diff --git a/.obsidian/themes/Dracula Official/theme.css b/.obsidian/themes/Dracula Official/theme.css new file mode 100644 index 0000000..2cdb2e6 --- /dev/null +++ b/.obsidian/themes/Dracula Official/theme.css @@ -0,0 +1,860 @@ +.theme-dark, +.theme-light{ + + /* Obsidian "Dark" import so light mode looks the same*/ + --color-scheme: dark; + --highlight-mix-blend-mode: lighten; + --mono-rgb-0: 0, 0, 0; + --mono-rgb-100: 255, 255, 255; + --color-red-rgb: 251, 70, 76; + --color-red: #fb464c; + --color-orange-rgb: 233, 151, 63; + --color-orange: #e9973f; + --color-yellow-rgb: 224, 222, 113; + --color-yellow: #e0de71; + --color-green-rgb: 68, 207, 110; + --color-green: #44cf6e; + --color-cyan-rgb: 83, 223, 221; + --color-cyan: #53dfdd; + --color-blue-rgb: 2, 122, 255; + --color-blue: #027aff; + --color-purple-rgb: 168, 130, 255; + --color-purple: #a882ff; + --color-pink-rgb: 250, 153, 205; + --color-pink: #fa99cd; + --color-base-00: #1e1e1e; + --color-base-05: #212121; + --color-base-10: #242424; + --color-base-20: #262626; + --color-base-25: #2a2a2a; + --color-base-30: #363636; + --color-base-35: #3f3f3f; + --color-base-40: #555555; + --color-base-50: #666666; + --color-base-60: #999999; + --color-base-70: #bababa; + --color-base-100: #dadada; + --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); + --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) - 3.8%)); + --color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 3.8%)); + --background-modifier-form-field: var(--color-base-25); + --interactive-normal: var(--color-base-30); + --interactive-hover: var(--color-base-35); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); + --background-modifier-cover: rgba(10, 10, 10, 0.4); + --text-selection: hsla(var(--interactive-accent-hsl), 0.25); + --input-shadow: inset 0 0.5px 0.5px 0.5px rgba(255, 255, 255, 0.09), 0 2px 4px 0 rgba(0,0,0,.15), 0 1px 1.5px 0 rgba(0,0,0,.1), 0 1px 2px 0 rgba(0,0,0,.2), 0 0 0 0 transparent; + --input-shadow-hover: inset 0 0.5px 1px 0.5px rgba(255, 255, 255, 0.16), 0 2px 3px 0 rgba(0,0,0,.3), 0 1px 1.5px 0 rgba(0,0,0,.2), 0 1px 2px 0 rgba(0,0,0,.4), 0 0 0 0 transparent; + --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.121), 0px 3.4px 6.7px rgba(0, 0, 0, 0.179), 0px 15px 30px rgba(0, 0, 0, 0.3); + --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), 0px 30px 90px rgba(0, 0, 0, 0.2); + --pdf-shadow: 0 0 0 1px var(--background-modifier-border); + --pdf-thumbnail-shadow: 0 0 0 1px var(--background-modifier-border); + + /* Actual Dracula colors*/ + --background-primary: #282a36; + --background-primary-alt: #44475a; + --background-secondary: #20212B; + --background-secondary-alt: #282a36; + --text-normal: #f8f8f2; + --text-on-accent: #282a36; + --text-title-h1: #bd93f9; + --text-title-h2: #ffb86c; + --text-title-h3: #50fa7b; + --text-title-h4: #ff5555; + --text-title-h5: #f1fa8c; + --text-title-h6: #bd93f4; + --canvas-color-1: 255, 85, 85; + --canvas-color-2: 255, 184, 108; + --canvas-color-3: 241, 250, 140; + --canvas-color-4: 82, 250, 124; + --canvas-color-5: 139, 233, 253; + --canvas-color-6: 189, 147, 244; + --text-link: var(--text-accent); + --markup-code: #ffb86c; + --text-tag: #50fa7b; + --text-a: #ff79c6; + --text-a-hover: #ff79c0; + --text-mark: #f1fa8c; + --interactive-accent: #50fa7b; + --blockquote-border: #b294bb; + --interactive-accent-rgb: #f1fa8c; + --accent-h: 135; + --accent-s: 94%; + --accent-l: 65%; + --titlebar-background-focused: var(--titlebar-background); + + /* Dracula Code view*/ + --code-normal: #F8F8F2; + --code-background: #20212B; + --dracula-foreground: #F8F8F2; + --dracula-Comment: #6272A4; + --dracula-keyword: #FF79C6; + --dracula-definition: #50FA7B; + --dracula-variable: #F8F8F2; /*"variable" tags are used everywhere in code, but Dracula usually only uses orange color only for declaration inputs, thus white is less annoying to look at*/ + --dracula-number: #BD93F9; + --dracula-function: #8BE9FD; + --dracula-string: #F1FA8C; +} + +/* LINKS & BRACKETS */ + +/* link */ + +/* url's */ + +/* editor */ + +.cm-url { + color: var(--text-link) !important; +} + +/* preview */ + +.external-link { + color: var(--text-link) !important; +} + + +/* make external links italics to differentiate */ + +a:not(.internal-link) { + font-style: italic; +} + +/* horizontal line in preview */ + +hr { + background-color: var(--text-normal); + border-color: var(--text-normal); +} + +.markdown-preview-view hr { + background-color: var(--text-normal); + border-color: var(--text-normal); +} + +.markdown-rendered hr { + background-color: var(--text-normal); + border-color: var(--text-normal); +} + +.markdown-embed { + padding-left: 8px !important; + padding-right: 4px !important; + margin-left: 8px !important; + margin-right: 4px !important; +} + +/* internal embedded link rendering in preview */ + +.markdown-embed-title { + color: var(--text-link); +} + + +/* NAKED EMBEDS*/ + +/* But keeping Border and Scroll! */ + +.markdown-embed-title { + display: none; +} + +.markdown-preview-view .markdown-embed-content > :first-child { + margin-top: 0; +} + +.markdown-preview-view .markdown-embed-content > :last-child { + margin-bottom: 0; +} + + +.markdown-embed-link { + color: var(--text-a) !important; + right: 2px !important; +} + +.markdown-embed-link:hover { + color: var(--text-link) !important; +} + +/* NO FILE OPEN PAGE*/ + +.empty-state-title { + color: var(--text-title-h1) !important; +} + +.empty-state-action { + color: var(--text-muted) !important; +} + +.empty-state-action:hover { + color: var(--text-normal) !important; +} + +/* GRAPH VIEW */ + +#graph-view-canvas .links { + stroke: var(--interactive-accent-rgb) !important; +} + +/* CODEBLOCKS */ + + +/* code blocks in preview */ + +pre code { + padding: 5px !important; + color: var(--dracula-foreground); + line-height: normal; + display: block; + background-color: var(--background-primary); +} + +.markdown-preview-view pre { + padding: 0px !important; +} + +/* in-line code for editor and preview and code block for editor*/ + +.cm-inline-code { + background-color: var(--background-primary-alt) !important; + color: var(--dracula-foreground) !important; + bottom: 0px !important; +} + +/* Code Appearance */ + +/* Editing view */ + +.CodeMirror-code span.cm-inline-code { + color: var(--markup-code) !important; +} + +.cm-hmd-codeblock { + color: var(--dracula-foreground); +} + +.cm-hmd-codeblock.cm-keyword { + color: var(--dracula-keyword); +} + +.cm-def.cm-hmd-codeblock { + color: var(--dracula-definition); +} + +.cm-hmd-codeblock.cm-variable { + color: var(--dracula-variable); +} + +.cm-hmd-codeblock.cm-operator{ + color: var(--dracula-keyword); +} + +.cm-hmd-codeblock.cm-number { + color: var(--dracula-number); +} + +.cm-builtin.cm-hmd-codeblock { + color: var(--dracula-function); +} + +.cm-hmd-codeblock.cm-string { + color: var(--dracula-string); +} + +/* Preview */ + +code { + background-color: var(--background-primary); + color: var(--dracula-foreground); +} + +.token.function { + color: var(--dracula-definition); +} + +.token.operator { + color: var(--dracula-keyword); +} + +.token.number { + color: var(--dracula-number); +} + +.token.builtin { + color: var(--dracula-function); +} + +.token.boolean { + color: var(--dracula-number); +} + +.token.string { + color: var(--dracula-string); +} + +/* Editor CodeBlock TEXT Appearance - */ + +.cm-s-obsidian pre.HyperMD-codeblock { + color: var(--markup-code) !important; +} + +/* borders */ + +.cm-s-obsidian span.cm-inline-code { + border: 1px solid #525660; + border-radius: 4px; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code { + border-right-width: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code + span.cm-inline-code { + border-right: none; + border-left: none; + border-radius: 0; +} + +.cm-s-obsidian + span.cm-formatting-code.cm-inline-code + + span.cm-inline-code + + span.cm-formatting-code.cm-inline-code { + border-left-width: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-right-width: 1px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +/* BLOCKQUOTES */ + +/* editor */ + +.cm-quote { + color: var(--interactive-accent) !important; + font-style: italic; +} + +/* preview */ + +blockquote { + color: var(--interactive-accent) !important; + font-style: italic; + border-color: var(--blockquote-border) !important; +} + +/* IMAGES */ + +/* embedded images */ + +img { + display: block; + margin-left: auto; + margin-right: auto; +} + +/* TABLES */ + +th { + border: 1px solid var(--background-primary-alt) !important; +} + +td { + border: 1px solid var(--background-primary-alt) !important +} + +thead { + border-bottom: 4px solid var(--background-primary-alt); +} + +.table { + background-color: var(--background-secondary-alt); + border: 1px solid var(--background-primary-alt); + padding: 4px; + line-height: normal; + display: block; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* SIDEBAR & DOCK ETC. */ + +/* view action buttons */ + +.view-action { + color: var(--text-muted) !important; + text-decoration: none !important; +} + +.view-action:hover, +.view-action.is-active { + color: var(--text-normal) !important; +} + +.status-bar { + background-color: var(--background-secondary-alt); +} + +.side-dock-ribbon-action { + color: var(--text-muted) !important; +} + +.side-dock-ribbon-action:hover { + color: var(--text-normal) !important; +} + +.workspace-tab-header { + color: var(--text-muted) !important; + text-decoration: none !important; +} + +.workspace-tab-header:hover { + color: var(--text-normal) !important; +} + +button.mod-cta { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} + +.horizontal-tab-nav-item.is-active, .vertical-tab-nav-item.is-active { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} + +/* searchbar */ + +.side-dock-panels-container { + background-color: var(--background-secondary-alt) !important; + color: var(background-secondary-alt); +} + +/* icons at top of panes*/ + +.file-view-actions a { + color: var(--text-muted) !important; +} + +.file-view-actions a:hover { + color: var(--text-muted) !important; +} + +/* html tags in editor */ + +.cm-tag { + color: var(--text-tag) !important; +} + +/* .side-dock-ribbon-tab, +.side-dock-ribbon-action {} */ + +.side-dock-ribbon-tab.is-active { + color: var(--interactive-accent) !important; +} + +.side-dock-ribbon-tab.is-active .side-dock-ribbon-tab-inner:hover { + color: #6272a4 !important; + background-color: var(--background-secondary); +} + + +.is-translucent .nav-file-title:not(.is-active) { + background-color: transparent; +} + +.is-translucent .nav-folder-title { + background-color: transparent; +} + +.nav-file-title:hover { + color: var(--text-normal) !important; +} + +.nav-folder-title:hover { + color: var(--text-normal) !important; +} + +.nav-action-button.is-active { + background-color: var(--background-secondary-alt); +} + +.search-result-file-title { + color: var(--text-a) !important; + background-color: var(--background-secondary); +} + +.is-translucent .search-result-file-title { + background-color: transparent; +} + +.search-result-file-matched-text { + color: var(--text-link) !important; + background-color: var(--background-secondary); +} + +/* .nav-file-tag { + color: #59a2c5; + } /* for the PNG text, but can't specifically target "PNG", just all of those filetype tags. */ + +.nav-file.is-active .nav-file-tag { + color: var(--text-normal); +} + +/* hover actions on side dock navigation */ + +.side-dock-ribbon-tab:hover, +.side-dock-ribbon-tab-inner:hover, +.side-dock-ribbon-action:hover, +.side-dock-ribbon-action.is-active:hover, +.nav-action-button:hover, +.side-dock-collapse-btn:hover { + color: var(--text-normal); +} + +/* Hover color over tree item flairs */ +.tree-item-self:hover .tree-item-flair { + background-color: var(--background-secondary); +} + +/* clean up side bar empty state (e.g. unlinked mentions) */ + +.search-empty-state { + width: auto; + padding-left: 15px; + padding-right: 15px; + line-height: normal; +} + +/* clean up side bar empty state (e.g. unlinked mentions) */ + +.search-empty-state { + width: auto; + padding-left: 10px; + padding-right: 5px; + line-height: normal; +} + +/* NORMAL TEXT OUTSIDE OF HEADINGS AND CODE */ + +/* preview */ + +.markdown-preview-view { + color: var(--text-normal); + padding-left: 8% !important; + padding-right: 4% !important; +} + +.mod-single-child .markdown-preview-view { + color: var(--text-normal); + padding-left: 10% !important; + padding-right: 10% !important; +} + +/* editor */ + +.cm-s-obsidian { + color: var(--text-normal); + padding-left: 8% !important; + padding-right: 4% !important; +} + +.mod-single-child .cm-s-obsidian { + color: var(--text-normal); + padding-left: 8% !important; + padding-right: 4% !important; +} + +/* HEADINGS */ + +/* preview */ + +.markdown-preview-view h1 { + color: var(--text-title-h1); +} + +.markdown-preview-view h2 { + color: var(--text-title-h2); +} + +.markdown-preview-view h3 { + color: var(--text-title-h3); +} + +.markdown-preview-view h4 { + color: var(--text-title-h4); +} + +.markdown-preview-view h5 { + color: var(--text-title-h5); +} + +.markdown-preview-view h6 { + color: var(--text-title-h6); +} + +/* editor */ + +.cm-header-1 { + color: var(--text-title-h1); +} + +.cm-header-2 { + color: var(--text-title-h2); +} + +.cm-header-3 { + color: var(--text-title-h3); +} + +.cm-header-4 { + color: var(--text-title-h4); +} + +.cm-header-5 { + color: var(--text-title-h5); +} + +.cm-header-6 { + color: var(--text-title-h6); +} + +/* TAGS */ + +/* preview */ + +a.tag { + color: var(--text-tag); +} + +/* editor */ + +.cm-hashtag { + color: var(--text-tag) !important; +} + +/* BOLD */ + +/* preview */ + +strong { + color: var(--markup-code); +} + +/* editor */ + +.cm-strong { + color: var(--markup-code); +} + +/* ITALICS */ + +/* preview */ + +em { + color: var(--interactive-accent); +} + +/* editor */ + +.cm-em { + color: var(--interactive-accent); +} + +/* HIGHLIGHT */ + +/* preview */ + +mark { + color: var(--background-primary); + background-color: var(--text-mark); + padding-top: 1px; + padding-bottom: 1px; +} + +/* editor */ + +.cm-highlight { + color: var(--background-primary) !important; + background-color: var(--text-mark) !important; + padding-top: 1px; + padding-bottom: 1px; +} + +/* COLLAPSED RIBBONS */ + +.workspace-ribbon.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +.workspace-ribbon.mod-right.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +.workspace-ribbon.mod-left.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +/* POPUP NOTIFICATION*/ + +.notice { + color: var(--text-normal) !important; + background-color: var(--blockquote-border) !important; +} + +/* UL, OL, BULLETS, CHECKBOXES & FOLDING ARROWS */ + +/* task lists */ + +.markdown-preview-view .task-list-item-checkbox { + -webkit-appearance: none; + top: 1.3px !important; + right: 5px !important; + box-sizing: border-box; + border: 1px solid var(--accent-2); + position: relative; + width: 1.25em; + height: 1.25em; + margin: 0; + box-shadow: 0 0 0.1em var(--interactive-accent); +} + +.markdown-preview-view .task-list-item-checkbox:checked::before { + content: "✓"; + position: absolute; + color: var(--interactive-accent); + line-height: 1.25em; + width: 1.2em; + text-align: center; + text-shadow: 0 0 0.5em var(--accent-2); +} + +.markdown-preview-view .task-list-item-checkbox { + top: 0px; +} + +.checkbox-container { + background-color: var(--background-primary-alt); + border-radius: 14px; + display: inline-block; + position: relative; + top: 4px; + user-select: none; + width: 42px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.15); + transition: background 0.15s ease-in-out, box-shadow 0.15s ease-in-out, + border 0.15s ease-in-out, opacity 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; +} + +.checkbox-container.is-enabled { + background-color: var(--interactive-accent); +} + + +.markdown-preview-view mark { + color: var(--text-link); + background-color: var(--background-primary-alt); +} + +.cm-formatting +/* This is the color of header hashtags. Don't change. */ + +.cm-formatting-list-ul .cm-list-1 +/* This is the color of text in lists. Don't change. */ + + +/* Subtler code folding arrows */ + +.CodeMirror-foldgutter-folded:after, +.CodeMirror-foldgutter-open:after { + opacity: 0.5; + color: var(--text-link); +} + +.CodeMirror-foldgutter-folded:hover:after, +.CodeMirror-foldgutter-open:hover:after { + opacity: 1; + color: var(--text-link); +} + +.CodeMirror-foldgutter-folded:after { + content: "\25BA"; + color: var(--text-link); +} + +.CodeMirror-foldgutter-open:after { + content: "\25BC"; +} + +/* Bullet Point Relationship Lines */ + +.cm-hmd-list-indent .cm-tab, +ul ul { + position: relative; +} + +.cm-hmd-list-indent .cm-tab::before, +ul ul::before { + content: ""; + border-left: 1px solid; + color: #92CDD6; + position: absolute; +} + +.cm-hmd-list-indent .cm-tab::before { + left: 0; + top: -5px; + bottom: -4px; +} + +ul ul::before { + left: 0px; + top: 0; + bottom: 0; +} + +/* ul, li & ol colors in editor */ + +.cm-s-obsidian span.cm-formatting-list { + color: #8abeb7; +} + +ol { + display: block; + list-style-type: decimal; + margin-block-start: 1em; + margin-block-end: 1em; + margin-inline-start: 0px; + margin-inline-end: 0px; + padding-inline-start: 40px; +} + +.suggestion-highlight { + color: var(--interactive-accent)!important; +} + +.is-selected { + background-color: var(--blockquote-border)!important; +} + +@media print { + @page { + margin: 0mm 0mm 0mm 0mm; + } + .print .markdown-preview-view { + -webkit-print-color-adjust: exact; + background-color: #282a36; + color: #f8f8f2; + } + .markdown-rendered code { + color: #BABABA !important; + } +} diff --git a/.obsidian/themes/Dracula for Obsidian/manifest.json b/.obsidian/themes/Dracula for Obsidian/manifest.json new file mode 100644 index 0000000..da0dc26 --- /dev/null +++ b/.obsidian/themes/Dracula for Obsidian/manifest.json @@ -0,0 +1,6 @@ +{ + "name": "Dracula for Obsidian", + "version": "0.0.0", + "minAppVersion": "0.16.0", + "author": "jarodise" +} \ No newline at end of file diff --git a/.obsidian/themes/Dracula for Obsidian/theme.css b/.obsidian/themes/Dracula for Obsidian/theme.css new file mode 100644 index 0000000..88bce16 --- /dev/null +++ b/.obsidian/themes/Dracula for Obsidian/theme.css @@ -0,0 +1,717 @@ +:root +{ + --font-size-normal: 19px; + --font-size-code: 16px; + --font-size-side-dock: 16px; + --font-size-side-dock-title: 18px; + --font-size-status-bar: 16px; + --font-size-h1: 24px; + --font-size-h2: 23px; + --font-size-h3: 22px; + --font-size-h4: 21px; + --font-size-h5: 20px; + --font-size-h6: 19px; + --font-family-editor: Avenir, Avenir Next, sans-serif; + --font-family-preview: Avenir, Avenir Next, sans-serif; +} + +.theme-light, +.theme-dark { + --background-primary: #282a36; + --background-primary-alt: #44475a; + --background-secondary: #44475a; + --background-secondary-alt: #282a36; + --background-accent: #f8f8f2; + --background-modifier-border: #f8f8f2; + --background-modifier-form-field: rgba(0, 0, 0, 0.2); + --background-modifier-form-field-highlighted: rgba(0, 0, 0, 0.5); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); + --background-modifier-success: #50fa7b; /*no sure*/ + --background-modifier-error: #3d0000; /*no sure*/ + --background-modifier-error-rgb: 61, 0, 0; + --background-modifier-error-hover: #470000; + --background-modifier-cover: rgba(0, 0, 0, 0.6); + --text-accent: #ffb86c; + --text-accent-hover: #8be9fd; + --text-normal: #f8f8f2; + --text-muted: #f8f8f2; + --text-faint: #bd93f9; + --text-highlight-bg: #ff5555; + --text-error: #ff79c6; + --text-error-hover: #ff79c6; + --text-selection: #6272a4; /* Chromium precess this color with alpha channel */ + --text-on-accent: #bd93f9; + --interactive-normal: #ffb86c; + --interactive-hover: #ff5555; + --interactive-accent: #ffb86c; + --interactive-accent-rgb: 123, 108, 217; + --interactive-accent-hover: #ff5555; + --scrollbar-active-thumb-bg: rgba(255, 255, 255, 0.2); + --scrollbar-bg: rgba(255, 255, 255, 0.05); + --scrollbar-thumb-bg: rgba(255, 255, 255, 0.1); + + --text-title-h1: #ff79c6; + --text-title-h2: #bd93f9; + --text-title-h3: #ff5555; + --text-title-h4: #ffb86c; + --text-title-h5: #50fa7b; + --text-title-h6: #8be9fd; + --inline-code: #bd93f9; + --code-block: #8be9fd; + --pre-code: #44475a; + --blockquote-border: #ffb86c; + --vim-cursor: #ff5555; + --border-color: #2b2727; /*also like transparent*/ +} + +/*-------------------------------------*/ +/* Search the following lines */ +/* to jump to specific section */ +/*-------------------------------------*/ +/* resize-handle and borders */ +/* tags */ +/* link */ +/* Cursor */ +/* basic format in EDITOR and PREVIEW */ +/* Headings - EDITOR and PREVIEW */ +/* Code block in Preview */ +/* Code block in Editor */ +/* Brackets */ +/* Blockquote */ +/* table */ +/* Checkbox */ +/* html in editor */ +/* popover */ +/* Side panel */ +/* internal embedded link in preview */ +/* graph view */ +/* settings */ +/* Hide side bar */ +/* width of content */ +/* at a rule line before ul list * +/* Hide Scrollbar (recommend for mac) */ +/*-------------------------------------*/ + +/***************************************/ +/* resize-handle and borders */ +/***************************************/ + +/*vertical resize-handle*/ +.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +.workspace-split.mod-left-split > .workspace-leaf-resize-handle, +.workspace-split.mod-right-split > .workspace-leaf-resize-handle{ + width: 1px !important; + background-color: var(--border-color); +} + +/*horizontal resize-handle*/ +.workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle{ + height: 1px !important; + background-color: var(--border-color); +} + +/*workspace ribbon when collapsed*/ +.workspace-ribbon.is-collapsed { + background-color: var(--background-primary-alt); +} + +/*the vertical split*/ +.workspace-split.mod-root .workspace-split.mod-vertical .workspace-leaf-content, +.workspace-split.mod-vertical > .workspace-split, +.workspace-split.mod-vertical > .workspace-leaf, +.workspace-tabs{ + padding-right: 0px; +} + +/*status-bar*/ +.status-bar{ + font-size: var(--font-size-status-bar); + background-color: var(--background-secondary-alt); + border-top: 0px; +} + +.document-search-container{ + border-top: 0px; + border-right: 0px; + z-index: inherit; +} + +.workspace-ribbon.mod-left.is-collapsed{ + border-right: 1px solid var(--border-color); +} + +.workspace-ribbon.mod-right.is-collapsed{ + border-left: 1px solid var(--border-color); +} + +/*************************************/ +/* tags */ +/*************************************/ + +/* Tag hover in preview */ +a.tag:hover { + color: var(--text-accent) !important; +} + +/* Tag Color in editor and preview*/ +.cm-hashtag, a.tag { + color: var(--text-accent-hover) !important; + text-decoration: none !important; + font-style: normal !important; +} + +/*********************************/ +/* link */ +/*********************************/ + +/* link */ +a, +.internal-link, +.cm-hmd-internal-link, +.cm-link, +.cm-formatting-link, +.cm-url { + text-decoration: none !important; +} + +/* the url string in editor */ +.cm-s-obsidian span.cm-string{ + color: var(--text-accent-hover) !important; +} + +/* make external links italics to differentiate */ +a:not(.internal-link) { + font-style: italic; +} + +/*footnote*/ +.cm-s-obsidian pre.HyperMD-footnote span.cm-hmd-footnote, +.cm-s-obsidian span.cm-footref { + color: var(--text-accent) !important; +} + +/***************************************/ +/* Cursor */ +/***************************************/ + +/* Cursor color and opacity */ + +.cm-fat-cursor .CodeMirror-cursor, .cm-animate-fat-cursor + { + width: 0.5em; + background: var(--vim-cursor); + opacity: 60% !important; +} + +/**************************************/ +/* basic format in EDITOR and PREVIEW */ +/**************************************/ + +/* font for everything outside of editor/preview panes */ +.app-container { + font-family: var(--font-family-preview); +} + +/* set the text selection color for preview mode */ +::selection { + background-color: var(--text-selection); +} + +/* normal text outside of headings and code of editor */ +.cm-s-obsidian, .mod-single-child .cm-s-obsidian { + font-family: var(--font-family-editor); + font-size: var(--font-size-normal); +} + +/* normal text outside of headings and code of preview */ +.markdown-preview-view, .mod-single-child .markdown-preview-view { + font-family: var(--font-family-editor); + font-size: var(--font-size-normal); + padding-top: 0px; + padding-left: 2% !important; + padding-right: 1% !important; +} + +/* bold in preview and editor */ +strong, .cm-strong { + font-weight: 600; + color: #50fa7b; +} + +/* emphasis in preview and editor */ +em, .cm-em { + color: var(--text-muted); + font-style: italic; +} + +/* strikethrough in preview and editor */ +s, .cm-strikethrough { + color: var(--text-muted); +} + +/* list in editor */ +.cm-s-obsidian span.cm-formatting-list { + color: var(--text-normal) !important; +} + +/* horizontal line in preview */ +.markdown-preview-view hr { + background-color: var(--text-faint) !important; +} + +/* embedded images */ +img:not(.emoji) { + display: block; + margin-left: auto; + margin-right: auto; +} +/* img hover zoom out img*/ +img:hover { + transform: scale(1.04); + transition: transform 0.25s ease-in-out 0s; +} + +.community-theme img:hover{ + transform: none; +} + +/*********************************/ +/* Headings - EDITOR and PREVIEW */ +/*********************************/ + + +/* headings for editor and preview */ +.cm-header-1, .markdown-preview-view h1 +{ + font-family: var(--font-family-editor); + font-weight: 500; + font-size: var(--font-size-h1); + color: var(--text-title-h1); +} + +.cm-header-2, .markdown-preview-view h2 +{ + font-family: var(--font-family-editor); + font-weight: 500; + font-size: var(--font-size-h2); + color: var(--text-title-h2); +} + +.cm-header-3, .markdown-preview-view h3 +{ + font-family: var(--font-family-editor); + font-weight: 500; + font-size: var(--font-size-h3); + color: var(--text-title-h3); +} + +.cm-header-4, .markdown-preview-view h4 +{ + font-family: var(--font-family-editor); + font-weight: 500; + font-size: var(--font-size-h4); + color: var(--text-title-h4); +} + +.cm-header-5, .markdown-preview-view h5 +{ + font-family: var(--font-family-editor); + font-weight: 500; + font-size: var(--font-size-h5); + color: var(--text-title-h5); +} + +.cm-header-6, .markdown-preview-view h6 +{ + font-family: var(--font-family-editor); + font-weight: 500; + font-size: var(--font-size-h6); + color: var(--text-title-h6); +} + +/***************************************/ +/* Code block in Preview */ +/***************************************/ + +/* code blocks in preview */ +pre code { + font-family: monaco !important; + font-size: var(--font-size-code) !important; + padding: 6px !important; + line-height: normal; + display: block; + color: var(--code-block) !important; +} + +/* padding of code blocks in preview */ +.markdown-preview-view pre { + padding: 0px !important; +} + +/* font-size of in-line block for preview */ +.markdown-preview-view code +{ + font-size: var(--font-size-code); +} + + +/* remove the shadow that typically affect light mode */ +.theme-dark code[class*="language-"], +.theme-dark pre[class*="language-"], +.theme-light code[class*="language-"], +.theme-light pre[class*="language-"] +{ + text-shadow: none !important; + color: var(--text-faint) !important; + background-color: var(--pre-code); +} + +/***************************************/ +/* Brackets */ +/***************************************/ + +.cm-s-obsidian span.cm-formatting-link { + color: var(--text-accent) !important; +} + +/***************************************/ +/* Blockquote */ +/***************************************/ + +/* for editor */ +.cm-quote { + color: var(--text-normal) !important; + font-style: italic; +} + +/* for preview */ +.markdown-preview-view blockquote { + background-color: var(--pre-code); + border: 0px solid; + border-color: var(--blockquote-border) !important; + border-left-width: 4px !important; + border-radius: 0 8px 8px 0; + line-height: 1.5em; + margin: 30px 0px; + font-style: italic; +} + +/***************************************/ +/* table */ +/***************************************/ + +th { + font-weight: 800 !important; +} + +.markdown-preview-view th { + font-weight: 800; + background-color: var(--background-secondary) !important; +} + +thead { + border-bottom: 3px solid var(--background-modifier-border); +} + +.table { + padding: 4px; + line-height: normal; + display: block; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/***************************************/ +/* Checkbox */ +/***************************************/ + +.markdown-preview-view .task-list-item-checkbox:checked::before { + content: '✓'; + position: absolute; + color: var(--text-accent); + font-size:1em; + line-height: 1.25em; + width:1.2em; + text-align:center; + text-shadow: 0 0 0.1em var(--text-accent); +} + +.markdown-preview-view .task-list-item-checkbox { + -webkit-appearance: none; + top: 0.2em !important; + right: 4px; + box-sizing: border-box; + border: 1px solid var(--text-muted); + position: relative; + width: 1.25em; + height: 1.25em; + margin: 0; + box-shadow: 0 0 0.1em var(--text-muted); +} + +.checkbox-container { + background-color: var(--background-primary); +} + + +/***************************************/ +/* popover */ +/***************************************/ + +.popover{ + border: 1px solid var(--border-color); + background-color: var(--background-secondary); +} + + +/***************************************/ +/* Side panel */ +/***************************************/ + +/* search result in backlink or file search */ +.search-result-file-title { + font-size: 15px ; +} + +.search-result-file-matches, .search-empty-state { + font-size: var(--font-size-side-dock); +} + +/*decrease the spacing between result items*/ +.search-result-file-title, +.search-result-file-match { + padding: 0px 10px; +} + +.nav-file-title, .nav-folder-title { + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; +} + +/*backlink pane*/ +.workspace-leaf-content[data-type="backlink"] .view-content{ + background-color: var(--background-secondary); +} + +.workspace-leaf-content[data-type="tag"] .tag-pane-tag-count, +.workspace-leaf-content[data-type="tag"] .tag-pane-tag-text { + font-size: var(--font-size-side-dock); +} + +.workspace-leaf-content[data-type="backlink"] .search-result-file-matches { + font-size: var(--font-size-side-dock); +} +/***************************************/ +/* internal embedded link in preview */ +/***************************************/ + +/* Naked Embeds */ +.markdown-embed-title { display: none; } +.markdown-preview-view .markdown-embed-content>:first-child { margin-top: 0; } +.markdown-preview-view .markdown-embed-content>:last-child { margin-bottom: 0; } +/*remove the following two line, you will get border and scroll*/ +.markdown-preview-view .markdown-embed { border:none; padding:0; margin:0; } +.markdown-preview-view .markdown-embed-content +{ + max-height: unset; + background-color: var(--background-secondary); +} + +/* the link on the top right corner*/ +.markdown-embed-link { +color: var(--text-faint) !important; +} + +.markdown-embed-link:hover { +color: var(--text-accent) !important; +} + +/***************************************/ +/* graph view */ +/***************************************/ +.graph-view.color-circle, +.graph-view.color-fill-highlight, +.graph-view.color-line-highlight +{ + color: var(--text-accent) !important; +} + +.graph-view.color-text +{ + color: var(--text-normal) !important; +} + +.graph-view.color-line { + color: #6272a4; +} + +.graph-view.color-fill{ + color: var(--text-muted); +} + +.workspace-leaf-content[data-type = "graph"] .view-content{ + background-color: var(--background-primary); +} + +/***************************************/ +/* settings */ +/***************************************/ + +.modal.mod-settings button:not(.mod-cta):hover { + background-color: var(--interactive-accent-hover); +} + +/***************************************/ +/* Hide side bar */ +/***************************************/ + +.workspace-ribbon:not(:hover) .workspace-ribbon-collapse-btn, +.workspace-ribbon:not(:hover) .side-dock-actions, +.workspace-ribbon:not(:hover) .side-dock-settings { + display:none; + transition: all 300ms ease-in-out;} +.workspace-ribbon:not(:hover) { + width: 0px; + transition: all 300ms ease-in-out;} + +.workspace-split.mod-left-split {margin-left: 0px;} +.workspace-split.mod-right-split {margin-right: 0px;} + +/***************************************/ +/* width of content */ +/***************************************/ + +.markdown-source-view.is-readable-line-width .CodeMirror { + max-width: 900px; + margin-left: auto; + margin-right: auto; +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section { + max-width: 900px; + margin-left: 30px; + margin-right: 30px; +} + + +/* header */ + +.theme-dark .view-header { + background-color: var(--background-primary) !important; + border-top: 1px solid var(--border-color) !important; + border-bottom: 1px solid var(--border-color) !important; +} + +.theme-dark .view-header-title-container:after { + background: linear-gradient(to bottom, transparent, var(--background-primary)) !important; +} + +.theme-dark .workspace-leaf.mod-active .view-header { + background-color: var(--background-secondary-alt) !important; + border-top: 0px !important; + border-bottom: 3px solid var(--interactive-accent) !important; +} + +.workspace-leaf.mod-active .view-header-title-container:after { + background: linear-gradient(to bottom, transparent, var(--background-secondary-alt)) !important; +} + +.workspace-leaf.mod-active .view-header-title, +.workspace-leaf.mod-active .view-header-icon +{ + color: var(--background-modifier-border); +} + +.view-header-title, .view-header-icon, .view-action{ + color: var(--text-faint); +} +.view-header-title +{ + font-size: 20px; +} + +/***************************************/ +/* at a rule line before ul list */ +/***************************************/ + +ul ul { position: relative; } +ul ul::before { + content:''; + border-left: 1px solid var(--border-color); + position: absolute; +} +ul ul::before { left: -1em; top: 0; bottom: 0; } + +/* rule line when there are checkboxes*/ +ul .task-list-item ul::before {left: 0.15em !important} + +/***************************************/ +/* Code block in Editor */ +/***************************************/ + +/* in-line block for editor */ +.cm-s-obsidian span.cm-inline-code, +.cm-s-obsidian span.cm-inline-code.cm-hmd-indented-code, +.cm-s-obsidian span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code) +{ + background-color: var(--pre-code-bg); + color: var(--inline-code) !important; + bottom: 0px !important; +} + + /* Editor CodeBlock TEXT Appearance */ +.cm-s-obsidian pre.HyperMD-codeblock { + font-family: monaco !important; + font-size: var(--font-size-code) !important; + padding: 1px !important; + display: block; + color: var(--code-block) !important; + font-weight: 500; + text-indent: 0px !important; +} + +/*remove the border of codeblock in editor */ +.HyperMD-codeblock-bg{ + border: 0px !important; +} + +/*an active line highlight in vim normal mode +.cm-fat-cursor .CodeMirror-activeline .CodeMirror-linebackground{ + background-color: var(--text-selection) !important; +} */ + +/* in-line block for preview */ +code{ + color: var(--inline-code) !important; + bottom: 0px !important; +} + +/* graph css */ +.theme-dark .graph-view.color-arrow { + color: #50fa7b; + } + + .theme-dark .graph-view.color-fill-tag { + color: #ffb86c; + } + + .theme-dark .graph-view.color-fill-attachment { + color: #ff5555; + } + + .theme-dark .graph-view.color-fill-unresolved { + color: #6272a4; + } + + .search-result-collapse-indicator { + position: absolute; + left: 0; + top: -3px; + color: var(--text-faint); + transition: transform 100ms ease-in-out; + padding: 0px !important; + } diff --git a/.obsidian/themes/GitHub Theme/manifest.json b/.obsidian/themes/GitHub Theme/manifest.json new file mode 100644 index 0000000..778b2b2 --- /dev/null +++ b/.obsidian/themes/GitHub Theme/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "GitHub Theme", + "version": "1.1.6", + "minAppVersion": "1.0.0", + "author": "@krios2146", + "authorUrl": "https://github.com/krios2146" +} diff --git a/.obsidian/themes/GitHub Theme/theme.css b/.obsidian/themes/GitHub Theme/theme.css new file mode 100644 index 0000000..b279bf4 --- /dev/null +++ b/.obsidian/themes/GitHub Theme/theme.css @@ -0,0 +1,1245 @@ +/* @settings + +name: GitHub theme settings +id: id +settings: + - + # Colorblind + + id: colorblind + title: Colorblind variants + type: heading + level: 1 + collapsed: true + - + id: colorblind_protan-deutan + title: Protanopia & Deuteranopia + type: class-toggle + - + id: colorblind_tritan + title: Tritanopia + type: class-toggle + + - + # Callout Settings + + id: callout + title: Callouts + type: heading + level: 1 + collapsed: true + - + id: callout-on + title: GitHub callout style + type: class-toggle + default: true + + - + # Headers underline + + id: headers-underline + title: Headers underline + type: heading + level: 1 + collapsed: true + - + id: h1-underline + title: H1 header underline enabled + type: class-toggle + - + id: h2-underline + title: H2 header underline enabled + type: class-toggle + + - + # Headers Settings + + id: headers + title: Headers colors + type: heading + level: 1 + collapsed: true + - + # All Headers + + id: all-headers + title: All headers + type: heading + level: 3 + collapsed: true + - + id: headers-one-color + title: All headers are the same color + type: class-toggle + default: true + - + id: h-color-theme + title: Header color + type: variable-themed-color + opacity: false + format: hex + default-light: '#24292f' + default-dark: '#7ee787' + + - + # Particular Headers + + id: particular headers + title: Particular headers + description: This settings won't work if `All headers are the same color` is ON + type: heading + level: 3 + collapsed: true + - + id: h1-color-theme + title: h1 color + type: variable-themed-color + opacity: false + format: hex + default-light: '#24292f' + default-dark: '#7ee787' + - + id: h2-color-theme + title: h2 color + type: variable-themed-color + opacity: false + format: hex + default-light: '#24292f' + default-dark: '#7ee787' + - + id: h3-color-theme + title: h3 color + type: variable-themed-color + opacity: false + format: hex + default-light: '#24292f' + default-dark: '#7ee787' + - + id: h4-color-theme + title: h4 color + type: variable-themed-color + opacity: false + format: hex + default-light: '#24292f' + default-dark: '#7ee787' + - + id: h5-color-theme + title: h5 color + type: variable-themed-color + opacity: false + format: hex + default-light: '#24292f' + default-dark: '#7ee787' + - + id: h6-color-theme + title: h6 color + type: variable-themed-color + opacity: false + format: hex + default-light: '#24292f' + default-dark: '#7ee787' + + - + # Kanban Settings + + id: kanban + title: Kanban + type: heading + level: 1 + collapsed: true + - + id: kanban-variant + title: Kanban variant + description: Variations of Kanban styles + type: class-select + allowEmpty: false + default: kanban-full + options: + - + label: GitHub projects style + value: kanban-full + - + label: Minimal style + value: kanban-on + - + label: Disable styles + value: kanban-off + - + id: kanban-same-height-cards + title: Minimal height for cards + description: All cards will have the same initial height + type: class-toggle + default: true + - + id: kanban-full-height-column + title: Full height lists + description: + type: class-toggle + default: true +*/ +body { + /* Animations */ + --anim-duration-none: 0; + --anim-duration-superfast: 70ms; + --anim-duration-fast: 140ms; + --anim-duration-moderate: 300ms; + --anim-duration-slow: 560ms; + --anim-motion-smooth: cubic-bezier(0.45, 0.05, 0.55, 0.95); + --anim-motion-delay: cubic-bezier(0.65, 0.05, 0.36, 1); + --anim-motion-jumpy: cubic-bezier(0.68, -0.55, 0.27, 1.55); + --anim-motion-swing: cubic-bezier(0, 0.55, 0.45, 1); + /* Blockquotes */ + --blockquote-border-thickness: 2px; + --blockquote-border-color: var(--interactive-accent); + --blockquote-font-style: normal; + --blockquote-color: inherit; + --blockquote-background-color: transparent; + /* Bold */ + --bold-weight: var(--font-semibold); + --bold-color: inherit; + /* Borders */ + --border-width: 1px; + /* Buttons */ + --button-radius: var(--input-radius); + /* Callouts */ + --callout-border-width: 0px; + --callout-border-opacity: 0.25; + --callout-padding: var(--size-4-3) var(--size-4-3) var(--size-4-3) var(--size-4-6); + --callout-radius: var(--radius-s); + --callout-blend-mode: var(--highlight-mix-blend-mode); + --callout-title-color: inherit; + --callout-title-padding: 0; + --callout-title-size: inherit; + --callout-content-padding: 0; + --callout-content-background: transparent; + --callout-bug: var(--color-red-rgb); + --callout-default: var(--color-blue-rgb); + --callout-error: var(--color-red-rgb); + --callout-example: var(--color-purple-rgb); + --callout-fail: var(--color-red-rgb); + --callout-important: var(--color-cyan-rgb); + --callout-info: var(--color-blue-rgb); + --callout-question: var(--color-yellow-rgb); + --callout-success: var(--color-green-rgb); + --callout-summary: var(--color-cyan-rgb); + --callout-tip: var(--color-cyan-rgb); + --callout-todo: var(--color-blue-rgb); + --callout-warning: var(--color-orange-rgb); + --callout-quote: 158, 158, 158; + /* Canvas */ + --canvas-background: var(--background-primary); + --canvas-card-label-color: var(--text-faint); + --canvas-color-1: var(--color-red-rgb); + --canvas-color-2: var(--color-orange-rgb); + --canvas-color-3: var(--color-yellow-rgb); + --canvas-color-4: var(--color-green-rgb); + --canvas-color-5: var(--color-cyan-rgb); + --canvas-color-6: var(--color-purple-rgb); + --canvas-dot-pattern: var(--color-base-30); + /* Checkboxes */ + --checkbox-radius: var(--radius-s); + --checkbox-size: var(--font-text-size); + --checkbox-marker-color: var(--background-primary); + --checkbox-color: var(--interactive-accent); + --checkbox-color-hover: var(--interactive-accent-hover); + --checkbox-border-color: var(--text-faint); + --checkbox-border-color-hover: var(--text-muted); + --checklist-done-decoration: line-through; + --checklist-done-color: var(--text-muted); + /* Code */ + --code-white-space: pre-wrap; + --code-size: var(--font-smaller); + --code-background: var(--background-primary-alt); + --code-normal: var(--text-muted); + --code-comment: var(--text-faint); + --code-function: var(--color-orange); + --code-important: var(--color-orange); + --code-keyword: var(--color-red); + --code-property: var(--color-blue); + --code-punctuation: var(--text-muted); + --code-string: var(--color-cyan); + --code-tag: var(--color-red); + --code-value: var(--color-purple); + /* Collapse icons */ + --collapse-icon-color: var(--text-faint); + --collapse-icon-color-collapsed: var(--text-accent); + /* Cursor */ + --cursor: default; + --cursor-link: pointer; + /* Dialogs - e.g. small modals, confirmations */ + --dialog-width: 560px; + --dialog-max-width: 80vw; + --dialog-max-height: 85vh; + /* Dividers — between panes */ + --divider-color: var(--background-modifier-border); + --divider-color-hover: var(--interactive-accent); + --divider-width: 1px; + --divider-width-hover: 3px; + --divider-vertical-height: calc(100% - var(--header-height)); + /* Dragging */ + --drag-ghost-background: rgba(0, 0, 0, 0.85); + --drag-ghost-text-color: #fff; + /* Embeds */ + --embed-max-height: 4000px; + --embed-canvas-max-height: 400px; + --embed-background: inherit; + --embed-border-left: 2px solid var(--interactive-accent); + --embed-border-right: none; + --embed-border-top: none; + --embed-border-bottom: none; + --embed-padding: 0 0 0 var(--size-4-6); + --embed-font-style: inherit; + /* Blocks */ + --embed-block-shadow-hover: 0 0 0 1px var(--background-modifier-border), + inset 0 0 0 1px var(--background-modifier-border); + /* File layout */ + --file-line-width: 700px; + --file-folding-offset: 24px; + --file-margins: var(--size-4-8); + --file-header-font-size: var(--font-ui-small); + --file-header-font-weight: 400; + --file-header-border: var(--border-width) solid transparent; + --file-header-justify: center; + /* Relative font sizes */ + --font-smallest: 0.8em; + --font-smaller: 0.875em; + --font-small: 0.933em; + /* UI font sizes */ + --font-ui-smaller: 12px; + --font-ui-small: 13px; + --font-ui-medium: 15px; + --font-ui-large: 20px; + /* Font weights */ + --font-thin: 100; + --font-extralight: 200; + --font-light: 300; + --font-normal: 400; + --font-medium: 500; + --font-semibold: 600; + --font-bold: 700; + --font-extrabold: 800; + --font-black: 900; + /* Footnotes */ + --footnote-size: var(--font-smaller); + /* Graphs */ + --graph-controls-width: 240px; + --graph-text: var(--text-normal); + --graph-line: var(--color-base-35, var(--background-modifier-border-focus)); + --graph-node: var(--text-muted); + --graph-node-unresolved: var(--text-faint); + --graph-node-focused: var(--text-accent); + --graph-node-tag: var(--color-green); + --graph-node-attachment: var(--color-yellow); + /* Headings */ + --heading-formatting: var(--text-faint); + --h1-color: var(--h1-color-theme); + --h2-color: var(--h2-color-theme); + --h3-color: var(--h3-color-theme); + --h4-color: var(--h4-color-theme); + --h5-color: var(--h5-color-theme); + --h6-color: var(--h6-color-theme); + --h1-font: inherit; + --h2-font: inherit; + --h3-font: inherit; + --h4-font: inherit; + --h5-font: inherit; + --h6-font: inherit; + --h1-line-height: 1.2; + --h2-line-height: 1.2; + --h3-line-height: 1.3; + --h4-line-height: 1.4; + --h5-line-height: var(--line-height-normal); + --h6-line-height: var(--line-height-normal); + --h1-size: 2em; + --h2-size: 1.6em; + --h3-size: 1.37em; + --h4-size: 1.25em; + --h5-size: 1.12em; + --h6-size: 1.12em; + --h1-style: normal; + --h2-style: normal; + --h3-style: normal; + --h4-style: normal; + --h5-style: normal; + --h6-style: normal; + --h1-variant: normal; + --h2-variant: normal; + --h3-variant: normal; + --h4-variant: normal; + --h5-variant: normal; + --h6-variant: normal; + --h1-weight: 700; + --h2-weight: 600; + --h3-weight: 600; + --h4-weight: 600; + --h5-weight: 600; + --h6-weight: 600; + /* View header */ + --header-height: 40px; + /* Horizontal rules */ + --hr-color: var(--background-modifier-border); + --hr-thickness: 2px; + /* Icons */ + --icon-size: var(--icon-m); + --icon-stroke: var(--icon-m-stroke-width); + --icon-xs: 14px; + --icon-s: 16px; + --icon-m: 18px; + --icon-l: 18px; + --icon-xl: 32px; + --icon-xs-stroke-width: 2px; + --icon-s-stroke-width: 2px; + --icon-m-stroke-width: 1.75px; + --icon-l-stroke-width: 1.75px; + --icon-xl-stroke-width: 1.25px; + --icon-color: var(--text-muted); + --icon-color-hover: var(--text-muted); + --icon-color-active: var(--text-accent); + --icon-color-focused: var(--text-normal); + --icon-opacity: 0.85; + --icon-opacity-hover: 1; + --icon-opacity-active: 1; + --clickable-icon-radius: var(--radius-s); + /* Indentation guide */ + --indentation-guide-width: 1px; + --indentation-guide-color: rgba(var(--mono-rgb-100), 0.12); + --indentation-guide-color-active: rgba(var(--mono-rgb-100), 0.3); + /* Inline title */ + --inline-title-color: var(--h1-color); + --inline-title-font: var(--h1-font); + --inline-title-line-height: var(--h1-line-height); + --inline-title-size: var(--h1-size); + --inline-title-style: var(--h1-style); + --inline-title-variant: var(--h1-variant); + --inline-title-weight: var(--h1-weight); + --inline-title-margin-bottom: 0.5em; + /* Inputs */ + --input-height: 30px; + --input-radius: 5px; + --input-font-weight: var(--font-normal); + --input-border-width: 1px; + /* Italic */ + --italic-color: inherit; + --italic-weight: inherit; + /* Z-index */ + --layer-cover: 5; + --layer-sidedock: 10; + --layer-status-bar: 15; + --layer-popover: 30; + --layer-slides: 45; + --layer-modal: 50; + --layer-notice: 60; + --layer-menu: 65; + --layer-tooltip: 70; + --layer-dragged-item: 80; + /* Line heights */ + --line-height-normal: 1.5; + --line-height-tight: 1.3; + /* Links */ + --link-color: var(--text-accent); + --link-color-hover: var(--text-accent-hover); + --link-decoration: none; + --link-decoration-hover: underline; + --link-decoration-thickness: auto; + --link-external-color: var(--text-accent); + --link-external-color-hover: var(--text-accent-hover); + --link-external-decoration: none; + --link-external-decoration-hover: underline; + --link-external-filter: none; + --link-unresolved-color: var(--text-accent); + --link-unresolved-opacity: 0.7; + --link-unresolved-filter: none; + --link-unresolved-decoration-style: solid; + --link-unresolved-decoration-color: hsla(var(--interactive-accent-hsl), 0.3); + /* Lists */ + --list-indent: 2em; + --list-spacing: 0.075em; + --list-marker-color: var(--text-normal); + --list-marker-color-hover: var(--text-muted); + --list-marker-color-collapsed: var(--text-accent); + --list-bullet-border: none; + --list-bullet-radius: 50%; + --list-bullet-size: 5px; + --list-bullet-transform: none; + --list-numbered-style: decimal; + /* File navigator */ + --nav-item-size: var(--font-ui-small); + --nav-item-color: var(--text-muted); + --nav-item-color-hover: var(--text-normal); + --nav-item-color-active: var(--text-normal); + --nav-item-color-selected: var(--text-normal); + --nav-item-color-highlighted: var(--text-accent-hover); + --nav-item-background-hover: var(--background-modifier-hover); + --nav-item-background-active: var(--background-modifier-hover); + --nav-item-background-selected: hsla(var(--color-accent-hsl), 0.2); + --nav-item-padding: var(--size-4-1) var(--size-4-2) var(--size-4-1) var(--size-4-6); + --nav-item-parent-padding: var(--nav-item-padding); + --nav-item-children-padding-left: var(--size-2-2); + --nav-item-children-margin-left: var(--size-4-3); + --nav-item-weight: inherit; + --nav-item-weight-hover: inherit; + --nav-item-weight-active: inherit; + --nav-item-white-space: nowrap; + --nav-indentation-guide-width: var(--indentation-guide-width); + --nav-indentation-guide-color: var(--indentation-guide-color); + --nav-collapse-icon-color: var(--collapse-icon-color); + --nav-collapse-icon-color-collapsed: var(--text-faint); + /* Modals - e.g. settings, community themes, community plugins */ + --modal-background: var(--background-primary); + --modal-width: 90vw; + --modal-height: 85vh; + --modal-max-width: 1100px; + --modal-max-height: 1000px; + --modal-max-width-narrow: 800px; + --modal-border-width: var(--border-width); + --modal-border-color: var(--color-base-30, var(--background-modifier-border-focus)); + --modal-radius: var(--radius-l); + --modal-community-sidebar-width: 280px; + /* PDF view */ + --pdf-background: var(--background-primary); + --pdf-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05), 0 2px 8px rgba(0, 0, 0, 0.1); + --pdf-spread-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05); + --pdf-sidebar-background: var(--background-primary); + --pdf-thumbnail-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 2px 8px rgba(0, 0, 0, 0.2); + /* Popovers - file previews */ + --popover-width: 450px; + --popover-height: 400px; + --popover-max-height: 70vh; + --popover-pdf-width: 600px; + --popover-pdf-height: 800px; + --popover-font-size: var(--font-text-size); + /* Prompts - e.g. quick switcher, command palette */ + --prompt-width: 700px; + --prompt-max-width: 80vw; + --prompt-max-height: 70vh; + --prompt-border-width: var(--border-width); + --prompt-border-color: var(--color-base-40, var(--background-modifier-border-focus)); + /* Radiuses */ + --radius-s: 4px; + --radius-m: 8px; + --radius-l: 12px; + --radius-xl: 16px; + /* Ribbon */ + --ribbon-background: var(--background-secondary); + --ribbon-background-collapsed: var(--background-primary); + --ribbon-width: 44px; + --ribbon-padding: var(--size-4-2) var(--size-4-1) var(--size-4-3); + /* Scrollbars */ + --scrollbar-active-thumb-bg: rgba(var(--mono-rgb-100), 0.2); + --scrollbar-bg: rgba(var(--mono-rgb-100), 0.05); + --scrollbar-thumb-bg: rgba(var(--mono-rgb-100), 0.1); + /* Search */ + --search-clear-button-color: var(--text-muted); + --search-clear-button-size: 13px; + --search-icon-color: var(--text-muted); + --search-icon-size: 18px; + --search-result-background: var(--background-primary); + /* Layout sizing - for padding and margins */ + --size-2-1: 2px; + --size-2-2: 4px; + --size-2-3: 6px; + --size-4-1: 4px; + --size-4-2: 8px; + --size-4-3: 12px; + --size-4-4: 16px; + --size-4-5: 20px; + --size-4-6: 24px; + --size-4-8: 32px; + --size-4-9: 36px; + --size-4-12: 48px; + --size-4-16: 64px; + --size-4-18: 72px; + /* Sidebar */ + --sidebar-markdown-font-size: calc(var(--font-text-size) * 0.9); + --sidebar-tab-text-display: none; + /* Sliders */ + --slider-thumb-border-width: 1px; + --slider-thumb-border-color: var(--background-modifier-border-hover); + --slider-thumb-height: 18px; + --slider-thumb-width: 18px; + --slider-thumb-y: -6px; + --slider-thumb-radius: 50%; + --slider-s-thumb-size: 15px; + --slider-s-thumb-position: -5px; + --slider-track-background: var(--background-modifier-border); + --slider-track-height: 3px; + /* Status bar */ + --status-bar-background: var(--background-secondary); + --status-bar-border-color: var(--divider-color); + --status-bar-border-width: 1px 0 0 1px; + --status-bar-font-size: var(--font-ui-smaller); + --status-bar-text-color: var(--text-muted); + --status-bar-position: fixed; + --status-bar-radius: var(--radius-m) 0 0 0; + --status-bar-scroll-padding: calc(var(--status-bar-font-size) + 18px); + /* Swatch for color inputs */ + --swatch-radius: 14px; + --swatch-height: 24px; + --swatch-width: 24px; + --swatch-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.15); + /* Tabs */ + --tab-background-active: var(--background-primary); + --tab-text-color: var(--text-faint); + --tab-text-color-active: var(--text-muted); + --tab-text-color-focused: var(--text-muted); + --tab-text-color-focused-active: var(--text-muted); + --tab-text-color-focused-highlighted: var(--text-accent); + --tab-text-color-focused-active-current: var(--text-normal); + --tab-font-size: var(--font-ui-small); + --tab-font-weight: inherit; + --tab-container-background: var(--background-secondary); + --tab-divider-color: var(--background-modifier-border-hover); + --tab-outline-color: var(--divider-color); + --tab-outline-width: 1px; + --tab-curve: 6px; + --tab-radius: var(--radius-s); + --tab-radius-active: 6px 6px 0 0; + --tab-width: 200px; + --tab-max-width: 320px; + /* Stacked tabs */ + --tab-stacked-pane-width: 700px; + --tab-stacked-header-width: var(--header-height); + --tab-stacked-font-size: var(--font-ui-small); + --tab-stacked-font-weight: 400; + --tab-stacked-text-align: left; + --tab-stacked-text-transform: rotate(0deg); + --tab-stacked-text-writing-mode: vertical-lr; + --tab-stacked-shadow: -8px 0 8px 0 rgba(0, 0, 0, 0.05); + /* Tables */ + --table-background: transparent; + --table-border-width: 1px; + --table-border-color: var(--background-modifier-border); + --table-white-space: normal; + --table-header-background: var(--table-background); + --table-header-background-hover: inherit; + --table-header-border-width: var(--table-border-width); + --table-header-border-color: var(--table-border-color); + --table-header-font: inherit; + --table-header-size: var(--font-text-size); + --table-header-weight: var(--bold-weight); + --table-header-color: var(--text-normal); + --table-text-size: inherit; + --table-text-color: inherit; + --table-column-max-width: none; + --table-column-alt-background: var(--table-background); + --table-column-first-border-width: var(--table-border-width); + --table-column-last-border-width: var(--table-border-width); + --table-row-background-hover: var(--table-background); + --table-row-alt-background: var(--table-background); + --table-row-last-border-width: var(--table-border-width); + /* Tags */ + --tag-size: var(--font-smaller); + --tag-color: var(--text-accent); + --tag-color-hover: var(--text-accent); + --tag-decoration: none; + --tag-decoration-hover: none; + --tag-background: hsla(var(--interactive-accent-hsl), 0.1); + --tag-background-hover: hsla(var(--interactive-accent-hsl), 0.2); + --tag-border-color: hsla(var(--interactive-accent-hsl), 0.15); + --tag-border-color-hover: hsla(var(--interactive-accent-hsl), 0.15); + --tag-border-width: 0px; + --tag-padding-x: 0.65em; + --tag-padding-y: 0.25em; + --tag-radius: 2em; + /* Window frame */ + --titlebar-background: var(--background-secondary); + --titlebar-background-focused: var(--background-secondary-alt); + --titlebar-border-width: 0px; + --titlebar-border-color: var(--background-modifier-border); + --titlebar-text-color: var(--text-muted); + --titlebar-text-color-focused: var(--text-normal); + --titlebar-text-weight: var(--font-bold); + /* Toggles */ + --toggle-border-width: 2px; + --toggle-width: 40px; + --toggle-radius: 18px; + --toggle-thumb-color: white; + --toggle-thumb-radius: 18px; + --toggle-thumb-height: 18px; + --toggle-thumb-width: 18px; + --toggle-s-border-width: 2px; + --toggle-s-width: 34px; + --toggle-s-thumb-height: 15px; + --toggle-s-thumb-width: 15px; + /* Vault name */ + --vault-name-font-size: var(--font-ui-small); + --vault-name-font-weight: var(--font-medium); + --vault-name-color: var(--text-normal); + /* Workspace */ + --workspace-background-translucent: rgba(var(--mono-rgb-0), 0.6); + /* Color mappings ------------------------ */ + /* Accent HSL values */ + --accent-h: var(--accent-h-theme); + --accent-s: var(--accent-s-theme); + --accent-l: var(--accent-l-theme); + /* Backgrounds */ + --background-primary: var(--color-base-00); + --background-primary-alt: var(--color-base-10); + --background-secondary: var(--color-base-20); + --background-modifier-hover: rgba(var(--rgb-hover), var(--background-modifier-hover-alpha)); + --background-modifier-active-hover: hsla(var(--interactive-accent-hsl), 0.15); + --background-modifier-border: var(--color-base-30); + --background-modifier-border-hover: var(--color-base-30); + --background-modifier-border-focus: var(--color-accent); + --background-modifier-error-rgb: var(--color-red-rgb); + --background-modifier-error: var(--color-red); + --background-modifier-error-hover: var(--color-red); + --background-modifier-success-rgb: var(--color-green-rgb); + --background-modifier-success: var(--color-green); + --background-modifier-message: rgba(0, 0, 0, 0.9); + /* Inputs */ + --background-modifier-form-field: var(--color-base-25); + /* Text */ + --text-normal: var(--color-base-100); + --text-muted: var(--color-base-70); + --text-faint: var(--color-base-50); + --text-on-accent: white; + --text-on-accent-inverted: black; + --text-error: var(--color-red); + --text-success: var(--color-green); + --text-selection: hsla(var(--color-accent-hsl), 0.2); + --text-highlight-bg: rgba(255, 208, 0, 0.4); + --text-accent: var(--color-accent); + --text-accent-hover: var(--color-accent-2); + --interactive-normal: var(--color-base-00); + --interactive-hover: var(--color-base-10); + --interactive-accent-hsl: var(--color-accent-hsl); + --interactive-accent: var(--color-accent-1); + --interactive-accent-hover: var(--color-accent-2); +} + +.theme-dark { + color-scheme: dark; + --highlight-mix-blend-mode: lighten; + --mono-rgb-0: 0, 0, 0; + --mono-rgb-100: 255, 255, 255; + --rgb-hover: 177, 186, 196; + --color-red-rgb: 248, 81, 73; + --color-red: #F47067; + --color-green-rgb: 126, 231, 135; + --color-green: #7ee787; + --color-orange: #FFA657; + --color-yellow: #d29922; + --color-cyan: #A5D6FF; + --color-blue: #6CB6FF; + --color-purple: #D2A8FF; + --color-pink: #f778ba; + + --color-base-00: #0d1117; + --color-base-10: #161b22; + --color-base-20: #161b22; + --color-base-25: #010409; + --color-base-30: #30363d; + --color-base-35: #21262d; + --color-base-40: #30363d; + --color-base-50: #6e7681; + --color-base-60: #999; /* Unused */ + --color-base-70: #8b949e; + --color-base-100: #c9d1d9; + + --accent-h-theme: 212; + --accent-s-theme: 100%; + --accent-l-theme: 67%; + --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); + --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) - 3.8%)); + --color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 3.8%)); + + --background-secondary-alt: var(--color-base-25); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); + --background-modifier-cover: rgba(10, 10, 10, 0.4); + --text-highlight-bg: rgba(255, 208, 0, 0.4); + --text-highlight-bg-active: rgba(255, 128, 0, 0.4); + --text-selection: hsla(var(--interactive-accent-hsl), 0.4); + --input-shadow: inset 0 0 0 1px #f0f6fc1a; + --input-shadow-hover: inset 0 0 0 1px var(--color-base-70); + --shadow-s: none; + --shadow-l: none; + + --inline-code-background: #6e768166; + --h-color-theme: var(--color-green); + --h1-color-theme: var(--color-green); + --h2-color-theme: var(--color-green); + --h3-color-theme: var(--color-green); + --h4-color-theme: var(--color-green); + --h5-color-theme: var(--color-green); + --h6-color-theme: var(--color-green); + --background-modifier-hover-alpha: 0.12; + --color-btn-primary-bg: #238636; + --color-btn-primary-hover-bg: #2ea043; + + /* Kanban colors */ + --kanban-background: var(--background-primary); + --kanban-lane-background: var(--background-secondary-alt); + --kanban-item-background: var(--background-primary-alt); + --kanban-lane-border: var(--color-base-35); + --kanban-lane-count: var(--color-base-35); + --kanban-options-btn: var(--color-base-30); +} +.is-mobile.theme-dark { + --color-base-00: #0d1117; + --color-base-10: #161b22; + --color-base-20: #161b22; + --tag-background: hsla(var(--interactive-accent-hsl), 0.2); + --modal-background: var(--background-secondary); + --search-result-background: var(--background-secondary); + --background-modifier-form-field: var(--background-modifier-border); + --background-modifier-cover: rgba(0, 0, 0, 0.5); + --background-modifier-hover: rgba(var(--mono-rgb-100), 0.15); + --settings-home-background: var(--background-primary); +} + +.theme-light { + color-scheme: light; + --highlight-mix-blend-mode: darken; + --mono-rgb-0: 255, 255, 255; + --mono-rgb-100: 0, 0, 0; + --rgb-hover: 208, 215, 222; + --color-red-rgb: 228, 55, 75; + --color-red: #cf222e; + --color-green-rgb: 12, 181, 79; + --color-green: #0cb54f; + --color-orange: #d96c00; + --color-yellow: #BD8E37; + --color-cyan: #2db7b5; + --color-blue: #086DDD; + --color-purple: #876be0; + --color-pink: #C32B74; + + --color-base-00: #ffffff; + --color-base-05: #fcfcfc; + --color-base-10: #f6f8fa; + --color-base-20: #f6f8fa; + --color-base-25: #f6f8fa; + --color-base-30: #d0d7de; + --color-base-35: #d4d4d4; + --color-base-40: #bdbdbd; + --color-base-50: #6e7781; + --color-base-60: #707070; /* Unused */ + --color-base-70: #57606a; + --color-base-100: #24292f; + + --accent-h-theme: 212; + --accent-s-theme: 92%; + --accent-l-theme: 45%; + --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); + --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 2.5%)); + --color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 5%)); + + --background-secondary-alt: var(--color-base-05); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.1); + --background-modifier-cover: rgba(220, 220, 220, 0.4); + --text-highlight-bg: rgba(255, 208, 0, 0.4); + --text-highlight-bg-active: rgba(255, 128, 0, 0.4); + --input-shadow: inset 0 0 0 1px #1b1f2426; + --input-shadow-hover: inset 0 0 0 1px #1b1f2426; + --shadow-s: none; + --shadow-l: none; + + --inline-code-background: #aeb8c133; + --h-color-theme: var(--text-normal); + --h1-color-theme: var(--text-normal); + --h2-color-theme: var(--text-normal); + --h3-color-theme: var(--text-normal); + --h4-color-theme: var(--text-normal); + --h5-color-theme: var(--text-normal); + --h6-color-theme: var(--text-normal); + --background-modifier-hover-alpha: 0.32; + --color-btn-primary-bg: #2da44f; + --color-btn-primary-hover-bg: #2c964a; + + /* Kanban colors */ + --kanban-background: var(--background-primary); + --kanban-lane-background: var(--background-primary-alt); + --kanban-item-background: var(--background-primary); + --kanban-lane-border: #d8dee4; + --kanban-lane-count: #aeb8c133; + --kanban-options-btn: var(--background-primary-alt); +} + + +body.colorblind_protan-deutan.theme-dark { + --color-red-rgb: 253, 172, 84; + --color-red: #fdac54; + --color-green-rgb: 165, 214, 255; + --color-green: #a3d6ff; + --color-orange: #fdac54; + + --color-btn-primary-bg: #1f6feb; + --color-btn-primary-hover-bg: #388bfd; +} +body.colorblind_protan-deutan.theme-light { + --color-red-rgb: 179, 89, 0; + --color-red: #b35900; + --color-green-rgb: 33, 139, 255; + --color-green: #218bff; + --color-orange: #dd7815; + + --color-btn-primary-bg: #218bff; + --color-btn-primary-hover-bg: #0969da; +} + +body.colorblind_tritan.theme-dark { + --color-green-rgb: 165, 214, 255; + --color-green: #a5d6ff; + --color-orange: #ffa198; + + --text-highlight-bg: rgba(255, 0, 0, 0.4); + --text-highlight-bg-active: rgba(255, 50, 0, 0.4); + + --color-btn-primary-bg: #1f6feb; + --color-btn-primary-hover-bg: #388bfd; +} +body.colorblind_tritan.theme-light { + --color-green-rgb: 12, 181, 79; + --color-green: #218bff; + --color-orange: #fa4549; + + --text-highlight-bg: rgba(255, 0, 0, 0.4); + --text-highlight-bg-active: rgba(255, 50, 0, 0.4); + + --color-btn-primary-bg: #218bff; + --color-btn-primary-hover-bg: #0969da; +} + +/* Tables */ +.markdown-rendered td, +.markdown-rendered th { + padding: var(--size-2-3) var(--size-4-3); +} +.markdown-rendered th { + text-align: center; +} +.markdown-rendered tbody tr:nth-child(2n) { + background-color: var(--background-secondary); +} + +/* Buttons */ +button { + transition: 80ms cubic-bezier(0.33, 1, 0.68, 1); +} +button:hover { + cursor: var(--cursor-link); +} +button.mod-cta { + background-color: var(--color-btn-primary-bg); + color: var(--text-on-accent); +} +button.mod-cta:hover { + background-color: var(--color-btn-primary-hover-bg); +} + +/* Callout */ +body.callout-on { + --callout-radius: 0; + --callout-border-width: 0; + --callout-padding: 0 1em; +} +body.callout-on .callout { + border-left: 0.25em solid var(--color-base-30); + background-color: transparent; + color: var(--text-muted); +} +body.callout-on .callout-content p { + margin: 0.1em 0; +} + +/* Headers */ +body.headers-one-color { + --h1-color: var(--h-color-theme); + --h2-color: var(--h-color-theme); + --h3-color: var(--h-color-theme); + --h4-color: var(--h-color-theme); + --h5-color: var(--h-color-theme); + --h6-color: var(--h-color-theme); +} + +/* Kanban-common */ +.kanban-plugin { + --lane-width: 348px; +} +body.theme-light .kanban-plugin__lane-items>div { + box-shadow: rgb(140 149 159 / 15%) 0px 3px 6px; +} + +/* Kanban-same-height-cards */ +body.kanban-same-height-cards .kanban-plugin__item-content-wrapper, +body.kanban-same-height-cards .kanban-plugin__item-title-wrapper { + min-height: 68px; +} + +/* Kanban-full-height-column */ +body.kanban-full-height-column button.kanban-plugin__new-item-button { + align-self: flex-end; +} +body.kanban-full-height-column .kanban-plugin__item-button-wrapper { + flex-grow: 1; + display: flex; +} +body.kanban-full-height-column .kanban-plugin__lane-wrapper { + min-height: 100%; +} + +/* Kanban-Minimal */ +body.kanban-on .kanban-plugin { + background-color: var(--kanban-background); +} +body.kanban-on .kanban-plugin__lane { + background-color: var(--kanban-lane-background); + border: 1px solid var(--kanban-lane-border); +} +body.kanban-on .kanban-plugin__lane-title { + flex-grow: 0; + width: fit-content; +} +body.kanban-on .kanban-plugin__item-content-wrapper, +body.kanban-on .kanban-plugin__item-title-wrapper, +body.kanban-on .kanban-plugin__item-metadata-wrapper:not(:empty) { + background: var(--kanban-item-background); +} +body.kanban-on .kanban-plugin__icon>svg { + transform: rotate(90deg); +} +body.kanban-on .kanban-plugin__lane-settings-button-wrapper { + margin-left: auto; +} +body.kanban-on div.kanban-plugin__lane-title-count { + background-color: var(--kanban-lane-count); + border-radius: 1em; + padding: 2px 5px; +} +body.kanban-on .kanban-plugin__item button.kanban-plugin__item-prefix-button, +body.kanban-on .kanban-plugin__item button.kanban-plugin__item-postfix-button, +body.kanban-on .kanban-plugin__lane button.kanban-plugin__lane-settings-button { + padding: 0 5px; + height: 24px; + box-shadow: none; +} +body.kanban-on .kanban-plugin__item button.kanban-plugin__item-prefix-button:hover, +body.kanban-on .kanban-plugin__item button.kanban-plugin__item-postfix-button:hover, +body.kanban-on .kanban-plugin__lane button.kanban-plugin__lane-settings-button:hover { + background-color: var(--kanban-options-btn); + cursor: pointer; +} +body.kanban-on button.kanban-plugin__new-item-button { + border: none; + justify-content: flex-start; +} +body.kanban-on .kanban-plugin__new-item-button:hover { + color: var(--text-normal); + background-color: inherit; + box-shadow: none; +} +body.kanban-on .kanban-plugin__lane-items { + padding: 8px 15px; +} +body.kanban-on .kanban-plugin__item-prefix-button-wrapper input[type=checkbox] { + filter: none; +} + +/* Kanban-Full */ +/* Main color */ +body.kanban-full .kanban-plugin { + background-color: var(--kanban-background); +} + +/* LANE */ +/* Colors */ +body.kanban-full .kanban-plugin__lane { + background-color: var(--kanban-lane-background); + border: 1px solid var(--kanban-lane-border); +} + +/* Grip icon hiding */ +body.kanban-full .kanban-plugin__lane-grip { + position: absolute; + opacity: 0; + width: calc(var(--lane-width) - 1em); + height: 3em; + z-index: 0; + margin: 0; + cursor: default; +} +body.kanban-full .kanban-plugin__lane-header-wrapper div { + z-index: 1; +} + +/* Header */ +body.kanban-full .kanban-plugin__lane-header-wrapper { + padding-left: 14px; +} +body.kanban-full .kanban-plugin__markdown-preview-view { + font-size: inherit; +} + +/* Header + Counter */ +body.kanban-full .kanban-plugin__lane-title { + flex-grow: 0; + width: fit-content; + font-size: 1em; +} + +/* Counter */ +body.kanban-full div.kanban-plugin__lane-title-count { + background-color: var(--kanban-lane-count); + border-radius: 1em; + padding: 2px 5px; +} + +/* Three dot position */ +body.kanban-full .kanban-plugin__lane-settings-button-wrapper { + margin-left: auto; +} + +/* Cards padding */ +body.kanban-full .kanban-plugin__lane-items { + padding: 2px 6px; +} + +/* ITEM */ +/* Colors */ +body.kanban-full .kanban-plugin__item-content-wrapper, +body.kanban-full .kanban-plugin__item-title-wrapper, +body.kanban-full .kanban-plugin__item-metadata-wrapper:not(:empty) { + background: var(--kanban-item-background); +} +body.kanban-full .kanban-plugin__item { + border-color: var(--kanban-lane-border); +} + +/* Between items */ +body.kanban-full .kanban-plugin__lane-items>div { + margin-bottom: 8px; + margin-top: 0; +} + +/* Borders */ +body.kanban-full .kanban-plugin__lane-header-wrapper, +body.kanban-full .kanban-plugin__item-button-wrapper, +body.kanban-full .kanban-plugin__item-form { + border: none; +} + +/* Content */ +body.kanban-full .kanban-plugin__item-title-wrapper { + padding: 12px 12px 12px 0; +} +body.kanban-full .kanban-plugin__item-title, +body.kanban-full .kanban-plugin__item-input-wrapper { + padding-left: 12px; +} + +/* Archive/checkbox */ +body.kanban-full .kanban-plugin__item-prefix-button-wrapper { + align-self: center; + margin-left: 5px; +} + +/* Time Date Buttons */ +body.kanban-full .kanban-plugin__item-metadata .is-button:hover { + cursor: var(--cursor-link); + color: var(--text-normal); +} + +/* THREE DOT BUTTON */ +/* Rotation */ +body.kanban-full .kanban-plugin__icon>svg { + transform: rotate(90deg); +} + +/* Size */ +body.kanban-full .kanban-plugin__icon { + font-size: 1.4em; +} + +/* Item */ +body.kanban-full .kanban-plugin__item-postfix-button.clickable-icon { + opacity: 0; +} +body.kanban-full .kanban-plugin__item:hover .kanban-plugin__item-postfix-button.clickable-icon { + opacity: 1; +} + +/* ADD A CARD BUTTON */ +/* Position */ +body.kanban-full .kanban-plugin__new-item-button { + border: none; + justify-content: flex-start; + box-shadow: none; + padding-left: 0; +} + +/* + Size */ +body.kanban-full .kanban-plugin__item-button-plus { + margin-right: 8px; + font-size: 1.9em; + height: inherit; +} + +/* Hover */ +body.kanban-full .kanban-plugin__new-item-button:hover { + background-color: inherit; + box-shadow: none; + color: var(--text-muted); +} + +/* HOVER EDITOR PLUGIN */ +/* Add borders */ +.popover.hover-editor > .popover-content { + border: var(--border-width) var(--color-base-30) solid; + box-shadow: 0 0 10px 3px var(--background-modifier-box-shadow); +} + +/* FIXIES */ +body.kanban-full .kanban-plugin__item-prefix-button-wrapper input[type=checkbox] { + filter: none; + margin: 3px; +} +body.kanban-full .kanban-plugin__markdown-preview-view>div>* { + overflow-x: unset; +} + +/* fix: input borders */ +textarea:active, +input[type='text']:active, +input[type='search']:active, +input[type='email']:active, +input[type='password']:active, +input[type='number']:active, +textarea:focus, +input[type='text']:focus, +input[type='search']:focus, +input[type='email']:focus, +input[type='password']:focus, +input[type='number']:focus, +textarea:focus-visible, +input[type='text']:focus-visible, +input[type='search']:focus-visible, +input[type='email']:focus-visible, +input[type='password']:focus-visible, +input[type='number']:focus-visible { + box-shadow: 0 0 0 1px var(--background-modifier-border-focus); +} +select:focus, .dropdown:focus { + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +} + +/* inline code block */ +.markdown-rendered :not(pre) > code { + background-color: var(--inline-code-background); + padding: 0.2em 0.4em; + border-radius: 6px; + color: var(--text-normal); +} + +/* Underline for the top level headers */ + +body.h1-underline h1, body.h1-underline.markdown-rendered h1 { + padding-bottom: .3em; + border-bottom: 1px solid var(--color-base-40); +} +body.h2-underline h2, body.h2-underline.markdown-rendered h2 { + padding-bottom: .3em; + border-bottom: 1px solid var(--color-base-40); +} diff --git a/.obsidian/types.json b/.obsidian/types.json new file mode 100644 index 0000000..36be8a8 --- /dev/null +++ b/.obsidian/types.json @@ -0,0 +1,31 @@ +{ + "types": { + "aliases": "aliases", + "cssclasses": "multitext", + "tags": "tags", + "progress": "number", + "TQ_explain": "checkbox", + "TQ_extra_instructions": "text", + "TQ_short_mode": "checkbox", + "TQ_show_backlink": "checkbox", + "TQ_show_cancelled_date": "checkbox", + "TQ_show_created_date": "checkbox", + "TQ_show_depends_on": "checkbox", + "TQ_show_done_date": "checkbox", + "TQ_show_due_date": "checkbox", + "TQ_show_edit_button": "checkbox", + "TQ_show_id": "checkbox", + "TQ_show_on_completion": "checkbox", + "TQ_show_postpone_button": "checkbox", + "TQ_show_priority": "checkbox", + "TQ_show_recurrence_rule": "checkbox", + "TQ_show_scheduled_date": "checkbox", + "TQ_show_start_date": "checkbox", + "TQ_show_tags": "checkbox", + "TQ_show_task_count": "checkbox", + "TQ_show_tree": "checkbox", + "TQ_show_urgency": "checkbox", + "due_date": "date", + "attendees": "multitext" + } +} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json new file mode 100644 index 0000000..328c51d --- /dev/null +++ b/.obsidian/workspace.json @@ -0,0 +1,254 @@ +{ + "main": { + "id": "cc2d3924546f0957", + "type": "split", + "children": [ + { + "id": "6aaf8d4da2daa902", + "type": "tabs", + "children": [ + { + "id": "57711b155dc4cde9", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "01-daily_notes/2026-02-27.md", + "mode": "source", + "source": true + }, + "icon": "lucide-file", + "title": "2026-02-27" + } + }, + { + "id": "3b185dc51374c6f1", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "02-projects/o2o/Day One.md", + "mode": "source", + "source": true + }, + "icon": "lucide-file", + "title": "Day One" + } + }, + { + "id": "2d689a38b59ad2c5", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "02-projects/Uplink/models.py.md", + "mode": "source", + "source": true + }, + "icon": "lucide-file", + "title": "models.py" + } + } + ], + "currentTab": 1 + } + ], + "direction": "vertical" + }, + "left": { + "id": "dc015e888d7b56e5", + "type": "split", + "children": [ + { + "id": "1ffed429e77de819", + "type": "tabs", + "children": [ + { + "id": "a6be9e31a3a99fe5", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical", + "autoReveal": false + }, + "icon": "lucide-folder-closed", + "title": "Files" + } + }, + { + "id": "8064f31833573afc", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + }, + "icon": "lucide-search", + "title": "Search" + } + }, + { + "id": "d542e19449361445", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {}, + "icon": "lucide-bookmark", + "title": "Bookmarks" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "e2e470e64d1fd18d", + "type": "split", + "children": [ + { + "id": "3490cc1911ee307d", + "type": "tabs", + "children": [ + { + "id": "9c8bc4bd12554e52", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "02-projects/Uplink/models.py.md", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-coming-in", + "title": "Backlinks for models.py" + } + }, + { + "id": "c2daa440541f80ef", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "02-projects/Uplink/models.py.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-going-out", + "title": "Outgoing links from models.py" + } + }, + { + "id": "9e172b4e7406e08b", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-tags", + "title": "Tags" + } + }, + { + "id": "5288100004fa657b", + "type": "leaf", + "state": { + "type": "all-properties", + "state": { + "sortOrder": "frequency", + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-archive", + "title": "All properties" + } + }, + { + "id": "d6000ebf97a59d4a", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "02-projects/Uplink/models.py.md", + "followCursor": false, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-list", + "title": "Outline of models.py" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300, + "collapsed": true + }, + "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 + } + }, + "active": "3b185dc51374c6f1", + "lastOpenFiles": [ + "01-daily_notes/2026-07-14.md", + "02-projects/o2o/Day One.md", + "02-projects/o2o", + "01-daily_notes/2026-06-30.md", + "02-projects/Desk Build/Dimensions.md", + "01-daily_notes/Untitled.md", + "02-projects/Desk Build", + "01-daily_notes/2026-02-27.md", + "Shopping list 2025-02-20.md", + "01-daily_notes/2026-02-20.md", + "02-projects/Uplink/rclone_engine.py.md", + "02-projects/Uplink/models.py.md", + "02-projects/Uplink/interfaces.py.md", + "02-projects/Uplink/Uplink.md", + "01-daily_notes/2026-02-15.md", + "01-daily_notes/2026-02-14.md", + "02-projects/Uplink/models", + "02-projects/Uplink/misc_notes.md", + "01-daily_notes/2026-02-13.md", + "02-projects/Uplink", + "00-templates", + "99-inbox", + "01-daily_notes", + "02-projects", + "Shopping List 2025-02-09.md", + "Desk build out.md", + "Shopping list.md", + "Questions for housing.md", + "daily_logs/2026-01-22.md", + "daily_logs", + "2026-01-22 Career Accelerator Meeting.md", + "_ARCHIVE/misc_notes/Realm Notes.md", + "_ARCHIVE/misc_notes/Games to check out.md", + "_ARCHIVE/projects/chiron-relay.md", + "_ARCHIVE/meeting_notes/Call System Review.md", + "_ARCHIVE/apartment_hunts/Temp Apartment 2025" + ] +} \ No newline at end of file diff --git a/01-daily_notes/2026-02-13.md b/01-daily_notes/2026-02-13.md new file mode 100644 index 0000000..e69de29 diff --git a/01-daily_notes/2026-02-14.md b/01-daily_notes/2026-02-14.md new file mode 100644 index 0000000..e69de29 diff --git a/01-daily_notes/2026-02-15.md b/01-daily_notes/2026-02-15.md new file mode 100644 index 0000000..e69de29 diff --git a/01-daily_notes/2026-02-20.md b/01-daily_notes/2026-02-20.md new file mode 100644 index 0000000..e69de29 diff --git a/01-daily_notes/2026-02-27.md b/01-daily_notes/2026-02-27.md new file mode 100644 index 0000000..e69de29 diff --git a/01-daily_notes/2026-06-30.md b/01-daily_notes/2026-06-30.md new file mode 100644 index 0000000..e69de29 diff --git a/01-daily_notes/2026-07-14.md b/01-daily_notes/2026-07-14.md new file mode 100644 index 0000000..e69de29 diff --git a/01-daily_notes/Untitled.md b/01-daily_notes/Untitled.md new file mode 100644 index 0000000..e69de29 diff --git a/02-projects/Desk Build/Dimensions.md b/02-projects/Desk Build/Dimensions.md new file mode 100644 index 0000000..740a32a --- /dev/null +++ b/02-projects/Desk Build/Dimensions.md @@ -0,0 +1,19 @@ +Window Desk +- Desktop x2 layers + - 84in x 24in +- Braces x2 + - 77in long + - standard 2x4 + +Wall Desk +- Desktop x2 layers + - 70in x 24in +- Braces x2 + - 63in + +Legs x8 + - 40in long + - standard 2x4 + +2 sheets of plywood +8 planks \ No newline at end of file diff --git a/02-projects/Uplink/Uplink.md b/02-projects/Uplink/Uplink.md new file mode 100644 index 0000000..02196c0 --- /dev/null +++ b/02-projects/Uplink/Uplink.md @@ -0,0 +1,13 @@ +--- +project_name: Uplink +project_description: Rclone based backup utility +primary_language: python +status: In Planning +--- + +## Summary +Rclone based backup utility designed to be fast efficient and easy to use. Written in python and designed to be used as a CLI tool using .ini config files. + +## Primary Components +- [[rclone_engine.py]] - Contains the primary backup and zipping logic +- [[cli.py]] - Contains login to run cli functions \ No newline at end of file diff --git a/02-projects/Uplink/interfaces.py.md b/02-projects/Uplink/interfaces.py.md new file mode 100644 index 0000000..1a2d1d9 --- /dev/null +++ b/02-projects/Uplink/interfaces.py.md @@ -0,0 +1,28 @@ +#### BaseBackupEngine +```python +class BaseBackupEngine(ABC) + """ + Abstract Base Class for backup engine class + """ + @abstractmethod + def run(self, tasks: list[BackupTasks], dry_run) -> bool: + """ + This method handles the backup process for the engine. Any tasks related to + that backup task should be handled in this method + + args: + - tasks (list[BackupTask]): list of BackgroundTask objects to be + processed. + - dry_run (bool, optional): Dry run flag. If this flag is set, this + function will return None. A list of all files to be compressed, their + total size, and the path to the output file will be printed to the + console, and logged. Defaults to False. + """ +``` + +#### run +This method handles the backup process for the engine. Any tasks related to that backup task should be handled in this method + +args: +- tasks (list\[BackupTask\]): list of BackupTask objects to be processed. +- dry_run (bool, optional): Dry run flag. If this flag is set, this function will return None. A list of all files to be compressed, their total size, and the path to the output file will be printed to the console, and logged. Defaults to False. \ No newline at end of file diff --git a/02-projects/Uplink/misc_notes.md b/02-projects/Uplink/misc_notes.md new file mode 100644 index 0000000..3e2964c --- /dev/null +++ b/02-projects/Uplink/misc_notes.md @@ -0,0 +1,3 @@ +- Use rclone --files-from to handle the list of source paths + - this lets you write to a file and have rclone read from that file to know what files to move. + - then delete the file afterwareds \ No newline at end of file diff --git a/02-projects/Uplink/models.py.md b/02-projects/Uplink/models.py.md new file mode 100644 index 0000000..46a2435 --- /dev/null +++ b/02-projects/Uplink/models.py.md @@ -0,0 +1,71 @@ +## Classes +#### BackupTask +```python +@dataclass +class BackupTask: +""" +Defines a backup task. + +This dataclass is used to define a backup task to be handled by the backup engine selected by the user. Defines the source path, destination path and user defined exclude patterns. + +args: + - source (Path): absolute path of the source directory + - dest (Path): absolute path of the destination directory + - exclude_pattern (str): regex pattern to define what files or directories + should be excluded from the backup +""" + source: Path + dest: Path + exclude_pattern: str + + @cached_property + def size(self) -> float + """ + Calculates total size of all files and sub-directories in source path + + returns: + - float: total size in megabytes + + raises: + - IOError: in any case where an IO error occurs + - FileNotFoundError: If source is not found or is an invalid path + """ + + def refresh_size(self) -> None: + """ + Forces a refresh of the size of the source directory. + Useful if you think the file size may have change significantly since the + creation of the object instance + + raise: + - IOError: in any case where an IO error occurs + - FileNotFoundError: If source is not found or is an invalid path + + """ +``` + +### Args +- source (Path): absolute path of the source directory +- dest (Path): absolute path of the destination directory +- exclude_pattern (str): regex pattern to define what files or directories + should be excluded from the backup + +##### size +@cached_property + +Calculates total size of all files and sub-directories in source path + +returns: +- float: total size in megabytes + +raises: +- IOError: in any case where an IO error occurs +- FileNotFoundError: If source is not found or is an invalid path + +##### refresh_size +Forces a refresh of the size of the source directory. +Useful if you think the file size may have change significantly since the creation of the object instance + +raise: +- IOError: in any case where an IO error occurs +- FileNotFoundError: If source is not found or is an invalid path \ No newline at end of file diff --git a/02-projects/Uplink/rclone_engine.py.md b/02-projects/Uplink/rclone_engine.py.md new file mode 100644 index 0000000..7559dd1 --- /dev/null +++ b/02-projects/Uplink/rclone_engine.py.md @@ -0,0 +1,246 @@ +## Summary +This file contains the primary working logic for backup and zipping. This file does the heavy lifting of the project. + +## Classes +### Engine +```python +class RcloneEngine(BaseBackupEngine): + """ + This class orchestrates and controls all processes for backups using rclone + """ + def __init__(progress_handle = None) -> None: + """ + Creates an instance of the RcloneEngine class + + args: + - progress_handle: rich progress handler. This is used to handle + displaying progress bars during the entire process. It is passed to all + classes as needed. + """ + def run(self, tasks: list[BackupTask], dry_run: bool = False): -> bool + """ + This function orchestrates and runs the zipping and backup process. + + args: + - tasks (list[BackupTask]): list of BackgroundTask objects to be + processed. + - dry_run (bool, optional): Dry run flag. If this flag is set, this + function will return None. A list of all files to be compressed, their + total size, and the path to the output file will be printed to the + console, and logged. Defaults to False. + """ +``` +#### run +This function orchestrates and runs the zipping and backup process. + +args: +- tasks (list\[BackupTask\]): list of BackgroundTask objects to be processed. +- dry_run (bool, optional): Dry run flag. If this flag is set, this function will return None. A list of all files to be compressed, their total size, and the path to the output file will be printed to the console, and logged. Defaults to False. + + +### Compressor +```python +class Compressor: +""" +This class hanldes file compression operations. +""" + def __init__(progress_handle = None) -> None: + """ + Creates an instance of the Compressor class + + args: + - progress_handle: rich progress handler. This is used to handle + displaying progress bars during the zip process + """ + def compress_directory( + self, + task: BackupTask, + dry_run: bool = False + ) -> Path | None: + """ + This method orchestrates all functions related to file zipping. It calls + all required class methods and handles data flow and error handling for + compression tasks + args: + - task (BackupTask): BackupTask object current being worked on. This is + used to get all info regarding the zipping task + - dry_run (bool, optional): Dry run flag. If this flag is set, this + function will return None. A list of all files to be compressed, their + total size, and the path to the output file will be printed to the + console, and logged. Defaults to False. + returns: + - path: Path to output file of completed zip operation. + - None: In any cases where an output file is note written + raises: + - InvalidBackupTaskError: If provided BackupTask is invalid + - CompressionError: If any error is raised during the compression + process + """ + def _get_file_list(self, task: BackupTask) -> list[Path]: + """ + This method reads the source path from task and returns a list of all + files and directories to be compressed, ignoring any files or directories + that match exclude patterns in provided task object + + args: + - task (BackupTask): BackupTask object current being worked on. This + is used to get the source directory and exclude patterns to select + files for compression + returns: + - list[Path]: List of paths to be compressed. If no files are found, + this list will be empty + raises: + - IOError: If any IO errors are encounted + - FileNotFoundError: If provided source path is not found + """ + def _run_zip(self, files: list[Path]) -> path | None: + """ + This method handles the actual zip process. This is also handles + displaying the progress bar if one is desired. + + args: + - files (list[Path]): list of files/paths to compress + returns: + - Path: path of output zip file. + - None: in cases where an output file could not be written + raises: + - IOError: If any IO errors are encounted + - FileNotFoundError: If provided path is not found + - CompressionError: If any error is raised during the compression + process + """ +``` +This class handles file compression of all directories and files in the source directory. + +#### compress_directory +This method orchestrates all functions related to file zipping. It calls all required class methods and handles data flow and error handling for compression tasks + +args: +- task (BackupTask): BackupTask object current being worked on. This is used to get all info regarding the zipping task +- dry_run (bool, optional): Dry run flag. If this flag is set, this function will return None. A list of all files to be compressed, their total size, and the path to the output file will be printed to the console, and logged. Defaults to False. +- +returns: +- Path: Path to output file of completed zip operation. +- None: In any cases where an output file is note written +- +raises: +- InvalidBackupTaskError: If provided BackupTask is invalid +- CompressionError: If any error is raised during the compression process + +#### _get_file_list +This method reads the source path from task and returns a list of all files and directories to be compressed, ignoring any files or directories that match exclude patterns in provided task object + +args: +- task (BackupTask): BackupTask object current being worked on. This is used to get the source directory and exclude patterns to select files for compression + +returns: +- list\[Path\]: List of paths to be compressed. If no files are found, this list will be empty + +raises: +- IOError: If any IO errors are encounted +- FileNotFoundError: If provided source path is not found + + +#### _run_zip +This method handles the actual zip process. This is also handles displaying the progress bar if one is desired. + +args: +- files (list\[Path\]): list of files/paths to compress + +returns: +- Path: path of output zip file. +- None: in cases where an output file could not be written + +raises: +- IOError: If any IO errors are encounted +- FileNotFoundError: If provided path is not found +- CompressionError: If any error is raised during the compression process + + +### Backup +This class handles the backup process using rclone + +```python +class Backup: + """ + This class handles the backup process using rclone + """ + def __init__(progress_handle = None) -> None: + """ + Creates an instance of the Uplink Class + + args: + - progress_handle: rich progress handler. This is used to handle + displaying progress bars during the zip process + """ + def backup( + self, + source: list[Path] | Path, + dest: Path, + dry_rule: bool = False + ) -> bool: + """ + Back ups source to dest using rclone + + args: + - source (list[Path] | Path): Accepts either a list of Path objects + or a single Path object. This will be copied to the destination path + - dest (Path): Destination for source files to be backed up to. + - dry_run (bool, optional): Dry run flag. If this flag is set, this + function will return None. A list of all files to be compressed, + their + total size, and the path to the output file will be printed to the + console, and logged. Defaults to False. + returns: + - bool: True if backup process completes without errors. False + otherwise. + raises: + - IOError: If any IO errors are encounted + - FileNotFoundError: If provided source path or paths are not found + - BackupError: If any errors happen during the backup process + """ + @contextmanager + def _create_from_file(self, source: list[Path]) -> Iterator[str]: + """ + Context manager for temp rclone from file. Contains list of paths to be + backed up by rclone. + + args: + - source (list[Path]): List of absolute paths to be backed up + + yields: + - Iterator[str]: Absolute path of the temp file container list of + source paths. + raises: + - IOError: If unable to write tmp file, or if any other IO errors are + encounted + """ +``` + +#### backup +Back ups source to dest using rclone + +args: +- source (list[Path] | Path): Accepts either a list of Path objects or a single Path object. This will be copied to the destination path +- dest (Path): Destination for source files to be backed up to. +- dry_run (bool, optional): Dry run flag. If this flag is set, this function will return None. A list of all files to be compressed, their total size, and the path to the output file will be printed to the console, and logged. Defaults to False. + +returns: +- bool: True if backup process completes without errors. False otherwise. + +raises: +- IOError: If any IO errors are encounted +- FileNotFoundError: If provided source path or paths are not found +- BackupError: If any errors happen during the backup process + +#### _create_from_file +Context manager for temp rclone from file. Contains list of paths to be backed up by rclone. + +args: +- source (list[Path]): List of absolute paths to be backed up + +yields: +- Iterator[str]: Absolute path of the temp file container list of source paths. +raises: + - IOError: If unable to write tmp file, or if any other IO errors are + encounted \ No newline at end of file diff --git a/02-projects/o2o/Day One.md b/02-projects/o2o/Day One.md new file mode 100644 index 0000000..c8afb03 --- /dev/null +++ b/02-projects/o2o/Day One.md @@ -0,0 +1,4 @@ +--- +date: 2026-07-14 + +--- diff --git a/2026-01-22 Career Accelerator Meeting.md b/2026-01-22 Career Accelerator Meeting.md new file mode 100644 index 0000000..de0681a --- /dev/null +++ b/2026-01-22 Career Accelerator Meeting.md @@ -0,0 +1,16 @@ +Meeting with `Hannah DeBruhl` + + + +`https://myseco.militaryonesource.mil/portal/article/career-training-courses` + +- Can take any course for free. +- Should be able to get the cert itself paid for. + +- No longer a cohort + - Can keep applying throughout the year. so that's neat + +flexjobs free for a year +- remote jobs. good to check on there too. + +- linkedin premium free for a year diff --git a/Desk build out.md b/Desk build out.md new file mode 100644 index 0000000..7b43668 --- /dev/null +++ b/Desk build out.md @@ -0,0 +1,6 @@ +8 support studs +40 inches tall +25 from the wall plywood +2 sheets +7 8 +7 diff --git a/Questions for housing.md b/Questions for housing.md new file mode 100644 index 0000000..ceff1e3 --- /dev/null +++ b/Questions for housing.md @@ -0,0 +1,13 @@ +- utilities and what's include +- deliveries +- street parking +- how long paperwork will take +- can she sign over lunch +- can we have a gas grill +- emergency services +- painting +- Hanging stuff on the walls + +Walkthrough checks +- appliances vs hook up +- Ethernet ports \ No newline at end of file diff --git a/Shopping List 2025-02-09.md b/Shopping List 2025-02-09.md new file mode 100644 index 0000000..4eeec13 --- /dev/null +++ b/Shopping List 2025-02-09.md @@ -0,0 +1,33 @@ +## Costco +- [ ] chicken breasts +- [ ] shredded rotisserie chicken + +## Commissary +- [x] cream cheese +- [x] scallions +- [x] cumin +- [x] corn tortillas +- [x] tortillas +- [x] breadcrumbs +- [x] milk +- [x] olive oil +- [x] oregano +- [x] red pepper flakes +- [x] diced tomatoes +- [x] basil +- [x] tomato paste +- [x] frozen shredded chicken +- [x] ranche seasoning packet +- [x] hamburger +- [x] Tapatia +- [x] taco seasoning +- [ ] enchilada sauce +- [x] shredded cheese +- [ ] can opener + +## Meals this week +- Chicken Parm +- Buffalo Chicken Enchiladas +- White people taco night +- Cheese enchiladas +- Crispy chicken taquitos diff --git a/Shopping list 2025-02-20.md b/Shopping list 2025-02-20.md new file mode 100644 index 0000000..3b77fc4 --- /dev/null +++ b/Shopping list 2025-02-20.md @@ -0,0 +1,11 @@ +- [x] milk +- [x] creamer +- [x] beans refried +- [x] pasta box +- [x] brown sugar +- [ ] chocolate syrup +- [x] potatoes +- [x] crescent rolls +- [x] block cheese +- [x] ranch +- [x] cinnamon \ No newline at end of file diff --git a/Shopping list.md b/Shopping list.md new file mode 100644 index 0000000..780415f --- /dev/null +++ b/Shopping list.md @@ -0,0 +1,2 @@ +Jarlic +Cheese diff --git a/_ARCHIVE/00_inbox/windows/Activation.md b/_ARCHIVE/00_inbox/windows/Activation.md new file mode 100644 index 0000000..62b5118 --- /dev/null +++ b/_ARCHIVE/00_inbox/windows/Activation.md @@ -0,0 +1,7 @@ +>[!info] Activation Script +>This is a totally 100% legal way to activate windows + +```powershell +irm https://get.activated.win | iex +``` + diff --git a/_ARCHIVE/00_tasks_list.md b/_ARCHIVE/00_tasks_list.md new file mode 100644 index 0000000..46c2db6 --- /dev/null +++ b/_ARCHIVE/00_tasks_list.md @@ -0,0 +1,12 @@ +--- +obsidianUIMode: preview +--- + + +```dataview +TASK +FROM "daily_logs" +WHERE !completed +GROUP BY file.link +SORT priority DESC, due ASC +``` \ No newline at end of file diff --git a/_ARCHIVE/01_personal_tickets.md b/_ARCHIVE/01_personal_tickets.md new file mode 100644 index 0000000..2a8bdf8 --- /dev/null +++ b/_ARCHIVE/01_personal_tickets.md @@ -0,0 +1,94 @@ +--- +obsidianUIMode: preview +--- + +```button +name Open New Ticket +type command +action Templater: Create templates/TPL_ticket.md +``` +--- + +### Backlog +```dataviewjs +const pages = dv.pages("#ticket") + .where(p => p.status === "Backlog" && !p.file.tags.includes("#work")); + +if (pages.length > 0) { + dv.table( + ["Ticket", "Priority", "Project"], + pages + .sort(p => p.priority, 'desc') + .map(p => [p.file.link, p.priority, p.project]) + ); +} +``` +--- + +### To Do +```dataviewjs +// 1. Get the data +const pages = dv.pages("#ticket").where(p => p.status === "To Do" && !p.file.tags.includes("#work")); + +// 2. Check if there are any results +if (pages.length > 0) { + // 3. If there are results, build and render the table. + dv.table( + ["Ticket", "Priority", "Project"], + pages + .sort(p => p.priority, 'desc') + .map(p => [ + p.file.link, + p.priority, + p.project + ]) + ); +} +// 4. If there are no results, do nothing. The block will render as empty. +``` +--- + +### In Progress +```dataviewjs +// 1. Get the data +const pages = dv.pages("#ticket").where(p => p.status === "In Progress" && !p.file.tags.includes("#work")); + +// 2. Check if there are any results +if (pages.length > 0) { + // 3. If there are results, build and render the table. + dv.table( + ["Ticket", "Priority", "Project"], + pages + .sort(p => p.priority, 'desc') + .map(p => [ + p.file.link, + p.priority, + p.project + ]) + ); +} +// 4. If there are no results, do nothing. The block will render as empty. +``` +--- + +### Done +```dataviewjs +// 1. Get the data +const pages = dv.pages("#ticket").where(p => p.status === "Done" && !p.file.tags.includes("#work")); + +// 2. Check if there are any results +if (pages.length > 0) { + // 3. If there are results, build and render the table. + dv.table( + ["Ticket", "Priority", "Project"], + pages + .sort(p => p.priority, 'desc') + .map(p => [ + p.file.link, + p.priority, + p.project + ]) + ); +} +// 4. If there are no results, do nothing. The block will render as empty. +``` \ No newline at end of file diff --git a/_ARCHIVE/02_work_tickets.md b/_ARCHIVE/02_work_tickets.md new file mode 100644 index 0000000..b2c2b26 --- /dev/null +++ b/_ARCHIVE/02_work_tickets.md @@ -0,0 +1,93 @@ +--- +obsidianUIMode: preview +--- + +```button +name Open New Ticket +type command +action Templater: Create templates/TPL_ticket.md +``` + +### Backlog +```dataviewjs +const pages = dv.pages("#ticket") + .where(p => p.status === "Backlog" && p.file.tags.includes("#work")); + +if (pages.length > 0) { + dv.table( + ["Ticket", "Priority", "Project"], + pages + .sort(p => p.priority, 'desc') + .map(p => [p.file.link, p.priority, p.project]) + ); +} +``` + +### To Do +```dataviewjs +// 1. Get the data +const pages = dv.pages("#ticket") + .where(p => p.status === "To Do" && p.file.tags.includes("#work")); + +// 2. Check if there are any results +if (pages.length > 0) { + // 3. If there are results, build and render the table. + dv.table( + ["Ticket", "Priority", "Project"], + pages + .sort(p => p.priority, 'desc') + .map(p => [ + p.file.link, + p.priority, + p.project + ]) + ); +} +// 4. If there are no results, do nothing. The block will render as empty. +``` + +### In Progress +```dataviewjs +// 1. Get the data +const pages = dv.pages("#ticket") + .where(p => p.status === "In Progress" && p.file.tags.includes("#work")); + +// 2. Check if there are any results +if (pages.length > 0) { + // 3. If there are results, build and render the table. + dv.table( + ["Ticket", "Priority", "Project"], + pages + .sort(p => p.priority, 'desc') + .map(p => [ + p.file.link, + p.priority, + p.project + ]) + ); +} +// 4. If there are no results, do nothing. The block will render as empty. +``` + +### Done +```dataviewjs +// 1. Get the data +const pages = dv.pages("#ticket") + .where(p => p.status === "Done" && p.file.tags.includes("#work")); + +// 2. Check if there are any results +if (pages.length > 0) { + // 3. If there are results, build and render the table. + dv.table( + ["Ticket", "Priority", "Project"], + pages + .sort(p => p.priority, 'desc') + .map(p => [ + p.file.link, + p.priority, + p.project + ]) + ); +} +// 4. If there are no results, do nothing. The block will render as empty. +``` \ No newline at end of file diff --git a/_ARCHIVE/Daily Logs/2025-09-06.md b/_ARCHIVE/Daily Logs/2025-09-06.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/Daily Logs/2025-09-06.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/00_Apartment Hunt 2025.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/00_Apartment Hunt 2025.md new file mode 100644 index 0000000..a2fcb80 --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/00_Apartment Hunt 2025.md @@ -0,0 +1,13 @@ +>[!INFO] +>Hunt for a temp apartment while Elizabeth is at A School +>Looking in the Menifee, Murrieta and Temecula area + +```dataview +TABLE + rows.file.link AS "Apartment", + rows.rent AS "Rent", + rows.sqft AS "Sq. Ft." +FROM #apartment-recon AND "Apartment Hunt/Temp Apartment 2025" +GROUP BY city +SORT rows.rent ASC +``` \ No newline at end of file diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Antelope Ridge Apartments.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Antelope Ridge Apartments.md new file mode 100644 index 0000000..2bfaecf --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Antelope Ridge Apartments.md @@ -0,0 +1,38 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 2100 +sqft: 738 +city: "Menifee" +link: "https://www.apartments.com/antelope-ridge-apartments-menifee-ca/0vgx193/" +pros: + - +cons: + - +--- + +# APT: # Antelope Ridge Apartments + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** + + +--- +### **Local Recon** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Canopy.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Canopy.md new file mode 100644 index 0000000..c7a08cd --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Canopy.md @@ -0,0 +1,66 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 2300 +sqft: 750 +city: "Murrieta" +link: "https://www.apartments.com/canopy-murrieta-ca/333bp1e/" +floorplans: + - +pros: + - +cons: + - +--- + +# APT: Canopy + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - + +### **Other Notes** +- Viewed them before +- Pet Deposit + - 500 for each +- Garage + - 100-120 per month +- 3309 + - 2200 for this exact unit + - No garage, reserved uncovered parking +- 3320 + - 2625 per month + - Top floor, corner unit +- Other units with garage + - $2435 + - No first floor +- A3 with garage + - 2365 - Non-elevator +- 7212 + - A3 Floor Plan + - 2140 + - Carport +- Elevator buildings have trash rooms +- 250 holding fee refundable fee + +### **Floor Plans** +- A1 + - 809 Square Feet +- A3 + - 754 Square Feet \ No newline at end of file diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Cantabria Apartments.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Cantabria Apartments.md new file mode 100644 index 0000000..3d16283 --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Cantabria Apartments.md @@ -0,0 +1,52 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 1980 +sqft: 968 +city: "Menifee" +link: "https://www.apartments.com/cantabria-apartments-menifee-ca/y5lre5v/" +floorplans: + - Palencia + - Santander +pros: + - +cons: + - +--- + +# APT: Cantabria Apartments + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - + +--- +### **Local Recon** +- Grocery Stores + - Ralph's < 5min + - Aldi < 5min + - Sprouts 10min +- Costco Gas + - On way to/from work +- Fastfood + - Pretty much anything I want + - Newport shopping centers 10mins + +### **Other Notes** +- \ No newline at end of file diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Delhaven Pointe.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Delhaven Pointe.md new file mode 100644 index 0000000..4df51d0 --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Delhaven Pointe.md @@ -0,0 +1,38 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 2200 +sqft: 614 +city: "Murrieta" +link: "https://www.apartments.com/delhaven-pointe-murrieta-ca/vl3vyde/" +pros: + - +cons: + - +--- + +# APT: # Delhaven Pointe + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Local Recon** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Murrieta Meadows.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Murrieta Meadows.md new file mode 100644 index 0000000..52b4698 --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Murrieta Meadows.md @@ -0,0 +1,40 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 1930 +sqft: 600 +city: "Murrieta" +link: "https://www.apartments.com/murrieta-meadows-apartments-murrieta-ca/qn34ryy/" +pros: + - Newer interior + - Close-ish to work +cons: + - Older applicances + - Smaller kitchen +--- + +# APT: Murrieta Meadows + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Local Recon** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Solaire.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Solaire.md new file mode 100644 index 0000000..db16174 --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Solaire.md @@ -0,0 +1,38 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 2100 +sqft: 756 +city: "Temecula" +link: "https://www.apartments.com/solaire-temecula-ca/mppvm1h/" +pros: + - +cons: + - +--- + +# APT: Solaire + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Local Recon** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Solana Ridge.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Solana Ridge.md new file mode 100644 index 0000000..a5ed09f --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Solana Ridge.md @@ -0,0 +1,34 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 2200 +sqft: 740 +city: "Temecula" +link: "https://www.apartments.com/solana-ridge-temecula-ca/jp4jpc7/" +pros: + - +cons: + - +--- + +# APT: # Solana Ridge + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Sycamore Terrace.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Sycamore Terrace.md new file mode 100644 index 0000000..27398e0 --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Sycamore Terrace.md @@ -0,0 +1,38 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 1950 +sqft: 725 +city: "Temecula" +link: "https://www.apartments.com/sycamore-terrace-apartments-temecula-ca/b2g7298/" +pros: + - +cons: + - +--- + +# APT: Sycamore Terrace + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Local Recon** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/The Enclave.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/The Enclave.md new file mode 100644 index 0000000..175c3c5 --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/The Enclave.md @@ -0,0 +1,38 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 1895 +sqft: 740 +city: "Menifee" +link: "https://www.apartments.com/the-enclave-at-menifee-menifee-ca/7lkcchy/" +pros: + - +cons: + - +--- + +# APT: The Enclave + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Local Recon** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - diff --git a/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Waterstone at Murrieta.md b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Waterstone at Murrieta.md new file mode 100644 index 0000000..adaaa3f --- /dev/null +++ b/_ARCHIVE/apartment_hunts/Temp Apartment 2025/Waterstone at Murrieta.md @@ -0,0 +1,38 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 1903 +sqft: 610 +city: "Murrieta" +link: "https://www.apartments.com/waterstone-at-murrieta-murrieta-ca/tj3w968/" +pros: + - +cons: + - +--- + +# APT: Untitled + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Local Recon** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - diff --git a/_ARCHIVE/assets/Go-Bag NVME.md b/_ARCHIVE/assets/Go-Bag NVME.md new file mode 100644 index 0000000..d8f8013 --- /dev/null +++ b/_ARCHIVE/assets/Go-Bag NVME.md @@ -0,0 +1,19 @@ +## Portable Apps +- 7zip +- CPU-Z +- Crystal Disk Ingo +- Crystal Disk Mark +- Firefox +- GIMP +- GPU-Z +- Inkscape +- IrfanView +- KiTTY +- LibreOffice +- Notepad++ +- On-Screen Keyboard +- RCV +- Rufus +- Spybot +- VLC +- WinDirStat \ No newline at end of file diff --git a/_ARCHIVE/bugs/BUG - 422 Bug.md b/_ARCHIVE/bugs/BUG - 422 Bug.md new file mode 100644 index 0000000..450499d --- /dev/null +++ b/_ARCHIVE/bugs/BUG - 422 Bug.md @@ -0,0 +1,43 @@ +--- +tags: + - bug + - python + - fastapi + - chiron-relay + +project: "[[chiron-relay]]" +status: Closed + +--- + +Project: [[chiron-relay]] + +#### Description +During testing an issue was found with the way that fastAPI was handling pydantic validation with html form data. This resulted in persistent 422 error codes, even with proper data that should have pass validation. + + +#### Troubleshooting Steps: +- Verify pydantic model is correct +- Verify that data matches pydantic model + - Include checking for data types and type casting +- Verify test function was sending data correctly as form data and not JSON +- Verify endpoint correctly accepted data + - Include testing with fastAPI.Depend() +- Verify Environment is correctly set up + - Ensure all dependancies are correctly installed + - Recreated venv + - Test with different versions of python + - Test on different machines +- Verify fastAPI is accepting data from testClient correctly + - Created test endpoint + - Created new test to send data to the test endpoint + +#### Implemented Solution +The final implement solution was to handle data validation for form data semi manually. Rather than let fastAPI handle the validation by dependency injection, instead manually get the form data in the endpoint function and use the pydantic model to validate the data, raising a RequestValidationError if the data is not valid. Raising the exception allows my already existing exception handling middleware to still function as designed. + + +#### Root Cause +All testing and evidence points to an issue with fastAPI's handling of dependency injection in relation to form data. + +#### Next Steps +In cases where form data needs to handled or validated its highly recommended to follow the above Implement Solution and use `await request.form()` to access form data and then create an instance of the required pydantic model to handle validation. Error handling for this should raise RequestValidationError inline with how fastAPI typically handles data validation issues \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-18.md b/_ARCHIVE/daily_logs/2025-06-18.md new file mode 100644 index 0000000..1b60f2e --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-18.md @@ -0,0 +1,17 @@ +#### Today's Plans +- Setup my Obsidian Note Vault +- Create and fill out notes for the twilio email bridge project +- Get NVME set up +- Make grocery list for tomorrow + +#### What I Did Today +- I set up my Obsidian Note Vault + - Created [[the_bug_board]] and [[TPL_bug_report]] + - Create [[project_index]] and [[Project_Main_Page_Template]] +- I tested my NVME enclosure to make sure it works +- I formatted my NVME as exFAT to use in the future. + +#### What I Learned Today +- Obsidian templater formating and syntax +- Dataview tables and how to use them +- Obsidian Buttons and how to create file and directory structure with them and templater \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-19.md b/_ARCHIVE/daily_logs/2025-06-19.md new file mode 100644 index 0000000..5039ac0 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-19.md @@ -0,0 +1,25 @@ +#### Today's Plans +- Clean out fridge and freezer +- Make grocery list +- Go shopping +- Integration test for twilio webhook + - Test it with actual web http requests. +- Scope out and plan email sending logic + - Should accept extracted twilio message date + - Create a decent looking email + - Set reply-to field + - email to my email + - email address saved in environment variables +- Create custom ISO for windows + +#### What I Did Today +- Cleaned out the fridge and freezer +- Made a shopping list + - Placed walmart order + - Got my walmart order +- Finished logic for twilio webhook in regards to receiving and processing data +- Did integration testing to valid webhooks are received and processed correctly + +#### What I Learned Today +- Overnight oats recipe +- Proper way to handle formdata in regards to twilio request validation \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-20.md b/_ARCHIVE/daily_logs/2025-06-20.md new file mode 100644 index 0000000..e273949 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-20.md @@ -0,0 +1,27 @@ +#### Today's Plans +- [x] 🔼 Obsidian Add-ons + - [x] 🔼 Create templates + - [x] 🔼 Recipes + - [x] 🔼 Weekly Meal Plans + - [x] 🔼 Recipe List +- [x] 🔼 Logging pass on twilio-webhook and logic (Might move to tomorrow) +- [x] ⏫ Get Icepack and bananas + +#### What I Did Today +- Updated Obsidian with recipes and Weekly Meal plans + - New [[TPL_recipe|Recipe Template]] + - New [[recipe_list]] + - New [[weekly_meals_template|Weekly Meal Plan Template]] +- Added new Dashboard to Obsidian + - [[01_Daily_Tasks]] + - [[02_Work_Daily_Tasks]] + - [[03_This_Weeks_Meals]] + - [[04_This_Weeks_Shopping]] + +#### What I Learned Today +- How to use python with Obsidian Templates + - This will be a future planned project +- How to make dashboard pages in Obsidian +- A few new recipes to try out. +- Better ways to organize Misc notes + - This will be a mini-project soon \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-21.md b/_ARCHIVE/daily_logs/2025-06-21.md new file mode 100644 index 0000000..6d82049 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-21.md @@ -0,0 +1,5 @@ +#### Today's Plans + +#### What I Did Today + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-22.md b/_ARCHIVE/daily_logs/2025-06-22.md new file mode 100644 index 0000000..6d82049 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-22.md @@ -0,0 +1,5 @@ +#### Today's Plans + +#### What I Did Today + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-23.md b/_ARCHIVE/daily_logs/2025-06-23.md new file mode 100644 index 0000000..35e04e1 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-23.md @@ -0,0 +1,18 @@ +#### Today's Plans +- [x] Laptop Battery Replacement +- [x] Courtney Laptop stuff +- [x] Plan out decision logic for twilio email bridge ✅ 2025-06-23 +- [x] Create readme for email bridge ✅ 2025-06-23 +- [x] make repo public ✅ 2025-06-23 +- [x] laundry! +- [x] update project notes ✅ 2025-06-24 + +#### What I Did Today +- Created the [[Projects/Twilio Email Bridge/01_README|01_README]] for the Twilio Bridge Project +- Set up test suite for first part of decision logic [Commit 7e21cb4](https://github.com/redjordan1202/twilio-email-bridge/commit/7e21cb45ab4e82b20f480e6922bfea4a54752806) +- Battery ordered for Courtney's laptop + +#### What I Learned Today +- How to write a good readme file for a directory +- Test First Development - Writing all tests before any development +- A few ideas for a good ticketing system. \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-24.md b/_ARCHIVE/daily_logs/2025-06-24.md new file mode 100644 index 0000000..d48489f --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-24.md @@ -0,0 +1,15 @@ +#### Today's Plans +- [x] Ticket Template ✅ 2025-06-24 +- [x] Redo decision logic (do at home) +- [x] Check on batteries ✅ 2025-06-24 +- [x] Make ticketing system ✅ 2025-06-24 +- [x] Actually do laundry +- [x] Gas and carwash by old apartment + +#### What I Did Today +- Informed Jean of the deadline for the 1st for plane tickets +- Got the batteries for Mabel and Kris' laptops +- Created new [[TPL_ticket|Ticket Template]] for making tickets +- Also made new dashboards for [[01_personal_tickets|Personal Tickets]] and [[02_work_tickets|Work Tickets]] + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-25.md b/_ARCHIVE/daily_logs/2025-06-25.md new file mode 100644 index 0000000..0374c0d --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-25.md @@ -0,0 +1,9 @@ +#### Today's Plans +- [x] Replace Batteries +- [x] Work on Courtney's laptop +- [x] Acutally work on the decision logic today +- [x] Laudry! + +#### What I Did Today + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-26.md b/_ARCHIVE/daily_logs/2025-06-26.md new file mode 100644 index 0000000..9bd0a8c --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-26.md @@ -0,0 +1,20 @@ +#### Today's Plans +- [x] Create tickets for next set of modules +- [x] Finish Courtney's laptop stuff + - [x] Might need to ship it waiting on update from Courtney +- [x] Create tickets for work items +- [x] Create branch for email sender +- [x] Start Planning for email sender + +#### What I Did Today +- Created new tickets for next modules to work on + - [[TICKET-003 - Create Email Sender]] + - [[TICKET-004 - Create SMS Sender]] + - [[TICKET-005 - Creat Discord Sender]] +- Finished working on [[TICKET-001 - Courtney Laptop]] + - Will need to ship tomorrow + +#### What I Learned Today +- That USB-Can devices are dumb +- That I should do proper semantic versioning for my project even if its personal +- Why getting my mind organized also makes me want to organize the rest of my life \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-06-27.md b/_ARCHIVE/daily_logs/2025-06-27.md new file mode 100644 index 0000000..ec7a850 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-06-27.md @@ -0,0 +1,12 @@ +#### Today's Plans +- [x] Write Elizabeth +- [x] Get Tests written for email sender +- [x] Setup service account + - [x] Make service account + - [x] Give it gmail access +- [x] Create group for chiron-relay +- [x] Setup folder for archive of notes I've sent to Elizabeth + +#### What I Did Today + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-01.md b/_ARCHIVE/daily_logs/2025-07-01.md new file mode 100644 index 0000000..140e4d1 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-01.md @@ -0,0 +1,14 @@ +#### Today's Plans +- [x] Ship Courtney's Laptop +- [x] Work on email sender + - [x] Finish builder logic + - [x] At least start sending logic +- [x] ~~Trash bag today~~ Trash cans at curb, can't do +- [x] ~~Make shopping list for tomorrow~~ +- [x] ~~Litter and Kitty food on way home today~~ Fire issues, waiting till tomorrow + +#### What I Did Today +- Created email builder logic (Committing tomorrow after final end to end test) +- Shipped Courtney's laptop + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-02.md b/_ARCHIVE/daily_logs/2025-07-02.md new file mode 100644 index 0000000..18c2521 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-02.md @@ -0,0 +1,11 @@ +#### Today's Plans +- [x] Make shopping list for tomorrow +- [x] Get litter and kitty food +- [x] Plan out tests for send email method +- [x] trash bag for the day! +- [x] Write Elizabeth about texas +- [x] Set up app script for forwarding emails from redjordan123@gmail.com +- [x] Clean office desk +#### What I Did Today + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-03.md b/_ARCHIVE/daily_logs/2025-07-03.md new file mode 100644 index 0000000..c4ceba4 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-03.md @@ -0,0 +1,12 @@ +#### Today's Plans +- [x] Prep go-bag nvme +- [x] install psu, fans and nvme +- [x] dust computer +- [x] bring home air duster +- [x] plan out knowledge base and video guides +- [x] Ship Matthew's computer. + - [x] Must arrive saturday + +#### What I Did Today + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-07.md b/_ARCHIVE/daily_logs/2025-07-07.md new file mode 100644 index 0000000..6f001dc --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-07.md @@ -0,0 +1,15 @@ +#### Today's Plans +- [x] Set up alert alarms + - [x] Clock in, lunch, lunch in, clock out + - [x] obsidian note things. +- [x] Work on Knowledge base +- [x] ~~(At Home) Work on email sender logic~~ Didn't commit on work laptop + +#### What I Did Today +- Created three knowledge base articles for work +- Set up alerts using tasker + +#### What I Learned Today +That I should always commit even wip ones lol +Tasker is hard lol +But I did make a simple daytime routine set up in tasker for work. So we will see if it works. \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-08.md b/_ARCHIVE/daily_logs/2025-07-08.md new file mode 100644 index 0000000..ddc963c --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-08.md @@ -0,0 +1,12 @@ +#### Today's Plans +- [x] Commit my email sender work so I can work on it at home +- [x] Write the tests for the sending function +- [x] write up telnyx stuff for the meeting tomorrow +- [x] work on knowledge base + +#### What I Did Today +- committed current email sender class work [Commit 8c03320](https://github.com/redjordan1202/twilio-email-bridge/commit/8c033202c1f62cc526c840dd73913cfdae81aa03) +- Wrote handful of knowledge base articles. (No links at this time) + +#### What I Learned Today +- Proper way to export and format knowledge base articles for longer term storage in my storage vault. \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-10.md b/_ARCHIVE/daily_logs/2025-07-10.md new file mode 100644 index 0000000..63c5bfb --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-10.md @@ -0,0 +1,9 @@ +#### Today's Plans +- [x] Work on knowledge base +- [x] Find laptops for Kris and Mabel +- [x] Work on email sender at home +- [x] glasses appointment at 4:30 + +#### What I Did Today + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-13.md b/_ARCHIVE/daily_logs/2025-07-13.md new file mode 100644 index 0000000..6d82049 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-13.md @@ -0,0 +1,5 @@ +#### Today's Plans + +#### What I Did Today + +#### What I Learned Today \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-14.md b/_ARCHIVE/daily_logs/2025-07-14.md new file mode 100644 index 0000000..29e42f7 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-14.md @@ -0,0 +1,21 @@ +#### Today's Plans +- [x] Work on knowledge base [priority::3] +- [x] Write up shopping list for this week[priority::2] +- [x] Work on email sending logic today[priority::2] + - [x] Very least plan out the tests. +- [x] Fix up work note template [priority::1] +- [x] Email Kelsey about her tickets (this will prob need a ticket) [priority::3] +- [x] Check with Brock about the sales commission ticket in Jira [priority::3] + + + +Notes +Elizabeth Schedule +tomorrow fight fire +thursday personel inspection pride run +Friday morning calling to tell me shes a sailor dc olympics +Sunday phone call 2pm my time +monday pick up photos + +cough drops +ear plugs diff --git a/_ARCHIVE/daily_logs/2025-07-15.md b/_ARCHIVE/daily_logs/2025-07-15.md new file mode 100644 index 0000000..ad78514 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-15.md @@ -0,0 +1,3 @@ +#### Today's Plans +- [x] Kelsey Meeting [priority::3] +- [x] Buy body wash [priority::3] \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-16.md b/_ARCHIVE/daily_logs/2025-07-16.md new file mode 100644 index 0000000..e8978ab --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-16.md @@ -0,0 +1,6 @@ +#### Today's Plans +- [x] Order stuff for Elizabeth + - [x] Cough drops like way too many of them + - [x] Ear plugs +- [x] Get Apartment template setup +- [x] Start researching apartments \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-17.md b/_ARCHIVE/daily_logs/2025-07-17.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-17.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-18.md b/_ARCHIVE/daily_logs/2025-07-18.md new file mode 100644 index 0000000..56b876e --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-18.md @@ -0,0 +1,5 @@ +#### Today's Plans +- [x] Buy Travel deodorant +- [x] Get new belt +- [x] Pack +- [x] Trash Bag tonight \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-19.md b/_ARCHIVE/daily_logs/2025-07-19.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-19.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-21.md b/_ARCHIVE/daily_logs/2025-07-21.md new file mode 100644 index 0000000..f5a0d4d --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-21.md @@ -0,0 +1,7 @@ +#### Today's Plans +- [x] Update Tickets +- [x] Write onboarding and offboarding guides +- [x] download games +- [x] Backup SD Card if my dock has a micro sd port. +- [x] If not just download a firmware and see if it works lol +- [x] \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-22.md b/_ARCHIVE/daily_logs/2025-07-22.md new file mode 100644 index 0000000..817b6b3 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-22.md @@ -0,0 +1,3 @@ +#### Today's Plans +- [x] Nathan Hale laptop + - [x] Talk to Vout to see if he even needs a laptop and what the plan is \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-24.md b/_ARCHIVE/daily_logs/2025-07-24.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-24.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-25.md b/_ARCHIVE/daily_logs/2025-07-25.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-25.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-27.md b/_ARCHIVE/daily_logs/2025-07-27.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-27.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-28.md b/_ARCHIVE/daily_logs/2025-07-28.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-28.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-30.md b/_ARCHIVE/daily_logs/2025-07-30.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-30.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-07-31.md b/_ARCHIVE/daily_logs/2025-07-31.md new file mode 100644 index 0000000..e21ee22 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-07-31.md @@ -0,0 +1 @@ +#### Today's Plans \ No newline at end of file diff --git a/_ARCHIVE/daily_logs/2025-08-04.md b/_ARCHIVE/daily_logs/2025-08-04.md new file mode 100644 index 0000000..8e452a3 --- /dev/null +++ b/_ARCHIVE/daily_logs/2025-08-04.md @@ -0,0 +1,5 @@ +#### Today's Plans +- [x] Commit changes for prod dev [priority:: 1] +- [x] Create ticket for prod development [priority:: 1] +- [x] Create PR for prod development [priority:: 1] +- [ ] Plan out Discord sender [priority:: 3] \ No newline at end of file diff --git a/_ARCHIVE/gyudon_beef.md b/_ARCHIVE/gyudon_beef.md new file mode 100644 index 0000000..e69de29 diff --git a/_ARCHIVE/homelab/Build Out/Build Out Planning.md b/_ARCHIVE/homelab/Build Out/Build Out Planning.md new file mode 100644 index 0000000..5497e65 --- /dev/null +++ b/_ARCHIVE/homelab/Build Out/Build Out Planning.md @@ -0,0 +1,6 @@ +## Objectives + +- Setup Primary Proxmox server +- Setup File Server + - Migrate drives from old server to new server + - Set up \ No newline at end of file diff --git a/_ARCHIVE/homelab/Naming Scheme.md b/_ARCHIVE/homelab/Naming Scheme.md new file mode 100644 index 0000000..3bbec22 --- /dev/null +++ b/_ARCHIVE/homelab/Naming Scheme.md @@ -0,0 +1,38 @@ + +## What is a naming scheme? +A naming scheme is a simple concept, a set of rules used when naming something. It dictates easy to remember and easy to recognize names for all devices. A naming scheme doesn't need to be complex. You can have names as simple as Laptop-001, Desktop-001, Server-001 etc. What matters is having a consistent pattern of names that you and your team all understand. + +## Why use a naming scheme for a homelab? +A naming scheme for a homelab may seem overkill. In theory, if you're the only one setting up the lab you will know all the random hostnames that are either auto generated by the OS or you'll remember the hostname that you gave your workstation. + +For a lot of user's thats true, especially in a situation where your set up is simple such as a single NAS. But as you add more devices having a standard way to name devices make overall management easier. It also allows you to know info about a device simply looking at its hostname. Using a simple example hostname like Laptop-001, you know right away that this device is a laptop. Based on that info alone you can already know a bit of information about the device. Its probably not connected to ethernet, its probably connected to wifi, you may know the general OS based on the inventory of laptops you have. + +Naming schemes let you build information into hostname name of a device and gives you a clean neat way of organizing your devices. + +## My naming scheme +I knew I wanted a naming scheme, but I had no idea what I wanted to do. I wanted a scheme that lets me have a few different categories. +- Servers +- Virtual Machines +- Workstations +- Laptops +- Mobile devices (Phones, ROG Ally, etc) + +After going through a few different ideas I settled on something that gives me all the info I wanted, and lets me have something related to something I really like, the Halo Universe +Lets break down the naming scheme a little bit. Obviously this might change a bit as I actually set up devices, but this is the framework for what I want. + +>[info] +>This section obviously talks a lot about topics related to Halo lore. +>Even if you don't know Halo lore the concepts behind the naming scheme can apply to any other naming scheme you may use. + +### Severs +I wanted to give my servers names that showcase their foundational importance to my homelab so I decided to name them after the most important Forerunner installations; the Ark and the Halos themselves + +- 00-ARK - Primary ProxMox Box +- 01-BETA - OPNSense Router +- 02-EPSILON - VPN Server +- 03-GAMMA - Network monitoring server + +This naming scheme gives me 8 total names to use, which for my current final vision for my home lab is more than I will need. + +### Virtual Machines +To me VMs are the systems that take care of the servers. That handle most of the heavy lifting, and take care of running everything from services, to monitoring and even maintenance. diff --git a/_ARCHIVE/meeting_notes/Automated Report Review.md b/_ARCHIVE/meeting_notes/Automated Report Review.md new file mode 100644 index 0000000..2d40265 --- /dev/null +++ b/_ARCHIVE/meeting_notes/Automated Report Review.md @@ -0,0 +1,50 @@ +--- +tags: + - meeting-note +meeting_date: 2025-08-06 +project: +attendees: + - +--- + +# MEETING: Untitled + +### **Primary Objective(s)** +*A one-sentence summary of why this stupid meeting was called.* +- Wants to automate a few things with reports + +--- + +### **General Notes** +- wants to automate sending reports to a distro list when they hit her email +- look into report subscription limit + - Maybe see if there is a different way to send out reports without subscribing to the report to bypass limit + - Looks like we are going to subscribe Brittany to the reports +- Turf Designs Tucson Open Work Orders + - Currently sent by Myra every day + - 3 pm + - Goes to Dwayne - Need his email + - after it hits Myra +- Inventory Report + - Every week on Friday + - 3pm + - Also to Dwayne +- FTL + - Daily to Brittany and Dwayne +- Send all of them the formatted report in excel format + + +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`cue` | `note` | + + +--- + +### **Final Summary** +*A 1-2 sentence summary of the outcome of the meeting.* +- \ No newline at end of file diff --git a/_ARCHIVE/meeting_notes/BRT Equipment Management.md b/_ARCHIVE/meeting_notes/BRT Equipment Management.md new file mode 100644 index 0000000..decef6f --- /dev/null +++ b/_ARCHIVE/meeting_notes/BRT Equipment Management.md @@ -0,0 +1,13 @@ +## Field Reps +- iPad (refurb) + - Shipped directly to employee + - Employee creates their own iCloud account + - Says they don't need management just want an iCloud account so we can reset them + - 13-15 current devices +- Moasure Puck + - Shipped to Ian who provides to employee + + +### Action Items +- Upload serial numbers to jira +- Get equipment forms for everyone that doesn't have one already. \ No newline at end of file diff --git a/_ARCHIVE/meeting_notes/Biltright - HubSport Intro.md b/_ARCHIVE/meeting_notes/Biltright - HubSport Intro.md new file mode 100644 index 0000000..2cf8a05 --- /dev/null +++ b/_ARCHIVE/meeting_notes/Biltright - HubSport Intro.md @@ -0,0 +1,36 @@ +--- +tags: + - meeting-note +meeting_date: 2025-07-28 +project: +attendees: + - "Kyle Georgian" + - "Jazzy Ortega" + - "James Kempthorn" + - "Ian Heptinstall" + - "Laina Salerno" + - "Brian Mullaney" + - "Kora Nwaogu" +--- + +# MEETING: Untitled + +### **Primary Objective(s)** +Meeting to go over moving Biltright from Zoho to Hubspot + +--- + +### **General Notes** +- +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`cue` | `note` | + + +--- + +### **Final Summary** diff --git a/_ARCHIVE/meeting_notes/Call System Review.md b/_ARCHIVE/meeting_notes/Call System Review.md new file mode 100644 index 0000000..a165df5 --- /dev/null +++ b/_ARCHIVE/meeting_notes/Call System Review.md @@ -0,0 +1,74 @@ +--- +tags: + - meeting-note +meeting_date: 2025-08-19 +project: "3cx" +attendees: + - "Ty" + - "Kelsey" + - "Dillon" + - "Jazzy" +--- + +# MEETING: Untitled + +### **Primary Objective(s)** +*A one-sentence summary of why this stupid meeting was called.* +- + +--- + +### **General Notes** +- Callbacks + - Off by default + - Has 2 activation options + - Caller activated (Press 2 for call back) + - Timeout based (Offers call back to caller after set time) + - Works by adding a call to the queue when an rep is available + - This means the call is subject to the same timeout as other calls + - For example if the queue has a 60 second timeout, then if the rep assigned the call back doesn't "pick up" it'll drop the call back + - Note sure what happens after that, but seems like the call back just disappears and the user doesn't get another one +- Call routing and voicemails + - AGL Call Flows + - Auto attendants + - New AGL Main + - Primary AA for AGL calls + - Numbers on the website and on google search results + - gives customers region based options + - SoCal, NorCal, Vegas, South Florida, other + - Other routes them to either the AGL all reps or the AGR National queue based on what they are looking for + - Call queues + - Showrooms + - All show rooms have their own call queues with reps from that showroom in it + - Regions + - The regions that you can reach from the Main AA + - SoCal, NorCal, Vegas, South Florida + - These have reps from those regions in them, typically from different showrooms in that region if there are more than one. + - AGL All reps + - Used as a catch all queue if user is not in a region we have a call queue for + - All queue set to Ring All reps at once when a call comes in. + - All AGL call queues follow a similar structure for missed calls + - After a set period, typically around 30 seconds if the customer has not connected to a rep they are sent to the SSA AGL call queue + - the SSA call queue also has a timeout of about 30 seconds, after which SSA will get a voicemail emailed to one of their group mailboxes + - Most call queues are set to either Hunt Random Start or Round Robin for the call distribution method + - Hunt Random Start - Picks a rep randomly in the list of reps to start, and then goes down the list from there. + - Round Robin - Starts at rep 1 on the list and goes down the list till it finds someone. Once the next call comes in it will start at the person next on the list and then keep going down, cycling through the list +- Distro List voicemails + - Much easier to just use a user account for that. + - Also allows us to set a custom voicemail message for that "user" so we can have custom voice mail messages play. + +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`Make Flow Charts of the Call queues` | `Need new flowcharts for the flow of calls on 3CX to see how all the calls are routed` | +|`Cafateria Creative` |`Remove CC phone number as it only gets fax calls right now` | + + +--- + +### **Final Summary** +*A 1-2 sentence summary of the outcome of the meeting.* +- \ No newline at end of file diff --git a/_ARCHIVE/meeting_notes/DG Moonlight Sync.md b/_ARCHIVE/meeting_notes/DG Moonlight Sync.md new file mode 100644 index 0000000..d7cd228 --- /dev/null +++ b/_ARCHIVE/meeting_notes/DG Moonlight Sync.md @@ -0,0 +1,38 @@ +--- +tags: + - meeting-note +meeting_date: 2025-07-21 +project: +attendees: + - +--- + +# MEETING: Untitled + +### **Primary Objective(s)** +Meet with moonlight who I guess is going to be on call while i'm gone in Chicago + +--- + +### **General Notes** +- They'll need accounts + - M365 + - Active Directory + - Screen Connect +- support@moonlighttechs.com - Their support email address to send tickets to +- phone number 951-599-7638 + +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`Send Jazzy account info` | `Need to setup M365, AD and screenconnect accounts for them` | + + +--- + +### **Final Summary** +Resetting password to helixstorm's old accounts. +Setting up forwarding rule for 2FA codes for screenconnect \ No newline at end of file diff --git a/_ARCHIVE/meeting_notes/FSM Meeting.md b/_ARCHIVE/meeting_notes/FSM Meeting.md new file mode 100644 index 0000000..6da1e2e --- /dev/null +++ b/_ARCHIVE/meeting_notes/FSM Meeting.md @@ -0,0 +1,40 @@ +--- +tags: + - meeting-note +meeting_date: 2025-08-26 +project: +attendees: + - +--- + +# MEETING: Untitled + +### **Primary Objective(s)** +- To go over Field Service Management setup + +--- + +### **General Notes** +- Assets + - Anything we work on + - Rolls, accessories etc +- Case + - Work orders +- Tasks + - things done to a case +- Projects + - Grouping of cases to track things like processing time profit etc +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`cue` | `note` | + + +--- + +### **Final Summary** +*A 1-2 sentence summary of the outcome of the meeting.* +- \ No newline at end of file diff --git a/_ARCHIVE/meeting_notes/Ian James Kyle Jazzy Tech Stack.md b/_ARCHIVE/meeting_notes/Ian James Kyle Jazzy Tech Stack.md new file mode 100644 index 0000000..788e99e --- /dev/null +++ b/_ARCHIVE/meeting_notes/Ian James Kyle Jazzy Tech Stack.md @@ -0,0 +1,50 @@ +--- +tags: + - meeting-note +meeting_date: 2025-07-21 +project: BRT Zoho +attendees: + - Kyle Georgian + - James Kempthorne + - Ian Heptinstall + - Jazzy Ortega +--- + +# MEETING: Ian James Kyle Jazzy Tech Stack + +### **Primary Objective(s)** +Reviewing overall tech stacks with BRT and finding ways to streamline their systems. + +--- + +### **General Notes** +- Want - work out of both teams and google calendar for a bit while people get used to it + - ICS link is the best for this, but its a slow sync and won't be great for things created in real-time +- Wants their own hubspot subscription + - Not a bad idea makes everything totally separate +- Leaning towards zoho still + - Already set up + - Cheaper + - can move things from hubspot to zoho + - Affiliate dashboard +- New employess get a regular gmail account (Terrible idea) + - Used for Calendly and shared google drives + - Google drive needs to move to sharepoint 100% +- Smartsheets handles some of the forms they send out + - We could easily set this up with excel, but both BRT and Jazzy seem hesitant to do that. +- + +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`cue` | `note` | + + +--- + +### **Final Summary** +*A 1-2 sentence summary of the outcome of the meeting.* +- \ No newline at end of file diff --git a/_ARCHIVE/meeting_notes/Onboarding Readiness Call.md b/_ARCHIVE/meeting_notes/Onboarding Readiness Call.md new file mode 100644 index 0000000..75fed6f --- /dev/null +++ b/_ARCHIVE/meeting_notes/Onboarding Readiness Call.md @@ -0,0 +1,39 @@ +--- +tags: + - meeting-note +meeting_date: 2025-07-29 +project: +attendees: + - +--- + +# MEETING: Onboarding Readiness Call + +### **Primary Objective(s)** +Something about onboarding I'm sure lol + + +--- + +### **General Notes** +- Measuring puck - pro refurbished ones +- iPad 10 or newer - amazon A16 model + - Keyboard cases + - iPad to HDMI + - Log them into and download apps that they need + - Give Ian their password sheet ahead of time so they can get logged into their email for verification codes. + +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`cue` | `note` | + + +--- + +### **Final Summary** +*A 1-2 sentence summary of the outcome of the meeting.* +- \ No newline at end of file diff --git a/_ARCHIVE/meeting_notes/TD Netsuite Project Kickoff.md b/_ARCHIVE/meeting_notes/TD Netsuite Project Kickoff.md new file mode 100644 index 0000000..2071edf --- /dev/null +++ b/_ARCHIVE/meeting_notes/TD Netsuite Project Kickoff.md @@ -0,0 +1,33 @@ +--- +tags: + - meeting-note +meeting_date: 2025-08-21 +project: "Netsuite Migration" +attendees: + - +--- + +# MEETING: Untitled + +### **Primary Objective(s)** +*A one-sentence summary of why this stupid meeting was called.* +- + +--- + +### **General Notes** + +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`cue` | `note` | + + +--- + +### **Final Summary** +*A 1-2 sentence summary of the outcome of the meeting.* +- \ No newline at end of file diff --git a/_ARCHIVE/misc_notes/3CX Extensions.md b/_ARCHIVE/misc_notes/3CX Extensions.md new file mode 100644 index 0000000..b0e7dce --- /dev/null +++ b/_ARCHIVE/misc_notes/3CX Extensions.md @@ -0,0 +1,13 @@ +| Extension | Name | Type | Notes | +| --------- | ------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| HOL | Out of office IVR | AA | Not Used by anything. Uses default 3CX out of office message | +| 10700 | TD Open Line Night | AA | No Assigned Numbers. Generic out of office message recorded by us | +| 10701 | TD - Accounting Night | AA | No Assigned Numbers. Generic out of office message recorded by us | +| 10702 | TD - Business Admin Night | AA | No Assigned Numbers. Generic out of office message recorded by us | +| 10703 | TD SSA Night | AA | No Assigned Numbers. Generic out of office message recorded by us | +| 10801 | TD - Accounting | AA | Generic Greeting. Sends Directly to 10810 TD Accounting Queue | +| 10802 | TD - Business Admin | AA | Option 1 goes to TD Accounting Queue. Option 4 goes to asset tag number | +| 10803 | TD SSA | AA | Spanish option prompt. Option 8 goes to 10TD Spanish Queue. No Option goes 10812 TD SSA Queue | +| 10804 | Tech Support | AA | Greeting Message. Sends directly to 10010 Tech Support User Voicemail | +| 10809 | HR Main Line | AA | HR greeting message. Option 1 goes to 10820 Absences Hotline. Option 2 goes to 10829 HR Ring Group. No option goes to 10829 HR Ring Group | +| 10834 | New AGL Main | AA | AGL Region based message. Opton | diff --git a/_ARCHIVE/misc_notes/Conflict Fix.md b/_ARCHIVE/misc_notes/Conflict Fix.md new file mode 100644 index 0000000..660fc1d --- /dev/null +++ b/_ARCHIVE/misc_notes/Conflict Fix.md @@ -0,0 +1,4 @@ +1. Open note vault directory in terminal +2. `'bash git merge -abort` +3. `'bash git reset --hard origin/main` +4. `'bash git pull` \ No newline at end of file diff --git a/_ARCHIVE/misc_notes/Games to check out.md b/_ARCHIVE/misc_notes/Games to check out.md new file mode 100644 index 0000000..0a265ff --- /dev/null +++ b/_ARCHIVE/misc_notes/Games to check out.md @@ -0,0 +1,92 @@ +### Looter-Shooters & ARPGs + +**Note:** Performance on the ROG Ally often requires setting the device to a higher wattage mode (e.g., 25-30W) and using in-game upscaling like FSR or XeSS on "Performance" or "Ultra Performance" settings to hit a stable 45-60 FPS. + +#### Looter-Shooters (First/Third-Person) + +- **The Division 2** + + - **One-Liner:** A realistic, modern military cover shooter with an incredibly deep loot and build-crafting system set in Washington D.C. + + - **Price:** ~$29.99 (Often on deep sale) + + - **Platform:** Steam, Ubisoft Connect + + - **Release Date:** Mar 15, 2019 + + - **ROG Ally Performance:** Good. Plays well on medium/low settings. + + - **Linux Performance (ProtonDB):** [Gold](https://www.protondb.com/app/2221490). Runs great, but may require a specific Proton version or a minor tweak to get past the Ubisoft launcher. + +- **Outriders** + + - **One-Liner:** A brutal sci-fi shooter that forces aggressive, power-fantasy gameplay, with loot focused on enhancing your abilities. + + - **Price:** ~$19.99 + + - **Platform:** Steam + + - **Release Date:** Apr 1, 2021 + + - **ROG Ally Performance:** Good. Requires low/medium settings for a stable frame rate. + + - **Linux Performance (ProtonDB):** [Silver](https://www.protondb.com/app/680420). Works well but can have some stuttering or requires tweaks. + +- **Remnant II** + + - **One-Liner:** A challenging "Soulslike with guns" featuring procedurally generated worlds and a focus on unique weapon mods over constant loot drops. + + - **Price:** ~$49.99 + + - **Platform:** Steam + + - **Release Date:** Jul 25, 2023 + + - **ROG Ally Performance:** Demanding. Requires low settings and upscaling (FSR) to be playable. + + - **Linux Performance (ProtonDB):** [Gold](https://www.protondb.com/app/1282100). Runs very well, especially with GE-Proton. + + +#### ARPGs (Top-Down/Isometric) + +- **Warhammer 40,000: Inquisitor - Martyr** + + - **One-Liner:** A "Diablo in space" set in a brutal, gothic sci-fi universe with massive hordes of enemies and deep character customization. + + - **Price:** ~$49.99 + + - **Platform:** Steam + + - **Release Date:** Jun 5, 2018 + + - **ROG Ally Performance:** Playable, but not well optimized. May require some tweaking for controller support and text can be small. + + - **Linux Performance (ProtonDB):** [Gold](https://www.google.com/search?q=https://www.protondb.com/app/527430&authuser=1). Runs very well out of the box. + +- **The Ascent** + + - **One-Liner:** A visually stunning cyberpunk twin-stick shooter ARPG with fast, visceral combat and a focus on cybernetic augmentations. + + - **Price:** ~$29.99 + + - **Platform:** Steam + + - **Release Date:** Jul 29, 2021 + + - **ROG Ally Performance:** Excellent. Runs very smoothly on the Ally. + + - **Linux Performance (ProtonDB):** [Native](https://www.protondb.com/app/979690). Has a native Linux version that runs well. + +- **Grim Dawn** + + - **One-Liner:** A massive, critically-acclaimed ARPG in a Victorian/Lovecraftian post-apocalypse with one of the deepest class systems ever made. + + - **Price:** ~$24.99 (Base Game) + + - **Platform:** Steam + + - **Release Date:** Feb 25, 2016 + + - **ROG Ally Performance:** Playable, but the UI and controls can be difficult to manage on a small screen without tweaking. + + - **Linux Performance (ProtonDB):** [Platinum](https://www.google.com/search?q=https://www.protondb.com/app/219990&authuser=1). Runs perfectly out of the box. \ No newline at end of file diff --git a/_ARCHIVE/misc_notes/Naming Scheme.md b/_ARCHIVE/misc_notes/Naming Scheme.md new file mode 100644 index 0000000..f0dce10 --- /dev/null +++ b/_ARCHIVE/misc_notes/Naming Scheme.md @@ -0,0 +1,48 @@ +## Tier 0: Forerunner Constructs (Primary Servers) + +These are the foundational, high-power machines of your lab. + +- **Proxmox Host (Ryzen Server):** `00-ARK` + +- **Unraid NAS (Inspiron Server):** `000-FOUNDRY` + + +--- + +## Tier 1: The Monitors (24/7 Infrastructure Fleet) + +These are your dedicated, low-power mini PCs running core network services. + +- **OPNsense Firewall:** `343-GUILTY-SPARK` + +- **Pi-hole / DNS Server:** `2401-PENITENT-TANGENT` + +- **Headscale / VPN Server:** `049-ABJECT-TESTAMENT` + +- **Nginx Proxy Manager:** `032-MENDICANT-BIAS` + + +--- + +## Tier 2: UNSC Capital Ships (Static Workstations) + +These are your powerful, stationary client machines. + +- **Your Battlestation:** `UNSC-PILLAR-OF-AUTUMN` + +- **Wife's PC:** (e.g., `UNSC-SPIRIT-OF-FIRE`) + + +--- + +## Tier 3: The Covenant Fleet (Mobile Devices) + +These are your roaming devices that connect remotely. + +- **Work Laptop:** `SHADOW-OF-INTENT` + +- **ROG Ally:** `LONG-NIGHT-OF-SOLACE` + +- **Phone:** `PHANTOM` + + diff --git a/_ARCHIVE/misc_notes/Realm Notes.md b/_ARCHIVE/misc_notes/Realm Notes.md new file mode 100644 index 0000000..0a861b3 --- /dev/null +++ b/_ARCHIVE/misc_notes/Realm Notes.md @@ -0,0 +1,217 @@ + +# Crafting Recipes + +### **1. The Blaze Rod (The End-Game Key)** + +This is the most important one. It's the absolute hard-lock on peaceful progression. The recipe needs to feel earned and require a trip to the Nether. + +- **The Recipe Logic:** We're combining a material forged in the Nether (`Nether Brick`), a valuable and conductive material (`Gold Ingot`), and a source of intense, contained heat (`Magma Block`). + +- **Crafting Grid:** + + ``` + [ Magma Block ] + [ Gold Ingot ] + [ Nether Brick ] + ``` + + _Result: 1 Blaze Rod_ + +- **JSON Code (`blaze_rod.json`):** + + JSON + + ``` + { + "type": "minecraft:crafting_shaped", + "pattern": [ + "M", + "G", + "N" + ], + "key": { + "M": { + "item": "minecraft:magma_block" + }, + "G": { + "item": "minecraft:gold_ingot" + }, + "N": { + "item": "minecraft:nether_brick" + } + }, + "result": { + "item": "minecraft:blaze_rod" + } + } + ``` + + +--- + +### **2. The Ender Pearl** + +The second key to the End. This recipe should feel magical and rare, reflecting the pearl's mysterious nature. + +- **The Recipe Logic:** Combining a rare crystalline gem (`Diamond`), a block associated with portals and dark places (`Obsidian`), and the newly introduced magical crystal (`Amethyst Shard`). + +- **Crafting Grid:** + + ``` + [ Obsidian ] [ Amethyst Shard ] [ Obsidian ] + [ Amethyst Shard ] [ Diamond ] [ Amethyst Shard ] + [ Obsidian ] [ Amethyst Shard ] [ Obsidian ] + ``` + + _Result: 1 Ender Pearl_ + +- **JSON Code (`ender_pearl.json`):** + + JSON + + ``` + { + "type": "minecraft:crafting_shaped", + "pattern": [ + "OPO", + "PDP", + "OPO" + ], + "key": { + "O": { + "item": "minecraft:obsidian" + }, + "P": { + "item": "minecraft:amethyst_shard" + }, + "D": { + "item": "minecraft:diamond" + } + }, + "result": { + "item": "minecraft:ender_pearl" + } + } + ``` + + +--- + +### **3. Gunpowder** + +A staple for TNT and fireworks. The recipe should be simple and use common, logical materials. + +- **The Recipe Logic:** A classic combination. Carbon from `Charcoal` acts as the fuel, and `Sand` (silica) provides the body. It feels like a plausible, primitive explosive mixture. + +- Crafting Grid (Shapeless): + + 1 Charcoal + 1 Sand + 1 Gravel (added Gravel for texture and to make it slightly more than a 2-item recipe) + + Result: 2 Gunpowder + +- **JSON Code (`gunpowder.json`):** + + JSON + + ``` + { + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:charcoal" + }, + { + "item": "minecraft:sand" + }, + { + "item": "minecraft:gravel" + } + ], + "result": { + "item": "minecraft:gunpowder", + "count": 2 + } + } + ``` + + +--- + +### **4. Slimeball** + +Crucial for Redstone contraptions. The recipe should mimic a sticky, green, natural substance. + +- **The Recipe Logic:** We're combining a gooey, natural block (`Moss Block`), a sticky substance (`Honey Bottle`), and a green dye to get the color right. + +- Crafting Grid (Shapeless): + + 1 Moss Block + 1 Honey Bottle + 1 Lime Dye + + Result: 2 Slimeballs (and you get your bottle back!) + +- **JSON Code (`slimeball.json`):** + + JSON + + ``` + { + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:moss_block" + }, + { + "item": "minecraft:honey_bottle" + }, + { + "item": "minecraft:lime_dye" + } + ], + "result": { + "item": "minecraft:slimeball", + "count": 2 + }, + "group": "slimeball" + } + ``` + + _(Note: This recipe won't return the bottle by default with data packs, but the logic stands. The cost is one honey bottle.)_ + + +--- + +### **5. String** + +While findable, having a renewable source is a huge quality-of-life improvement. + +- **The Recipe Logic:** Simply unraveling a block of `Wool` back into its constituent parts. + +- Crafting Grid (Shapeless): + + 1 White Wool (or any color wool) + + Result: 4 String + +- **JSON Code (`string_from_wool.json`):** + + JSON + + ``` + { + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "result": { + "item": "minecraft:string", + "count": 4 + } + } + ``` + + _(Using a "tag" means this recipe will work with any color of wool, not just white.)_ + + +With these five recipes in your data pack, you will have a complete, balanced, and rewarding way to progress through the entire game. Happy crafting! \ No newline at end of file diff --git a/_ARCHIVE/project_index.md b/_ARCHIVE/project_index.md new file mode 100644 index 0000000..946722d --- /dev/null +++ b/_ARCHIVE/project_index.md @@ -0,0 +1,101 @@ +--- + +--- + + +```dataviewjs +// This entire block is now DataviewJS. It will build its own HTML. + +// --- 1. Create the main Flexbox Container --- +// We get the current container for this code block and turn it into a flex container. +const container = dv.container; +container.style.display = "flex"; +container.style.alignItems = "flex-start"; +container.style.gap = "20px"; + +// --- 2. Create the Left and Right Columns --- +const leftColumn = container.createEl("div"); +leftColumn.style.flex = "1"; // Let the column grow and shrink + +const rightColumn = container.createEl("div"); +rightColumn.style.flex = "1"; +rightColumn.style.maxWidth = "450px"; // Constrain the chart size + +// --- 3. Gather Data (once for both columns) --- +const pages = dv.pages("#project"); + + +// --- 4. Populate the Left Column (Stats) --- +leftColumn.createEl("h3", { text: "Operational Summary" }); +leftColumn.createEl("hr"); + +const activeProjects = pages.where(p => p.status === "In Progress").length; +const completedMissions = pages.where(p => p.status === "Completed").length; +const onHoldProjects = pages.where(p => p.status === "On Hold").length; +const planningProjects = pages.where(p => p.status === "In Planning").length; + +leftColumn.createEl("p", { text: `Active Projects: ${activeProjects}` }); +leftColumn.createEl("p", { text: `Completed Missions: ${completedMissions}` }); +leftColumn.createEl("p", { text: `On Hold: ${onHoldProjects}` }); +leftColumn.createEl("p", { text: `In Planning: ${planningProjects}` }); + + +// --- 5. Populate the Right Column (Chart) --- +const groupedByStatus = pages.groupBy(p => p.status); +const chartLabels = groupedByStatus.map(group => group.key).array(); +const chartData = groupedByStatus.map(group => group.rows.length).array(); + +const chartConfig = { + type: 'pie', + data: { + labels: chartLabels, + datasets: [{ + data: chartData, + backgroundColor: [ + "rgba(75, 192, 192, 0.7)", + "rgba(54, 162, 235, 0.7)", + "rgba(255, 206, 86, 0.7)", + "rgba(255, 99, 132, 0.7)" + ] + }] + }, + options: { + title: { + display: true, + text: 'Project Status Overview' + } + } +}; + +// Create a new canvas element inside the right column and render the chart into it. +const chartContainer = rightColumn.createEl("div"); +window.renderChart(chartConfig, chartContainer); + +``` + +--- +
+ + +```button +name New Project +type command +action Templater: Create templates/tpl_project.md +``` + +^button-2za5 + +
+ + +```dataview +TABLE + project_name as "Project", + status as "status", + ("") as "Progress", + creation_date as "Date Created" + +FROM #project +SORT creation_date DESC +``` +--- diff --git a/_ARCHIVE/projects/chiron-relay.md b/_ARCHIVE/projects/chiron-relay.md new file mode 100644 index 0000000..b33aa3e --- /dev/null +++ b/_ARCHIVE/projects/chiron-relay.md @@ -0,0 +1,91 @@ +--- +tags: + - project/chiron-relay +type: software +status: Active +repo: "" +progress: 33 +date_created: 2025-08-08 +last_updated: 2025-08-08 +--- +# 🚀 Project Hub: Chiron Relay + +

+ Status + Python + FastAPI + Google Cloud + Docker + License +

+ +
+ +> [!INFO] **Project Summary** +> **One-Liner:** *A brief, one-sentence description of the project.* +> **Tech Stack / Key Components:** *A comma-separated list of the main technologies or items used.* +> **Current Status:** *A short description of the project's current state.* + +--- +## 🎯 The "Why": Problem & Solution + +### The Problem +*What is the problem, need, or goal that prompted this project? Why does it exist?* + +### The Solution +*How does this project solve the problem? What is its intended outcome?* + +--- +## 🏛️ Architectural Overview & Key Decisions + +*For software/infrastructure, describe the high-level design. Why is it built the way it is? For personal projects, this could be "My Approach."* + +- **Decision 1:** *e.g., Chose to use Docker for local development...* + - **Reason:** *...to ensure a consistent, repeatable testing environment.* +- **Decision 2:** *e.g., Placed the firewall on a dedicated mini PC...* + - **Reason:** *...to separate critical network infrastructure from the application server for improved resilience (Separation of Concerns).* +- **Decision 3:** *e.g., Used a tiered backup strategy...* + - **Reason:** *...to provide cost-effective disaster recovery for different classes of data.* + +> [!NOTE] Architectural Diagram +> *(Embed an image or a Mermaid.js diagram here if applicable)* + +--- +## ⚙️ Codebase / Component Deep Dive + +*Break down the major pieces of the project and explain the role of each one. For a non-code project, this could be a list of physical components.* + +- **Component A (e.g., `app/email_sender.py`):** Its purpose is to encapsulate all logic for authenticating with Google and sending emails. +- **Component B (e.g., `OPNsense Mini PC`):** This is the dedicated, bare-metal firewall. Its sole responsibility is network security and routing. +- **Component C (e.g., `Main Garden Bed`):** The primary 4x8 bed for seasonal vegetables. + +--- +## 📖 Deployment & Setup Guide + +*The essential information needed to set up, run, or deploy this project.* + +### Prerequisites +- *e.g., Python 3.11, Docker, an active Twilio account...* + +### Configuration +- *e.g., Explain the `.env.example` file and list the required environment variables.* + +### Local Setup / Installation Steps +1. *e.g., `git clone ...`* +2. *e.g., `pip install -r requirements.txt`* +3. *e.g., `docker compose up -d`* + +--- +## 📔 Development & Maintenance Log + +*A running log of your work on the project. Add a new entry every time you work on it.* + +### 2025-08-08 +- Initial project setup and creation of this documentation hub. + +--- +## 💡 Future Ideas & Roadmap + +* [ ] *e.g., Add Discord support to Chiron Relay.* +* [ ] *e.g., Implement VLANs on the OPNsense firewall.* +* [ ] *e.g., Plant winter crops in the main garden bed.* \ No newline at end of file diff --git a/_ARCHIVE/recipe_list.md b/_ARCHIVE/recipe_list.md new file mode 100644 index 0000000..e9131c1 --- /dev/null +++ b/_ARCHIVE/recipe_list.md @@ -0,0 +1,33 @@ +--- +tags: + - dashboard + - recipes +obsidianUIMode: preview +link_recipes: + - "[[gyudon_beef]]" + - "[[cheeseburger_skillet]]" + - "[[bbw_chicken_mac_and_cheese]]" + - "[[taco_bowl]]" +--- + +```button +name New Recipe +type command +action Templater: Create templates/TPL_recipe.md +``` + +```dataviewjs +dv.table( + ["Recipe", "Prep Time", "Cook Time", "Cuisine", "Meals", "Rating"], + + dv.pages("#recipe").sort(p => p.file.ctime, 'desc') + .map(p => [ + p.file.link, + p.prep_time, + p.cook_time, + p.cuisine, + p.meals ? p.meals.join(", ") : "", + "★".repeat(p.rating) + "☆".repeat(5 - p.rating) + ]) +); +``` \ No newline at end of file diff --git a/_ARCHIVE/shopping_list/2025-06-19.md b/_ARCHIVE/shopping_list/2025-06-19.md new file mode 100644 index 0000000..c5e547d --- /dev/null +++ b/_ARCHIVE/shopping_list/2025-06-19.md @@ -0,0 +1,43 @@ + +## Meats +- [x] Ground Beef x2 +- [ ] Rotisserie chicken (costco pre pulled) +- [x] ground sausage + +## Dairy +- [x] Eggs +- [x] Milk +- [x] Shredded Cheddar + +## Produce + + +## Dry Goods +- [x] Rice +- [x] Stir-fry noodles +- [x] Rolled Oats +- [x] Ketchup +- [x] Mustard +- [x] Brown Sugar +- [x] Vanilla Extract +- [x] Peanut Butter +- [x] Chia Seeds + +## Bread + + + +## Snacks +- [x] Granola Bars (costco) +- [x] Trail Mix (costco) +- [ ] Cheese and cracker packs (costco or skip) + +## Beverages +- [x] Arizona Tea x2 + +## Meal Prep stuff +- [x] Food Storage containers (costco) +- [x] Sauce containers +- [x] Lunch Box +- [x] Small reusable bottle for drinks +- [ ] \ No newline at end of file diff --git a/_ARCHIVE/shopping_list/2025-07-16.md b/_ARCHIVE/shopping_list/2025-07-16.md new file mode 100644 index 0000000..6a3fd72 --- /dev/null +++ b/_ARCHIVE/shopping_list/2025-07-16.md @@ -0,0 +1,8 @@ +- [x] Stouffers Mac x2 - For meal prep +- [x] Frozen meals x7 - for dinner couple lunches +- [x] ground beef x2 - tacos and dad's dish +- [x] cabbage pre packaged or napa +- [x] red pepper flakes +- [x] Gallon water x2 - for the boys + + diff --git a/_ARCHIVE/templates/TPL_apartment_recon.md b/_ARCHIVE/templates/TPL_apartment_recon.md new file mode 100644 index 0000000..5b1c6de --- /dev/null +++ b/_ARCHIVE/templates/TPL_apartment_recon.md @@ -0,0 +1,39 @@ +--- +tags: + - apartment-recon +status: "Scouting" # Scouting, Applied, Rejected, Approved +rent: 0 +sqft: 0 +city: "" +link: "" +floorplans: + - +pros: + - +cons: + - +--- + +# APT: <% tp.file.title %> + +> [!INFO] Key Intelligence +>| | | +>| :--- | :--- | +>| **Rent** | `$=dv.current().rent` | +>| **Sq. Ft.** | `$=dv.current().sqft` | +>| **City** | `$=dv.current().city`| +>| **Link** | `$=dv.current().link` | + +--- +### **Reconnaissance Photos** +- + +--- +### **Walk Thru Notes** +- Basic Checks + - Cell Reception - + - Outlet Layouts - + - Ease of Access - + +### **Other Notes** +- \ No newline at end of file diff --git a/_ARCHIVE/templates/TPL_asset.md b/_ARCHIVE/templates/TPL_asset.md new file mode 100644 index 0000000..6020853 --- /dev/null +++ b/_ARCHIVE/templates/TPL_asset.md @@ -0,0 +1,107 @@ +--- +<%* +// --- Configuration --- +// This script runs first. It asks for the asset type and then builds the note. + +// Define the types of assets you want to track +const assetTypes = ["Desktop", "Laptop", "Server", "Handheld", "Networking", "Peripheral", "VM", "Service/Container"]; + +// Ask the user to select an asset type +const assetType = await tp.system.suggester(assetTypes, assetTypes, true, "What type of asset is this?"); + +// Stop the template if the user cancels +if (!assetType) { + return; +} + +// Ask for the status +const statusTypes = ["In Use", "In Storage", "Decommissioned", "For Sale", "Planned"]; +const status = await tp.system.suggester(statusTypes, statusTypes, true, "What is the status?"); + +// Generate the YAML frontmatter +tR += ` +# ${tp.file.title} - Asset Record +type: ${assetType} +status: ${status} +`; + +// Add different fields based on the chosen asset type +if (["Desktop", "Laptop", "Server", "Handheld", "Networking", "Peripheral"].includes(assetType)) { + tR += `make: +model: +serial: +purchase_date: ${tp.date.now("YYYY-MM-DD")} +warranty_expires: +`; +} else if (assetType === "VM") { + tR += `host: "[[Proxmox Server]]" +ip_address: +os: +`; +} else if (assetType === "Service/Container") { + tR += `host: "[[Debian Container Host VM]]" +ip_address: +image: +`; +} + +// Add common fields +tR += `purpose: +owner: +tags: + - asset + - ${assetType.toLowerCase().replace("/", "-")} +--- + +# ${tp.file.title} + +## 📋 Summary +*A brief, one-line description of the asset and its primary role.* +<% tp.file.cursor() %> + +`; + +// Add the correct details section based on the chosen asset type +if (["Desktop", "Laptop", "Server", "Handheld", "Networking", "Peripheral"].includes(assetType)) { + tR += ` +## ⚙️ Key Specifications +| Component | Details | +|---|---| +| **CPU** | | +| **GPU** | | +| **RAM** | | +| **Storage** | | +| **OS** | | +`; +} else if (assetType === "VM") { + tR += ` +## 🖥️ Virtual Configuration +| Setting | Value | +|---|---| +| **Host** | [[Proxmox Server]] | +| **OS** | | +| **vCPUs** | | +| **RAM** | GB | +| **Storage** | GB | +`; +} else if (assetType === "Service/Container") { + tR += ` +## 🐳 Service Configuration +* **Image:** * **Host:** [[Debian Container Host VM]] +* **Purpose:** * **Exposed Ports:** * **Mounted Volumes:** `; +} + +// Add the common final sections +tR += ` + +## 📝 Notes +*Any general notes, quirks, or important information about this asset.* + + +## 🔧 Maintenance & Log +*A running log of any changes, updates, or issues.* + +**${tp.date.now("YYYY-MM-DD")}** - Initial entry. +- +`; +%> \ No newline at end of file diff --git a/_ARCHIVE/templates/TPL_bug_report.md b/_ARCHIVE/templates/TPL_bug_report.md new file mode 100644 index 0000000..588d8b5 --- /dev/null +++ b/_ARCHIVE/templates/TPL_bug_report.md @@ -0,0 +1,48 @@ +<%* + // --- User Prompts --- + const bugTitle = await tp.system.prompt("Enter Bug Name / Title"); + if (!bugTitle) { + // If the user cancels the prompt, abort the mission. + return; + } + + const projectName = await tp.system.prompt("Which Project does this bug belong to?"); + + // --- File & Folder Configuration --- + const folder = "Bugs"; + const fileName = `BUG - ${bugTitle}`; + const filePath = `${folder}/${fileName}.md`; + + // --- Dynamic Content Generation (CORRECTED) --- + // We build the entire string using ONLY JavaScript template literal syntax. + const content = `--- +tags: + - bug + - ${projectName ? projectName.toLowerCase().replace(/\s+/g, '-') : "untagged"} +status: Open +creation_date: ${tp.date.now("YYYY-MM-DD")} +--- + +# BUG: ${bugTitle} + +**Project:** ${projectName ? `[[Projects/${projectName}/00_${projectName.replace(/\s+/g, "_")}|${projectName}]]` : "N/A"} + +#### Description + + +#### Troubleshooting Steps: + + +#### Implemented Solution + + +#### Root Cause & Lesson Learned: +`; + + // --- Execution --- + // Create the new file with the dynamically generated content. + const newFile = await app.vault.create(filePath, content); + + // Open the newly created file for immediate editing. + app.workspace.openLinkText(newFile.path, "", false); +%> \ No newline at end of file diff --git a/_ARCHIVE/templates/TPL_daily_note.md b/_ARCHIVE/templates/TPL_daily_note.md new file mode 100644 index 0000000..68748aa --- /dev/null +++ b/_ARCHIVE/templates/TPL_daily_note.md @@ -0,0 +1,37 @@ +--- +tags: + - daily-note +date: <% tp.date.now("YYYY-MM-DD") %> +day_of_week: <% tp.date.now("dddd") %> +--- +# 📓 Daily Note: <% tp.date.now("dddd, MMMM Do, YYYY") %> + + +--- +## ✅ Today's Priorities + +- [ ] *Task 1...* +- [ ] *Task 2...* +- [ ] *Task 3...* + +--- +## 📔 Commander's Log + +*This is a running log of your day. Use a timestamp for each entry. You can use a Templater hotkey to insert the current time (`HH:mm`).* + +- **<% tp.date.now("HH:mm") %>:** --- +## 💡 New Notes & Ideas + +*This is a "capture" area. Quickly jot down ideas or links here. At the end of the day, you can process these into their own permanent notes.* + +- + +--- +## 📥 Yesterday's Unfinished Tasks + +*This section uses the Dataview plugin to automatically find any unchecked tasks from yesterday's note, reminding you to address them.* + +```dataview +TASK +FROM "<% tp.date.yesterday("YYYY-MM-DD") %>" +WHERE !completed \ No newline at end of file diff --git a/_ARCHIVE/templates/TPL_meeting_notes.md b/_ARCHIVE/templates/TPL_meeting_notes.md new file mode 100644 index 0000000..569c71e --- /dev/null +++ b/_ARCHIVE/templates/TPL_meeting_notes.md @@ -0,0 +1,33 @@ +--- +tags: + - meeting-note +meeting_date: <% tp.date.now("YYYY-MM-DD") %> +project: +attendees: + - +--- + +# MEETING: <% tp.file.title %> + +### **Primary Objective(s)** +*A one-sentence summary of why this stupid meeting was called.* +- + +--- + +### **General Notes** + +--- + +### **Intelligence & Debriefing** + +| Cues / Action Items | Notes | +| :--- | :--- | +|`cue` | `note` | + + +--- + +### **Final Summary** +*A 1-2 sentence summary of the outcome of the meeting.* +- \ No newline at end of file diff --git a/_ARCHIVE/templates/TPL_project.md b/_ARCHIVE/templates/TPL_project.md new file mode 100644 index 0000000..f5c475d --- /dev/null +++ b/_ARCHIVE/templates/TPL_project.md @@ -0,0 +1,3 @@ +--- +status: "In Planning" +--- diff --git a/_ARCHIVE/templates/TPL_recipe.md b/_ARCHIVE/templates/TPL_recipe.md new file mode 100644 index 0000000..8a9e6f2 --- /dev/null +++ b/_ARCHIVE/templates/TPL_recipe.md @@ -0,0 +1,87 @@ +<%* + const recipeName = await tp.system.prompt("Enter Recipe Name", "New Recipe"); + const meal = await tp.system.prompt("Enter Primary Meal Type", "Dinner"); + if (!recipeName){ + return; + } + if (!meal){ + return; + } + + allTags = []; + + const meals = []; + let newMeal; + while ( + newMeal = await tp.system.prompt("Enter additional meal (or leave blank to finish)")) { + meals.push(newMeal.toLowerCase().replace(/\s+/g, '_')); + }; + formatedMeals = meals.map(meal => ` - ${meal}`).join('\n') + + const cuisine = await tp.system.prompt("Enter cuisine type", "American"); + + const prepTime = await tp.system.prompt("Enter Prep Time (in hours and minutes)", "10 mins"); + const cookTime = await tp.system.prompt("Enter Cook Time (in hours and minutes)", "10 mins"); + const serves = await tp.system.prompt("Enter number of people served", "2"); + + let newTag; + while ( + newTag = await tp.system.prompt("Enter a tag (or leave blank to finish)")) { + allTags.push(newTag.toLowerCase().replace(/\s+/g, '_')); + } + + const tagsYAML = allTags.map(tag => ` - ${tag}`).join('\n'); + + sanitizedName = recipeName.toLowerCase().replace(/\s+/g, '_'); + const recipeFolder = "Recipes"; + + const pageContent = `--- +tags: + - recipe +${tagsYAML} +meals: + - ${meal} +${formatedMeals} +cuisine: ${cuisine} +rating: 0 +meal_prep_item: false +prep_time: ${prepTime} +cook_time: ${cookTime} +serves: ${serves} +created_date: ${tp.date.now("YYYY-MM-DD")} +--- + +# ${recipeName} + +| Prep Time | Cook Time | Serves | +|-----------|-----------|--------| +|${prepTime}|${cookTime}|${serves}| + +--- +### Ingredients +- + +### Steps + +1. +`; + + + const newFilePath = `${recipeFolder}/${sanitizedName}.md`; + const newFile = await this.app.vault.create(newFilePath, pageContent); + await this.app.workspace.openLinkText(newFile.path, "", true); + const currentFile = tp.file.config.target_file; + await tp.sleep(100); + await this.app.vault.delete(currentFile); +%> + + + + + + + + + + + diff --git a/_ARCHIVE/templates/TPL_ticket.md b/_ARCHIVE/templates/TPL_ticket.md new file mode 100644 index 0000000..4032a00 --- /dev/null +++ b/_ARCHIVE/templates/TPL_ticket.md @@ -0,0 +1,70 @@ +<%* + let dv; + if (app.plugins.enabledPlugins.has("dataview")) { + dv = app.plugins.plugins.dataview.api; + } else { + new Notice("Dataview plugin is not active. Cannot proceed."); + tp.user.exit(); + } + // This loop will wait up to 2 seconds for the Dataview API to be ready. + let i = 0; + while (!dv.pages && i < 20) { + await tp.sleep(100); + i++; + } + if (!dv.pages) { + new Notice("Dataview API did not become ready in time."); + tp.user.exit(); + } + + // Get object name + const ticketName = await tp.system.prompt("Enter Ticket Name:", "Untitled Ticket"); + if (!ticketName) { + return; + } + const tickets = dv.pages('"tickets"'); + const archivedTickets = dv.pages('"Archive/Tickets"'); + const nextTicketNumber = tickets.length + archivedTickets.length + 1; + const formattedTicketNumber = nextTicketNumber.toString().padStart(3,'0'); + const fileName = `TICKET-${formattedTicketNumber} - ${ticketName}` + + + // Get tags + const allTags = []; + let newTag; + while (newTag = await tp.system.prompt("Enter a tag (or leave blank to finish):")) { + allTags.push(newTag.toLowerCase().replace(/\s+/g, "_")); + } + + // Format tags + tagsYAML = allTags.map(tag => ` - ${tag}`).join('\n'); + + const pageContent = `--- +tags: + - ticket +${tagsYAML} +status: "Backlog" +priority: "Medium" +project: "None" +creation_date: "${tp.date.now('YYYY-MM-DD')}" +--- + +# ${fileName} + +### Objective + +### Requirements + +### Notes + +` + + const newFilePath = `Tickets/${fileName}.md`; + const newFile = await this.app.vault.create(newFilePath, pageContent); + await this.app.workspace.openLinkText(newFile.path, "", true) + + const currentFile = tp.file.config.target_file; + await tp.sleep(100) + await this.app.vault.delete(currentFile) + +%> \ No newline at end of file diff --git a/_ARCHIVE/the_bug_board.md b/_ARCHIVE/the_bug_board.md new file mode 100644 index 0000000..2047d69 --- /dev/null +++ b/_ARCHIVE/the_bug_board.md @@ -0,0 +1,21 @@ +--- +obsidianUIMode: preview +all_bugs: + - "[[BUG - 422 Bug]]" +--- + +```button +name Open New Bug Report +type command +action Templater: Create templates/TPL_bug_report.md +``` + + +```dataview +TABLE WITHOUT ID + file.link as "Bug Report", + status as "Status", + creation_date as "Date Created" +FROM #bug +SORT creation_date DESC +``` diff --git a/_ARCHIVE/tickets/TICKET-001 - Courtney Laptop.md b/_ARCHIVE/tickets/TICKET-001 - Courtney Laptop.md new file mode 100644 index 0000000..898ae35 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-001 - Courtney Laptop.md @@ -0,0 +1,26 @@ +--- +tags: + - ticket + - work +status: "Done" +priority: "Medium" +project: "None" +creation_date: "2025-06-24" +--- + +# TICKET - Courtney Laptop + +### Objective +Repair and fix up Courtney's laptops + +### Requirements +- [x] Install new battery in old laptop +- [ ] ~~Install drivers and get USB Can device working on old laptop~~ +- [ ] ~~Install drivers and get USB Can device working on new laptop~~ +- [ ] Ship laptop to Dillon +- [ ] Install remote tools before shipping (Unconfirmed) + +### Notes +It may not be possible to get the USB Can device working on either laptop. This is due to the manufacture not providing very good drivers for the device. Will do my best to get it working but no promises. + +Unable to get USB Can device working on either laptop. It seems to either have a short or failed when new drivers were installed on it. On 3 windows computers it causes multiple notifications that its drawing too much power and has malfunctioned. Tested on my MacBook through powered dock and same issue arose, but MacOS just shut down the device on the first issue. Seems to be an issue with the device itself. Told both Courtney and Jazzy. They will explain the issue to Dillon so he's aware of the problem. diff --git a/_ARCHIVE/tickets/TICKET-002 - Create Decision Logic.md b/_ARCHIVE/tickets/TICKET-002 - Create Decision Logic.md new file mode 100644 index 0000000..11a07e7 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-002 - Create Decision Logic.md @@ -0,0 +1,25 @@ +--- +tags: + - ticket +status: Done +priority: Medium +project: "[[00_twilio-email-bridge]]" +creation_date: 2025-06-24 +--- + +# TICKET - Create Decision Logic + +### Objective +Create logic that processes content of sms message and sets message route in message dictionary. + +### Requirements +- [x] Code should set route based on body content + - [x] Critical server messages should be sent to all channels + - [x] Warning server messages should be sent to email and text + - [x] 2FA messages should be sent to text and email + - [x] all other messages should go to just email +- [x] Error handling should catch all exceptions and raise custom exception +- [x] Error should be logged + +### Notes +- No need to log success as that is handled by the main orchestrator diff --git a/_ARCHIVE/tickets/TICKET-003 - Create Email Sender.md b/_ARCHIVE/tickets/TICKET-003 - Create Email Sender.md new file mode 100644 index 0000000..1ba1e59 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-003 - Create Email Sender.md @@ -0,0 +1,25 @@ +--- +tags: + - ticket +status: "Done" +priority: "Medium" +project: "[[00_twilio-email-bridge]]" +creation_date: "2025-06-26" +--- + +# TICKET-003 - Create Email Sender + +### Objective +Create module for forwarding SMS messages to email using gmail api + +### Requirements +- [x] Receive extracted message data +- [x] Create email + - [x] From address: chiron-relay@delpilarlabs.com + - [x] Subject: "New Text Message from +11234567890" + - [x] Body will be the body of the SMS message itself +- [x] Send email with gmail api to my delpilar.net email address +- [x] raise exception and log sending errors + +### Notes +Not setting a reply to field yet. Will add that when I get to the logic for handling the replies themselves. diff --git a/_ARCHIVE/tickets/TICKET-004 - Create SMS Sender.md b/_ARCHIVE/tickets/TICKET-004 - Create SMS Sender.md new file mode 100644 index 0000000..319bd96 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-004 - Create SMS Sender.md @@ -0,0 +1,25 @@ +--- +tags: + - ticket +status: "Backlog" +priority: "Medium" +project: "[[00_twilio-email-bridge]]" +creation_date: "2025-06-26" +--- + +# TICKET-004 - Create SMS Sender + +### Objective +Create module to forward SMS message to my normal phone number + +### Requirements +- [ ] Receive extracted message data +- [ ] Forward message to my normal phone number using twilio rest API + - [ ] Will pull my number from .env file + - [ ] body of message will be the extracted message body +- [ ] Raise and log error on sending error or http error status + +### Notes +__BLOCKER__ Currently blocked by twilio rejecting my EIN number. Once that is resolved work can proceed on this ticket + + diff --git a/_ARCHIVE/tickets/TICKET-005 - Creat Discord Sender.md b/_ARCHIVE/tickets/TICKET-005 - Creat Discord Sender.md new file mode 100644 index 0000000..b09d72b --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-005 - Creat Discord Sender.md @@ -0,0 +1,27 @@ +--- +tags: + - ticket +status: "Backlog" +priority: "Medium" +project: "[[00_twilio-email-bridge]]" +creation_date: "2025-06-26" +--- + +# TICKET-005 - Creat Discord Sender + +### Objective +Create module to forward SMS messages to discord server + +### Requirements +- [ ] Receive extracted message data +- [ ] Forward message to Discord server webhook + - [ ] Server webhook url stored in .env file + - [ ] Message will be a custom embed + - [ ] Header will be "New Incoming SMS from +123456789" + - [ ] Body of embed will be the body of the sms + - [ ] include timestamp in footer of embed +- [ ] Raise and log error on sending error or http error status + +### Notes +Future work will be done to make a discord bot to handle replies to SMS messages. + diff --git a/_ARCHIVE/tickets/TICKET-006 - Kristofer Bailey.md b/_ARCHIVE/tickets/TICKET-006 - Kristofer Bailey.md new file mode 100644 index 0000000..a64d2b6 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-006 - Kristofer Bailey.md @@ -0,0 +1,24 @@ +--- +tags: + - ticket + - work + - new-hire +status: "Done" +priority: "Medium" +project: "None" +creation_date: "2025-06-26" +due_date: "2025-06-30" +--- + +# TICKET-006 - Kristofer Bailey + +### Objective +Create accounts for new hire + +### Requirements +- [ ] Create M365 Account +- [ ] Create 3CX account +- [ ] Create Salesforce Account + +### Notes +Warehouse user no equipment needed diff --git a/_ARCHIVE/tickets/TICKET-007 - Matthew Lacek.md b/_ARCHIVE/tickets/TICKET-007 - Matthew Lacek.md new file mode 100644 index 0000000..daa9493 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-007 - Matthew Lacek.md @@ -0,0 +1,29 @@ +--- +tags: + - ticket + - work + - new-hire +status: Done +priority: Medium +project: None +creation_date: 2025-06-26 +due_date: 2025-07-07 +--- + +# TICKET-007 - Matthew Lacek + +### Objective +Create New Hire Profiles and send Equipment + +### Requirements +- [x] Create 3CX account +- [x] Create M365 Account +- [x] Issue Hardware + - [ ] iPad + - [ ] Measuring Puck + +### Notes +__BLOCKER__ still unsure how we are doing the iPads and the Apple account. Will open and link another ticket for the research on this one. +__BLOCKER__ Need to figure out how we want to order the measuring pucks as well. This is a Jazzy item +Both above blockers are waiting research from my self and Jazzy on how we want to do everything for this. + diff --git a/_ARCHIVE/tickets/TICKET-008 - 3CX Caller ID Dial Code Test.md b/_ARCHIVE/tickets/TICKET-008 - 3CX Caller ID Dial Code Test.md new file mode 100644 index 0000000..55beaea --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-008 - 3CX Caller ID Dial Code Test.md @@ -0,0 +1,26 @@ +--- +tags: + - ticket + - work + - 3cx +status: "In Progress" +priority: "Medium" +project: "None" +creation_date: "2025-06-26" +--- + +# TICKET-008 - 3CX Caller ID Dial Code Test + +### Objective +Create a test dial code to verify dial codes used to change reps caller ID to a local number + +### Requirements +- [x] Get new local area code for Tennessee +- [x] Set up dial code to change caller ID +- [x] Test new code +- [ ] Have Kyle perform UAT + +### Notes +- This will eventually expand to a larger set of numbers and dial rules, but for now we are testing with a single number. +- Testing worked fine when calling my personal number. Call was marked as spam, but that may be due to my very strict spam rules on my phone +- Sent to Kyle for testing. diff --git a/_ARCHIVE/tickets/TICKET-009 - Book Flight.md b/_ARCHIVE/tickets/TICKET-009 - Book Flight.md new file mode 100644 index 0000000..2fafed5 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-009 - Book Flight.md @@ -0,0 +1,24 @@ +--- +tags: + - ticket + - bc-graduation +status: "Done" +priority: "Medium" +project: "None" +creation_date: "2025-06-26" +--- + +# TICKET-009 - Book Flight + +### Objective +Book flight for myself and if she can attend my mother-in-law + +### Requirements +- [x] Wait to hear if Jean is able to attend or not +- [x] Find good flight prices +- [x] Book flight + + +### Notes +- Jean has until the 1st to let me know if she is able to come or not +- Most important thing is to make sure I can be there \ No newline at end of file diff --git a/_ARCHIVE/tickets/TICKET-010 - Elizabeth's Graduation.md b/_ARCHIVE/tickets/TICKET-010 - Elizabeth's Graduation.md new file mode 100644 index 0000000..d85f694 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-010 - Elizabeth's Graduation.md @@ -0,0 +1,26 @@ +--- +tags: + - ticket + - epic + - bc-graduation +status: "In Progress" +priority: "Highest" +project: "None" +creation_date: "2025-07-01" +--- + +# TICKET-010 - Elizabeth's Graduation + +### Objective +Prepare for and attend Elizabeth's Graduation + +### Requirements +- [ ] [[TICKET-009 - Book Flight |Book Flights]] +- [ ] [[TICKET-011 - Get Rental Car|Get Rental Car]] +- [ ] [[TICKET-012 - Get Hotel|Get Hotel]] +- [ ] [[TICKET-013 - Get Military ID|Get Military ID]] +- [ ] Fly there +- [ ] Attend + +### Notes + diff --git a/_ARCHIVE/tickets/TICKET-011 - Get Rental Car.md b/_ARCHIVE/tickets/TICKET-011 - Get Rental Car.md new file mode 100644 index 0000000..2c41e4e --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-011 - Get Rental Car.md @@ -0,0 +1,25 @@ +--- +tags: + - ticket + - bc-graduation + +status: "In Progress" +priority: "High" +project: "In Progress" +creation_date: "2025-07-01" +--- + +# TICKET-011 - Get Rental Car + +### Objective +Use Turo to book a rental car as it doesn't require a credit card + +### Requirements +- [x] Find car that'll work +- [x] Book trip with turo +- [ ] Pay (due on the 16th) + +### Notes +Reservation ID: 46133595 +2025 Kia K4 +1000 Miles diff --git a/_ARCHIVE/tickets/TICKET-012 - Get Hotel.md b/_ARCHIVE/tickets/TICKET-012 - Get Hotel.md new file mode 100644 index 0000000..9f0785a --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-012 - Get Hotel.md @@ -0,0 +1,29 @@ +--- +tags: + - ticket + - bc-graduation +status: In Progress +priority: High +project: None +creation_date: 2025-07-01 +--- + +# TICKET-012 - Get Hotel + +### Objective +Get a hotel close to the base for graduation + +### Requirements +- [x] Find well price hotel +- [x] Must be close to the base +- [x] Make Reservation +- [ ] Pay (Being Charged at the Hotel day of) + +### Notes +Changed to Motel 6 cuz its cheaper +6950351733 + +1809 N Milwaukee Ave +Libertyville +IL 60048 +United States diff --git a/_ARCHIVE/tickets/TICKET-013 - Get Military ID.md b/_ARCHIVE/tickets/TICKET-013 - Get Military ID.md new file mode 100644 index 0000000..dcf1bf3 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-013 - Get Military ID.md @@ -0,0 +1,24 @@ +--- +tags: + - ticket + - bc-graduation +status: "Done" +priority: "High" +project: "None" +creation_date: "2025-07-01" +--- + +# TICKET-013 - Get Military ID + +### Objective +Get Military ID from pendleton ID office + +### Requirements +- [x] Book appointment +- [ ] Go to Base +- [ ] Get ID + + +### Notes + +Operation Canceled for now due to incorrect POA \ No newline at end of file diff --git a/_ARCHIVE/tickets/TICKET-014 - Prep Go bag nvme.md b/_ARCHIVE/tickets/TICKET-014 - Prep Go bag nvme.md new file mode 100644 index 0000000..53535cc --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-014 - Prep Go bag nvme.md @@ -0,0 +1,25 @@ +--- +tags: + - ticket + +status: "In Progress" +priority: "High" +project: "None" +creation_date: "2025-07-03" +--- + +# TICKET-014 - Prep Go bag nvme + +### Objective +Prepare my NVME for travel operations and for use with non-secure public workstations + +### Requirements +- [x] Get portable apps launcher +- [x] Install portable apps through launcher +- [x] install cryptomater and set up vault +- [ ] scan docs needed to keep on hand +- [ ] set up "Phantom Protocol" python script +- [ ] + +### Notes + diff --git a/_ARCHIVE/tickets/TICKET-015 - Knowledge Base Setup.md b/_ARCHIVE/tickets/TICKET-015 - Knowledge Base Setup.md new file mode 100644 index 0000000..5df12a5 --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-015 - Knowledge Base Setup.md @@ -0,0 +1,42 @@ +--- +tags: + - ticket + - work +status: "In Progress" +priority: "High" +project: "None" +creation_date: "2025-07-07" +--- + +# TICKET-015 - Knowledge Base Setup + +### Objective +Create knowledge base of most common tasks before I leave for Chicago + +### Requirements +- [ ] Create articles for the following + - [x] M365 Password reset + - [x] User Article for self service password reset + - [x] Help Desk Article for backend password reset + - [x] Salesforce password reset + - [x] Help Desk article for password resets + - [x] Salesforce Authenticator Set up + - [x] User Article for setup. + - [x] Salesforce Authenticator Reset + - [x] Help Desk article for unlinking the salesforce authenticator + - [x] 3CX Login on Mobile + - [x] User Article to get QR code from desktop app + - [x] Help Desk article to send user QR code from admin portal + - [x] 3CX Login on Desktop App + - [x] User article to login on desktop app if installed + - [x] Help Desk article to install 3CX app on desktop if needed + - [x] 3CX Common Errors + - [x] RTC error + - [x] Blacklisted IP error + - [x] Can't connect to server error + - [x] Mic issues + - [x] Dropped calls + - [ ] Offboard/onboarding request + - [ ] Help desk articles for both +### Notes + diff --git a/_ARCHIVE/tickets/TICKET-016 - Prod Deployment.md b/_ARCHIVE/tickets/TICKET-016 - Prod Deployment.md new file mode 100644 index 0000000..baa465b --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-016 - Prod Deployment.md @@ -0,0 +1,22 @@ +--- +tags: + - ticket + +status: "In Progress" +priority: "Medium" +project: "[[00_twilio-email-bridge]]" +creation_date: "2025-08-04" +--- + +# TICKET-016 - Prod Deployment + +### Objective +Update code base to be deployable on google cloud functions + +### Requirements +- [ ] Make required changes to code base to run on cloud functions +- [ ] Write deployment command +- [ ] Deploy to cloud functions + +### Notes + diff --git a/_ARCHIVE/tickets/TICKET-017 - Docker Development.md b/_ARCHIVE/tickets/TICKET-017 - Docker Development.md new file mode 100644 index 0000000..809ec8c --- /dev/null +++ b/_ARCHIVE/tickets/TICKET-017 - Docker Development.md @@ -0,0 +1,22 @@ +--- +tags: + - ticket + +status: "Backlog" +priority: "Medium" +project: "[[00_twilio-email-bridge]]" +creation_date: "2025-09-08" +--- + +# TICKET-001 - Docker Development + +### Objective +Create and deploy docker related files and changes + +### Requirements +- Create Dockerfile to build docker image +- Create working example docker-compose.yaml for deployment +- Update README.md to include deployment steps for both docker and local deployment + +### Notes + diff --git a/_ARCHIVE/travel_plans/Chicago 2025/Packing List.md b/_ARCHIVE/travel_plans/Chicago 2025/Packing List.md new file mode 100644 index 0000000..b23856c --- /dev/null +++ b/_ARCHIVE/travel_plans/Chicago 2025/Packing List.md @@ -0,0 +1,38 @@ +## Clothes + - [ ] 2x Shorts + - [ ] 2x Pants + - [ ] 4x T-Shirts + - [ ] 6x Underwear + - [ ] 6x Pairs of socks + - [ ] Jacket + - [ ] Dress Shoes + - [ ] Button Down Shirt + - [ ] Pajamas + - [ ] Belt (I'll be wearing it.) + +## Toiletries +- [ ] Shampoo +- [ ] Body Wash +- [ ] Tooth Brush +- [ ] Toothpaste +- [ ] Deodorant + +## Electronics +- [ ] Tech Cocoon (Needs Charging) +- [ ] ROG Ally and charger +- [ ] Macbook Pro +- [ ] eReader +- [ ] Razer Opus X + +## Travel Docs +- [ ] ID +- [ ] Birth Certificate +- [ ] Marriage License +- [ ] SSN +- [ ] Paper ID + +## Misc +- [ ] Card from mom +- [ ] Card from Jolleen +- [ ] Elizabeth Apple Watch +- [ ] Elizabeth Switch diff --git a/_ARCHIVE/travel_plans/Chicago 2025/TRIP - Boot Camp Graduation - 2025-07-23.md b/_ARCHIVE/travel_plans/Chicago 2025/TRIP - Boot Camp Graduation - 2025-07-23.md new file mode 100644 index 0000000..d15c8b3 --- /dev/null +++ b/_ARCHIVE/travel_plans/Chicago 2025/TRIP - Boot Camp Graduation - 2025-07-23.md @@ -0,0 +1,63 @@ +--- +tags: + - travel + - trip +destination: "Chicago, IL" +start_date: 2025-07-23 +end_date: 2025-07-27 +status: "Booked" +--- + +# ✈️ Mission: RTC Graduation - Chicago + +### **Objective:** +Attend Elizabeth's Pass-In-Review ceremony and provide operational support. + +--- +### **Logistics: Air Travel** + +| Flight | Departs | Arrives | Flight # | +| :--- | :--- | :--- | :--- | +| **Outbound** | `6:15am` from `SAN` | `12:37` at `ORD` | `AA 518` | +| **Return** | `5:00pm` from `ORD` | `7:16` at `SAN` | `AA 1543` | + +* **Airline:** `American Airlines` +* **Attachments:** [Flight Confirmation](https://drive.google.com/file/d/1KCYGZjrevWE5Vn53KLoxj6nZWZJrf_5P/view?usp=drive_link) +* **Confirmation Number** `YCQFBB` + +--- +### **Logistics: Ground Transport** + +* **Asset:** `[[TICKET-011 - Get Rental Car]]` +* **Confirmation #:** `46133595` + +--- +### **Logistics: Billeting** + +* **Asset:** `[[TICKET-012 - Get Hotel]]` +* **Address:** `611 Lakehurst Road,‌ Waukegan,‌‌ IL‌ 60085 United States` +* **Confirmation #:** `20580600` + +--- +### **Personnel Involved** + +* [[Jordan Del Pilar]] +* [[Jean Averbeck]] +* [[Elizabeth Del Pilar]] (Already There) + +--- +### **Mission Checklist** +- [ ] Book Flights +- [ ] Book Hotel +- [ ] Book Car +- [ ] Pack carry-on +- [ ] Make sure cats are good + - [ ] Prep Feeder + - [ ] Prep Water + - [ ] Extra water + - [ ] Extra Food +- [ ] Drive to Airport + - [ ] 1:30am leave my house + - [ ] ~3:00am pick up Jean + - [ ] ~4:00am Arrive at airport + - [ ] 6:15am flight leaves \ No newline at end of file diff --git a/daily_logs/2026-01-22.md b/daily_logs/2026-01-22.md new file mode 100644 index 0000000..e69de29