An open API service indexing awesome lists of open source software.

https://github.com/pawandubey/prj

A project manager
https://github.com/pawandubey/prj

Last synced: 7 months ago
JSON representation

A project manager

Awesome Lists containing this project

README

          

# prj - A dev project manager

`prj` is a personal utility to make management of my personal software projects more ergonomic. Concretely this means it does (or will do) things like providing a common way to build and test projects across languages, providing a way to navigate to and between projects, and a way of setting up customisations to these tasks in a uniform way.

## History

For years I had a bash function called `prj` which would jump to the "root" projects directory on my computer, or when provided an argument, would jump to that project directory directly. It saved me many thousands of times of typing `cd` and `tab`. However, it was getting to be too spartan in its capabilities. After experiencing better tools at work, I was motivated to bring those ergonomics to my personal projects as well.

## Why not reuse an existing thing

Primarily because I don't know another public/open-source tool that has the mix of features I want. On one end of the spectrum there are general build tools (`make`-alikes) that are too wide of a surface area to ergnomic to _customise_ (I don't want to write Makefiles), while on the other end are very special-purpose tools to manage versions or navigate directories faster. I want a mix of both, with the option of customisation without having to lose all my hair.

Plus, I do need personal projects to justify its existence. How cool would be to manage `prj` with `prj`?

## Capabilities

This a list of desired things, and I plan to slowly go through them.

- [x] `prj cd ` fuzzy matches to existing project and `cd`s to its directory.
- [ ] Read config (like `$PROJECT_ROOT`) from a user-specific config file, with directory-based overrides.
- [ ] Define custom tasks (like `prj lint`) through the config file.
- [ ] `prj up` to setup a project. Definable via config.
- [ ] `prj down` to spin-down a project. Definable via config.
- [ ] `prj clone gh:rails/rails` clones the rails repo to `$PROJECT_ROOT/github.com/rails/rails`. Similar prefixes should be definable for other git hosts (e.g. `gl:org/repo` for gitlab) via config.
- [ ] Autodetect project config (e.g. rails apps, ruby gem, rust crate, go package) and provide sensible defaults for the `up` and `down` tasks.
- [ ] Set temporary env from the config (like direnv). Can we use shadowenv for this?

## Getting started

> - [ ] Eventually "self-host" by setting up `prj` with `prj`

- Have the rust toolchain installed.
- `cargo build` to build the project.
- `cargo test` to run tests.