
# projectctl
CLI tool to manage project.
## Getting started
- Install from binary
```bash
VERSION=1.0.0
# Linux x64
curl -Lfo /usr/local/bin/projectctl https://github.com/leroyguillaume/projectctl/releases/download/v$VERSION/projectctl-$VERSION-linux-x64
# Linux aarch64
curl -Lfo /usr/local/bin/projectctl https://github.com/leroyguillaume/projectctl/releases/download/v$VERSION/projectctl-$VERSION-linux-aarch64
# MacOS x64
curl -Lfo /usr/local/bin/projectctl https://github.com/leroyguillaume/projectctl/releases/download/v$VERSION/projectctl-$VERSION-macos-x64
# MacOS ARM
curl -Lfo /usr/local/bin/projectctl https://github.com/leroyguillaume/projectctl/releases/download/v$VERSION/projectctl-$VERSION-macos-aarch64
sudo chmod +x /usr/local/bin/projectctl
# Allow projectctl to source environment variables automatically when you're entering into a directory present in ~/.projectctl/allowed-dirs
# If you're using bash
echo 'eval "$(projectctl hook bash)"' >> ~/.bashrc
source ~/.bashrc
# If you're using zsh
echo 'eval "$(projectctl hook zsh)"' >> ~/.zshrc
source ~/.zshrc
```
- Install from cargo
```bash
cargo install projectctl
echo 'eval "$(projectctl hook bash)"' >> ~/.bashrc
source ~/.bashrc
echo 'eval "$(projectctl hook zsh)"' >> ~/.zshrc
source ~/.zshrc
```
- Install from source
```bash
git clone https://github.com/leroyguillaume/projectctl
cargo install --path projectctl
echo 'eval "$(projectctl hook bash)"' >> ~/.bashrc
source ~/.bashrc
echo 'eval "$(projectctl hook zsh)"' >> ~/.zshrc
source ~/.zshrc
```
### Project
To create a new project from a template, you can use `new` subcommand.
By default, [leroyguillaume/projectctl-templates](https://github.com/leroyguillaume/projectctl-templates) is used as templates repository. Each directory matches a template. Feel free to open a pull request to add one if you want! You can override it by using `--git` option.
[Liquid](https://shopify.github.io/liquid/) is using as template engine. Each file with `.liquid` extension will be rendered. You can templatize filenames.
projectctl injects some variables:
- `name` that has for value the project name
- `description` that has for value the project description (can be set with `-d` option, unset by default)
- `env` that contains all environment variables
- `git` that contains default git configuration
You can also define any variable you want but keep in mind that you will have to set it when you run command by adding `--values` option.
Examples:
```bash
projectctl new rs-lib my-project-name
projectctl new --values '{"repository-url":"https://github.com/username/project-name"}' rs-lib my-project-name
```
projectctl automatically updated `~/.projectctl/allowed-dirs`.
When you want to delete a project, you can run the following command to make sure everything is clean-up:
```bash
projectctl destroy my-project-name
```
### Configuration files
When you run `projectctl env`, these configuration files are loaded (from least to most priority):
- `projectctl.yml`
- `projectctl.local.yml`
Note that you can override these locations with option `-c` (or `--config`).
All configuration files must match [this JSON schema](resources/main/config.schema.json).
You can find [here](examples/) some configuration examples.