Edit
This is an early draft of what the new ins arch instantOS installer actually
became. The new installer works a bit different but is inspired by this scribble
I did on my phone.
Post
This is written on my phone, really quick, dirty thoughts
Rust
installConfig struct
instantosconfig {
user: userconfig
partitions: partitionconfig
}
serializable to toml -> reusable
trait from_answers {
fn from_answer(answers) -> Result Self
}
struct instantOSInstall {
user: UserConfig
}
UserConfig = {
username: string
password: string
}
trait AskStep {
fn collect_choices
fn validate
fn prompt
}
struct AskStepInfo {
optional: bool
AskStepType
}
enum Question {
Input { default: Option<string> }
SelectMultiple { choices }
SelectOne { choices }
YesNo
}
struct QuestionData {
choices: map(QuestionType, data)
answers: map(QuestionType, answer)
}
Enum QuestionType {
UserName(UserNameQuestion),
UserPassword(PasswordQuestion)
}
Alternative approach
type StepId = string
answerRegistry = Map<AnswerKind, Answer>
ActiveQuestions = [AnswerKind]
NodeRegistry = [AnswerKind, Node]
build_dependencies
while get_unsatisfied(unsatisfied)
for step in step
if step.conditions.active
if step.unanswered
return step
struct stepCondition
ValueEquals(stepID, val)
ValueNot(stepID, val)
ValueIn(stepID, vec val)
goback()
for answer in get_active()
if active[i+1] == currentstep
currentstep = active[i]
trait Leaf<data>
data: data
leafkind: enum
fn verify
fn get_choices
enum leafkind
YesNo
Input
ChooseOne
ChooseMulti
Custom(lambda stuff)
askLeaf(leaf)
match leafkind
YesNo
data = gum ask
SelectOne
data = gum choose get_choices
verify
SelectMultiple
data = gum choose get_choices
verify
struct Step {
junction: Option<Vec<AskDependency>>,
question: Option<Leaf(askstuff)>
}
struct AskDependency {
name: string
dependencies: [dependency]
}
partitionconfig depends on
rootpartition
bootloaderpartition
fn get_unsatisfied(ActiveQuestions, NodeRegistry)
sort active_questions by leaf first, junction second
for question in active_questions
if question.unsatisfied
return question
tech stack
duct for commands gum for UI