#[derive(Debug, Clone, Copy)]
pub struct Preset {
pub name: &'static str,
pub aliases: &'static [&'static str],
pub description: &'static str,
pub body: &'static str,
}
pub const GENERIC_BODY: &str = include_str!("../examples/gwm.toml.example");
const PRESETS: &[Preset] = &[
Preset {
name: "generic",
aliases: &[],
description: "The fully-documented default template (same as `gwm init`).",
body: GENERIC_BODY,
},
Preset {
name: "go",
aliases: &[],
description: "Go module: bin/ no-symlink + `go mod download`.",
body: include_str!("../examples/presets/go.toml"),
},
Preset {
name: "laravel",
aliases: &[],
description: "Laravel: env copies + AWS-RDS guard + vendor/ no-symlink + composer install.",
body: include_str!("../examples/presets/laravel.toml"),
},
Preset {
name: "node",
aliases: &["nuxt"],
description: "Node / Nuxt: node_modules/ no-symlink + bun-or-npm install.",
body: include_str!("../examples/presets/node.toml"),
},
Preset {
name: "python-uv",
aliases: &[],
description: "Python (uv): .venv/ no-symlink + `uv sync`.",
body: include_str!("../examples/presets/python-uv.toml"),
},
Preset {
name: "rust",
aliases: &[],
description: "Rust crate: target/ no-symlink + `cargo fetch`.",
body: include_str!("../examples/presets/rust.toml"),
},
];
pub fn all() -> &'static [Preset] {
PRESETS
}
pub fn lookup(name: &str) -> Option<&'static Preset> {
PRESETS.iter().find(|p| p.name == name || p.aliases.contains(&name))
}