43 lines
1,020 B
Go
43 lines
1,020 B
Go
package dotfiles
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"system_setup_tool/internal/shell"
|
|
)
|
|
|
|
type DotfilesConfig struct {
|
|
Enable bool `mapstructure:"enable"`
|
|
GitRepo string `mapstructure:"git_repo"`
|
|
}
|
|
|
|
func SetupDotfiles(config DotfilesConfig) error {
|
|
if _, err := shell.ExecLookPath("git"); err != nil {
|
|
return fmt.Errorf("git ist nicht installiert")
|
|
}
|
|
|
|
if _, err := shell.ExecLookPath("stow"); err != nil {
|
|
return fmt.Errorf("gnu stow not installed")
|
|
}
|
|
|
|
dotfilesDir := filepath.Join(os.Getenv("HOME"), "dotfiles")
|
|
|
|
cmd := shell.ExecCommand("git", "clone", config.GitRepo, dotfilesDir)
|
|
if err := cmd.Run(); err != nil {
|
|
return fmt.Errorf("error cloning dotfiles: %v", err)
|
|
}
|
|
|
|
if err := os.Chdir(dotfilesDir); err != nil {
|
|
return fmt.Errorf("error changing into dotfiles directory: %v", err)
|
|
}
|
|
|
|
cmd = shell.ExecCommand("stow", ".", "--override='*'")
|
|
if err := cmd.Run(); err != nil {
|
|
log.Printf("error creating links: %v", err)
|
|
}
|
|
fmt.Printf("all linked properly\n")
|
|
|
|
return nil
|
|
}
|