1package cmd
 2
 3import (
 4	"os"
 5	"path/filepath"
 6
 7	"github.com/charmbracelet/crush/internal/config"
 8	"github.com/charmbracelet/lipgloss/v2"
 9	"github.com/charmbracelet/lipgloss/v2/table"
10	"github.com/charmbracelet/x/term"
11	"github.com/spf13/cobra"
12)
13
14var dirsCmd = &cobra.Command{
15	Use:   "dirs",
16	Short: "Print directories used by Crush",
17	Long: `Print the directories where Crush stores its configuration and data files.
18This includes the global configuration directory and data directory.`,
19	Example: `
20# Print all directories
21crush dirs
22
23# Print only the config directory
24crush dirs config
25
26# Print only the data directory
27crush dirs data
28  `,
29	Run: func(cmd *cobra.Command, args []string) {
30		if term.IsTerminal(os.Stdout.Fd()) {
31			// We're in a TTY: make it fancy.
32			t := table.New().
33				Border(lipgloss.RoundedBorder()).
34				StyleFunc(func(row, col int) lipgloss.Style {
35					return lipgloss.NewStyle().Padding(0, 2)
36				}).
37				Row("Config", filepath.Dir(config.GlobalConfig())).
38				Row("Data", filepath.Dir(config.GlobalConfigData()))
39			lipgloss.Println(t)
40			return
41		}
42		// Not a TTY.
43		cmd.Println(filepath.Dir(config.GlobalConfig()))
44		cmd.Println(filepath.Dir(config.GlobalConfigData()))
45	},
46}
47
48var configDirCmd = &cobra.Command{
49	Use:   "config",
50	Short: "Print the configuration directory used by Crush",
51	Run: func(cmd *cobra.Command, args []string) {
52		cmd.Println(filepath.Dir(config.GlobalConfig()))
53	},
54}
55
56var dataDirCmd = &cobra.Command{
57	Use:   "data",
58	Short: "Print the datauration directory used by Crush",
59	Run: func(cmd *cobra.Command, args []string) {
60		cmd.Println(filepath.Dir(config.GlobalConfigData()))
61	},
62}
63
64func init() {
65	dirsCmd.AddCommand(configDirCmd, dataDirCmd)
66}