bim 0.1.0

A content-first static site generator for blogs, digital gardens, and knowledge bases
Documentation
use clap::{Parser, Subcommand};
use std::path::PathBuf;

#[derive(Parser)]
#[command(name = "bim")]
#[command(
    author,
    version,
    about = "bim - A content-first static site generator"
)]
pub struct Cli {
    #[command(subcommand)]
    pub command: Commands,
}

#[derive(Subcommand)]
pub enum Commands {
    /// Build the site
    Build {
        /// Include draft content
        #[arg(long, default_value = "false")]
        drafts: bool,

        /// Output directory
        #[arg(long, short, default_value = "dist")]
        output: PathBuf,

        /// Clean output directory before building
        #[arg(long, default_value = "false")]
        clean: bool,
    },

    /// Watch for changes and rebuild
    Watch {
        /// Include draft content
        #[arg(long, default_value = "false")]
        drafts: bool,

        /// Output directory
        #[arg(long, short, default_value = "dist")]
        output: PathBuf,
    },

    /// Build and serve the site locally
    Serve {
        /// Port to serve on
        #[arg(long, short, default_value = "3000")]
        port: u16,

        /// Host to bind to
        #[arg(long, default_value = "127.0.0.1")]
        host: String,

        /// Include draft content
        #[arg(long, default_value = "false")]
        drafts: bool,

        /// Watch for changes while serving
        #[arg(long, short, default_value = "false")]
        watch: bool,
    },

    /// Process images without building the site
    PrepImages {
        /// Force reprocessing of all images
        #[arg(long, default_value = "false")]
        force: bool,

        /// Output directory
        #[arg(long, short, default_value = "dist")]
        output: PathBuf,
    },
}