1diff --git a/src/main.rs b/src/main.rs
2index 3cb6896..7f070e0 100644
3--- a/src/main.rs
4+++ b/src/main.rs
5@@ -275,7 +275,9 @@ fn install_single_toolchain(
6
7 // install
8 if maybe_dry_client.is_some() {
9- rename(&toolchain.dest, toolchain_path)?;
10+ rename(&toolchain.dest, toolchain_path.clone())?;
11+ nix_patchelf(toolchain_path)
12+ .expect("failed to patch toolchain for NixOS");
13 eprintln!(
14 "toolchain `{}` is successfully installed!",
15 toolchain.dest.display()
16@@ -291,6 +293,45 @@ fn install_single_toolchain(
17 Ok(())
18 }
19
20+fn nix_patchelf(mut toolchain_path: PathBuf) -> Result<(), Error> {
21+ toolchain_path.push("bin");
22+
23+ for entry in toolchain_path.read_dir()? {
24+ let entry = entry?;
25+ if !entry.file_type()?.is_file() {
26+ continue;
27+ }
28+
29+ eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
30+ entry.path().to_str().unwrap());
31+ let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
32+ .arg("--set-interpreter")
33+ .arg("@dynamicLinker@")
34+ .arg(entry.path())
35+ .output();
36+ }
37+
38+ toolchain_path.pop();
39+ toolchain_path.push("lib");
40+
41+ for entry in toolchain_path.read_dir()? {
42+ let entry = entry?;
43+ if !entry.file_type()?.is_file() {
44+ continue;
45+ }
46+
47+ eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
48+ entry.path().to_str().unwrap());
49+ let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
50+ .arg("--set-rpath")
51+ .arg("@libPath@")
52+ .arg(entry.path())
53+ .output();
54+ }
55+
56+ Ok(())
57+}
58+
59 fn fetch_master_commit(client: &Client, github_token: Option<&str>) -> Result<String, Error> {
60 eprintln!("fetching master commit hash... ");
61 fetch_master_commit_via_git()