Go Ahead & Hack

MVP Progress 0%

(turns out sitting down to implement this I instantly lose interest -- but maybe some day!)

It is a truth universally acknowledged, that a single person in posession of a good idea for a new project, will be hampered and annoyed by the laborious set-up process -- Jane Austen

I went to the woods because I wished to live deliberately, to front only the essential facts of development, and see if I could not learn what it had to teach, and not, when I came to die, discover that I had not done cool stuff. -- Henry David Thoreau

Gah -- Shakespeare and also The Bible

When you've got a good idea, you want to build it. When you have something you want to build in your off time, you want to spend that time building that idea. You don't want or need to spend that time combing through build processes, package.locks and REQUIREMENTS.txt and trying to remember how to publish to cargo or what a gem is and does. You should just be able to start.

You should be able to start and select from among reasonable options or simply describe what you want to achieve, and something should be able to be set up for you. That thing should have processes for building set up for you, but also processes for testing, and for generating documentation, and hooks for CI processes and means for publishing your results. If you care about a thing, that should be changeable! Nothing should be locked in! But things should default to just behaving reasonable.

And that is what I want gah to be.

It should be extensible, it should detect dependencies by default, it should be able to modify your code in little ways, and be able to generate and restructure your code before build/publish/test/other things. It should be pluginable, and easily pluginable. It should be language-agnostic and language-independant. It should be explodable. It should allow you to go ahead and hack.

Specific things that I want out of gah:

gah create should ask you what kind of project you want and create that kind of project gah build should build your project and any subprojects gah test should test your project and all subprojects gah publish should publish your project and all subprojects gah use foo should add the foo plugin gah add foo should add a dependency on foo, but also ideally dependencies are automatically detected based on your code

There should be a gah.lock file that holds all the dependencies. It should not need to exist by default - should be contained and deducible from your source code directly. Source code should be modified automatically to include the necessary metadata to construct the gah.lock file

There should be a GAH file that simply and concisely states what plugins are installed and allows you to modify what actions are performed in response to what hooks

There should be a .gah-out directory that is gitignored but contains the effective, gahless version of your project - with a package.json or REQUIREMENTS.txt and setup.py and all that jazz. If it is deleted, it should be recreatable by gah using only the GAH file and optional gah.lock

It should be trivial to write plugins to gah, using something like gah create go gah-plugin of course, but also just simply extending a common interface in your langauge of choice.

It should be trivial to generate files for use alongside the rest of your things - hello.html.pygah and hello.html.gogah should be ways of generating hello.html via templated python or templated go, and they should look pretty similar.