diff --git a/src/config.rs b/src/config.rs index de89090a..ed275983 100644 --- a/src/config.rs +++ b/src/config.rs @@ -121,6 +121,7 @@ pub enum Step { Pnpm, Powershell, Protonup, + Pyenv, Raco, Rcm, Remotes, diff --git a/src/main.rs b/src/main.rs index b00cd792..a8d7fd87 100644 --- a/src/main.rs +++ b/src/main.rs @@ -324,6 +324,7 @@ fn run() -> Result<()> { runner.execute(Step::GnomeShellExtensions, "Gnome Shell Extensions", || { unix::upgrade_gnome_extensions(&ctx) })?; + runner.execute(Step::Pyenv, "pyenv", || unix::run_pyenv(&ctx))?; runner.execute(Step::Sdkman, "SDKMAN!", || unix::run_sdkman(&ctx))?; runner.execute(Step::Rcm, "rcm", || unix::run_rcm(&ctx))?; runner.execute(Step::Maza, "maza", || unix::run_maza(&ctx))?; diff --git a/src/steps/os/unix.rs b/src/steps/os/unix.rs index f14ec4e5..a2c466d8 100644 --- a/src/steps/os/unix.rs +++ b/src/steps/os/unix.rs @@ -580,6 +580,25 @@ pub fn run_pearl(ctx: &ExecutionContext) -> Result<()> { ctx.run_type().execute(pearl).arg("update").status_checked() } +pub fn run_pyenv(ctx: &ExecutionContext) -> Result<()> { + let pyenv = require("pyenv")?; + print_separator("pyenv"); + + let pyenv_dir = var("PYENV_ROOT") + .map(PathBuf::from) + .unwrap_or_else(|_| HOME_DIR.join(".pyenv")); + + if !pyenv_dir.exists() { + return Err(SkipStep("Pyenv is installed, but $PYENV_ROOT is not set correctly".to_string()).into()); + } + + if !pyenv_dir.join(".git").exists() { + return Err(SkipStep("pyenv is not a git repository".to_string()).into()); + } + + ctx.run_type().execute(pyenv).arg("update").status_checked() +} + pub fn run_sdkman(ctx: &ExecutionContext) -> Result<()> { let bash = require("bash")?;