use anyhow::Result;
use std::path::Path;
pub fn get_hostname() -> String {
hostname::get()
.map(|h| h.to_string_lossy().to_lowercase())
.unwrap_or_else(|_| "unknown".to_string())
}
#[cfg(unix)]
pub fn set_private_permissions(path: &Path) -> Result<()> {
use std::os::unix::fs::PermissionsExt;
std::fs::set_permissions(path, std::fs::Permissions::from_mode(0o600))?;
Ok(())
}
#[cfg(windows)]
pub fn set_private_permissions(path: &Path) -> Result<()> {
use anyhow::Context;
use std::process::Command;
let path_str = path.to_string_lossy();
let username =
std::env::var("USERNAME").with_context(|| "Failed to get USERNAME environment variable")?;
let output = Command::new("icacls")
.args([
&*path_str,
"/inheritance:r",
"/grant:r",
&format!("{}:F", username),
])
.output()
.with_context(|| "Failed to run icacls")?;
if !output.status.success() {
anyhow::bail!("icacls failed: {}", String::from_utf8_lossy(&output.stderr));
}
Ok(())
}
pub fn ssh_home_placeholder() -> &'static str {
"%d"
}