use std::fmt::Write as _;
use zenops_safe_relative_path::srpath;
use super::common::{StoredShellConfig, write_aliases, write_environment, write_pkg_inits};
use crate::{
config::{Config, pkg::Shell},
config_files::{ConfigFilePath, ConfigFileSource, ConfigFiles},
error::Error,
};
pub(in super::super) type StoredZshConfig = StoredShellConfig;
pub(super) fn make_config_files(
shell_config: &StoredShellConfig,
config: &Config,
config_files: &mut ConfigFiles,
) -> Result<(), Error> {
let StoredShellConfig { environment, alias } = shell_config;
let mut zshenv = String::new();
_ = writeln!(
zshenv,
"#\n# Zsh environment config generated by zenops\n#\n"
);
write_pkg_inits(
&mut zshenv,
&config.env_pkg_inits(Shell::Zsh),
config.system_inputs(),
)?;
write_environment(&mut zshenv, environment);
config_files.add(
ConfigFilePath::in_home(srpath!(".zshenv")),
ConfigFileSource::Generated(zshenv),
);
let login_inits = config.login_pkg_inits(Shell::Zsh);
if !login_inits.is_empty() {
let mut zprofile = String::new();
_ = writeln!(zprofile, "#\n# Zsh login profile generated by zenops\n#\n");
write_pkg_inits(&mut zprofile, &login_inits, config.system_inputs())?;
config_files.add(
ConfigFilePath::in_home(srpath!(".zprofile")),
ConfigFileSource::Generated(zprofile),
);
}
let mut zshrc = String::new();
_ = writeln!(
zshrc,
"#\n# Zsh interactive config generated by zenops\n#\n"
);
write_pkg_inits(
&mut zshrc,
&config.interactive_pkg_inits(Shell::Zsh),
config.system_inputs(),
)?;
write_aliases(&mut zshrc, alias);
config_files.add(
ConfigFilePath::in_home(srpath!(".zshrc")),
ConfigFileSource::Generated(zshrc),
);
Ok(())
}