Table of contents

Context

I was using Obsidian for a while at first during my first year of university, but I stopped using it, then when I started studying Offensive Security I wanted to have a more systematic note taking methodology, so I went back to it.

The Setup

I have a vault on my laptop, and I use Obsidian Live Sync, to sync it to my homelab, so I can access it from anywhere and have a backup of my notes. I also forked a plugin to make my own Inline Properties that allows me to store variables in a single Markdown file and reference them in my snippets, supporting the preview and reading modes. It allows me to easily copy/paste ready commands. That is especially useful for my pentesting notes, where I have a lot of commands that I want to be able to copy/paste easily, and that often have variables that change from one engagement to another (like the target IP address).

Obsidian Live Sync

I have set up an endpoint on my server that uses CouchDB to store my notes. All CouchDB endpoints are secured via a HTTP Basic Authentication process. HTTPs is also used to ensure no leak of user/password. Rate-limiting is also implemented at the cloudflare-level to prevent brute-forcing. Notes are end-to-end encrypted, thus my server store only encrypted data. All the rest of the syncing process is handled on the Obsidian Live Sync side.

  obsidian-db:
    image: dhi.io/couchdb:3
    restart: unless-stopped
    environment:
      - COUCHDB_USER=$USER
      - COUCHDB_PASSWORD=$SUPER_SECRET_PASSWORD
    volumes:
      - couchdb_data:/opt/couchdb/data
  volumes:
  - couchdb_data:

Obsidian Inline Properties

The plugin is pretty straightforward, it allows you to define variables in a single Markdown file, and then reference them in your snippets anywhere inside the vault. The variables are defined in the format key:: value, and can be referenced using {{key}}. I forked it from the original Live Variables plugin because I needed something straightforward that supports the live-preview and reading modes, that allows me to easily copy/paste ready commands and to easily reference variables. Then I used Claude to completely rewrite the plugin to fit my needs. After that I decided to publish it on the Obsidian community plugins here, and I also made it open-source on GitHub, so anyone can use it and contribute to it if they want.

That’s it for my Obsidian setup, pretty efficient and minimal !