Added config for colors (not yet supported in most areas as I need to

make things not static so they color changes)
This commit is contained in:
2025-02-06 18:37:29 +02:00
parent 98f29ba812
commit ffb5935164
3 changed files with 280 additions and 34 deletions

View File

@@ -1,6 +1,7 @@
package client
import (
"fmt"
"io"
"log"
"os"
@@ -12,6 +13,7 @@ import (
"github.com/kyren223/eko/internal/client/config"
"github.com/kyren223/eko/internal/client/ui"
"github.com/kyren223/eko/internal/client/ui/auth"
"github.com/kyren223/eko/internal/client/ui/colors"
"github.com/kyren223/eko/pkg/assert"
)
@@ -38,9 +40,16 @@ func Run() {
err := config.Load()
if err != nil {
log.Fatalf("Config file at '%v' was unable to load successfully\n%v\n", config.ConfigFile, err)
fmt.Printf("Config file at '%v' was unable to load successfully\n%v\n", config.ConfigFile, err)
os.Exit(1)
}
config.Use(func(config *config.Config) {
if config.Colors != nil {
colors.LoadStrings(config.Colors)
}
})
program := tea.NewProgram(initialModel(dump), tea.WithAltScreen())
assert.AddFlush(BubbleTeaCloser{program})
ui.Program = program

View File

@@ -7,27 +7,60 @@ import (
"os"
"path/filepath"
"reflect"
"github.com/kyren223/eko/internal/client/ui/colors"
)
type Config struct {
ServerName string `json:"server_name"`
PrivateKeyPath string `json:"private_key_path"`
InsertModeTabToSpace bool `json:"insert_mode_tab_to_space"`
InsertModeSpacesPerTab uint8 `json:"insert_mode_spaces_per_tab"`
InsecureDebugMode bool `json:"insecure_debug_mode"`
ServerName string `json:"server_name"`
PrivateKeyPath string `json:"private_key_path"`
InsertModeTabToSpace bool `json:"insert_mode_tab_to_space"`
InsertModeSpacesPerTab uint8 `json:"insert_mode_spaces_per_tab"`
InsecureDebugMode bool `json:"insecure_debug_mode"`
Colors []string `json:"colors"`
}
func Default() Config {
colors.Save()
cols := colors.Get()
sColors := make([]string, 0, colors.Count)
for _, color := range cols {
if color != "" {
sColors = append(sColors, colors.ToHex(color))
}
}
return Config{
ServerName: "eko.kyren.codes",
PrivateKeyPath: "",
InsertModeTabToSpace: true,
InsertModeSpacesPerTab: 4,
InsecureDebugMode: false,
Colors: sColors,
}
}
func Verify(config *Config) error {
func VerifyAndFix(config *Config) error {
if config.ServerName == "" {
config.ServerName = Default().ServerName
}
if config.Colors != nil {
for i, color := range config.Colors {
if !colors.IsHex(color) {
return fmt.Errorf("Color at %v is not a valid hex color", i)
}
}
if len(config.Colors) != colors.Count {
return fmt.Errorf(
"Expected %v colors, got %v colors, set this value to null to use the default colors",
colors.Count, len(config.Colors),
)
}
}
return nil
}
@@ -89,7 +122,7 @@ func Load() error {
config = finalConfig.Interface().(Config)
err = Verify(&config)
err = VerifyAndFix(&config)
if err != nil {
return err
}

View File

@@ -2,37 +2,78 @@ package colors
import (
"fmt"
"regexp"
"slices"
"github.com/charmbracelet/lipgloss"
"github.com/kyren223/eko/pkg/assert"
)
const Count = 32
var (
DefaultLightGray = lipgloss.Color("#939AA3")
DefaultGray = lipgloss.Color("#585858")
DefaultDarkGray = lipgloss.Color("#313244")
DefaultLightBlue = lipgloss.Color("#5874FF")
DefaultBlue = lipgloss.Color("#0029f5")
DefaultDarkCyan = lipgloss.Color("#007E8A")
DefaultDarkerCyan = lipgloss.Color("#005d66")
DefaultDarkerMidnightBlue = lipgloss.Color("#0e0e16")
DefaultDarkMidnightBlue = lipgloss.Color("#181825")
DefaultMidnightBlue = lipgloss.Color("#1E1E2E")
DefaultLightMidnightBlue = lipgloss.Color("#3c3c5d")
DefaultTurquoise = lipgloss.Color("#54D7A9")
DefaultRed = lipgloss.Color("#F16265")
DefaultMutedRed = lipgloss.Color("#443737")
DefaultDarkMutedRed = lipgloss.Color("#402d2d")
DefaultWhite = lipgloss.Color("#FFFFFF")
DefaultBlack = lipgloss.Color("#000000")
DefaultGreen = lipgloss.Color("#46d46c")
DefaultPurple = lipgloss.Color("#BB91F0")
DefaultDarkPurple = lipgloss.Color("#87123d")
DefaultMutedPurple = lipgloss.Color("#403744")
DefaultDarkMutedPurple = lipgloss.Color("#382d40")
DefaultOrange = lipgloss.Color("#F5A670")
DefaultGold = lipgloss.Color("#FFBF00")
DefaultMutedGold = lipgloss.Color("#444037")
DefaultDarkMutedGold = lipgloss.Color("#40382d")
DefaultBackground = DefaultMidnightBlue
DefaultBackgroundHighlight = DefaultLightMidnightBlue
DefaultBackgroundDim = DefaultDarkMidnightBlue
DefaultBackgroundDimmer = DefaultDarkerMidnightBlue
DefaultError = DefaultRed
DefaultFocus = DefaultLightBlue
)
var (
LightGray = lipgloss.Color("#939AA3")
Gray = lipgloss.Color("#585858")
DarkGray = lipgloss.Color("#313244")
LightBlue = lipgloss.Color("#5874FF")
Blue = lipgloss.Color("#0029f5")
DarkCyan = lipgloss.Color("#007E8A")
DarkerCyan = lipgloss.Color("#005d66")
DarkerMidnightBlue = lipgloss.Color("#0e0e16")
DarkMidnightBlue = lipgloss.Color("#181825")
MidnightBlue = lipgloss.Color("#1E1E2E")
LightMidnightBlue = lipgloss.Color("#3c3c5d")
Turquoise = lipgloss.Color("#54D7A9")
Red = lipgloss.Color("#F16265")
MutedRed = lipgloss.Color("#443737")
DarkMutedRed = lipgloss.Color("#402d2d")
White = lipgloss.Color("#FFFFFF")
Black = lipgloss.Color("#000000")
Green = lipgloss.Color("#46d46c")
Purple = lipgloss.Color("#BB91F0")
DarkPurple = lipgloss.Color("#87123d")
MutedPurple = lipgloss.Color("#403744")
DarkMutedPurple = lipgloss.Color("#382d40")
Orange = lipgloss.Color("#F5A670")
Gold = lipgloss.Color("#FFBF00")
MutedGold = lipgloss.Color("#444037")
DarkMutedGold = lipgloss.Color("#40382d")
LightGray = DefaultLightGray
Gray = DefaultGray
DarkGray = DefaultDarkGray
LightBlue = DefaultLightBlue
Blue = DefaultBlue
DarkCyan = DefaultDarkCyan
DarkerCyan = DefaultDarkerCyan
DarkerMidnightBlue = DefaultDarkerMidnightBlue
DarkMidnightBlue = DefaultDarkMidnightBlue
MidnightBlue = DefaultMidnightBlue
LightMidnightBlue = DefaultLightMidnightBlue
Turquoise = DefaultTurquoise
Red = DefaultRed
MutedRed = DefaultMutedRed
DarkMutedRed = DefaultDarkMutedRed
White = DefaultWhite
Black = DefaultBlack
Green = DefaultGreen
Purple = DefaultPurple
DarkPurple = DefaultDarkPurple
MutedPurple = DefaultMutedPurple
DarkMutedPurple = DefaultDarkMutedPurple
Orange = DefaultOrange
Gold = DefaultGold
MutedGold = DefaultMutedGold
DarkMutedGold = DefaultDarkMutedGold
Background = MidnightBlue
BackgroundHighlight = LightMidnightBlue
@@ -42,7 +83,170 @@ var (
Focus = LightBlue
)
var colors = make([]lipgloss.Color, Count)
func Save() {
i := 0
colors[i] = LightGray
i++
colors[i] = Gray
i++
colors[i] = DarkGray
i++
colors[i] = LightBlue
i++
colors[i] = Blue
i++
colors[i] = DarkCyan
i++
colors[i] = DarkerCyan
i++
colors[i] = DarkerMidnightBlue
i++
colors[i] = DarkMidnightBlue
i++
colors[i] = MidnightBlue
i++
colors[i] = LightMidnightBlue
i++
colors[i] = Turquoise
i++
colors[i] = Red
i++
colors[i] = MutedRed
i++
colors[i] = DarkMutedRed
i++
colors[i] = White
i++
colors[i] = Black
i++
colors[i] = Green
i++
colors[i] = Purple
i++
colors[i] = DarkPurple
i++
colors[i] = MutedPurple
i++
colors[i] = DarkMutedPurple
i++
colors[i] = Orange
i++
colors[i] = Gold
i++
colors[i] = MutedGold
i++
colors[i] = DarkMutedGold
i++
colors[i] = Background
i++
colors[i] = BackgroundHighlight
i++
colors[i] = BackgroundDim
i++
colors[i] = BackgroundDimmer
i++
colors[i] = Error
i++
colors[i] = Focus
i++
}
func Restore() {
Load(colors)
}
func Load(colors []lipgloss.Color) {
i := 0
LightGray = colors[i]
i++
Gray = colors[i]
i++
DarkGray = colors[i]
i++
LightBlue = colors[i]
i++
Blue = colors[i]
i++
DarkCyan = colors[i]
i++
DarkerCyan = colors[i]
i++
DarkerMidnightBlue = colors[i]
i++
DarkMidnightBlue = colors[i]
i++
MidnightBlue = colors[i]
i++
LightMidnightBlue = colors[i]
i++
Turquoise = colors[i]
i++
Red = colors[i]
i++
MutedRed = colors[i]
i++
DarkMutedRed = colors[i]
i++
White = colors[i]
i++
Black = colors[i]
i++
Green = colors[i]
i++
Purple = colors[i]
i++
DarkPurple = colors[i]
i++
MutedPurple = colors[i]
i++
DarkMutedPurple = colors[i]
i++
Orange = colors[i]
i++
Gold = colors[i]
i++
MutedGold = colors[i]
i++
DarkMutedGold = colors[i]
i++
Background = colors[i]
i++
BackgroundHighlight = colors[i]
i++
BackgroundDim = colors[i]
i++
BackgroundDimmer = colors[i]
i++
Error = colors[i]
i++
Focus = colors[i]
i++
}
func LoadStrings(s []string) {
assert.Assert(len(s) == Count, "len of strings must match color count")
for i, c := range s {
if IsHex(c) {
colors[i] = lipgloss.Color(c)
}
}
Restore()
}
func Get() []lipgloss.Color {
return slices.Clone(colors)
}
func ToHex(color lipgloss.Color) string {
r, g, b, _ := color.RGBA()
return fmt.Sprintf("#%02X%02X%02X", r>>8, g>>8, b>>8)
}
func IsHex(color string) bool {
re := regexp.MustCompile(`^#[0-9A-Fa-f]{6}$`)
return re.MatchString(color)
}