Crates.io | project_init |
lib.rs | project_init |
version | 3.1.23 |
source | src |
created_at | 2017-05-01 06:47:43.590041 |
updated_at | 2019-11-01 02:49:15.578299 |
description | Quickly initialize projects from a template. |
homepage | https://github.com/vmchale/project-init |
repository | https://github.com/vmchale/project-init |
max_upload_size | |
id | 12619 |
size | 155,917 |
pi
is a command-line utility to initialize projects. It is written in rust.
It is intended to provide something like cookiecutter, but faster.
Reasons to use pi:
Reasons to use pi over cookiecutter:
.toml
.Reasons to not use pi over cookiecutter:
Benchmarks (with Haskell's bench):
Tool | Language | Time (vim example plugin) | Time (rust library) |
---|---|---|---|
pi init | rust | 10.10 ms | 8.809 ms |
pi new | rust | 6.672 ms | 8.653 ms |
cookiecutter | python | 317.1 ms | 316.9 ms |
Enter the following in a command prompt:
curl -LSfs https://japaric.github.io/trust/install.sh | sh -s -- --git vmchale/project-init
The easiest way for most users is simply to download the prebuilt binaries. You can find binaries for various platforms on the release page.
First, install cargo. Then:
$ cargo install project_init
You will need to use the nightly release for this to work; if in doubt run
rustup run nightly cargo install project_init
pi
reads from $HOME/.pi_templates/
and your current directory. So, if you
place a template in the $HOME/.pi_templates/idris/
, you can initialize a
project anywhere with
$ pi init idris treesod
There is a repo containing pi templates here.
You can also use pi with built-in templates, viz.
$ pi new haskell really-good-project
Finished initializing project in really-good-project/
Or to fetch a template from github:
$ pi git vmchale/haskell-ats ambitious-insane-project
Makefile
.Global configuration is via the $HOME/.pi.toml
file. The following is an example:
license = "BSD3" # set default license to BSD3
version_control = "git" # initialize new repositories with git
version = "0.1.0" # start new projects at version 0.1.0
[author]
name = "Vanessa McHale"
email = "vanessa.mchale@reconfigure.io"
github_username = "vmchale"
# put any custom keys you want under a [[user]] table
[[user]]
website = "https://vmchale.com"
Project-specific config lives in $PROJECT_NAME/template.toml
. The following is
an example for a vim plugin:
license = "BSD3" # overrides global value if set
with_readme = true # add README.md
[files]
files = ["syntax/{{ project }}.vim","plugin/{{ project }}.vim","doc/{{ project }}.txt"] # blank files
directories = ["doc","syntax","plugin"]
templates = ["vimball.txt"] # files to be processed
[config]
version = "0.1.0"
version_control = "darcs"
# put any custom keys you want below [[user]]
[[user]]
vim_org_username = "vmchale"
This will generate the following directory structure:
vim-plugin
├── LICENSE
├── README.md
├── doc
│ └── vim-plugin.txt
├── plugin
│ └── vim-plugin.vim
├── syntax
│ └── vim-plugin.vim
└── vimball.txt
For a more in-depth example, see here. This is a template based off the recursion schemes generator.
pi
uses mustache for templating, via the
rustache crate.
You can find examples and help on the mustache page, or you can my look at the example repo.