├── .obsidian ├── appearance.json ├── community-plugins.json ├── hotkeys.json ├── app.json ├── plugins │ ├── obsidian-git │ │ ├── manifest.json │ │ └── styles.css │ └── templater-obsidian │ │ ├── manifest.json │ │ ├── data.json │ │ └── styles.css ├── core-plugins.json ├── core-plugins-migration.json └── workspace.json ├── 04 - Templates ├── 04 - Template Structure │ ├── 0405 - Basic.md │ ├── 0408 - Personal.md │ ├── 0406 - Tool.md │ ├── 0401 - Primary Category.md │ ├── 0404 - Metadata.md │ ├── 0402 - Secondary Category.md │ ├── 0408 - Resources.md │ ├── 0409 - Resources.md │ ├── 0403 - Content Header.md │ └── 0407 - README.md └── 0400 - General Template.md ├── 06 - Images ├── templater.png ├── obsidian-git-cp.png ├── templater-hotkey.png ├── obsidian git settings.png ├── obsidian general settings.png └── obsidian-files-and-links.png ├── 01 - Primary Categories ├── 01 - Administration.md └── 01 - Pentest.md ├── 00 - Global Index.md ├── 02 - Secondary Categories └── 02 - Obsidian.md ├── 03 - Content ├── Obsidian Plugins.md ├── Obsidian - Getting Started.md ├── Obsidian General Settings.md ├── Obsidian - Git.md └── Templater.md └── README.md /.obsidian/appearance.json: -------------------------------------------------------------------------------- 1 | { 2 | "accentColor": "" 3 | } -------------------------------------------------------------------------------- /.obsidian/community-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "templater-obsidian" 3 | ] -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0405 - Basic.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0408 - Personal.md: -------------------------------------------------------------------------------- 1 | 2 | ## Overview -------------------------------------------------------------------------------- /06 - Images/templater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackedbyagirl/Offensive-Security-Vault/HEAD/06 - Images/templater.png -------------------------------------------------------------------------------- /06 - Images/obsidian-git-cp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackedbyagirl/Offensive-Security-Vault/HEAD/06 - Images/obsidian-git-cp.png -------------------------------------------------------------------------------- /06 - Images/templater-hotkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackedbyagirl/Offensive-Security-Vault/HEAD/06 - Images/templater-hotkey.png -------------------------------------------------------------------------------- /06 - Images/obsidian git settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackedbyagirl/Offensive-Security-Vault/HEAD/06 - Images/obsidian git settings.png -------------------------------------------------------------------------------- /06 - Images/obsidian general settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackedbyagirl/Offensive-Security-Vault/HEAD/06 - Images/obsidian general settings.png -------------------------------------------------------------------------------- /06 - Images/obsidian-files-and-links.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackedbyagirl/Offensive-Security-Vault/HEAD/06 - Images/obsidian-files-and-links.png -------------------------------------------------------------------------------- /01 - Primary Categories/01 - Administration.md: -------------------------------------------------------------------------------- 1 | Links: [[00 - Global Index]] 2 | 3 | # [[01 - Administration]] 4 | *** 5 | 6 | [[02 - Obsidian]] 7 | [[02 - New Hires]] -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0406 - Tool.md: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | 4 | ## Pre-requirements 5 | 6 | 7 | ## Installation 8 | 9 | 10 | ## Usage 11 | 12 | -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0401 - Primary Category.md: -------------------------------------------------------------------------------- 1 | Links: [[00 - Global Index]] 2 | 3 | # [[<% tp.file.title %>]] 4 | *** 5 | 6 | { Links to related secondary categories } 7 | -------------------------------------------------------------------------------- /.obsidian/hotkeys.json: -------------------------------------------------------------------------------- 1 | { 2 | "templater-obsidian:04 - Templates/0400 - General Template.md": [ 3 | { 4 | "modifiers": [ 5 | "Meta" 6 | ], 7 | "key": "N" 8 | } 9 | ] 10 | } -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0404 - Metadata.md: -------------------------------------------------------------------------------- 1 | --- 2 | creation date: <% tp.file.creation_date('MMMM DD YYYY') %> 3 | last modifed: <% tp.file.last_modified_date('MMMM DD YYYY') %> 4 | aliases: [] 5 | --- 6 | -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0402 - Secondary Category.md: -------------------------------------------------------------------------------- 1 | Primary Categories: { Add link(s) [[]] back to related PRIMARY categories } 2 | 3 | # [[<% tp.file.title %>]] 4 | *** 5 | 6 | { Links to related content categories } 7 | -------------------------------------------------------------------------------- /00 - Global Index.md: -------------------------------------------------------------------------------- 1 | # [[00 - Global Index]] 2 | 3 | *** 4 | ## Primary Categories 5 | [[01 - Administration]] 6 | [[01 - Blue Team]] 7 | [[01 - Development]] 8 | [[01 - Infrastructure]] 9 | [[01 - Pentest]] 10 | [[01 - Red Team]] 11 | -------------------------------------------------------------------------------- /02 - Secondary Categories/02 - Obsidian.md: -------------------------------------------------------------------------------- 1 | Primary Categories: [[01 - Administration]] 2 | 3 | # [[02 - Obsidian]] 4 | 5 | ## Getting Started 6 | [[Obsidian - Getting Started]] 7 | 8 | ## Customization 9 | [[Obsidian Plugins]] 10 | 11 | -------------------------------------------------------------------------------- /.obsidian/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "showInlineTitle": false, 3 | "defaultViewMode": "preview", 4 | "livePreview": false, 5 | "showLineNumber": true, 6 | "spellcheck": true, 7 | "alwaysUpdateLinks": true, 8 | "attachmentFolderPath": "06 - Images" 9 | } -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0408 - Resources.md: -------------------------------------------------------------------------------- 1 | *** 2 | ## Resources: 3 | 4 | | Hyperlink | Info | 5 | | --------- | ---- | 6 | 7 | creation date: <% tp.file.creation_date('MMMM DD YYYY') %> 8 | last modified: <% tp.file.last_modified_date('MMMM DD YYYY') %> -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0409 - Resources.md: -------------------------------------------------------------------------------- 1 | *** 2 | ## Resources: 3 | 4 | | Hyperlink | Info | 5 | | --------- | ---- | 6 | 7 | creation date: <% tp.file.creation_date('MMMM DD YYYY') %> 8 | last modified: <% tp.file.last_modified_date('MMMM DD YYYY') %> -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-git/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-git", 3 | "name": "Obsidian Git", 4 | "description": "Backup your vault with Git.", 5 | "isDesktopOnly": false, 6 | "fundingUrl": "https://ko-fi.com/vinzent", 7 | "js": "main.js", 8 | "version": "2.15.0" 9 | } 10 | -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0403 - Content Header.md: -------------------------------------------------------------------------------- 1 | Primary Categories: { Add link(s) [[]] back to related PRIMARY categories } 2 | Secondary Categories: { Add link(s) [[]] back to related SECONDARY categories } 3 | Links: {Add link(s) [[]] to related terms} 4 | 5 | # [[<% tp.file.title %>]] 6 | *** 7 | -------------------------------------------------------------------------------- /01 - Primary Categories/01 - Pentest.md: -------------------------------------------------------------------------------- 1 | Links: [[00 - Global Index]] 2 | 3 | # [[01 - Pentest]] 4 | *** 5 | 6 | [[02 - Internal]] 7 | [[02 - External]] 8 | [[02 - Reconnaissance]] 9 | [[02 - Payloads]] 10 | [[02 - Lateral Movement]] 11 | [[02 - Persistence]] 12 | [[02 - Privilege Escalation]] 13 | [[02 - Post Exploitation]] -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "templater-obsidian", 3 | "name": "Templater", 4 | "version": "1.16.0", 5 | "description": "Create and use templates", 6 | "minAppVersion": "0.11.13", 7 | "author": "SilentVoid", 8 | "authorUrl": "https://github.com/SilentVoid13", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/core-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "file-explorer", 3 | "global-search", 4 | "switcher", 5 | "graph", 6 | "backlink", 7 | "canvas", 8 | "outgoing-link", 9 | "tag-pane", 10 | "page-preview", 11 | "note-composer", 12 | "command-palette", 13 | "editor-status", 14 | "starred", 15 | "outline", 16 | "word-count", 17 | "file-recovery" 18 | ] -------------------------------------------------------------------------------- /03 - Content/Obsidian Plugins.md: -------------------------------------------------------------------------------- 1 | Primary Categories: [[01 - Administration]] 2 | Secondary Categories: [[02 - Obsidian]] - [[02 - Resources]] 3 | Links: [[Obsidian - Getting Started]] 4 | 5 | # [[Obsidian Plugins]] 6 | *** 7 | 8 | ## Required 9 | [[Obsidian - Git]] 10 | [[Templater]] 11 | 12 | ## Optional 13 | [[Admonition]] 14 | [[Advanced Tables]] 15 | [[Excalidraw]] 16 | [[Find Orphaned Files and Broken Links]] 17 | [[Kanban]] 18 | [[Linter]] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Offensive-Security-Vault 2 | This is a Personal Knowledge Management tools for taking and managing notes related Offensive Security in Obsidian 3 | 4 | 5 | ## Usage 6 | 1. Download Obsidian from [Obsidian](https://obsidian.md) 7 | 2. Clone this repository 8 | `git clone https://github.com/hackedbyagirl/Offensive-Security-Vault.git` 9 | 3. Begin by navigating to `02 - Obsidian` 10 | 11 | For more explination on how to use this repo, please read the following blog as it was the inspiration for this design. 12 | 13 | [TrustedSec - Obsidian](https://www.trustedsec.com/blog/obsidian-taming-a-collective-consciousness/) 14 | -------------------------------------------------------------------------------- /03 - Content/Obsidian - Getting Started.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | creation date: January 09 2023 4 | last modifed: January 09 2023 5 | aliases: [Obsidian] 6 | --- 7 | Primary Categories: [[01 - Administration]] 8 | Secondary Categories: [[02 - Obsidian]] 9 | 10 | # [[Obsidian - Getting Started]] 11 | *** 12 | 13 | ## Overview 14 | This is my guide to setting up your [Obsidian](https://obsidian.md) vault. 15 | 16 | ## Setup 17 | [[Obsidian General Settings]] 18 | [[Obsidian Plugins]] 19 | *** 20 | ## Resources: 21 | 22 | | Hyperlink | Info | 23 | | --------- | ---- | 24 | 25 | creation date: January 09 2023 26 | last modified: January 09 2023 -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "command_timeout": 5, 3 | "templates_folder": "04 - Templates", 4 | "templates_pairs": [ 5 | [ 6 | "", 7 | "" 8 | ] 9 | ], 10 | "trigger_on_file_creation": true, 11 | "auto_jump_to_cursor": false, 12 | "enable_system_commands": false, 13 | "shell_path": "", 14 | "user_scripts_folder": "", 15 | "enable_folder_templates": true, 16 | "folder_templates": [ 17 | { 18 | "folder": "", 19 | "template": "" 20 | } 21 | ], 22 | "syntax_highlighting": true, 23 | "enabled_templates_hotkeys": [ 24 | "04 - Templates/0400 - General Template.md" 25 | ], 26 | "startup_templates": [ 27 | "" 28 | ], 29 | "enable_ribbon_icon": true 30 | } -------------------------------------------------------------------------------- /.obsidian/core-plugins-migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "file-explorer": true, 3 | "global-search": true, 4 | "switcher": true, 5 | "graph": true, 6 | "backlink": true, 7 | "canvas": true, 8 | "outgoing-link": true, 9 | "tag-pane": true, 10 | "page-preview": true, 11 | "daily-notes": false, 12 | "templates": false, 13 | "note-composer": true, 14 | "command-palette": true, 15 | "slash-command": false, 16 | "editor-status": true, 17 | "starred": true, 18 | "markdown-importer": false, 19 | "zk-prefixer": false, 20 | "random-note": false, 21 | "outline": true, 22 | "word-count": true, 23 | "slides": false, 24 | "audio-recorder": false, 25 | "workspaces": false, 26 | "file-recovery": true, 27 | "publish": false, 28 | "sync": false 29 | } -------------------------------------------------------------------------------- /03 - Content/Obsidian General Settings.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | creation date: January 09 2023 4 | last modifed: January 09 2023 5 | aliases: [] 6 | --- 7 | Primary Categories: [[01 - Administration]] 8 | Secondary Categories: [[02 - Obsidian]] 9 | Links: [[Obsidian - Getting Started]] 10 | 11 | # [[Obsidian General Settings]] 12 | *** 13 | ## Overview 14 | Basic settings I use to set up my obsidian vault. To begin, navigate to the `Settings` icon in the bottom left of the screen 15 | 16 | ### Editor 17 | 1. *Default view for new tabs*: Reading View 18 | 2. *Default editing mode*: Source mode 19 | 3. *Show line number*: True 20 | 4. *Spellcheck*: True 21 | 22 | ![[obsidian general settings.png]] 23 | 24 | ### Files & Links 25 | 1. *Automatically update internal links*: True 26 | 2. *Default new location for new attachments*: `06 - Images` 27 | 28 | ![[obsidian-files-and-links.png]] 29 | 30 | ### Appearance 31 | 1. *Show inline title*: False 32 | 33 | ### Core Plugins 34 | 1. *Daily Notes:* False 35 | 2. *Slides*: False 36 | 3. *Templates*: False 37 | 4. *Unique Note Creator*: False 38 | 39 | ### Community Plugins 40 | [[Obsidian Plugins]] 41 | 42 | *** 43 | ## Resources: 44 | 45 | | Hyperlink | Info | 46 | | --------- | ---- | 47 | 48 | creation date: January 09 2023 49 | last modifed: January 09 2023 -------------------------------------------------------------------------------- /03 - Content/Obsidian - Git.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | creation date: January 09 2023 4 | last modifed: January 09 2023 5 | aliases: [] 6 | --- 7 | Primary Categories: [[01 - Administration]] 8 | Secondary Categories: [[02 - Obsidian]] 9 | Links: [[Obsidian Plugins]] - [[Obsidian - Getting Started]] 10 | 11 | # [[Obsidian - Git]] 12 | *** 13 | ## Overview 14 | Simple plugin that allows you to backup your [Obsidian](https://obsidian.md) vault to a remote git repository (e.g. private repo on GitHub). 15 | 16 | This plugin assumes you have existing git repository initialized locally and credentials are setup. This is the mechanism by which all your notes are sync'd to the Offpipe repository and shared between consultants. 17 | 18 | ## Installation 19 | Obsidian-Git is a registered Obsidian Community Plugin and can be installed directly from `Settings > Community Plugins > Browse > Obsidian Git` 20 | 21 | ## Settings 22 | 1. Enable `Obsidian Git-` under `Settings > Community Plugins > Obsidian Git` 23 | 2. Navigate to `Settings > Obsidian Git` 24 | 3. Edit the following settings 25 | 1. *Vault Backup Interval*: 60 26 | 2. *Auto Pull Interval*: 10 27 | 3. *Commit message*: FLast {{date}} 28 | 4. *Date placeholder*: MM-DD-YYYY HH:mm:ss 29 | 5. *Pull changes before push*: Enabled (default) 30 | 31 | ## Commands 32 | All associated commands specific to Obsidian git can be reviewed from the Command Pallete (**CTRL + P** to open) 33 | 34 | ![[obsidian-git-cp.png]] 35 | *** 36 | These commands can be added to hotkey combinations which greatly simply the addons use. 37 | 38 | ![[obsidian git settings.png]] 39 | 40 | *** 41 | ## Resources: 42 | 43 | | Hyperlink | Info | 44 | | --------- | ---- | 45 | | [Obsidian Git Github Repo](https://github.com/denolehov/obsidian-git) | Git Repo | 46 | 47 | creation date: January 09 2023 48 | last modifed: January 09 2023 -------------------------------------------------------------------------------- /03 - Content/Templater.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | creation date: January 09 2023 4 | last modifed: January 09 2023 5 | aliases: [] 6 | --- 7 | Primary Categories: [[01 - Administration]] 8 | Secondary Categories: [[02 - Obsidian]] 9 | Links: [[Obsidian Plugins]] - [[Obsidian - Getting Started]] 10 | 11 | # [[Templater]] 12 | *** 13 | ## Overview 14 | [Templater](https://silentvoid13.github.io/Templater/introduction.html) is a template language that lets you generate templates for [Obsidian](https://obsidian.md/) notes. 15 | 16 | ### Usage 17 | - Prompt for template on new note creation (Binded hotkey) 18 | - Add date _created_ automatically 19 | - Update _last updated_ automatically 20 | - Move the note to the appropriate location 21 | - 01 - Primary Categories 22 | - 02 - Secondary Categories 23 | - 03 - Content 24 | *** 25 | ## Installation 26 | Templater is a registered Obsidian Community Plugin and can be installed directly from `Settings > Community Plugins > Browse > Templater` 27 | 28 | *Note: Make sure to **disable** Core Plugin Templates* 29 | 30 | ## Settings 31 | 1. Disable `Templates` under `Settings > Core Plugins > Templates` 32 | 2. Enable `Templater` under `Settings > Community Plugins > Templater` 33 | 3. Navigate to `Settings > Templater` 34 | 4. Edit the following settings 35 | 1. *Template Folder Location*: 04 - Templates 36 | 2. *Trigger Templater on New File Creation*: True 37 | 3. *Template Hotkeys*: 04 - Templates/0400 - General Template 38 | 1. `+` to add hotkey for template triggering 39 | 40 | *Note: Make sure to **disable** core plugin Templates and **enable** Templater * 41 | 42 | *TemplaterSettings* 43 | ![[templater.png]] 44 | 45 | *TemplaterHotkey* 46 | ![[templater-hotkey.png]] 47 | 48 | *** 49 | ## Resources: 50 | 51 | | Hyperlink | Info | 52 | | --------- | ---- | 53 | | [Templater Github Repo](https://github.com/SilentVoid13/Templater) | Github Repo | 54 | | [Templater](https://silentvoid13.github.io/Templater/introduction.html) | Templater Docs | 55 | -------------------------------------------------------------------------------- /04 - Templates/0400 - General Template.md: -------------------------------------------------------------------------------- 1 | <%* 2 | let title = tp.file.title; 3 | var note; 4 | ////////////////////////////////////// Main ////////////////////////////////////// 5 | 6 | // Present selection of Search Tags to user 7 | let tag = await tp.system.suggester(["Primary", "Secondary", "Basic", "Tool", "README", "TTP"], ["Primary", "Secondary", "Basic", "Tool", "README", "TTP"], true) 8 | 9 | await setNoteStructure(tag, title); 10 | 11 | ////////////////////////////////// Functions ///////////////////////////////////// 12 | async function setNoteStructure(note_tag, noteTitle) { 13 | console.log("Getting Struct MD for tag: " + note_tag); 14 | 15 | var struct; 16 | var file_destination; 17 | var isCat = true; 18 | 19 | if (note_tag.startsWith("Primary")) { 20 | struct = "[[0401 - Primary Category]]"; 21 | file_destination = "01 - Primary Categories/"; 22 | } 23 | else if (note_tag.startsWith("Secondary")) { 24 | struct = "[[0402 - Secondary Category]]"; 25 | file_destination = "02 - Secondary Categories/"; 26 | } 27 | else if (note_tag.startsWith("Basic")) { 28 | struct = "[[0405 - Basic]]"; 29 | file_destination = "03 - Content/"; 30 | isCat = false; 31 | } 32 | else if (note_tag.startsWith("Tool")) { 33 | struct = "[[0406 - Tool]]"; 34 | file_destination = "03 - Content/"; 35 | isCat = false; 36 | } 37 | else if (note_tag.startsWith("README")) { 38 | struct = "[[0408 - README]]"; 39 | file_destination = "03 - Content/"; 40 | isCat = false; 41 | } 42 | else { 43 | console.log("You selected an option outside what was expected."); 44 | console.log("Try again."); 45 | } 46 | await buildNote(noteTitle, struct, file_destination, isCat); 47 | } 48 | 49 | async function buildNote(notetitle, content, dest, category){ 50 | let metadata = "[[0404 - Metadata]]"; 51 | let header = "[[0403 - Content Header]]"; 52 | let resources = "[[0408 - Resources]]"; 53 | 54 | var meta = await tp.file.include(metadata); 55 | var body = await tp.file.include(content); 56 | var head = await tp.file.include(header); 57 | var body = await tp.file.include(content); 58 | var resc = await tp.file.include(resources); 59 | 60 | if (category === true) { 61 | await tp.file.move(dest + notetitle); 62 | note = meta + body; 63 | } 64 | else if (category === false) { 65 | await tp.file.move(dest + notetitle); 66 | note = meta + head + body + resc; 67 | } 68 | } 69 | %> 70 | <%* tR += `${note}` %> -------------------------------------------------------------------------------- /04 - Templates/04 - Template Structure/0407 - README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Project logo 4 |

5 | 6 |

Project Title

7 | 8 |
9 | 10 | [![Status](https://img.shields.io/badge/status-active-success.svg)]() 11 | [![GitHub Issues](https://img.shields.io/github/issues/kylelobo/The-Documentation-Compendium.svg)](https://github.com/kylelobo/The-Documentation-Compendium/issues) 12 | [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/kylelobo/The-Documentation-Compendium.svg)](https://github.com/kylelobo/The-Documentation-Compendium/pulls) 13 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE) 14 | 15 |
16 | 17 | --- 18 | 19 |

Few lines describing your project. 20 |
21 |

22 | 23 | ## 📝 Table of Contents 24 | - [About](#about) 25 | - [Getting Started](#getting_started) 26 | - [Deployment](#deployment) 27 | - [Usage](#usage) 28 | - [Built Using](#built_using) 29 | - [TODO](../TODO.md) 30 | - [Contributing](../CONTRIBUTING.md) 31 | - [Authors](#authors) 32 | - [Acknowledgments](#acknowledgement) 33 | 34 | ## 🧐 About 35 | Write about 1-2 paragraphs describing the purpose of your project. 36 | 37 | ## 🏁 Getting Started 38 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See [deployment](#deployment) for notes on how to deploy the project on a live system. 39 | 40 | ### Prerequisites 41 | What things you need to install the software and how to install them. 42 | 43 | ``` 44 | Give examples 45 | ``` 46 | 47 | ### Installing 48 | A step by step series of examples that tell you how to get a development env running. 49 | 50 | Say what the step will be 51 | 52 | ``` 53 | Give the example 54 | ``` 55 | 56 | And repeat 57 | 58 | ``` 59 | until finished 60 | ``` 61 | 62 | End with an example of getting some data out of the system or using it for a little demo. 63 | 64 | ## 🔧 Running the tests 65 | Explain how to run the automated tests for this system. 66 | 67 | ### Break down into end to end tests 68 | Explain what these tests test and why 69 | 70 | ``` 71 | Give an example 72 | ``` 73 | 74 | ### And coding style tests 75 | Explain what these tests test and why 76 | 77 | ``` 78 | Give an example 79 | ``` 80 | 81 | ## 🎈 Usage 82 | Add notes about how to use the system. 83 | 84 | ## 🚀 Deployment 85 | Add additional notes about how to deploy this on a live system. 86 | 87 | ## ⛏️ Built Using 88 | - [MongoDB](https://www.mongodb.com/) - Database 89 | - [Express](https://expressjs.com/) - Server Framework 90 | - [VueJs](https://vuejs.org/) - Web Framework 91 | - [NodeJs](https://nodejs.org/en/) - Server Environment 92 | 93 | ## ✍️ Authors 94 | - [@kylelobo](https://github.com/kylelobo) - Idea & Initial work 95 | 96 | See also the list of [contributors](https://github.com/kylelobo/The-Documentation-Compendium/contributors) who participated in this project. 97 | 98 | ## 🎉 Acknowledgements 99 | - Hat tip to anyone whose code was used 100 | - Inspiration 101 | - References 102 | -------------------------------------------------------------------------------- /.obsidian/workspace.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": { 3 | "id": "803bd50cd286d021", 4 | "type": "split", 5 | "children": [ 6 | { 7 | "id": "6af126196319715f", 8 | "type": "tabs", 9 | "children": [ 10 | { 11 | "id": "eeba3cd71248f10c", 12 | "type": "leaf", 13 | "state": { 14 | "type": "empty", 15 | "state": {} 16 | } 17 | } 18 | ] 19 | } 20 | ], 21 | "direction": "vertical" 22 | }, 23 | "left": { 24 | "id": "04d883b20fab1a98", 25 | "type": "split", 26 | "children": [ 27 | { 28 | "id": "f33f3ef271ad5d49", 29 | "type": "tabs", 30 | "children": [ 31 | { 32 | "id": "9d408fb73f29c8a1", 33 | "type": "leaf", 34 | "state": { 35 | "type": "file-explorer", 36 | "state": { 37 | "sortOrder": "alphabetical" 38 | } 39 | } 40 | }, 41 | { 42 | "id": "fa1d091155953a4e", 43 | "type": "leaf", 44 | "state": { 45 | "type": "search", 46 | "state": { 47 | "query": "", 48 | "matchingCase": false, 49 | "explainSearch": false, 50 | "collapseAll": false, 51 | "extraContext": false, 52 | "sortOrder": "alphabetical" 53 | } 54 | } 55 | }, 56 | { 57 | "id": "5d1acb0eb372732e", 58 | "type": "leaf", 59 | "state": { 60 | "type": "starred", 61 | "state": {} 62 | } 63 | } 64 | ] 65 | } 66 | ], 67 | "direction": "horizontal", 68 | "width": 300 69 | }, 70 | "right": { 71 | "id": "c9584ff9768d1b3f", 72 | "type": "split", 73 | "children": [ 74 | { 75 | "id": "37cd0c8962be4e03", 76 | "type": "tabs", 77 | "children": [ 78 | { 79 | "id": "8f77bb93be0a2f87", 80 | "type": "leaf", 81 | "state": { 82 | "type": "backlink", 83 | "state": { 84 | "collapseAll": false, 85 | "extraContext": false, 86 | "sortOrder": "alphabetical", 87 | "showSearch": false, 88 | "searchQuery": "", 89 | "backlinkCollapsed": false, 90 | "unlinkedCollapsed": true 91 | } 92 | } 93 | }, 94 | { 95 | "id": "99eb5a42c8b91aff", 96 | "type": "leaf", 97 | "state": { 98 | "type": "outgoing-link", 99 | "state": { 100 | "linksCollapsed": false, 101 | "unlinkedCollapsed": true 102 | } 103 | } 104 | }, 105 | { 106 | "id": "377373a2378ff61d", 107 | "type": "leaf", 108 | "state": { 109 | "type": "tag", 110 | "state": { 111 | "sortOrder": "frequency", 112 | "useHierarchy": true 113 | } 114 | } 115 | }, 116 | { 117 | "id": "3bca36c24ff7bf40", 118 | "type": "leaf", 119 | "state": { 120 | "type": "outline", 121 | "state": {} 122 | } 123 | } 124 | ] 125 | } 126 | ], 127 | "direction": "horizontal", 128 | "width": 300, 129 | "collapsed": true 130 | }, 131 | "left-ribbon": { 132 | "hiddenItems": { 133 | "switcher:Open quick switcher": false, 134 | "graph:Open graph view": false, 135 | "canvas:Create new canvas": false, 136 | "command-palette:Open command palette": false, 137 | "templater-obsidian:Templater": false 138 | } 139 | }, 140 | "active": "eeba3cd71248f10c", 141 | "lastOpenFiles": [ 142 | "04 - Templates/0400 - General Template.md", 143 | "04 - Templates/04 - Template Structure/0409 - Resources.md", 144 | "04 - Templates/04 - Template Structure/0408 - Personal.md", 145 | "04 - Templates/04 - Template Structure/0407 - README.md", 146 | "04 - Templates/04 - Template Structure/0406 - Tool.md", 147 | "04 - Templates/04 - Template Structure/0405 - Basic.md", 148 | "04 - Templates/04 - Template Structure/0404 - Metadata.md", 149 | "04 - Templates/04 - Template Structure/0403 - Content Header.md", 150 | "03 - Content/Obsidian - Git.md", 151 | "03 - Content/Templater.md" 152 | ] 153 | } -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/styles.css: -------------------------------------------------------------------------------- 1 | .templater_search { 2 | width: calc(100% - 20px); 3 | } 4 | 5 | .templater_div { 6 | border-top: 1px solid var(--background-modifier-border); 7 | } 8 | 9 | .templater_div > .setting-item { 10 | border-top: none !important; 11 | align-self: center; 12 | } 13 | 14 | .templater_div > .setting-item > .setting-item-control { 15 | justify-content: space-around; 16 | padding: 0; 17 | width: 100%; 18 | } 19 | 20 | .templater_div 21 | > .setting-item 22 | > .setting-item-control 23 | > .setting-editor-extra-setting-button { 24 | align-self: center; 25 | } 26 | 27 | .templater_donating { 28 | margin: 10px; 29 | } 30 | 31 | .templater_title { 32 | margin: 0; 33 | padding: 0; 34 | margin-top: 5px; 35 | text-align: center; 36 | } 37 | 38 | .templater_template { 39 | align-self: center; 40 | margin-left: 5px; 41 | margin-right: 5px; 42 | width: 70%; 43 | } 44 | 45 | .templater_cmd { 46 | margin-left: 5px; 47 | margin-right: 5px; 48 | font-size: 14px; 49 | width: 100%; 50 | } 51 | 52 | .templater_div2 > .setting-item { 53 | align-content: center; 54 | justify-content: center; 55 | } 56 | 57 | .templater-prompt-div { 58 | display: flex; 59 | } 60 | 61 | .templater-prompt-form { 62 | display: flex; 63 | flex-grow: 1; 64 | } 65 | 66 | .templater-prompt-input { 67 | flex-grow: 1; 68 | } 69 | 70 | .templater-button-div { 71 | display: flex; 72 | flex-direction: column; 73 | align-items: center; 74 | margin-top: 1rem; 75 | } 76 | 77 | textarea.templater-prompt-input { 78 | height: 10rem; 79 | } 80 | 81 | textarea.templater-prompt-input:focus { 82 | border-color: var(--interactive-accent); 83 | } 84 | 85 | .cm-s-obsidian .templater-command-bg { 86 | left: 0px; 87 | right: 0px; 88 | background-color: var(--background-primary-alt); 89 | } 90 | 91 | .cm-s-obsidian .cm-templater-command { 92 | font-size: 0.85em; 93 | font-family: var(--font-monospace); 94 | line-height: 1.3; 95 | } 96 | 97 | .cm-s-obsidian .templater-inline .cm-templater-command { 98 | background-color: var(--background-primary-alt); 99 | } 100 | 101 | .cm-s-obsidian .cm-templater-command.cm-templater-opening-tag { 102 | font-weight: bold; 103 | } 104 | 105 | .cm-s-obsidian .cm-templater-command.cm-templater-closing-tag { 106 | font-weight: bold; 107 | } 108 | 109 | .cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag { 110 | color: #008bff; 111 | } 112 | 113 | .cm-s-obsidian .cm-templater-command.cm-templater-execution-tag { 114 | color: #c0d700; 115 | } 116 | 117 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-keyword { 118 | color: #00a7aa; 119 | font-weight: normal; 120 | } 121 | 122 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-atom { 123 | color: #f39b35; 124 | } 125 | 126 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-number { 127 | color: #a06fca; 128 | } 129 | 130 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-type { 131 | color: #a06fca; 132 | } 133 | 134 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-def { 135 | color: #98e342; 136 | } 137 | 138 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-property { 139 | color: #d4d4d4; 140 | } 141 | 142 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-variable { 143 | color: #d4d4d4; 144 | } 145 | 146 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-variable-2 { 147 | color: #da7dae; 148 | } 149 | 150 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-variable-3 { 151 | color: #a06fca; 152 | } 153 | 154 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-type.cm-def { 155 | color: #fc4384; 156 | } 157 | 158 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-property.cm-def { 159 | color: #fc4384; 160 | } 161 | 162 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-callee { 163 | color: #fc4384; 164 | } 165 | 166 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-operator { 167 | color: #fc4384; 168 | } 169 | 170 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-qualifier { 171 | color: #fc4384; 172 | } 173 | 174 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-tag { 175 | color: #fc4384; 176 | } 177 | 178 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-tag.cm-bracket { 179 | color: #d4d4d4; 180 | } 181 | 182 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-attribute { 183 | color: #a06fca; 184 | } 185 | 186 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-comment { 187 | color: #696d70; 188 | } 189 | 190 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-comment.cm-tag { 191 | color: #fc4384; 192 | } 193 | 194 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute { 195 | color: #d4d4d4; 196 | } 197 | 198 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-string { 199 | color: #e6db74; 200 | } 201 | 202 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-string-2 { 203 | color: #f39b35; 204 | } 205 | 206 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-meta { 207 | color: #d4d4d4; 208 | background: inherit; 209 | } 210 | 211 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-builtin { 212 | color: #fc4384; 213 | } 214 | 215 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-header { 216 | color: #da7dae; 217 | } 218 | 219 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-hr { 220 | color: #98e342; 221 | } 222 | 223 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-link { 224 | color: #696d70; 225 | } 226 | 227 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-error { 228 | border-bottom: 1px solid #c42412; 229 | } 230 | 231 | .theme-dark .cm-s-obsidian pre.HyperMD-codeblock .cm-keyword { 232 | font-weight: normal; 233 | } 234 | 235 | .theme-dark 236 | .cm-s-obsidian 237 | .cm-templater-command.CodeMirror-activeline-background { 238 | background: #272727; 239 | } 240 | 241 | .theme-dark .cm-s-obsidian .cm-templater-command.CodeMirror-matchingbracket { 242 | outline: 1px solid grey; 243 | color: #d4d4d4 !important; 244 | } 245 | 246 | .CodeMirror-hints { 247 | position: absolute; 248 | z-index: 10; 249 | overflow: hidden; 250 | list-style: none; 251 | 252 | margin: 0; 253 | padding: 2px; 254 | 255 | -webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 256 | -moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 257 | box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 258 | border-radius: 3px; 259 | border: 1px solid silver; 260 | 261 | background: white; 262 | font-size: 90%; 263 | font-family: monospace; 264 | 265 | max-height: 20em; 266 | overflow-y: auto; 267 | } 268 | 269 | .CodeMirror-hint { 270 | margin: 0; 271 | padding: 0 4px; 272 | border-radius: 2px; 273 | white-space: pre; 274 | color: black; 275 | cursor: pointer; 276 | } 277 | 278 | li.CodeMirror-hint-active { 279 | background: #08f; 280 | color: white; 281 | } 282 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-git/styles.css: -------------------------------------------------------------------------------- 1 | @keyframes loading { 2 | 0% { 3 | transform: rotate(0deg); 4 | } 5 | 6 | 100% { 7 | transform: rotate(360deg); 8 | } 9 | } 10 | 11 | .workspace-leaf-content[data-type='git-view'] .view-content { 12 | padding: 0; 13 | } 14 | 15 | .loading>svg { 16 | animation: 2s linear infinite loading; 17 | transform-origin: 50% 50%; 18 | display: inline-block; 19 | } 20 | 21 | .obsidian-git-center { 22 | margin: auto; 23 | text-align: center; 24 | width: 50%; 25 | } 26 | 27 | .obsidian-git-textarea { 28 | display: block; 29 | margin-left: auto; 30 | margin-right: auto; 31 | } 32 | 33 | .obsidian-git-center-button { 34 | display: block; 35 | margin: 20px auto; 36 | } 37 | 38 | .tooltip.mod-left { 39 | overflow-wrap: break-word; 40 | } 41 | 42 | .tooltip.mod-right { 43 | overflow-wrap: break-word; 44 | } 45 | 46 | .obsidian-git-shortcuts { 47 | margin: 10px; 48 | } 49 | 50 | .diff-err { 51 | height: 100%; 52 | display: flex; 53 | justify-content: center; 54 | flex-direction: column; 55 | align-items: center; 56 | } 57 | 58 | .diff-err-sign { 59 | font-size: 2em; 60 | } 61 | 62 | .workspace-leaf-content[data-type="diff-view"] .d2h-d-none { 63 | display: none; 64 | } 65 | 66 | .workspace-leaf-content[data-type="diff-view"] .d2h-wrapper { 67 | text-align: left; 68 | } 69 | 70 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-header { 71 | background-color: var(--background-primary); 72 | border-bottom: 1px solid var(--interactive-accent); 73 | font-family: var(--font-monospace); 74 | height: 35px; 75 | padding: 5px 10px; 76 | } 77 | 78 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-header, 79 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-stats { 80 | display: -webkit-box; 81 | display: -ms-flexbox; 82 | display: flex; 83 | } 84 | 85 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-stats { 86 | font-size: 14px; 87 | margin-left: auto; 88 | } 89 | 90 | .workspace-leaf-content[data-type="diff-view"] .d2h-lines-added { 91 | border: 1px solid #b4e2b4; 92 | border-radius: 5px 0 0 5px; 93 | color: #399839; 94 | padding: 2px; 95 | text-align: right; 96 | vertical-align: middle; 97 | } 98 | 99 | .workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted { 100 | border: 1px solid #e9aeae; 101 | border-radius: 0 5px 5px 0; 102 | color: #c33; 103 | margin-left: 1px; 104 | padding: 2px; 105 | text-align: left; 106 | vertical-align: middle; 107 | } 108 | 109 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper { 110 | -webkit-box-align: center; 111 | -ms-flex-align: center; 112 | align-items: center; 113 | display: -webkit-box; 114 | display: -ms-flexbox; 115 | display: flex; 116 | font-size: 15px; 117 | width: 100%; 118 | } 119 | 120 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-name { 121 | overflow-x: hidden; 122 | text-overflow: ellipsis; 123 | white-space: nowrap; 124 | } 125 | 126 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper { 127 | border: 1px solid var(--background-modifier-border); 128 | border-radius: 3px; 129 | margin-bottom: 1em; 130 | } 131 | 132 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse { 133 | -webkit-box-pack: end; 134 | -ms-flex-pack: end; 135 | -webkit-box-align: center; 136 | -ms-flex-align: center; 137 | align-items: center; 138 | border: 1px solid var(--background-modifier-border); 139 | border-radius: 3px; 140 | cursor: pointer; 141 | display: none; 142 | font-size: 12px; 143 | justify-content: flex-end; 144 | padding: 4px 8px; 145 | } 146 | 147 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected { 148 | background-color: #c8e1ff; 149 | } 150 | 151 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input { 152 | margin: 0 4px 0 0; 153 | } 154 | 155 | .workspace-leaf-content[data-type="diff-view"] .d2h-diff-table { 156 | border-collapse: collapse; 157 | font-family: Menlo, Consolas, monospace; 158 | font-size: 13px; 159 | width: 100%; 160 | } 161 | 162 | .workspace-leaf-content[data-type="diff-view"] .d2h-files-diff { 163 | width: 100%; 164 | } 165 | 166 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff { 167 | overflow-y: hidden; 168 | } 169 | 170 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff { 171 | display: inline-block; 172 | margin-bottom: -8px; 173 | margin-right: -4px; 174 | overflow-x: scroll; 175 | overflow-y: hidden; 176 | width: 50%; 177 | } 178 | 179 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line { 180 | padding: 0 8em; 181 | } 182 | 183 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line, 184 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line { 185 | display: inline-block; 186 | -webkit-user-select: none; 187 | -moz-user-select: none; 188 | -ms-user-select: none; 189 | user-select: none; 190 | white-space: nowrap; 191 | width: 100%; 192 | } 193 | 194 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line { 195 | padding: 0 4.5em; 196 | } 197 | 198 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn { 199 | word-wrap: normal; 200 | background: none; 201 | display: inline-block; 202 | padding: 0; 203 | -webkit-user-select: text; 204 | -moz-user-select: text; 205 | -ms-user-select: text; 206 | user-select: text; 207 | vertical-align: middle; 208 | white-space: pre; 209 | width: 100%; 210 | } 211 | 212 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, 213 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del { 214 | background-color: #ffb6ba; 215 | } 216 | 217 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, 218 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del { 219 | background-color: #8d232881; 220 | } 221 | 222 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, 223 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, 224 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del, 225 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins { 226 | border-radius: 0.2em; 227 | display: inline-block; 228 | margin-top: -1px; 229 | text-decoration: none; 230 | vertical-align: middle; 231 | } 232 | 233 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, 234 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins { 235 | background-color: #97f295; 236 | text-align: left; 237 | } 238 | 239 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, 240 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins { 241 | background-color: #1d921996; 242 | text-align: left; 243 | } 244 | 245 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix { 246 | word-wrap: normal; 247 | background: none; 248 | display: inline; 249 | padding: 0; 250 | white-space: pre; 251 | } 252 | 253 | .workspace-leaf-content[data-type="diff-view"] .line-num1 { 254 | float: left; 255 | } 256 | 257 | .workspace-leaf-content[data-type="diff-view"] .line-num1, 258 | .workspace-leaf-content[data-type="diff-view"] .line-num2 { 259 | -webkit-box-sizing: border-box; 260 | box-sizing: border-box; 261 | overflow: hidden; 262 | padding: 0 0.5em; 263 | text-overflow: ellipsis; 264 | width: 3.5em; 265 | } 266 | 267 | .workspace-leaf-content[data-type="diff-view"] .line-num2 { 268 | float: right; 269 | } 270 | 271 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber { 272 | background-color: var(--background-primary); 273 | border: solid var(--background-modifier-border); 274 | border-width: 0 1px; 275 | -webkit-box-sizing: border-box; 276 | box-sizing: border-box; 277 | color: var(--text-muted); 278 | cursor: pointer; 279 | display: inline-block; 280 | position: absolute; 281 | text-align: right; 282 | width: 7.5em; 283 | } 284 | 285 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after { 286 | content: "\200b"; 287 | } 288 | 289 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber { 290 | background-color: var(--background-primary); 291 | border: solid var(--background-modifier-border); 292 | border-width: 0 1px; 293 | -webkit-box-sizing: border-box; 294 | box-sizing: border-box; 295 | color: var(--text-muted); 296 | cursor: pointer; 297 | display: inline-block; 298 | overflow: hidden; 299 | padding: 0 0.5em; 300 | position: absolute; 301 | text-align: right; 302 | text-overflow: ellipsis; 303 | width: 4em; 304 | } 305 | 306 | .workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr { 307 | position: relative; 308 | } 309 | 310 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after { 311 | content: "\200b"; 312 | } 313 | 314 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder, 315 | .workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder { 316 | background-color: var(--background-primary); 317 | border-color: var(--background-modifier-border); 318 | } 319 | 320 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix, 321 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber, 322 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber, 323 | .workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder { 324 | -webkit-user-select: none; 325 | -moz-user-select: none; 326 | -ms-user-select: none; 327 | user-select: none; 328 | } 329 | 330 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber, 331 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber { 332 | direction: rtl; 333 | } 334 | 335 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del { 336 | background-color: #fee8e9; 337 | border-color: #e9aeae; 338 | } 339 | 340 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins { 341 | background-color: #dfd; 342 | border-color: #b4e2b4; 343 | } 344 | 345 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del { 346 | background-color: #521b1d83; 347 | border-color: #691d1d73; 348 | } 349 | 350 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins { 351 | background-color: rgba(30, 71, 30, 0.5); 352 | border-color: #13501381; 353 | } 354 | 355 | .workspace-leaf-content[data-type="diff-view"] .d2h-info { 356 | background-color: var(--background-primary); 357 | border-color: var(--background-modifier-border); 358 | color: var(--text-normal); 359 | } 360 | 361 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-del.d2h-change { 362 | background-color: #fdf2d0; 363 | } 364 | 365 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-del.d2h-change { 366 | background-color: #55492480; 367 | } 368 | 369 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-ins.d2h-change { 370 | background-color: #ded; 371 | } 372 | 373 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-ins.d2h-change { 374 | background-color: rgba(37, 78, 37, 0.418); 375 | } 376 | 377 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper { 378 | margin-bottom: 10px; 379 | } 380 | 381 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a { 382 | color: #3572b0; 383 | text-decoration: none; 384 | } 385 | 386 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a:visited { 387 | color: #3572b0; 388 | } 389 | 390 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header { 391 | text-align: left; 392 | } 393 | 394 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title { 395 | font-weight: 700; 396 | } 397 | 398 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line { 399 | display: -webkit-box; 400 | display: -ms-flexbox; 401 | display: flex; 402 | text-align: left; 403 | } 404 | 405 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list { 406 | display: block; 407 | list-style: none; 408 | margin: 0; 409 | padding: 0; 410 | } 411 | 412 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list>li { 413 | border-bottom: 1px solid var(--background-modifier-border); 414 | margin: 0; 415 | padding: 5px 10px; 416 | } 417 | 418 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list>li:last-child { 419 | border-bottom: none; 420 | } 421 | 422 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-switch { 423 | cursor: pointer; 424 | display: none; 425 | font-size: 10px; 426 | } 427 | 428 | .workspace-leaf-content[data-type="diff-view"] .d2h-icon { 429 | fill: currentColor; 430 | margin-right: 10px; 431 | vertical-align: middle; 432 | } 433 | 434 | .workspace-leaf-content[data-type="diff-view"] .d2h-deleted { 435 | color: #c33; 436 | } 437 | 438 | .workspace-leaf-content[data-type="diff-view"] .d2h-added { 439 | color: #399839; 440 | } 441 | 442 | .workspace-leaf-content[data-type="diff-view"] .d2h-changed { 443 | color: #d0b44c; 444 | } 445 | 446 | .workspace-leaf-content[data-type="diff-view"] .d2h-moved { 447 | color: #3572b0; 448 | } 449 | 450 | .workspace-leaf-content[data-type="diff-view"] .d2h-tag { 451 | background-color: var(--background-primary); 452 | display: -webkit-box; 453 | display: -ms-flexbox; 454 | display: flex; 455 | font-size: 10px; 456 | margin-left: 5px; 457 | padding: 0 2px; 458 | } 459 | 460 | .workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag { 461 | border: 2px solid #c33; 462 | } 463 | 464 | .workspace-leaf-content[data-type="diff-view"] .d2h-added-tag { 465 | border: 1px solid #399839; 466 | } 467 | 468 | .workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag { 469 | border: 1px solid #d0b44c; 470 | } 471 | 472 | .workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag { 473 | border: 1px solid #3572b0; 474 | } --------------------------------------------------------------------------------