diff --git a/cmd/config.go b/cmd/config.go index 801843b..bce9794 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -10,11 +10,23 @@ import ( ) type Config struct { - DefaultDB string `toml:"default_db"` + DefaultDB string `toml:"default_db"` + DisplayArt bool `toml:"display_art"` + WarnOnDelete bool `toml:"warn_on_delete"` + WarnOnOverwrite bool `toml:"warn_on_overwrite"` } var ( - config Config + config Config + asciiArt string = ` ▄▄ + ██ + ██▄███▄ ▄███▄██ ▄█████▄ + ██▀ ▀██ ██▀ ▀██ ▀ ▄▄▄██ + ██ ██ ██ ██ ▄██▀▀▀██ + ███▄▄██▀ ▀██▄▄███ ██▄▄▄███ + ██ ▀▀▀ ▀▀▀ ▀▀ ▀▀▀▀ ▀▀ + ██ (c) 2025 Lewis Wynne +` configErr error ) @@ -24,7 +36,10 @@ func init() { func defaultConfig() Config { return Config{ - DefaultDB: "default", + DefaultDB: "default", + DisplayArt: false, + WarnOnOverwrite: true, + WarnOnDelete: true, } } @@ -43,14 +58,27 @@ func loadConfig() (Config, error) { return cfg, err } - if _, err := toml.DecodeFile(path, &cfg); err != nil { + md, err := toml.DecodeFile(path, &cfg) + if err != nil { return cfg, fmt.Errorf("parse %s: %w", path, err) } - if cfg.DefaultDB == "" { + if !md.IsDefined("default_db") || cfg.DefaultDB == "" { cfg.DefaultDB = defaultConfig().DefaultDB } + if !md.IsDefined("display_art") { + cfg.DisplayArt = defaultConfig().DisplayArt + } + + if !md.IsDefined("warn_on_delete") { + cfg.WarnOnDelete = defaultConfig().WarnOnDelete + } + + if !md.IsDefined("warn_on_overwrite") { + cfg.WarnOnOverwrite = defaultConfig().WarnOnOverwrite + } + return cfg, nil } diff --git a/cmd/del.go b/cmd/del.go index 50ec4f2..7006361 100644 --- a/cmd/del.go +++ b/cmd/del.go @@ -70,7 +70,7 @@ func del(cmd *cobra.Command, args []string) error { return fmt.Errorf("cannot remove: No such key") } - if !force { + if !force && config.WarnOnDelete { var confirm string quotedTargets := make([]string, 0, len(targetKeys)) for _, t := range targetKeys { diff --git a/cmd/mv.go b/cmd/mv.go index c8f0e68..25cdeb1 100644 --- a/cmd/mv.go +++ b/cmd/mv.go @@ -70,7 +70,7 @@ func mv(cmd *cobra.Command, args []string) error { readonly: false, sync: false, transact: func(tx *badger.Txn, k []byte) error { - if !force { + if !force && config.WarnOnOverwrite { if _, err := tx.Get(k); err == nil { return fmt.Errorf("cannot move '%s': '%s' already exists > run with --force to overwrite", fromSpec.Key, toSpec.Key) } else if err != badger.ErrKeyNotFound { diff --git a/cmd/root.go b/cmd/root.go index 99df604..a5f83dc 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -32,15 +32,8 @@ import ( var rootCmd = &cobra.Command{ Use: "pda", Short: "A key-value store.", - Long: ` ▄▄ - ██ - ██▄███▄ ▄███▄██ ▄█████▄ - ██▀ ▀██ ██▀ ▀██ ▀ ▄▄▄██ - ██ ██ ██ ██ ▄██▀▀▀██ - ███▄▄██▀ ▀██▄▄███ ██▄▄▄███ - ██ ▀▀▀ ▀▀▀ ▀▀ ▀▀▀▀ ▀▀ - ██ (c) 2025 Lewis Wynne -`} + Long: asciiArt, +} func Execute() { if configErr != nil { diff --git a/cmd/version.go b/cmd/version.go index 5e48054..1e213d2 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -28,15 +28,18 @@ import ( ) var ( - version = "2025.51" + version = "pda! 2025.51 release" ) // versionCmd represents the version command var versionCmd = &cobra.Command{ Use: "version", - Short: "Show the version of your CLI tool", + Short: "Display pda! version", Run: func(cmd *cobra.Command, args []string) { - fmt.Printf("pda! %s\n", version) + if config.DisplayArt { + fmt.Print(asciiArt + "\n ") + } + fmt.Printf("%s\n", version) }, }