From e98827d5aee7586aef1b105b48375695b5a37806 Mon Sep 17 00:00:00 2001 From: Katharina Fey Date: Thu, 10 Nov 2022 15:54:12 +0100 Subject: [PATCH] Restructure common actions into common and base Base actions are those that don't depend on another action to execute. They mostly map to "very simple" OS operations like creating a directory or user. Base actions MUST be multi-platform compatible. Common actions may then use any set of base actions or other common actions. Base actions MUST NOT depend on other base actions. --- .../configure_nix_daemon_service.rs | 0 .../{common => base}/create_directory.rs | 0 src/action/{common => base}/create_file.rs | 0 src/action/{common => base}/create_group.rs | 0 .../{common => base}/create_or_append_file.rs | 0 src/action/{common => base}/create_user.rs | 0 src/action/{common => base}/fetch_nix.rs | 0 src/action/base/mod.rs | 22 +++++++++++++++++++ .../{common => base}/move_unpacked_nix.rs | 0 .../{common => base}/setup_default_profile.rs | 0 src/action/common/configure_nix.rs | 10 ++++----- src/action/common/configure_shell_profile.rs | 11 ++++------ src/action/common/create_nix_tree.rs | 2 +- src/action/common/create_users_and_group.rs | 6 ++--- src/action/common/mod.rs | 20 +---------------- .../common/place_channel_configuration.rs | 6 ++--- src/action/common/place_nix_configuration.rs | 3 +-- src/action/common/provision_nix.rs | 9 +++----- src/action/darwin/create_apfs_volume.rs | 13 +++++------ src/action/linux/create_systemd_sysext.rs | 5 ++--- src/action/linux/systemd_sysext_merge.rs | 7 ++---- src/action/mod.rs | 1 + src/planner/linux/multi.rs | 7 +++--- src/planner/specific/steam_deck.rs | 3 ++- 24 files changed, 56 insertions(+), 69 deletions(-) rename src/action/{common => base}/configure_nix_daemon_service.rs (100%) rename src/action/{common => base}/create_directory.rs (100%) rename src/action/{common => base}/create_file.rs (100%) rename src/action/{common => base}/create_group.rs (100%) rename src/action/{common => base}/create_or_append_file.rs (100%) rename src/action/{common => base}/create_user.rs (100%) rename src/action/{common => base}/fetch_nix.rs (100%) create mode 100644 src/action/base/mod.rs rename src/action/{common => base}/move_unpacked_nix.rs (100%) rename src/action/{common => base}/setup_default_profile.rs (100%) diff --git a/src/action/common/configure_nix_daemon_service.rs b/src/action/base/configure_nix_daemon_service.rs similarity index 100% rename from src/action/common/configure_nix_daemon_service.rs rename to src/action/base/configure_nix_daemon_service.rs diff --git a/src/action/common/create_directory.rs b/src/action/base/create_directory.rs similarity index 100% rename from src/action/common/create_directory.rs rename to src/action/base/create_directory.rs diff --git a/src/action/common/create_file.rs b/src/action/base/create_file.rs similarity index 100% rename from src/action/common/create_file.rs rename to src/action/base/create_file.rs diff --git a/src/action/common/create_group.rs b/src/action/base/create_group.rs similarity index 100% rename from src/action/common/create_group.rs rename to src/action/base/create_group.rs diff --git a/src/action/common/create_or_append_file.rs b/src/action/base/create_or_append_file.rs similarity index 100% rename from src/action/common/create_or_append_file.rs rename to src/action/base/create_or_append_file.rs diff --git a/src/action/common/create_user.rs b/src/action/base/create_user.rs similarity index 100% rename from src/action/common/create_user.rs rename to src/action/base/create_user.rs diff --git a/src/action/common/fetch_nix.rs b/src/action/base/fetch_nix.rs similarity index 100% rename from src/action/common/fetch_nix.rs rename to src/action/base/fetch_nix.rs diff --git a/src/action/base/mod.rs b/src/action/base/mod.rs new file mode 100644 index 0000000..d6830a8 --- /dev/null +++ b/src/action/base/mod.rs @@ -0,0 +1,22 @@ +//! Base actions that themselves have no other actions as dependencies + +mod configure_nix_daemon_service; +mod create_directory; +mod create_file; +mod create_group; +mod create_or_append_file; +mod create_user; +mod fetch_nix; +mod move_unpacked_nix; +mod setup_default_profile; + +pub use configure_nix_daemon_service::{ConfigureNixDaemonService, ConfigureNixDaemonServiceError}; +pub use create_directory::{CreateDirectory, CreateDirectoryError}; +pub use create_file::{CreateFile, CreateFileError}; +pub use create_group::{CreateGroup, CreateGroupError}; +pub use create_or_append_file::{CreateOrAppendFile, CreateOrAppendFileError}; +pub use create_user::{CreateUser, CreateUserError}; +pub use fetch_nix::{FetchNix, FetchNixError}; +pub use move_unpacked_nix::{MoveUnpackedNix, MoveUnpackedNixError}; +pub use setup_default_profile::{SetupDefaultProfile, SetupDefaultProfileError}; + diff --git a/src/action/common/move_unpacked_nix.rs b/src/action/base/move_unpacked_nix.rs similarity index 100% rename from src/action/common/move_unpacked_nix.rs rename to src/action/base/move_unpacked_nix.rs diff --git a/src/action/common/setup_default_profile.rs b/src/action/base/setup_default_profile.rs similarity index 100% rename from src/action/common/setup_default_profile.rs rename to src/action/base/setup_default_profile.rs diff --git a/src/action/common/configure_nix.rs b/src/action/common/configure_nix.rs index 214cdc1..ac2c561 100644 --- a/src/action/common/configure_nix.rs +++ b/src/action/common/configure_nix.rs @@ -1,17 +1,15 @@ -use reqwest::Url; - use crate::{ action::{ - common::{ - ConfigureNixDaemonService, ConfigureShellProfile, PlaceChannelConfiguration, - PlaceNixConfiguration, SetupDefaultProfile, - }, + base::{ConfigureNixDaemonService, SetupDefaultProfile}, + common::{ConfigureShellProfile, PlaceChannelConfiguration, PlaceNixConfiguration}, Action, ActionDescription, ActionState, }, channel_value::ChannelValue, BoxableError, CommonSettings, }; +use reqwest::Url; + #[derive(Debug, serde::Deserialize, serde::Serialize, Clone)] pub struct ConfigureNix { setup_default_profile: SetupDefaultProfile, diff --git a/src/action/common/configure_shell_profile.rs b/src/action/common/configure_shell_profile.rs index 8a903da..b5b434d 100644 --- a/src/action/common/configure_shell_profile.rs +++ b/src/action/common/configure_shell_profile.rs @@ -1,13 +1,10 @@ +use crate::action::base::{CreateOrAppendFile, CreateOrAppendFileError}; +use crate::action::{Action, ActionDescription, ActionState}; +use crate::BoxableError; + use std::path::Path; - use tokio::task::{JoinError, JoinSet}; -use crate::action::common::{CreateOrAppendFile, CreateOrAppendFileError}; -use crate::{ - action::{Action, ActionDescription, ActionState}, - BoxableError, -}; - const PROFILE_TARGETS: &[&str] = &[ "/etc/bashrc", "/etc/profile.d/nix.sh", diff --git a/src/action/common/create_nix_tree.rs b/src/action/common/create_nix_tree.rs index c96e00e..3ebe209 100644 --- a/src/action/common/create_nix_tree.rs +++ b/src/action/common/create_nix_tree.rs @@ -1,4 +1,4 @@ -use crate::action::common::{CreateDirectory, CreateDirectoryError}; +use crate::action::base::{CreateDirectory, CreateDirectoryError}; use crate::action::{Action, ActionDescription, ActionState}; const PATHS: &[&str] = &[ diff --git a/src/action/common/create_users_and_group.rs b/src/action/common/create_users_and_group.rs index 619eb3c..a4fea57 100644 --- a/src/action/common/create_users_and_group.rs +++ b/src/action/common/create_users_and_group.rs @@ -1,14 +1,12 @@ -use tokio::task::{JoinError, JoinSet}; - use crate::CommonSettings; - use crate::{ action::{ - common::{CreateGroup, CreateGroupError, CreateUser, CreateUserError}, + base::{CreateGroup, CreateGroupError, CreateUser, CreateUserError}, Action, ActionDescription, ActionState, }, BoxableError, }; +use tokio::task::{JoinError, JoinSet}; #[derive(Debug, serde::Deserialize, serde::Serialize, Clone)] pub struct CreateUsersAndGroup { diff --git a/src/action/common/mod.rs b/src/action/common/mod.rs index ce9520a..82aa6b3 100644 --- a/src/action/common/mod.rs +++ b/src/action/common/mod.rs @@ -1,35 +1,17 @@ /*! Actions which only call other base plugins. */ mod configure_nix; -mod configure_nix_daemon_service; -mod configure_shell_profile; -mod create_directory; -mod create_file; -mod create_group; mod create_nix_tree; -mod create_or_append_file; -mod create_user; +mod configure_shell_profile; mod create_users_and_group; -mod fetch_nix; -mod move_unpacked_nix; mod place_channel_configuration; mod place_nix_configuration; mod provision_nix; -mod setup_default_profile; pub use configure_nix::ConfigureNix; -pub use configure_nix_daemon_service::{ConfigureNixDaemonService, ConfigureNixDaemonServiceError}; pub use configure_shell_profile::ConfigureShellProfile; -pub use create_directory::{CreateDirectory, CreateDirectoryError}; -pub use create_file::{CreateFile, CreateFileError}; -pub use create_group::{CreateGroup, CreateGroupError}; pub use create_nix_tree::{CreateNixTree, CreateNixTreeError}; -pub use create_or_append_file::{CreateOrAppendFile, CreateOrAppendFileError}; -pub use create_user::{CreateUser, CreateUserError}; pub use create_users_and_group::{CreateUsersAndGroup, CreateUsersAndGroupError}; -pub use fetch_nix::{FetchNix, FetchNixError}; -pub use move_unpacked_nix::{MoveUnpackedNix, MoveUnpackedNixError}; pub use place_channel_configuration::{PlaceChannelConfiguration, PlaceChannelConfigurationError}; pub use place_nix_configuration::{PlaceNixConfiguration, PlaceNixConfigurationError}; pub use provision_nix::{ProvisionNix, ProvisionNixError}; -pub use setup_default_profile::{SetupDefaultProfile, SetupDefaultProfileError}; diff --git a/src/action/common/place_channel_configuration.rs b/src/action/common/place_channel_configuration.rs index a44a5ac..d8eba90 100644 --- a/src/action/common/place_channel_configuration.rs +++ b/src/action/common/place_channel_configuration.rs @@ -1,11 +1,9 @@ -use reqwest::Url; - +use crate::action::base::{CreateFile, CreateFileError}; use crate::{ action::{Action, ActionDescription, ActionState}, BoxableError, }; - -use crate::action::common::{CreateFile, CreateFileError}; +use reqwest::Url; #[derive(Debug, serde::Deserialize, serde::Serialize, Clone)] pub struct PlaceChannelConfiguration { diff --git a/src/action/common/place_nix_configuration.rs b/src/action/common/place_nix_configuration.rs index 9aa444a..e2240f6 100644 --- a/src/action/common/place_nix_configuration.rs +++ b/src/action/common/place_nix_configuration.rs @@ -1,7 +1,6 @@ +use crate::action::base::{CreateDirectory, CreateDirectoryError, CreateFile, CreateFileError}; use crate::action::{Action, ActionDescription, ActionState}; -use crate::action::common::{CreateDirectory, CreateDirectoryError, CreateFile, CreateFileError}; - const NIX_CONF_FOLDER: &str = "/etc/nix"; const NIX_CONF: &str = "/etc/nix/nix.conf"; diff --git a/src/action/common/provision_nix.rs b/src/action/common/provision_nix.rs index 937e74d..10fbbae 100644 --- a/src/action/common/provision_nix.rs +++ b/src/action/common/provision_nix.rs @@ -1,16 +1,13 @@ -use std::path::PathBuf; - -use tokio::task::JoinError; - -use crate::action::common::{ +use crate::action::base::{ CreateDirectoryError, FetchNix, FetchNixError, MoveUnpackedNix, MoveUnpackedNixError, }; use crate::CommonSettings; - use crate::{ action::{Action, ActionDescription, ActionState}, BoxableError, }; +use std::path::PathBuf; +use tokio::task::JoinError; use super::{CreateNixTree, CreateNixTreeError, CreateUsersAndGroup, CreateUsersAndGroupError}; diff --git a/src/action/darwin/create_apfs_volume.rs b/src/action/darwin/create_apfs_volume.rs index c6a8cf5..6e886ab 100644 --- a/src/action/darwin/create_apfs_volume.rs +++ b/src/action/darwin/create_apfs_volume.rs @@ -1,12 +1,6 @@ -use std::{ - path::{Path, PathBuf}, - time::Duration, -}; -use tokio::process::Command; - use crate::{ action::{ - common::{CreateFile, CreateFileError, CreateOrAppendFile, CreateOrAppendFileError}, + base::{CreateFile, CreateFileError, CreateOrAppendFile, CreateOrAppendFileError}, darwin::{ BootstrapVolume, BootstrapVolumeError, CreateSyntheticObjects, CreateSyntheticObjectsError, CreateVolume, CreateVolumeError, EnableOwnership, @@ -17,6 +11,11 @@ use crate::{ }, BoxableError, }; +use std::{ + path::{Path, PathBuf}, + time::Duration, +}; +use tokio::process::Command; const NIX_VOLUME_MOUNTD_DEST: &str = "/Library/LaunchDaemons/org.nixos.darwin-store.plist"; diff --git a/src/action/linux/create_systemd_sysext.rs b/src/action/linux/create_systemd_sysext.rs index c9dde74..b4029a7 100644 --- a/src/action/linux/create_systemd_sysext.rs +++ b/src/action/linux/create_systemd_sysext.rs @@ -1,10 +1,9 @@ -use std::path::{Path, PathBuf}; - -use crate::action::common::{CreateDirectory, CreateDirectoryError, CreateFile, CreateFileError}; +use crate::action::base::{CreateDirectory, CreateDirectoryError, CreateFile, CreateFileError}; use crate::{ action::{Action, ActionDescription, ActionState}, BoxableError, }; +use std::path::{Path, PathBuf}; const PATHS: &[&str] = &[ "usr", diff --git a/src/action/linux/systemd_sysext_merge.rs b/src/action/linux/systemd_sysext_merge.rs index 9d74d72..e021c2f 100644 --- a/src/action/linux/systemd_sysext_merge.rs +++ b/src/action/linux/systemd_sysext_merge.rs @@ -1,13 +1,10 @@ -use std::path::PathBuf; - -use tokio::process::Command; - use crate::execute_command; - use crate::{ action::{Action, ActionDescription, ActionState}, BoxableError, }; +use std::path::PathBuf; +use tokio::process::Command; #[derive(Debug, serde::Deserialize, serde::Serialize, Clone)] pub struct SystemdSysextMerge { diff --git a/src/action/mod.rs b/src/action/mod.rs index 99ef567..62b3751 100644 --- a/src/action/mod.rs +++ b/src/action/mod.rs @@ -1,3 +1,4 @@ +pub mod base; pub mod common; pub mod darwin; pub mod linux; diff --git a/src/planner/linux/multi.rs b/src/planner/linux/multi.rs index a191dd2..bcf3e67 100644 --- a/src/planner/linux/multi.rs +++ b/src/planner/linux/multi.rs @@ -1,13 +1,12 @@ -use std::collections::HashMap; - use crate::{ action::{ - common::{ConfigureNix, CreateDirectory, ProvisionNix}, - linux::StartSystemdUnit, + base::CreateDirectory, + common::{ConfigureNix, ProvisionNix}, }, planner::Planner, BuiltinPlanner, CommonSettings, InstallPlan, }; +use std::collections::HashMap; #[derive(Debug, Clone, clap::Parser, serde::Serialize, serde::Deserialize)] pub struct LinuxMulti { diff --git a/src/planner/specific/steam_deck.rs b/src/planner/specific/steam_deck.rs index 9ad73a0..628f6e0 100644 --- a/src/planner/specific/steam_deck.rs +++ b/src/planner/specific/steam_deck.rs @@ -2,7 +2,8 @@ use std::collections::HashMap; use crate::{ action::{ - common::{CreateDirectory, ProvisionNix}, + base::CreateDirectory, + common::ProvisionNix, linux::{CreateSystemdSysext, StartSystemdUnit}, }, planner::Planner,