package cmd import ( "fmt" "github.com/miguelmota/cointop/cointop" "github.com/spf13/cobra" ) // RootCmd ... func RootCmd() *cobra.Command { var version bool var test bool var clean bool var reset bool var hideMarketbar bool var hideChart bool var hideStatusbar bool var onlyTable bool var silent bool var noCache bool var refreshRate uint var config string var cmcAPIKey string var apiChoice string var colorscheme string var perPage = cointop.DefaultPerPage var cacheDir string var colorsDir string rootCmd := &cobra.Command{ Use: "cointop", Short: "Cointop is an interactive terminal based app for tracking cryptocurrencies", Long: ` _ _ ___ ___ (_)_ __ | |_ ___ _ __ / __/ _ \| | '_ \| __/ _ \| '_ \ | (_| (_) | | | | | || (_) | |_) | \___\___/|_|_| |_|\__\___/| .__/ |_| Cointop is a fast and lightweight interactive terminal based UI application for tracking and monitoring cryptocurrency coin stats in real-time. See git.io/cointop for more info.`, RunE: func(cmd *cobra.Command, args []string) error { if version { cointop.PrintVersion() return nil } if test { // TODO: deprecate test flag, only have test command doTest() return nil } // NOTE: if reset flag enabled, reset and run cointop if reset { if err := cointop.Reset(&cointop.ResetConfig{ Log: !silent, }); err != nil { return err } } // NOTE: if clean flag enabled, clean and run cointop if clean { if err := cointop.Clean(&cointop.CleanConfig{ Log: !silent, }); err != nil { return err } } var refreshRateP *uint if cmd.Flags().Changed("refresh-rate") { refreshRateP = &refreshRate } ct, err := cointop.NewCointop(&cointop.Config{ CacheDir: cacheDir, ColorsDir: colorsDir, NoCache: noCache, ConfigFilepath: config, CoinMarketCapAPIKey: cmcAPIKey, APIChoice: apiChoice, Colorscheme: colorscheme, HideMarketbar: hideMarketbar, HideChart: hideChart, HideStatusbar: hideStatusbar, OnlyTable: onlyTable, RefreshRate: refreshRateP, PerPage: perPage, }) if err != nil { return err } return ct.Run() }, } rootCmd.Flags().BoolVarP(&version, "version", "v", false, "Display current version") rootCmd.Flags().BoolVarP(&test, "test", "", false, "Run test (for Homebrew)") rootCmd.Flags().BoolVarP(&clean, "clean", "", false, "Wipe clean the cache") rootCmd.Flags().BoolVarP(&reset, "reset", "", false, "Reset the config. Make sure to backup any relevant changes first!") rootCmd.Flags().BoolVarP(&hideMarketbar, "hide-marketbar", "", false, "Hide the top marketbar") rootCmd.Flags().BoolVarP(&hideChart, "hide-chart", "", false, "Hide the chart view") rootCmd.Flags().BoolVarP(&hideStatusbar, "hide-statusbar", "", false, "Hide the bottom statusbar") rootCmd.Flags().BoolVarP(&onlyTable, "only-table", "", false, "Show only the table. Hides the chart and top and bottom bars") rootCmd.Flags().BoolVarP(&silent, "silent", "s", false, "Silence log ouput") rootCmd.Flags().BoolVarP(&noCache, "no-cache", "", false, "No cache") rootCmd.Flags().UintVarP(&refreshRate, "refresh-rate", "r", 60, "Refresh rate in seconds. Set to 0 to not auto-refresh") rootCmd.Flags().UintVarP(&perPage, "per-page", "", perPage, "Per page") rootCmd.Flags().StringVarP(&config, "config", "c", "", fmt.Sprintf("Config filepath. (default %s)", cointop.DefaultConfigFilepath)) rootCmd.Flags().StringVarP(&cmcAPIKey, "coinmarketcap-api-key", "", "", "Set the CoinMarketCap API key") rootCmd.Flags().StringVarP(&apiChoice, "api", "", "", "API choice. Available choices are \"coinmarketcap\" and \"coingecko\"") rootCmd.Flags().StringVarP(&colorscheme, "colorscheme", "", "", fmt.Sprintf("Colorscheme to use (default \"cointop\").\n%s", cointop.ColorschemeHelpString())) rootCmd.Flags().StringVarP(&cacheDir, "cache-dir", "", cacheDir, fmt.Sprintf("Cache directory (default %s)", cointop.DefaultCacheDir)) rootCmd.Flags().StringVarP(&colorsDir, "colors-dir", "", colorsDir, "Colorschemes directory") return rootCmd }