use std::env;
use std::path::PathBuf;
use anyhow::{Context, Result};
use crate::scope::Scope;
#[cfg(target_os = "linux")]
pub(crate) const SYSTEM_UNIT_DIRECTORY: &str = "/etc/systemd/system";
#[cfg(target_os = "macos")]
pub(crate) const SYSTEM_PLIST_DIRECTORY: &str = "/Library/LaunchDaemons";
pub(crate) fn home_directory() -> Result<PathBuf> {
env::var_os("HOME")
.map(PathBuf::from)
.context("未设置 HOME 环境变量")
}
#[cfg(target_os = "linux")]
pub(crate) fn user_unit_directory() -> Result<PathBuf> {
Ok(home_directory()?.join(".config/systemd/user"))
}
#[cfg(target_os = "macos")]
pub(crate) fn user_plist_directory() -> Result<PathBuf> {
Ok(home_directory()?.join("Library/LaunchAgents"))
}
pub(crate) fn directory(
root: &str,
user: fn() -> Result<PathBuf>,
scope: Scope,
) -> Result<PathBuf> {
match scope {
Scope::Root => Ok(PathBuf::from(root)),
Scope::User => user(),
}
}