106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
package tui
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/AvengeMedia/danklinux/internal/distros"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
)
|
|
|
|
type gentooUseFlagsSetMsg struct {
|
|
err error
|
|
}
|
|
|
|
func (m Model) viewGentooUseFlags() string {
|
|
var b strings.Builder
|
|
|
|
b.WriteString(m.renderBanner())
|
|
b.WriteString("\n")
|
|
|
|
title := m.styles.Title.Render("Gentoo Global USE Flags")
|
|
b.WriteString(title)
|
|
b.WriteString("\n\n")
|
|
|
|
info := m.styles.Normal.Render("The following global USE flags will be enabled in /etc/portage/make.conf:")
|
|
b.WriteString(info)
|
|
b.WriteString("\n\n")
|
|
|
|
for _, flag := range distros.GentooGlobalUseFlags {
|
|
flagLine := m.styles.Success.Render(fmt.Sprintf(" • %s", flag))
|
|
b.WriteString(flagLine)
|
|
b.WriteString("\n")
|
|
}
|
|
|
|
b.WriteString("\n")
|
|
note := m.styles.Subtle.Render("These flags ensure proper Qt6, Wayland, and compositor support.")
|
|
b.WriteString(note)
|
|
b.WriteString("\n\n")
|
|
|
|
help := m.styles.Subtle.Render("Press Enter to continue, Esc to go back")
|
|
b.WriteString(help)
|
|
|
|
return b.String()
|
|
}
|
|
|
|
func (m Model) updateGentooUseFlagsState(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
if gccMsg, ok := msg.(gccVersionCheckMsg); ok {
|
|
if gccMsg.err != nil || gccMsg.major < 15 {
|
|
m.state = StateGentooGCCCheck
|
|
return m, nil
|
|
}
|
|
if checkFingerprintEnabled() {
|
|
m.state = StateAuthMethodChoice
|
|
m.selectedConfig = 0
|
|
} else {
|
|
m.state = StatePasswordPrompt
|
|
m.passwordInput.Focus()
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
if keyMsg, ok := msg.(tea.KeyMsg); ok {
|
|
switch keyMsg.String() {
|
|
case "enter":
|
|
if m.selectedWM == 1 {
|
|
return m, m.checkGCCVersion()
|
|
}
|
|
if checkFingerprintEnabled() {
|
|
m.state = StateAuthMethodChoice
|
|
m.selectedConfig = 0
|
|
} else {
|
|
m.state = StatePasswordPrompt
|
|
m.passwordInput.Focus()
|
|
}
|
|
return m, nil
|
|
case "esc":
|
|
m.state = StateDependencyReview
|
|
return m, nil
|
|
}
|
|
}
|
|
return m, m.listenForLogs()
|
|
}
|
|
|
|
func (m Model) setGentooGlobalUseFlags() tea.Cmd {
|
|
return func() tea.Msg {
|
|
useFlagsStr := strings.Join(distros.GentooGlobalUseFlags, " ")
|
|
|
|
checkCmd := exec.CommandContext(context.Background(), "grep", "-q", "^USE=", "/etc/portage/make.conf")
|
|
hasUse := checkCmd.Run() == nil
|
|
|
|
var cmd *exec.Cmd
|
|
if hasUse {
|
|
cmd = distros.ExecSudoCommand(context.Background(), m.sudoPassword,
|
|
fmt.Sprintf("sed -i 's/^USE=\"\\(.*\\)\"/USE=\"\\1 %s\"/' /etc/portage/make.conf", useFlagsStr))
|
|
} else {
|
|
cmd = distros.ExecSudoCommand(context.Background(), m.sudoPassword,
|
|
fmt.Sprintf("bash -c \"echo 'USE=\\\"%s\\\"' >> /etc/portage/make.conf\"", useFlagsStr))
|
|
}
|
|
|
|
err := cmd.Run()
|
|
return gentooUseFlagsSetMsg{err: err}
|
|
}
|
|
}
|