Skip to content

feat: User-editable config file support (dotfile / JSON / sync to app config) #223

@h4ksclaw

Description

@h4ksclaw

Summary

Add support for user-editable configuration files that sync into the app's runtime config — e.g. a dotfile (~/.obsidianirc/config.json or similar), a JSON/YAML config file, or any generic mechanism so users can version-control and edit their IRC client config outside the app UI.

Motivation

Power users want to manage their IRC configuration as text files — versioned in dotfiles repos, editable in $EDITOR, scriptable, and portable across machines. Right now if config is only editable through the in-app UI (or not externally accessible at all), users can't:

  • Back up or sync config via git/stow/dotbot/etc.
  • Script config generation or template it
  • Share partial config snippets easily
  • Migrate machines without manual re-entry

Proposed scope

  • Config file path — e.g. ~/.obsidianirc/config.json or ~/.config/obsidianirc/config.yaml (XDG-compliant)
  • Format — JSON (or YAML) covering: servers, channels, identities, keybinds, theme prefs, etc.
  • Sync behavior — app reads file on startup (and optionally watches for changes / has a reload command)
  • Write-back (optional) — option to persist current UI state back to the file
  • No UI breakage — file-based config coexists with existing in-app settings; file takes precedence or merges

Example shape (JSON)

{
  "servers": {
    "Libera": {
      "host": "irc.libera.chat",
      "port": 6697,
      "tls": true,
      "nick": "mynick",
      "channels": ["#lobby", "#yourproject"]
    }
  },
  "identity": {
    "realname": "My Name",
    "user": "myuser"
  },
  "appearance": {
    "theme": "dark",
    "fontSize": 14
  }
}

Additional context

Generic use case — not tied to any particular OS or package manager. Should work on Linux, macOS, Windows, etc. equally well.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions