154 lines
3.6 KiB
Go
154 lines
3.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"github.com/charmbracelet/huh"
|
|
"github.com/charmbracelet/lipgloss"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var (
|
|
currentPkgNameStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("211"))
|
|
doneStyle = lipgloss.NewStyle().Margin(1, 2)
|
|
checkMark = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).SetString("✓")
|
|
unavailablePackages []string
|
|
)
|
|
|
|
type installedItemMsg string
|
|
|
|
type installedPkgMsg string
|
|
|
|
func run(cmd *cobra.Command, args []string) {
|
|
os, err := getLinuxDistribution()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
sudoPassword, err := getSudoPassword()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
var cfg Config
|
|
if err := viper.Unmarshal(&cfg); err != nil {
|
|
log.Fatalf("Fehler beim Lesen der Konfiguration: %v", err)
|
|
}
|
|
|
|
form := huh.NewForm(
|
|
huh.NewGroup(
|
|
huh.NewConfirm().
|
|
Title("Möchten Sie eine headless Installation durchführen?").
|
|
Value(&cfg.Headless),
|
|
),
|
|
).WithTheme(huh.ThemeCatppuccin())
|
|
|
|
if err := form.Run(); err != nil {
|
|
log.Fatalf("Fehler bei der Benutzerabfrage: %v", err)
|
|
}
|
|
|
|
var packages []string
|
|
packages = append(packages, cfg.Packages.Headless...)
|
|
if !cfg.Headless {
|
|
packages = append(packages, cfg.Packages.NonHeadless...)
|
|
}
|
|
|
|
unavailablePackages = []string{}
|
|
|
|
m := newModel(packages, sudoPassword, os)
|
|
p := tea.NewProgram(m)
|
|
if _, err := p.Run(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
printUnavailablePackages()
|
|
|
|
if cfg.Homebrew.Enable {
|
|
if err := installHomebrew(); err != nil {
|
|
log.Printf("Warnung: %v", err)
|
|
}
|
|
if err := installHomebrewPackages(cfg.Homebrew.Packages); err != nil {
|
|
log.Printf("Warnung bei Homebrew-Paketen: %v", err)
|
|
}
|
|
}
|
|
|
|
var installBuild bool
|
|
form = huh.NewForm(
|
|
huh.NewGroup(
|
|
huh.NewConfirm().
|
|
Title("Möchten Sie die Build Essentials installieren?").
|
|
Value(&installBuild),
|
|
),
|
|
).WithTheme(huh.ThemeCatppuccin())
|
|
|
|
err = form.Run()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if installBuild {
|
|
if err := installBuildEssentials(os, sudoPassword); err != nil {
|
|
log.Printf("Warnung: %v", err)
|
|
}
|
|
}
|
|
|
|
var installShellExtensions bool
|
|
form = huh.NewForm(
|
|
huh.NewGroup(
|
|
huh.NewConfirm().
|
|
Title("Möchten Sie die Shell-Extensions installieren?").
|
|
Value(&installShellExtensions),
|
|
),
|
|
).WithTheme(huh.ThemeCatppuccin())
|
|
|
|
err = form.Run()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if installShellExtensions {
|
|
sm := newSpecialSoftwareModel(sudoPassword)
|
|
p = tea.NewProgram(sm)
|
|
if _, err := p.Run(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
if cfg.Go.Enable {
|
|
if err := installGoPackages(cfg.Go.Packages); err != nil {
|
|
log.Printf("Warnung bei Homebrew-Paketen: %v", err)
|
|
}
|
|
}
|
|
if cfg.Cargo.Enable {
|
|
if err := installCargoPackages(cfg.Cargo.Packages); err != nil {
|
|
log.Printf("Warnung bei Homebrew-Paketen: %v", err)
|
|
}
|
|
}
|
|
if cfg.Pipx.Enable {
|
|
if err := installPipxPackages(cfg.Pipx.Packages); err != nil {
|
|
log.Printf("Warnung bei Homebrew-Paketen: %v", err)
|
|
}
|
|
}
|
|
if cfg.Flatpak.Enable {
|
|
fmt.Println("\nKonfiguriere Flatpak...")
|
|
if err := installFlatpak(os, sudoPassword); err != nil {
|
|
log.Printf("Warnung bei Flatpak-Installation: %v", err)
|
|
}
|
|
|
|
if err := addFlatpakRemotes(cfg.Flatpak.Remotes); err != nil {
|
|
log.Printf("Warnung bei Flatpak-Remotes: %v", err)
|
|
}
|
|
|
|
if err := installFlatpakPackages(cfg.Flatpak.Packages); err != nil {
|
|
log.Printf("Warnung bei Flatpak-Paketen: %v", err)
|
|
}
|
|
}
|
|
if cfg.Dotfiles.Enable {
|
|
fmt.Println("\nKonfiguriere Dotfiles...")
|
|
if err := setupDotfiles(cfg.Dotfiles); err != nil {
|
|
log.Printf("Warnung bei Dotfiles-Setup: %v", err)
|
|
}
|
|
}
|
|
}
|