Files
zeit/z/rootCmd.go
T
Martin (Schretzi) Fuchsluger a2da1daa2c Opening Viper for all formats
2025-02-13 21:15:25 +01:00

103 lines
2.2 KiB
Go

package z
import (
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/gookit/color"
"os"
)
var database *Database
var begin string
var finish string
var project string
var task string
var notes string
var since string
var until string
var format string
var force bool
var noColors bool
var debug bool
var cfgFile string
const(
CharTrack = " ▶"
CharFinish = " ■"
CharErase = " ◀"
CharError = " ▲"
CharInfo = " ●"
CharMore = " ◆"
)
var rootCmd = &cobra.Command{
Use: "zeit",
Short: "Command line Zeiterfassung",
Long: `A command line time tracker.`,
}
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Printf("%s %+v\n", CharError, err)
os.Exit(-1)
}
}
func init() {
cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $XDG_CONFIG_HOME/zeit.[yaml|toml")
rootCmd.PersistentFlags().BoolVar(&noColors, FlagNoColors, false, "Do not use colors in output")
viper.BindPFlag(FlagNoColors, rootCmd.PersistentFlags().Lookup(FlagNoColors))
rootCmd.PersistentFlags().BoolVarP(&debug, FlagDebug, "d", false, "Display debugging output in the console. (default: false)")
viper.BindPFlag(FlagDebug, rootCmd.PersistentFlags().Lookup(FlagDebug))
}
func initConfig() {
if noColors == true {
color.Disable()
}
viper.SetEnvPrefix("zeit")
viper.BindEnv("db")
if cfgFile != "" {
// Use config file from the flag.
viper.SetConfigFile(cfgFile)
} else {
// Find home directory.
home, err := os.UserHomeDir()
cobra.CheckErr(err)
viper.AddConfigPath("$XDG_CONFIG_HOME")
viper.AddConfigPath("$XDG_CONFIG_HOME/zeit")
viper.AddConfigPath(home + "/.config")
viper.AddConfigPath(home + "/.config/zeit")
viper.SetConfigName("zeit")
}
if err := viper.ReadInConfig(); err != nil {
// Set default values for parameters
viper.Set("debug", false)
}
if viper.GetBool("debug") {
fmt.Fprintln(os.Stderr, "Using config file:", viper.ConfigFileUsed())
fmt.Fprintln(os.Stderr, "Using Database file:", viper.GetString("db"))
}
var err error
database, err = InitDatabase()
if err != nil {
fmt.Printf("%s %+v\n", CharError, err)
os.Exit(1)
}
}