1use anyhow::{bail, Result};
2use std::path::PathBuf;
3
4const SKILL_CONTENT: &str = include_str!("../../SKILL.md");
5const SKILL_DIR: &str = "managing-tasks-with-td";
6const SKILL_FILE: &str = "SKILL.md";
7
8fn default_skills_dir() -> Result<PathBuf> {
9 if let Ok(xdg) = std::env::var("XDG_CONFIG_HOME") {
10 Ok(PathBuf::from(xdg).join("agents/skills"))
11 } else if let Ok(home) = std::env::var("HOME") {
12 Ok(PathBuf::from(home).join(".config/agents/skills"))
13 } else {
14 bail!("neither $XDG_CONFIG_HOME nor $HOME is set");
15 }
16}
17
18pub fn run(dir: Option<&str>) -> Result<()> {
19 let skills_dir = match dir {
20 Some(d) => PathBuf::from(d),
21 None => default_skills_dir()?,
22 };
23
24 let dest_dir = skills_dir.join(SKILL_DIR);
25 std::fs::create_dir_all(&dest_dir)?;
26
27 let dest = dest_dir.join(SKILL_FILE);
28 std::fs::write(&dest, SKILL_CONTENT)?;
29
30 let c = crate::color::stderr_theme();
31 eprintln!("{}info:{} wrote {}", c.blue, c.reset, dest.display());
32
33 Ok(())
34}