diff --git a/TODO.md b/TODO.md index 69da0c2..48b582e 100644 --- a/TODO.md +++ b/TODO.md @@ -1,8 +1,6 @@ - [ ] Obsidian properties - - [ ] encoding in YAML (using Serde) - - [ ] config for default properties + - [x] config for default properties - [ ] formatting for properties such as dates -- [x] update rendering to use comrak (it's been update) - - + - [ ] figure out what frontmatter obsidian uses + - [ ] generate title diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 87fcde5..29cb3fd 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -10,6 +10,9 @@ pub struct Args { /// show current config file #[arg(short = 'C', long)] pub current_config: bool, + // generate config file (output to stdout) + #[arg(long, default_value_t = true)] + pub gen_config: bool, /// view a specific date's file (YYYY-MM-DD) #[arg(short, long)] diff --git a/src/config/mod.rs b/src/config/mod.rs index 2b8b5dc..72d6ce2 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -4,6 +4,7 @@ extern crate serde_json; use figment::providers::{Env, Format, Json, Serialized}; use figment::Figment; use serde::{Deserialize, Serialize}; +use std::collections::HashMap; use std::env::var; use std::fs::File; use std::io::Write; @@ -13,7 +14,9 @@ use std::path::PathBuf; pub struct Config { pub editor: String, pub sections: Vec, + pub scratch_section: String, pub notes_dir: String, + pub frontmatter: HashMap, } impl Default for Config { @@ -21,7 +24,9 @@ impl Default for Config { Config { editor: "nano".into(), sections: vec!["Daily".into(), "Weekly".into(), "Monthly".into()], + scratch_section: "".into(), notes_dir: "~/Notes".into(), + frontmatter: HashMap::new(), } } } diff --git a/src/main.rs b/src/main.rs index e618b03..8027760 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,14 +10,14 @@ use clap::Parser; use cli::Args; use comrak::options::{Extension, Parse}; use comrak::{format_commonmark, Arena, Options}; -use config::Config; +use config::{Config, ConfigError}; use log; use logging::get_logging_level; use resolve_path::PathResolveExt; use simple_logger::init_with_level; use std::fs; use std::path::Path; -use std::process::Command; +use std::process::{exit, Command}; use todo::{File as TodoFile, TaskGroup}; use crate::file::{extract_sections, process_doc_tree}; @@ -51,6 +51,15 @@ fn main() { } } + if args.gen_config { + let buf = match serde_json::to_string_pretty(&Config::default()) { + Ok(text) => text, + _ => panic!("Could not generate config text"), + }; + println!("{}", buf); + return; + } + // set witch config file to load let cfg_file = match args.config { Some(file) => file,