Projects
Project management for power users.
Installation
$ npm install -g projects
Quickstart
If the majority of your projects are subdirectories of one folder then the
easiest way to get started is this (in my case my projects live underneath
~/p/
):
$ npm install -g projects$ echo "alias p=projects" >> ~/.bashrc$ source ~/.bashrc$ vim ~/.config/projects # edit like so (note: this file will probably become JSON soon!) [github]username = beaugunderson [projects]directory = ~/p $ p import ~/p/*$ p github # if you want to import metadata about your GitHub projects too
Try p remind
, p git-status
, p git-unpushed
, and p not-git
for examples
of the time savings and management functionality I'm trying to enable.
Note that the color scheme currently assumes a dark background; if you find it
hard to read try DISABLE_COLOR=true
in your environment (a revamp of all
colors is coming in the next version).
Shell completion
For autocompletion you can redirect projects --completion
to a file in
~/.bash_completion
(zsh is also supported) or use projects-modified.sh
which also contains a fallback to _filedir
so that you can still complete
files and directories (I've opened an
issue to get that improvement back
into omelette, the completion library we use).
Commands
Command | Description |
---|---|
alias |
output shell aliases |
clone |
git clone a project |
each |
run a command in each project directory |
edit |
edit projects files |
gc |
compact the projects database |
get |
get an attribute for a project |
git-status |
git status across all repositories |
git-unpushed |
display repositories with unpushed commits |
github |
fill your projects database with your GitHub repositories |
glob |
glob across all project directories |
import |
import a directory into projects |
info |
show the JSON for a given project |
json-in |
import your projects from plain JSON |
json-out |
export your projects to plain JSON |
ls |
list your porojects |
open |
open a project's homepage |
not-git |
list projects not in git |
query |
query your projects |
remind |
get a reminder of what you were last working on |
set |
set an attribute to a given value for a project |
Writing your own commands
Projects is primarily a framework for making it easy to execute actions on one or more of your projects. For example, you could write a command to check the clean/dirty status of all of your checked out git repositories and list the dirty ones.
If you have an executable file in your PATH that starts with projects-
then
you can execute it underneath projects (and you're encouraged to share them
with others!)
Examples
$ alias p=projects$ cat ~/.config/projects[github]username = beaugunderson [projects]directory = ~/p $ p info vim-scss-instead $ p set vim-scss-instead homepage https://github.com/beaugunderson/vim-scss-insteadSet vim-scss-instead:homepage to "https://github.com/beaugunderson/vim-scss-instead"$ p open vim-scss-instead # opens a web browser to the homepage URL $ p clone vim-scss-insteadCloning into '/Users/beau/p/vim-scss-instead'...remote: Counting objects: 5, done.remote: Compressing objects: 100% , done.remote: Total 5 , reused 5 Receiving objects: 100% , done. $ p github<snip>Adding vim-scss-insteadAdding vim-human-dates<snip>Finished $ p git-unpushednode-helmsman: 6 commits ahead of originprojects: 3 commits ahead of origin
You can also use something like fzf to make selecting a project via the CLI very easy:
# cd to a project via fzf # open a project's URL via fzf # edit a project file with $EDITOR via fzf # note: requires gnu findutils # on OS X you'll want to: # `npm install -g ignore-pipe` # `brew install findutils --with-default-names` # edit a project file modified within in the last 7 days