diff --git a/install_neovim.py b/install_neovim.py old mode 100755 new mode 100644 index b416c07..1ad626e --- a/install_neovim.py +++ b/install_neovim.py @@ -3,7 +3,7 @@ install_neovim.py Install Neovim from the latest official GitHub binary release, then install -LazyVim and patch the Telescope config to show hidden files. +LazyVim and patch the snacks.nvim picker config to show hidden files. Targets: Windows 10/11 (x86_64), macOS (arm64 / x86_64), Linux (x86_64 / arm64). @@ -559,56 +559,70 @@ def install_lazyvim(target: Target) -> Path: # --------------------------------------------------------------------------- -# Telescope override +# snacks.nvim override # --------------------------------------------------------------------------- -TELESCOPE_OVERRIDE_LUA = '''-- Generated by install_neovim.py --- Show hidden files in Telescope's find_files and live_grep pickers. --- (.git/ is still excluded; remove the --glob/!.git line below to include it.) +SNACKS_OVERRIDE_LUA = '''-- Generated by install_neovim.py +-- Override LazyVim's bundled snacks.nvim config to show hidden files +-- in the picker (files, grep) and the explorer. +-- +-- Notes: +-- * `hidden = true` shows dotfiles (e.g. .env.example, .eslintrc). +-- * `ignored` is left at its default (false), so files matched by +-- .gitignore stay hidden. Flip to `true` if you want to see them. +-- * lazy.nvim deep-merges these `opts` into LazyVim's existing snacks +-- config; everything else (dashboard, notifier, indent, etc.) is +-- preserved untouched. return { { - "nvim-telescope/telescope.nvim", + "folke/snacks.nvim", opts = { - defaults = { - vimgrep_arguments = { - "rg", - "--color=never", - "--no-heading", - "--with-filename", - "--line-number", - "--column", - "--smart-case", - "--hidden", - "--glob=!.git/", + picker = { + hidden = true, + sources = { + files = { + hidden = true, + }, + grep = { + hidden = true, + }, }, }, - pickers = { - find_files = { - hidden = true, - }, + explorer = { + hidden = true, }, }, }, } ''' +# Marker used to detect files this script has previously written, so we can +# distinguish our own generated config from a user-authored file with the +# same name and avoid clobbering the latter. +GENERATED_MARKER = "-- Generated by install_neovim.py" -def configure_telescope_hidden(config_dir: Path) -> Path: + +def configure_snacks_hidden(config_dir: Path) -> Path: plugins_dir = config_dir / "lua" / "plugins" plugins_dir.mkdir(parents=True, exist_ok=True) - out = plugins_dir / "telescope.lua" + + out = plugins_dir / "snacks.lua" if out.is_file(): try: current = out.read_text(encoding="utf-8") except OSError: current = None - if current == TELESCOPE_OVERRIDE_LUA: - LOG.info("Telescope override already present at %s; no changes needed.", + if current == SNACKS_OVERRIDE_LUA: + LOG.info("Snacks override already present at %s; no changes needed.", out) return out + if current is not None and not current.startswith(GENERATED_MARKER): + LOG.warning("Existing %s is user-authored (no generated marker); " + "refusing to overwrite. Skipping snacks config.", out) + return out LOG.info("Existing %s differs from generated content; overwriting.", out) - out.write_text(TELESCOPE_OVERRIDE_LUA, encoding="utf-8") - LOG.info("Wrote Telescope override to %s", out) + out.write_text(SNACKS_OVERRIDE_LUA, encoding="utf-8") + LOG.info("Wrote snacks.nvim override to %s", out) return out @@ -637,18 +651,18 @@ def print_followup(target: Target, bin_dir: Path, *, lazyvim_skipped: bool) -> N if not lazyvim_skipped: print() print("On first launch, LazyVim will bootstrap lazy.nvim and install plugins.") - print("Telescope is configured to show hidden files (find_files & live_grep).") + print("snacks.picker is configured to show hidden files (find_files, grep, explorer).") print() def main() -> int: parser = argparse.ArgumentParser( - description="Install Neovim + LazyVim with Telescope hidden-files enabled.", + description="Install Neovim + LazyVim with snacks.picker hidden-files enabled.", ) parser.add_argument("-v", "--verbose", action="store_true", help="Enable debug logging.") parser.add_argument("--skip-lazyvim", action="store_true", - help="Install only the Neovim binary; skip LazyVim and Telescope steps.") + help="Install only the Neovim binary; skip LazyVim and snacks steps.") # Internal: set by the script itself when relaunching with UAC elevation # on Windows. Prevents an infinite elevation loop. parser.add_argument("--elevated-relaunch", action="store_true", @@ -745,7 +759,7 @@ def main() -> int: try: config_dir = install_lazyvim(target) - configure_telescope_hidden(config_dir) + configure_snacks_hidden(config_dir) except InstallError as e: LOG.error(str(e)) LOG.error("Neovim is installed but LazyVim setup failed. "