qmd
Local semantic search for docs, notes, knowledge bases. INVOKE THIS SKILL when user: - Asks to "search my notes/docs/vault/obsidian" - Wants to "find" something in their knowledge base - Says "what did I write about X" - Asks "do I have notes on X" - Needs context from their local markdown files - Mentions "qmd" directly - Asks about journal entries, meeting notes, or personal documentation Trigger phrases: "search notes", "find in docs", "search obsidian", "what do my notes say", "look in my vault"
SKILL.md
| Name | qmd |
| Description | Local semantic search for docs, notes, knowledge bases. INVOKE THIS SKILL when user: - Asks to "search my notes/docs/vault/obsidian" - Wants to "find" something in their knowledge base - Says "what did I write about X" - Asks "do I have notes on X" - Needs context from their local markdown files - Mentions "qmd" directly - Asks about journal entries, meeting notes, or personal documentation Trigger phrases: "search notes", "find in docs", "search obsidian", "what do my notes say", "look in my vault" |
NixOS Configuration
Personal NixOS configuration with Home Manager.
Initial Setup
See docs/initial-setup.md for SSH key setup and first-time configuration.
Applying Configuration
Platform-agnostic rebuild (works on both NixOS and macOS):
reload
Or manually:
# NixOS
sudo nixos-rebuild switch --flake .#framework13
# macOS (nix-darwin)
sudo darwin-rebuild switch --flake .#flomac
Directory Structure
modules/- Modular configuration filesprograms/- Application and service configurationssecrets/- sops-nix secret declarations per host
users/- User-specific configurationshosts/- Host-specific configurationssecrets/- Encrypted secret files (safe to commit)scripts/- Helper scripts (pre-commit hooks, etc.)
Secrets Management
Uses sops-nix with age encryption.
Setup (new machine)
-
Copy your age key:
# From existing machine scp ~/.config/sops/age/keys.txt user@newmachine:.config/sops/age/keys.txt -
Enter devShell for tools:
nix develop
Adding a new secret
-
Edit the encrypted secrets file:
sops secrets/framework13.yaml # or flomac.yaml, tts-pi.yaml -
Add your secret in YAML format:
my_new_secret: "the secret value" -
Declare the secret in the corresponding module (
modules/secrets/*.nix):sops.secrets.my_new_secret = {}; -
Rebuild:
reload # or nixos-rebuild/darwin-rebuild
Using secrets
Secrets are decrypted at activation time:
| Platform | Location |
|---|---|
| NixOS | /run/secrets/<name> |
| macOS | ~/.config/sops-nix/secrets/<name> |
In shell (env var):
programs.zsh.initExtra = ''
export MY_SECRET="$(cat ${config.sops.secrets.my_new_secret.path} 2>/dev/null)"
'';
In systemd service:
systemd.services.myservice.serviceConfig = {
EnvironmentFile = config.sops.secrets.my_new_secret.path;
};
Secret files per host
| File | Host | Can decrypt |
|---|---|---|
secrets/framework13.yaml | framework13 | You (personal key) |
secrets/flomac.yaml | flomac | You (personal key) |
secrets/tts-pi.yaml | tts-pi | You + Pi (host key) |
secrets/common.yaml | All | You + Pi |
Adding a new host
-
Get the host's age key (from SSH host key):
ssh user@host 'cat /etc/ssh/ssh_host_ed25519_key.pub' | ssh-to-age -
Add the key to
.sops.yamlunderkeys: -
Add a creation rule for the host's secrets file
-
Create
modules/secrets/<host>.nixwith sops config
Pre-commit hook
Lefthook prevents committing unencrypted secrets. Install hooks:
nix develop # auto-installs via shellHook
# or manually: lefthook install