Go to file
2021-03-06 06:03:45 -06:00
.gitignore Create gitignore 2021-03-06 05:15:21 -06:00
proj More documentation 2021-03-06 06:00:27 -06:00
README.md Add behavior spec for committing the gitignore 2021-03-06 06:03:45 -06:00

proj

Usage

Invoke the script and pass the name of the project as its only non-flag argument:

proj learncpp

If the project exists in your project directory, it will spawn a subshell in that directory. Advanced usage and hooks are detailed below, but you can use it as a glorified cd if that's all you need.

Behavior

When invoked as specified in usage (with any number of valid flags plus exactly one non-flag argument referred to here as $arg1), proj will do the following:

  • Check for the existence of project_dir

    • If project_dir is a directory or symbolic link, proceed

    • If project_dir is any other type of file, panic

    • If project_dir does not exist, create it

  • cd to project_dir (normally ~/Projects)

  • Check for the existence of $arg1

    • If $arg1 is a directory or symbolic link, proceed

    • If $arg1 is any other type of file, panic

    • If $arg1 does not exist, then:

      • Execute the pre-create hook if configured to do so

      • Create $arg1 as a directory

      • Initialize an empty git repository if configured to do so

      • Add and commit a .gitignore if configured to do so

  • cd to $arg1

  • Execute a subshell, and

    • Source .projenv if configured to do so

    • Execute $SHELL

Flags

flag description args
-c Path to a config file to load in place of the default (~/.config/proj.conf) Path to config file
-h Print basic help text

Configuration

value description default
git_auto_init If not set to 0, automatically initialize a git repository on project creation 0
git_auto_init_always If not set to 0, automatically initialize a git repository any time you enter a project and ./.git does not exist 0
git_auto_init_gitignore A colon-separated ($PATH-style) list of items to include in the initial .gitignore *.swp
hook_pre_create Path to a script invoked (not sourced) before a project is created. Script will be executed relative to project_dir Empty string
hook_pre_spawn Path to a script invoked (not sourced) before a shell is spawned in the project directory. Script will be executed relative to the project's root directory Empty string
hook_env Path to a script to source in after entering a project directory but before a shell is spawned. Script will be sourced relative to the project's root directory .projenv
project_dir Path to where projects should be stored. $HOME/Projects

Return Codes

code description
0 Success
2 Invalid flag or missing flag argument
50 Non-flag arguments have errors or are nonsensical