Read config.toml, keys.toml and themes, and open them with :config (stage 8b)

The config folder now sets everything: config.toml the settings (now
also `theme` and `editor`), keys.toml the keys, and themes/<name>.toml
the theme, laid over the built-in one, so a theme only needs what it
changes. Each file is applied again a second after it's saved; a
mistake only drops its own line, and the status bar says what's wrong,
naming the file.

:config lists the three files with their folder; Enter hands the
terminal to your editor (the editor setting, $VISUAL, $EDITOR, else
notepad or vi), writing the file first if it's missing, with every
option at its default behind a #, explained (keys.toml lists every
command by name). :theme switches themes until cumulus quits, like
:set.

The built-in theme gets the named styles the user picked, each also put
on by its tag: question (yellow, dashed), important (red, thick) and done
(gray, its title faded); and link styles blocks and supports, whose
label shows on a link without its own. Themes can also set [modes],
[node], [root], [branch] and [link].

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
skkeyeandClaude Opus 5.5 committed 2026-10-01 23:55:11 -04:00
1 parent f6dc4564aa
commit abe3dc1d84
26 files changed
+1683 -129

No files matched your search

+6 -6
View File
@@ -8,9 +8,8 @@ use std::process::ExitCode;
use cumulus::app::startup::{self, Startup};
use cumulus::app::{App, run};
use cumulus::config::Config;
use cumulus::config::paths::Paths;
use cumulus::config::settings::Settings;
use cumulus::input::keymap::{DEFAULT_LEADER, Keymap};
const USAGE: &str = "\
cumulus: brainstorm in the terminal
@@ -61,10 +60,11 @@ fn start(args: Vec<String>) -> Result<(), String> {
Some(_) => Startup::Open(args.iter().map(PathBuf::from).collect()),
};
let paths = Paths::locate().map_err(|error| error.to_string())?;
// config.toml and keys.toml come in part 8b of the build.
let settings = Settings::default();
// The config folder first: it names the document `cumulus` looks for.
let config = Config::load(&paths);
let here =
std::env::current_dir().map_err(|error| format!("can't tell which folder this is: {error}"))?;
let opening = startup::open(&startup, &paths, &here, &settings).map_err(|error| error.to_string())?;
run(App::new(paths, settings, Keymap::new(DEFAULT_LEADER), opening)).map_err(|error| error.to_string())
let opening =
startup::open(&startup, &paths, &here, &config.settings).map_err(|error| error.to_string())?;
run(App::new(paths, config, opening)).map_err(|error| error.to_string())
}