Skip to content

Config

Two config files

overseer merges two config files on every run. The local file always takes precedence:

FilePurpose
brain/overseer/config.yamlShared, portable, committed to your brain repo
~/.config/overseer/config.local.yamlMachine-local overrides — tokens, paths, never committed

Inspect the merged result at any time:

overseer config           # human-readable summary
overseer config --format json  # full config as JSON

JSON Schema

The full JSON Schema for config.yaml is available via:

overseer config schema

You can also point your editor at the schema for inline validation and autocomplete:

# brain/overseer/config.yaml
# yaml-language-server: $schema=https://arthurvasconcelos.github.io/overseer/schema.json

Config keys

secrets

secrets:
  environments:
    p24: "he7em6mxcdlsewgnzrqldjizi"  # alias → 1Password account ID
KeyDescription
secrets.environmentsMap of alias → 1Password account ID. Used with overseer run --env <alias>.

integrations

integrations:
  jira:
    - name: work
      base_url: https://company.atlassian.net
      email: you@company.com
      token: "op://Work/Jira/token"
      op_account: work
  slack:
    - name: work
      token: "op://Work/Slack/token"
  google:
    - name: personal
      credentials_doc: "op://Personal/Google/credentials_json"
  github:
    - name: personal
      token: "op://Personal/GitHub/token"
  gitlab:
    - name: work
      base_url: https://gitlab.company.com
      token: "op://Work/GitLab/token"
KeyFields
integrations.jira[]name, base_url, email, token, op_account
integrations.slack[]name, token, op_account
integrations.google[]name, credentials_doc, op_account
integrations.github[]name, token, op_account
integrations.gitlab[]name, base_url, token, op_account

git

git:
  defaults:
    user_name: Arthur Vasconcelos
    gpg_format: ssh
    gpg_ssh_program: /Applications/1Password.app/Contents/MacOS/op-ssh-sign
    commit_gpgsign: true
  profiles:
    - name: personal
      email: arthur@personal.com
      signing_key: "op://Personal/SSH Key/public key"
    - name: work
      email: arthur@company.com
      signing_key: "op://Work/SSH Key/public key"
      op_account: work
KeyDescription
git.defaultsShared settings applied to all profiles unless overridden
git.profiles[]Named git identities. Fields: name, email, signing_key, user_name, gpg_format, gpg_ssh_program, commit_gpgsign, op_account

system (machine-local)

system:
  repos_path: ~/repos
  brain_path: ~/brain
KeyDescription
system.repos_pathWhere managed repos are cloned
system.brain_pathOverride brain directory path for this machine

These belong in config.local.yaml, not the shared brain config.


brain

brain:
  path: ~/brain
  url: git@github.com:you/brain.git
  git_profile: personal
KeyDescription
brain.pathCanonical brain path (portable across machines)
brain.urlGit remote for cloning and pushing
brain.git_profileGit profile to use for brain commits

obsidian

obsidian:
  vault_path: ~/Documents/Notes
  vault_name: Notes
  daily_notes_folder: Daily
  templates_folder: Templates
  default_folder: Inbox
KeyDescription
obsidian.vault_pathAbsolute path to your Obsidian vault
obsidian.vault_nameVault name as registered in Obsidian
obsidian.daily_notes_folderFolder for daily notes
obsidian.templates_folderFolder for note templates
obsidian.default_folderDefault folder for new notes

brew

brew:
  brewfile: overseer/Brewfile
KeyDescription
brew.brewfileBrewfile path relative to repos_path

repos

repos:
  - name: brain
    url: git@github.com:you/brain.git
    path: ~/brain
    git_profile: personal
  - name: work-api
    url: git@gitlab.company.com:team/api.git
    path: ~/repos/work/api
    git_profile: work
    readonly: false
FieldDescription
nameDisplay name
urlGit remote URL
pathLocal path (absolute or ~-prefixed)
git_profileGit identity to apply
readonlyIf true, repos pull skips this repo