Obsidian Vault Local Setup
Local configuration of the Obsidian vault on Ubuntu 24.04 (HP EliteBook 845 G8) with a public subfolder connected to GitHub and deployed via MkDocs Material.
Folder structure
~/obsidian/
├── .obsidian/ ← Obsidian config, plugins (local only)
├── 0_inbox/ ← raw captures, voice transcripts
├── 1_journal/
├── 2_areas/
├── 3_projects/
├── 4_resources/
├── 5_system/ ← templates, workflow notes
├── 6_archive/
└── public/ ← separate git repo (obsidian-public)
├── .git/
├── .github/workflows/
├── docs/
│ ├── azure/
│ ├── devops/
│ ├── homelab/
│ ├── portfolio/
│ └── til/
└── mkdocs.yml
The public/ folder is an independent git repository nested inside the vault. The outer vault has no git — only public/ is version controlled.
Git isolation strategy
The public/ repo .gitignore excludes:
.obsidian/ ← plugins, API keys, personal config
_inbox/ ← raw unprocessed notes
site/ ← MkDocs build output
*.canvas ← Obsidian canvas files
This ensures only finished, intentional content reaches the public repository.
Daily publishing workflow
# 1. Write note in Obsidian, save to ~/obsidian/public/docs/
# 2. When ready to publish:
cd ~/obsidian/public
git add docs/
git commit -m "add: note title"
git push
# GitHub Actions builds and deploys automatically
No auto-commit. Every push is intentional — the public git history is clean and visible to potential employers.
GitHub Actions pipeline
On every push to main:
- Installs
mkdocs<2.0andmkdocs-material - Runs
mkdocs gh-deploy --force - Pushes built site to
gh-pagesbranch - GitHub Pages serves at
notes.serg-markovich.de
Full pipeline: deploy.yml
DNS configuration
Cloudflare DNS:
Type: CNAME
Name: notes
Target: serg-markovich.github.io
Proxy: DNS only (grey cloud)
SSL is handled automatically by GitHub Pages via Let's Encrypt.