Configuration

Arcus supports global and per-project configuration.

See also: Configuration for the auto-generated list of settings keys.

Configuration Editor

You can edit settings directly in Arcus via the configuration editor.

  • open-config-view opens the global settings editor.
  • open-project-config opens project-scoped settings for a selected project.
  • Everything listed in Configuration is intended to be editable there.
  • Mouse wheel scrolling in the editor uses smooth scrolling.
  • Press / to start filtering settings by namespace/key.
  • Press Enter to keep the current filter and exit input mode.
  • Press Esc while filtering to clear the filter and return to the full list.

Arcus stores two kinds of config data:

  • Settings: user-facing options with schema (documented in Configuration).
  • State: internal workspace/editor data (recent files, package status, quick commands, etc).

All setting keys live in :settings and use domain-prefixed kebab-case for discoverability (for example: md-export-font-size, lsp-c-command, repl-open-as-overlay).

Precedence

If the same setting is configured in both the configuration editor and ~/.config/arcus/init.lisp, the value from init.lisp wins for the running session.

Where config lives

  • Global config files: ~/.config/arcus/
  • User startup file: ~/.config/arcus/init.lisp
  • Project overrides: stored under ~/.config/arcus/projects/.../config.lisp

Scopes

  • :global applies everywhere.
  • :project applies only to one project.
  • :auto uses project when available, otherwise global.

Defining a setting

Register schema once:

(define-setting :settings :auto-format-on-save
  :type :boolean
  :default t
  :description "Automatically format buffers before saving.")

All settings can be overridden globally and per-project. Use :scope when reading/writing values to select a layer (or use :auto for project-first fallback).

Reading and writing values

Read a value:

(config-get :settings :auto-format-on-save
                  :scope :global
                  :type :boolean
                  :default t)

Write a value:

(config-set :settings :auto-format-on-save nil
                  :scope :global
                  :type :boolean
                  :default t)

Project-scoped read:

(config-get :settings :markdown-transclusion-max-lines
                  :buffer buffer
                  :scope :auto
                  :type :integer
                  :min 1
                  :default 30)

Populating defaults

Populate missing schema defaults:

(config-ensure-schema-defaults :settings :scope :global)

Project defaults:

(config-ensure-schema-defaults :settings
                               :scope :project
                               :project-path project-path)