diff --git a/internal/fileutil/fileutil.go b/internal/fileutil/fileutil.go index 6c322c51993..7e63b0f42d5 100644 --- a/internal/fileutil/fileutil.go +++ b/internal/fileutil/fileutil.go @@ -51,6 +51,14 @@ func Exists(path string) bool { return err == nil } +func IsDirEmpty(path string) bool { + entries, err := os.ReadDir(path) + if err != nil { + return false + } + return len(entries) == 0 +} + // FileContains checks if a given file at 'path' contains the 'substring' func FileContains(path, substring string) (bool, error) { data, err := os.ReadFile(path) diff --git a/internal/nix/install.go b/internal/nix/install.go index 507a9009765..bcdeff7fe58 100644 --- a/internal/nix/install.go +++ b/internal/nix/install.go @@ -25,8 +25,9 @@ func BinaryInstalled() bool { return cmdutil.Exists("nix") } -func dirExists() bool { - return fileutil.Exists("/nix") +func dirExistsAndIsNotEmpty() bool { + dir := "/nix" + return fileutil.Exists(dir) && !fileutil.IsDirEmpty(dir) } var ensured = false @@ -57,7 +58,7 @@ func EnsureNixInstalled(ctx context.Context, writer io.Writer, withDaemonFunc fu if BinaryInstalled() { return nil } - if dirExists() { + if dirExistsAndIsNotEmpty() { if _, err = SourceProfile(); err != nil { return err } else if BinaryInstalled() {