diff --git a/config.example.toml b/config.example.toml index 1aab58b7..720d4dd6 100644 --- a/config.example.toml +++ b/config.example.toml @@ -209,6 +209,13 @@ # home_manager_arguments = ["--flake", "file"] +[mandb] +# Enable the mandb step (to update manual entries). +# Mandb is updated in the background by a service on most systems by default. +# (default: false) +# enable = true + + [git] # How many repos to pull at max in parallel # max_concurrency = 5 diff --git a/locales/app.yml b/locales/app.yml index ca28bb10..a3492893 100644 --- a/locales/app.yml +++ b/locales/app.yml @@ -1312,3 +1312,27 @@ _version: 2 zh_TW: "nh 找不到任何已設定的 flake" zh_CN: "nh 无法找到任何已配置的 flake" de: "nh kann keine konfigurierten flakes finden" +"System Manuals": + en: "System Manuals" + lt: "Sistemos Vadovai" + es: "Manuales del Sistema" + fr: "Manuels du Système" + zh_CN: "系统手册" + zh_TW: "系統手冊" + de: "Systemhandbücher" +"User Manuals": + en: "User Manuals" + lt: "Vartotojo Vadovai" + es: "Manuales de Usuario" + fr: "Manuels de l'utilisateur" + zh_CN: "用户手册" + zh_TW: "使用者手冊" + de: "Benutzerhandbücher" +"ManDB isn't enabled": + en: "ManDB isn't enabled" + lt: "ManDB nėra įjungtas" + es: "ManDB no está habilitado" + fr: "ManDB n'est pas activé" + zh_CN: "ManDB 未启用" + zh_TW: "ManDB 未啟用" + de: "ManDB ist nicht aktiviert" diff --git a/src/config.rs b/src/config.rs index a8807876..bccbef27 100644 --- a/src/config.rs +++ b/src/config.rs @@ -62,6 +62,12 @@ pub struct Containers { runtime: Option, } +#[derive(Deserialize, Default, Debug, Merge)] +#[serde(deny_unknown_fields)] +pub struct Mandb { + enable: Option, +} + #[derive(Deserialize, Default, Debug, Merge)] #[serde(deny_unknown_fields)] pub struct Git { @@ -414,6 +420,9 @@ pub struct ConfigFile { #[merge(strategy = crate::utils::merge_strategies::inner_merge_opt)] linux: Option, + #[merge(strategy = crate::utils::merge_strategies::inner_merge_opt)] + mandb: Option, + #[merge(strategy = crate::utils::merge_strategies::inner_merge_opt)] git: Option, @@ -1497,6 +1506,14 @@ impl Config { .unwrap_or(false) } + pub fn enable_mandb(&self) -> bool { + self.config_file + .mandb + .as_ref() + .and_then(|mandb| mandb.enable) + .unwrap_or(false) + } + pub fn open_remotes_in_new_terminal(&self) -> bool { self.config_file .windows diff --git a/src/step.rs b/src/step.rs index 1ed6a44f..75791aff 100644 --- a/src/step.rs +++ b/src/step.rs @@ -94,6 +94,7 @@ pub enum Step { Lure, Macports, Mamba, + Mandb, Mas, Maza, Micro, @@ -388,6 +389,11 @@ impl Step { runner.execute(*self, "MacPorts", || macos::run_macports(ctx))? } Mamba => runner.execute(*self, "mamba", || generic::run_mamba_update(ctx))?, + Mandb => + { + #[cfg(target_os = "linux")] + runner.execute(*self, "Manual Entries", || linux::run_mandb(ctx))? + } Mas => { #[cfg(target_os = "macos")] @@ -725,6 +731,7 @@ pub(crate) fn default_steps() -> Vec { Waydroid, AutoCpufreq, CinnamonSpices, + Mandb, Pkgfile, ]); diff --git a/src/steps/os/linux.rs b/src/steps/os/linux.rs index e0b20cd4..a328b774 100644 --- a/src/steps/os/linux.rs +++ b/src/steps/os/linux.rs @@ -692,6 +692,23 @@ pub fn run_pkgfile(ctx: &ExecutionContext) -> Result<()> { sudo.execute(ctx, pkgfile)?.arg("--update").status_checked() } +pub fn run_mandb(ctx: &ExecutionContext) -> Result<()> { + let sudo = ctx.require_sudo()?; + let mandb = require("mandb")?; + + if !ctx.config().enable_mandb() { + return Err(SkipStep(t!("ManDB isn't enabled").to_string()).into()); + } + + print_separator(t!("System Manuals")); + + sudo.execute(ctx, &mandb)?.status_checked()?; + + print_separator(t!("User Manuals")); + + ctx.execute(&mandb).arg("--user-db").status_checked() +} + pub fn run_packer_nu(ctx: &ExecutionContext) -> Result<()> { let nu = require("nu")?; let packer_home = HOME_DIR.join(".local/share/nushell/packer");