Skip to main content

Mountain/ProcessManagement/NodeResolver/
TryFnm.rs

1
2//! fnm shim lookup. `FNM_MULTISHELL_PATH` (active shell) wins; otherwise
3//! probe the per-OS multishell cache directories.
4
5use std::path::PathBuf;
6
7use crate::ProcessManagement::NodeResolver::{NodeExecutableName, NodeSource, ResolvedNode};
8
9pub fn Fn() -> Option<ResolvedNode::Struct> {
10	if let Ok(Multishell) = std::env::var("FNM_MULTISHELL_PATH") {
11		let Candidate = PathBuf::from(Multishell).join("bin").join(NodeExecutableName::Fn());
12
13		if Candidate.exists() {
14			return Some(ResolvedNode::Struct { Path:Candidate, Source:NodeSource::Enum::Fnm });
15		}
16	}
17
18	let Home = std::env::var("HOME").ok()?;
19
20	for Relative in ["/.local/share/fnm/current/bin", "/Library/Caches/fnm_multishells/current/bin"] {
21		let Candidate = PathBuf::from(&Home)
22			.join(Relative.trim_start_matches('/'))
23			.join(NodeExecutableName::Fn());
24
25		if Candidate.exists() {
26			return Some(ResolvedNode::Struct { Path:Candidate, Source:NodeSource::Enum::Fnm });
27		}
28	}
29
30	None
31}