pm
is a hackable package manager for things that aren't packages. Namely:
- libraries
- configuration files
- build systems
- configurable binaries
pm
is meant to be unobtrusive and simple. It is, ultimately, just a collection of scripts created for the purpose of organizing my own projects. It became obtrusive organizing, updating, and remembering how to build projects. This is a solution for that in the form of an organization and build utility; a front-end, of limited sorts, to packaged code.
There are five broad categories of code with which I have found pm
useful:
stores
: unorganized code; think of it as a bookmark which can begzip
pedsources
: raw source code which lacks an installation script but has a build script (or identifiable build system)builds
: the output of the correspondingsources
sub-directory (or, otherwise, your own non-pm
builds)configurations
: system configuration programs (such as font installers, apache configurations, and system migrations)distributions
: full packages which are accompanied by amodule.sh
(such as offline downloads of a .deb package or an emulator for a client's .apk programs).
I have found that code of all shapes and sizes fits roughly into one of those five categories. Feel free to use as many or as few as you wish. pm
has built-in tools for handling, searching, and organizing each of them (with the exception of stores
; nothing happens there).
of all shapes and sizes. I've found it helpful in making website migrations, operating system migrations, modular embedded systems installations, and offline package installations (when your primary package manager is not present, of course).
pm usage|help [raw|pretty[full|key]]
pm install|add <package name> [version]
pm query|info <module name> [version]
pm module <module name> <[help|usage]|[install|add]|describe|run>
pm methods [raw|pretty]
pm create <name> <version>
pm manifest|scan
pm list
Just add this line into your favorite shell's profile:
source <the directory you cloned pm into>/.internals/constitution.sh
Usually, the profile is one of these:
~/.zshrc
~/.bashrc
~/.profile
~/.bash_profile
~/.config/fish/config.fish
Just run pm create <your new package's name>
and add whatever you'd like into the resulting module.sh
.