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 StoredBashConfig = 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 bash_config = String::new();
_ = writeln!(
bash_config,
"#\n# Bash config generated by zenops.\n# Source this from ~/.bash_profile on macOS or ~/.bashrc on Linux.\n#\n"
);
write_pkg_inits(
&mut bash_config,
&config.env_pkg_inits(Shell::Bash)?,
config.system_inputs(),
)?;
write_pkg_inits(
&mut bash_config,
&config.login_pkg_inits(Shell::Bash)?,
config.system_inputs(),
)?;
write_aliases(&mut bash_config, alias);
write_environment(&mut bash_config, environment);
write_pkg_inits(
&mut bash_config,
&config.interactive_pkg_inits(Shell::Bash)?,
config.system_inputs(),
)?;
config_files.add(
ConfigFilePath::in_home(srpath!(".zenops_bash_profile")),
ConfigFileSource::Generated(bash_config),
);
Ok(())
}