@@ -7,6 +7,8 @@ import (
77 "slices"
88 "strings"
99 "sync/atomic"
10+
11+ "github.com/charmbracelet/crush/internal/fsext"
1012)
1113
1214const (
@@ -59,6 +61,15 @@ func ProjectNeedsInitialization() (bool, error) {
5961 return false, nil
6062 }
6163
64+ // If the working directory has no non-ignored files, skip initialization step
65+ empty, err := dirHasNoVisibleFiles(cfg.WorkingDir())
66+ if err != nil {
67+ return false, fmt.Errorf("failed to check if directory is empty: %w", err)
68+ }
69+ if empty {
70+ return false, nil
71+ }
72+
6273 return true, nil
6374}
6475
@@ -90,6 +101,15 @@ func contextPathsExist(dir string) (bool, error) {
90101 return false, nil
91102}
92103
104+// dirHasNoVisibleFiles returns true if the directory has no files/dirs after applying ignore rules
105+func dirHasNoVisibleFiles(dir string) (bool, error) {
106+ files, _, err := fsext.ListDirectory(dir, nil, 1, 1)
107+ if err != nil {
108+ return false, err
109+ }
110+ return len(files) == 0, nil
111+}
112+
93113func MarkProjectInitialized() error {
94114 cfg := Get()
95115 if cfg == nil {