pub struct Config {Show 17 fields
pub kanban: KanbanSection,
pub issues_dir: PathBuf,
pub milestones_dir: Option<PathBuf>,
pub teams: IndexMap<String, Team>,
pub cycles: IndexMap<String, PlanningCycle>,
pub templates: IndexMap<String, IssueTemplate>,
pub planning: PlanningConfig,
pub categories: CategoryConfig,
pub transitions: TransitionConfig,
pub triage: Option<TriageConfig>,
pub editor: Option<String>,
pub viewer: Option<String>,
pub agent: Option<String>,
pub state: StateConfig,
pub export: ExportConfig,
pub keybindings: KeyBindings,
pub custom_attributes: CustomAttributes,
}Expand description
The project configuration file (tix.toml).
Fields§
§kanban: KanbanSectionNamed board configurations ([kanban]). Always ≥1 after load.
issues_dir: PathBufDirectory holding issue files, relative to the repo root.
milestones_dir: Option<PathBuf>Directory holding milestone markdown files, relative to the repo
root. None → the default docs/milestones.
teams: IndexMap<String, Team>Named teams ([teams.<label>]), in declaration order.
cycles: IndexMap<String, PlanningCycle>Named cycles ([cycles.<name>]), in declaration order.
templates: IndexMap<String, IssueTemplate>Named new-issue templates ([templates.<name>]), in declaration order.
Optional and absent by default: a project with no templates writes no section, and the F4 New Issue mode simply offers none.
planning: PlanningConfigPlanning presets and the auto-cycle counter ([planning]).
categories: CategoryConfig[categories]: the global vocabulary and safe default. Omitted when
untouched, so a legacy file gains no key on save.
transitions: TransitionConfig[transitions]: the workflow policy. Omitted when untouched.
triage: Option<TriageConfig>[triage]: the normal columns that make up the triage inbox.
Mission triage-inbox-review-flow-01M3C600. The inbox is opt-in: None means
no section, so no inbox, and every tix triage command refuses by naming the
missing section. tix init writes one, with the board columns it needs, so
a new repository starts with the inbox on; a legacy tix.toml gains no key on
save. See crate::triage::config.
editor: Option<String>Optional $EDITOR override for full-file editing.
viewer: Option<String>Read-only viewer for the TUI’s v key (tix #1507).
None and Some("auto") both mean the built-in probe chain — mdterm,
then batcat, most, less, more — and every other value names the
program to run directly. Never written when unset, so a legacy file gains
no key on save.
agent: Option<String>Configured AI agent command (opencode, claude, etc.) launched with
the issue body as its specification. Mirrors the editor resolution
chain (explicit → $TIX_AGENT → $AGENT env → PATH fallback).
state: StateConfigPersisted runtime state ([state]). Tolerated on load for legacy
files, never written back to disk (issue #52).
export: ExportConfigExternal tracker targets ([export]).
keybindings: KeyBindingsSparse TUI keybinding overrides ([keybindings]).
custom_attributes: CustomAttributesTop-level frontmatter keys this project uses on purpose ([custom_attributes]).
#1361. tix preserves a frontmatter key it does not recognise and warns
about it, because an unrecognised key is usually a typo (titel:) and a
typo that round-trips silently is worse than one that is dropped. A project
that does use a custom key declares it here once and stops being warned.
Top-level names only, not dotted paths — the thing being declared is a top-level key, and accepting a path syntax here would imply nested declarations are checked, which they are not.
Implementations§
Source§impl Config
impl Config
Sourcepub fn starter() -> Config
pub fn starter() -> Config
The configuration a new repository starts with — what tix init writes.
Deliberately not Default: that is the fallback for a missing or partial
tix.toml (and the base hundreds of tests build fixtures on), and it stays
minimal. The starting point is a product decision: a new repository gets the
board starter_board lays out and a working [triage] section, so
tix triage list works on a fresh checkout instead of refusing and asking for
configuration first.
The three keys match the board: unreviewed work sits in triage, an accept
lands in todo, a decline in wontfix. deferred_status is left unset
because it defaults to entry_status, and a default that is never written is a
default that cannot drift from the meaning it stands for.
Sourcepub fn effective_keybindings(&self) -> Result<EffectiveBindings>
pub fn effective_keybindings(&self) -> Result<EffectiveBindings>
Resolve sparse user overrides over the built-in TUI registry.
Sourcepub fn custom_attributes(&self) -> Vec<String>
pub fn custom_attributes(&self) -> Vec<String>
Declared custom top-level frontmatter keys, lowercased for comparison.
Lowercased because YAML keys are case-sensitive but nobody has ever
intended Titel and titel to be different keys, and a suppression list
that silently fails to match is worse than no list at all.
Sourcepub fn milestones_dir(&self) -> &Path
pub fn milestones_dir(&self) -> &Path
The resolved milestones directory: the configured value, or the
contract default docs/milestones when unset.
Sourcepub fn default_config(&self) -> &BoardConfiguration
pub fn default_config(&self) -> &BoardConfiguration
The configuration used by the CLI and other single-config surfaces:
the one named default if present, else the first declared.
Sourcepub fn configs(&self) -> impl Iterator<Item = (&str, &BoardConfiguration)>
pub fn configs(&self) -> impl Iterator<Item = (&str, &BoardConfiguration)>
Named configurations in declaration order (tab order = declaration order, D-02).
Sourcepub fn load_with_warning(path: &Path, sink: impl FnMut(&str)) -> Result<Config>
pub fn load_with_warning(path: &Path, sink: impl FnMut(&str)) -> Result<Config>
Load a tix.toml at path, emitting a warning through sink for
every cleartext token read from the file.
Parse and validation failures surface as TixError::Config with
the file’s path and (where the TOML parser reports it) line.
Sourcepub fn load(project_root: &Path) -> Result<Config>
pub fn load(project_root: &Path) -> Result<Config>
Load the config for a project root: tix.toml at the root if
present, otherwise the defaults. An absent file is not an error —
the CLI layer decides whether to nag about tix init.
Sourcepub fn project_root(cwd: &Path) -> Option<PathBuf>
pub fn project_root(cwd: &Path) -> Option<PathBuf>
Find the project root for cwd by walking upward for a tix.toml.
Returns None when no ancestor (including cwd itself) holds one.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Config
impl<'de> Deserialize<'de> for Config
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for Config
impl StructuralPartialEq for Config
Auto Trait Implementations§
impl Freeze for Config
impl RefUnwindSafe for Config
impl Send for Config
impl Sync for Config
impl Unpin for Config
impl UnsafeUnpin for Config
impl UnwindSafe for Config
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more