diff --git a/cmd/nix-search/main.go b/cmd/nix-search/main.go index 3d5d65a..ff169aa 100644 --- a/cmd/nix-search/main.go +++ b/cmd/nix-search/main.go @@ -10,6 +10,7 @@ import ( "os/signal" "strings" + "github.com/hashicorp/go-hclog" "github.com/pkg/errors" "github.com/urfave/cli/v3" "golang.org/x/term" @@ -99,7 +100,24 @@ func main() { func mainAction(c *cli.Context) error { ctx := c.Context + log := hclog.FromContext(ctx) + indexPath := c.String("index-path") + if indexPath == "" { + p, err := blugesearcher.DefaultIndexPath() + if err != nil { + return fmt.Errorf("cannot get default Bluge index path: %w", err) + } + indexPath = p + log.Debug( + "using default index path", + "path", indexPath) + } + + if _, err := os.Stat(indexPath); os.IsNotExist(err) { + log.Info("first run detected, indexing packages...") + c.Set("index", "true") + } if c.Bool("index") { if c.IsSet("flake") { @@ -124,7 +142,6 @@ func mainAction(c *cli.Context) error { if query == "" { return nil } - searcher, err := blugesearcher.Open(indexPath) if err != nil { return errors.Wrap(err, "failed to create searcher (try running with --update)") diff --git a/search/searchers/blugesearcher/blugesearcher.go b/search/searchers/blugesearcher/blugesearcher.go index 5e3a39c..4bf66d3 100644 --- a/search/searchers/blugesearcher/blugesearcher.go +++ b/search/searchers/blugesearcher/blugesearcher.go @@ -40,7 +40,8 @@ func newPackageDocument(path search.Path, pkg search.Package) *bluge.Document { return doc } -func defaultPath() (string, error) { +// DefaultIndexPath gets the default index path. +func DefaultIndexPath() (string, error) { cacheDir, err := os.UserCacheDir() if err != nil { return "", fmt.Errorf("cannot get user cache dir: %w", err) diff --git a/search/searchers/blugesearcher/indexer.go b/search/searchers/blugesearcher/indexer.go index 4df1bc7..4b43e05 100644 --- a/search/searchers/blugesearcher/indexer.go +++ b/search/searchers/blugesearcher/indexer.go @@ -23,7 +23,7 @@ func IndexPackages(ctx context.Context, path string, packages search.TopLevelPac if path == "" { var err error - path, err = defaultPath() + path, err = DefaultIndexPath() if err != nil { return fmt.Errorf("cannot get default index path: %w", err) } diff --git a/search/searchers/blugesearcher/searcher.go b/search/searchers/blugesearcher/searcher.go index fd74b22..56f4756 100644 --- a/search/searchers/blugesearcher/searcher.go +++ b/search/searchers/blugesearcher/searcher.go @@ -28,7 +28,7 @@ func Open(path string) (*PackagesSearcher, error) { if path == "" { var err error - path, err = defaultPath() + path, err = DefaultIndexPath() if err != nil { return nil, fmt.Errorf("cannot get user cache dir: %w", err) }