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}