use anyhow::{Context, Result}; use clap::Parser; use figment::providers::{Env, Format, Toml}; use projectr::{Cli, Config, Search}; #[tracing::instrument] fn main() -> Result<()> { let cli = Cli::parse(); let config = Config::figment() .merge(&cli.projects) .merge(Toml::file("projectr.toml")) .merge(Env::prefixed("PROJECTR_")) .extract() .context("Failed to extract config")?; tracing_subscriber::fmt::fmt() .pretty() .with_writer(std::io::stderr) .with_max_level(cli.verbosity) .init(); run(&config).context("Failed to run projectr") } #[tracing::instrument] pub fn run(config: &Config) -> Result<()> { let mut projects: Vec<_> = Search::from_provider(config) .context("Failed to extract paths config")? .collect(); projects.sort_unstable_by_key(|p| p.timestamp().unwrap_or_default()); for project in projects { println!("{}", project.to_path_buf().to_string_lossy()) } Ok(()) }