Skip to main content

pebble_cms/cli/
init.rs

1use anyhow::Result;
2use std::path::PathBuf;
3
4pub async fn run(path: PathBuf, name: Option<String>) -> Result<()> {
5    let site_name = name.unwrap_or_else(|| "My Site".to_string());
6
7    std::fs::create_dir_all(&path)?;
8    std::fs::create_dir_all(path.join("data"))?;
9    std::fs::create_dir_all(path.join("data/media"))?;
10    std::fs::create_dir_all(path.join("themes"))?;
11
12    let config = format!(
13        r#"[site]
14title = "{}"
15description = "A personal blog"
16url = "http://localhost:3000"
17language = "en"
18
19[server]
20host = "127.0.0.1"
21port = 3000
22
23[database]
24path = "./data/pebble.db"
25
26[content]
27posts_per_page = 10
28excerpt_length = 200
29auto_excerpt = true
30
31[media]
32upload_dir = "./data/media"
33max_upload_size = "10MB"
34
35[theme]
36name = "default"
37
38[auth]
39session_lifetime = "7d"
40"#,
41        site_name
42    );
43
44    std::fs::write(path.join("pebble.toml"), config)?;
45
46    tracing::info!("Created new Pebble site at {:?}", path);
47    tracing::info!("Run 'pebble migrate' to set up the database");
48    tracing::info!("Run 'pebble serve' to start the server");
49
50    Ok(())
51}