diff options
author | Alexander Kiryukhin <a.kiryukhin@mail.ru> | 2021-12-05 17:46:53 +0300 |
---|---|---|
committer | Alexander Kiryukhin <a.kiryukhin@mail.ru> | 2021-12-05 17:46:53 +0300 |
commit | bcdbe68ecde049ef62343584bcc26840322c4864 (patch) | |
tree | 4a02b4da5db29ab3f3526ff475db859293a97646 /cmd/root.go |
Initial commit
Diffstat (limited to 'cmd/root.go')
-rw-r--r-- | cmd/root.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..ad372c1 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,68 @@ +package cmd + +import ( + "fmt" + "os" + + "github.com/spf13/afero" + "github.com/spf13/cobra" + + "github.com/spf13/viper" + + "github.com/neonxp/track/internal/tracker" +) + +var cfgFile string + +// rootCmd represents the base command when called without any subcommands +var rootCmd = &cobra.Command{ + Use: "track", + Short: "Track your work or personal activities", + Long: `Track time spent for any work or personal activities`, +} + +var tr *tracker.Tracker + +// Execute adds all child commands to the root command and sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCmd. +func Execute() { + fs := afero.NewOsFs() + var err error + tr, err = tracker.New(fs) + if err != nil { + panic(err) + return + } + cobra.CheckErr(rootCmd.Execute()) +} + +func init() { + cobra.OnInitialize(initConfig) + rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.track.yaml)") + rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} + +// initConfig reads in config file and ENV variables if set. +func initConfig() { + if cfgFile != "" { + // Use config file from the flag. + viper.SetConfigFile(cfgFile) + } else { + // Find home directory. + home, err := os.UserHomeDir() + cobra.CheckErr(err) + + // Search config in home directory with name ".track" (without extension). + viper.AddConfigPath(home) + viper.SetConfigType("yaml") + viper.SetConfigName(".track") + } + + viper.AutomaticEnv() // read in environment variables that match + + // If a config file is found, read it in. + if err := viper.ReadInConfig(); err == nil { + fmt.Fprintln(os.Stderr, "Using config file:", viper.ConfigFileUsed()) + } +} + |