Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
kancli
.DS_Store
debug.log

.idea
4 changes: 4 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"os"

tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/kancli/nucleus"
)

type status int
Expand Down Expand Up @@ -34,6 +35,9 @@ const (
)

func main() {
//Create the kancli nuclues
nucleus.Init()

f, err := tea.LogToFile("debug.log", "debug")
if err != nil {
fmt.Println(err)
Expand Down
85 changes: 85 additions & 0 deletions nucleus/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package nucleus

import (
"encoding/json"
"fmt"
"os"
"path/filepath"
)

const (
NucleusDirName = ".kancli-nucleus"
NucleusFileName = "kancli.json"
)

var (
ConfigDir string
ConfigPath string
)

func init() {
initConfigPaths()
Init()
}

func initConfigPaths() {
homeDir, err := os.UserHomeDir()
if err != nil {
fmt.Println("❌ Error: Unable to determine user home directory:", err)
os.Exit(1)
}

ConfigDir = filepath.Join(homeDir, NucleusDirName)
ConfigPath = filepath.Join(ConfigDir, NucleusFileName)
}

func Init() {
if !NucleusExists() {
err := createDefaultConfig()
if err != nil {
fmt.Println("❌ Failed to create default config:", err)
os.Exit(1)
}
}
}

func NucleusExists() bool {
_, err := os.Stat(ConfigPath)
return !os.IsNotExist(err)
}

func GetConfigDir() string {
return ConfigDir
}

// --- Default config setup ---

type KancliConfig struct {
Version string `json:"version"`
User string `json:"user"`
}

func createDefaultConfig() error {
if err := os.MkdirAll(ConfigDir, 0755); err != nil {
return fmt.Errorf("unable to create config directory: %w", err)
}

defaultConfig := KancliConfig{
Version: "1.0.0",
User: "default",
}

data, err := json.MarshalIndent(defaultConfig, "", " ")
if err != nil {
return fmt.Errorf("failed to marshal default config: %w", err)
}

err = os.WriteFile(ConfigPath, data, 0644)
if err != nil {
return fmt.Errorf("failed to write config file: %w", err)
}

fmt.Println("✅ Nucleus created at", ConfigPath)
return nil
}