Metadata-Version: 2.4
Name: nvim-zsh-profile
Version: 0.1.0
Summary: Packaged Neovim, zsh, and tmux profile assets
Requires-Python: >=3.11
Description-Content-Type: text/markdown

# nvim-zsh-profile

This distribution is intentionally a Python asset package rather than a runtime
library. It carries a reusable Neovim and zsh profile as normal package data so
installers can stage the files without cloning a dotfiles repository.

## Contents

- `assets/nvim/` contains the LazyVim-based Neovim profile, including
  `lazy-lock.json`.
- `assets/nvim-lazy/` contains the cleaned Lazy.nvim plugin cache needed for
  offline startup.
- `assets/zsh/init.zsh` contains the sourceable zsh profile fragment.
- `assets/zsh/vendor/` vendors the zsh-only plugins used by the profile:
  `fzf-tab`, `zsh-autosuggestions`, and `zsh-syntax-highlighting`.
- `assets/tmux/` contains the tmux profile files.
- `assets/profile.toml` records the profile inventory and external tools
  expected for the full experience.

The package vendors the Neovim plugin working trees required by `lazy-lock.json`
without Git history, upstream CI files, or upstream tests. It does not bootstrap
plugins from public Git remotes, which makes it suitable for network-restricted
zones once the installer stages both the config and cache assets.

## Integration

The package exposes an import package named `nvim_zsh_profile`. Installers can
locate the asset root with `importlib.resources` or by using the helper
functions exported by the package:

```python
from nvim_zsh_profile import nvim_assets, nvim_lazy_assets, tmux_assets, zsh_assets
```

## Verify

```bash
PYTHONPATH=src python -m unittest discover -s tests
python -m build
python tools/check_dist_size.py --limit-mib 100
```

## Refresh Assets

Use the refresh helper when the local Neovim or zsh profile changes:

```bash
python tools/refresh_assets.py
PYTHONPATH=src python -m unittest discover -s tests
python -m build
python tools/check_dist_size.py --limit-mib 100
```

By default, the helper reads:

- `~/.config/nvim`
- `~/.local/share/nvim/lazy`
- `~/.zshrc`
- `~/.config/tmux`
- `~/.local/share/zsh/plugins/fzf-tab`
- `/usr/share/zsh/plugins/zsh-autosuggestions`
- `/usr/share/zsh/plugins/zsh-syntax-highlighting`

It then reapplies the package transforms: LazyVim stays pinned by
`lazy-lock.json`, the cleaned Lazy.nvim plugin cache is vendored for offline
zones, public bootstrap cloning is replaced with a fail-closed local cache
message, symlinked theme files are copied as real files, local installer-managed
zsh blocks are excluded, zsh plugins are vendored without Git metadata, upstream
CI files, or upstream tests, and tmux config files are copied into `assets/tmux`.

## Release

The GitHub Actions workflow builds and publishes on `v*` tag pushes, matching
the tag-driven release flow used by sibling Python packages. Configure PyPI
Trusted Publishing for this repository and workflow:

- workflow file: `.github/workflows/publish.yml`
- environment: `pypi`
- package distribution name: `nvim-zsh-profile`

Then release with a unique version in `pyproject.toml`:

```bash
python -m build
python tools/check_dist_size.py --limit-mib 100
git tag v0.1.0
git push origin main --tags
```

Publishing happens when the `v*` tag is pushed. PyPI does not allow distribution
filenames to be reused, so bump `pyproject.toml` before tagging a new release.
