Metadata-Version: 2.4
Name: crys
Version: 0.1.1
Summary: One short CLI for pip/npm/node/python chores
Author-email: Your Name <dassouraasish@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/TheServer-lab/crys
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: System :: Software Distribution
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# Crystal Dependency Manager (`crys`)

One short command instead of remembering different pip/npm invocations.

## Install

```bash
cd crystal-dependency-manager
pip install .
```

This registers a `crys` command on your PATH (via Python's normal
console-scripts mechanism).

## Why

`crys` doesn't reinvent pip/npm/apt/brew/choco — it just remembers the
long command for you and runs it. A few examples of what's actually
happening behind the scenes:

| You type | `crys` runs (depending on your OS/tools) |
|---|---|
| `crys update pip` | `python -m pip install --upgrade pip` |
| `crys update npm` | `npm install -g npm@latest` |
| `crys update py` | `sudo apt update && sudo apt install --only-upgrade python3` (or `brew upgrade python`, `choco upgrade python`, ...) |
| `crys update node` | `sudo apt install --only-upgrade nodejs` (or `brew upgrade node`, `choco upgrade nodejs`, ...) |
| `crys remove py` | `sudo apt remove python3` (or `brew uninstall python`, `choco uninstall python`, ...) — with a confirmation prompt first |
| `crys remove node` | `brew uninstall node` / `apt remove nodejs` / `choco uninstall nodejs` — with a confirmation prompt first |
| `crys lib install req py` | `pip install -r requirements.txt` |
| `crys lib install req node` | `npm install` |

Every run also prints the exact command it's about to execute (the
cyan `$ ...` line), so you can see what actually happened and learn
the "real" command if you ever need it without `crys`.

## Commands

```text
crys lib install req py            install from requirements.txt (pip)
crys lib install req node          install from package.json (npm)

crys update pip                    upgrade pip itself
crys update npm                    upgrade npm itself
crys update py                     upgrade the Python interpreter
crys update node                   upgrade the Node.js runtime

crys update py lib <name>          pip install --upgrade <name>
crys update node lib <name>        npm install <name>@latest

crys remove py                     uninstall Python (asks to confirm)
crys remove node                   uninstall Node.js (asks to confirm)

crys version py                    print the Python version
crys version node                  print the Node.js version

crys uninstall                     remove Crystal Dependency Manager
crys help                          show help text
```

## Notes on the risky commands

- `crys update node` / `crys update py` try, in order: `nvm`/`pyenv` (if
  present, they just print the right follow-up command since those are
  shell functions, not real executables), then `brew` on macOS, then
  `apt`/`dnf`/`pacman` on Linux, then `choco`/`winget` on Windows.
- `crys remove node` / `crys remove py` always ask for confirmation
  first. `crys remove py` on Linux refuses to run automatically,
  since removing the system Python package can break the OS — it
  prints the manual command instead.
- Everything shells out to the real tool (`pip`, `npm`, `brew`,
  `apt`, etc.) rather than reimplementing package management, so
  `crys` stays a thin, predictable wrapper.

## Uninstalling

```bash
crys uninstall
```

or manually: `pip uninstall crystal-dependency-manager`
