added encryption and disk selection

This commit is contained in:
tumillanino
2025-10-28 22:51:28 +11:00
parent 8f054b63a1
commit 6f1a6f6efa
5 changed files with 217 additions and 18 deletions

View File

@@ -11,6 +11,10 @@ type State int
const (
StateWelcome State = iota
StateDiskSelection
StateEncryption
StateHostname
StateUser
StateConfirm
StateInstalling
StateFinished
)
@@ -20,6 +24,12 @@ type RootModel struct {
CurrentModel tea.Model
Width int
Height int
SelectedDisk string
EnableLUKS bool
Hostname string
Username string
UserPassword string
RootPassword string
}
func NewModel() RootModel {
@@ -29,6 +39,10 @@ func NewModel() RootModel {
}
}
func (m RootModel) Init() tea.Cmd {
return nil
}
func (m RootModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmd tea.Cmd
@@ -54,13 +68,56 @@ func (m RootModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case steps.DiskSelModel:
if m.CurrentModel.(steps.DiskSelModel).Finished {
// need to update this to pass actual selected disk model to the installer
selectedDisk := m.CurrentModel.(steps.DiskSelModel).SelectedDisk
m.State = StateInstalling
m.CurrentModel = steps.NewInstallModel(selectedDisk)
m.SelectedDisk = m.CurrentModel.(steps.DiskSelModel).SelectedDisk
m.State = StateEncryption
m.CurrentModel = steps.NewEncryptionModel()
return m, m.CurrentModel.Init()
}
// logic for StateInstalling -> StateFinished will go here
case steps.EncryptionModel:
if m.CurrentModel.(steps.EncryptionModel).Finished {
m.EnableLUKS = m.CurrentModel.(steps.EncryptionModel).EnableEncryption
if m.EnableLUKS {
m.RootPassword = m.CurrentModel.(steps.EncryptionModel).Password
}
m.State = StateHostname
m.CurrentModel = steps.NewHostnameModel()
return m, m.CurrentModel.Init()
}
case steps.HostnameModel:
if m.CurrentModel.(steps.HostnameModel).Finished {
m.Hostname = m.CurrentModel.(steps.HostnameModel).Hostname
m.State = StateUser
m.CurrentModel = steps.NewUserModel()
return m, m.CurrentModel.Init()
}
case steps.UserModel:
if m.CurrentModel.(steps.UserModel).Finished {
m.Username = m.CurrentModel.(steps.UserModel).Username
m.UserPassword = m.CurrentModel.(steps.UserModel).Password
m.State = StateConfirm
m.CurrentModel = steps.NewConfirmModel(m.SelectedDisk, m.EnableLUKS, m.Hostname, m.Username)
return m, m.CurrentModel.Init()
}
case steps.ConfirmModel:
if m.CurrentModel.(steps.ConfirmModel).Finished {
if m.CurrentModel.(steps.ConfirmModel).Confirmed {
m.State = StateInstalling
m.CurrentModel = steps.NewInstallModel(m.SelectedDisk, m.EnableLUKS, m.Hostname, m.Username, m.UserPassword, m.RootPassword)
return m, m.CurrentModel.Init()
} else {
return m, tea.Quit
}
}
case steps.InstallModel:
if m.CurrentModel.(steps.InstallModel).Finished {
m.State = StateFinished
return m, tea.Quit
}
}
return m, cmd
}