@@ -0,0 +1,66 @@
1+package cmd
2+
3+import (
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+
14+var 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.
18+This includes the global configuration directory and data directory.`,
19+ Example: `
20+# Print all directories
21+crush dirs
22+
23+# Print only the config directory
24+crush dirs config
25+
26+# Print only the data directory
27+crush 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+
48+var 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+
56+var 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+
64+func init() {
65+ dirsCmd.AddCommand(configDirCmd, dataDirCmd)
66+}