From 1d51b25bf705158ad7eebfd862705cc99fbc9eb1 Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Thu, 1 Jun 2023 13:00:39 -0700 Subject: [PATCH] Use os-release to determine appropriate planner (#501) --- Cargo.toml | 4 ++-- src/planner/mod.rs | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e14d9b1..3384177 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ build-inputs = ["darwin.apple_sdk.frameworks.Security"] [features] default = ["cli", "diagnostics"] cli = ["eyre", "color-eyre", "clap", "tracing-subscriber", "tracing-error", "atty"] -diagnostics = ["os-release", "is_ci"] +diagnostics = ["is_ci"] [[bin]] name = "nix-installer" @@ -54,7 +54,7 @@ rand = { version = "0.8.5", default-features = false, features = [ "std", "std_r semver = { version = "1.0.14", default-features = false, features = ["serde", "std"] } term = { version = "0.7.0", default-features = false } uuid = { version = "1.2.2", features = ["serde"] } -os-release = { version = "0.1.0", default-features = false, optional = true } +os-release = { version = "0.1.0", default-features = false } is_ci = { version = "1.1.1", default-features = false, optional = true } strum = { version = "0.24.1", features = ["derive"] } nix-config-parser = { version = "0.1.2", features = ["serde"] } diff --git a/src/planner/mod.rs b/src/planner/mod.rs index f6ff238..bc6dc1c 100644 --- a/src/planner/mod.rs +++ b/src/planner/mod.rs @@ -172,7 +172,13 @@ impl BuiltinPlanner { match (Architecture::host(), OperatingSystem::host()) { #[cfg(target_os = "linux")] (Architecture::X86_64, OperatingSystem::Linux) => { - Ok(Self::Linux(linux::Linux::default().await?)) + let os_release = os_release::OsRelease::new().ok(); + match os_release { + Some(os_release) if os_release.id == "steamos" => { + Ok(Self::SteamDeck(steam_deck::SteamDeck::default().await?)) + }, + _ => Ok(Self::Linux(linux::Linux::default().await?)), + } }, #[cfg(target_os = "linux")] (Architecture::X86_32(_), OperatingSystem::Linux) => { @@ -359,6 +365,9 @@ pub enum PlannerError { /// An [`InstallSettingsError`] #[error(transparent)] InstallSettings(#[from] InstallSettingsError), + /// An OS Release error + #[error("Fetching `/etc/os-release`")] + OsRelease(#[source] std::io::Error), /// A MacOS (Darwin) plist related error #[error(transparent)] Plist(#[from] plist::Error), @@ -398,6 +407,7 @@ impl HasExpectedErrors for PlannerError { PlannerError::Plist(_) => None, PlannerError::Sysctl(_) => None, this @ PlannerError::RosettaDetected => Some(Box::new(this)), + PlannerError::OsRelease(_) => None, PlannerError::Utf8(_) => None, PlannerError::SelinuxRequirements => Some(Box::new(self)), PlannerError::Custom(_e) => {