diff --git a/src/generate.rs b/src/generate.rs
index 2714640f1406a7df91fe042273e211971f2e02aa..8a2feaf020173dd0b213ad096fe8ef15796660f6 100644
--- a/src/generate.rs
+++ b/src/generate.rs
@@ -9,13 +9,28 @@ use anyhow::Result;
 #[derive(Parser, Debug)]
 pub struct Opts {
     /// The path where to generate your project
-    project_path: PathBuf
+    project_path: PathBuf,
+
+    /// The name of the generated project. If omitted, deduced from
+    /// the project_path parameter
+    #[arg(long,short)]
+    project_name: Option<String>
 }
 
 
-const PIP_MPU_TEMPLATE_PATH: &str = "https://gitlab.univ-lille.fr/2xs/pip/pipcore-mpu-rust-crt0.git";
+const PIP_MPU_TEMPLATE_PATH: &str = "https://gitlab.univ-lille.fr/2xs/pip/pip-mpu-armv7-template.git";
 
 
 pub fn generate(opts: Opts) -> Result<()> {
-    todo!("{opts:#?}");
+
+    let scaffold_opts = cargo_scaffold::Opts::builder(PIP_MPU_TEMPLATE_PATH)
+        .parameters(vec!["crate_name=TODO_CHANGE", "project-name=TODO_CHANGE"])
+        .force(true)
+        .project_name(match opts.project_name {
+            Some(name) => name,
+            None => opts.project_path.file_name().unwrap().to_os_string().into_string().unwrap(),
+        })
+        .target_dir(opts.project_path);
+
+    cargo_scaffold::ScaffoldDescription::new(scaffold_opts)?.scaffold()
 }