use std::path::{Path, PathBuf};
use anyhow::{Context, Result};
pub fn canonicalize_path(p: impl AsRef<Path>) -> Result<PathBuf> {
let p = p.as_ref();
let p = if p.starts_with("~/") {
home()?.join(p.strip_prefix("~/")?)
} else if p.starts_with("$HOME/") {
home()?.join(p.strip_prefix("$HOME/")?)
} else {
p.to_path_buf()
};
p.canonicalize()
.with_context(|| format!("path does not exist: {}", p.display()))
}
pub fn home() -> Result<PathBuf> {
home::home_dir().context("$HOME was not set")
}