[**cookiedough**(1)](https://fossil.include-once.org/cookiedough/file/manpage/cookiedough.md)
is a GUI browser for cookiecutter templates. And can of course extract them.
It comes with a database of around 4150 cookietemplates, grouped by category, and allows some
rudimentary filtering. Still **beta**, but usable. 

![screenshot main window](https://imgur.com/wn9mEny.png)


# Installation / Use

Just install it as normal pip package:

    ~$   pip3 install -U cookiedough

And start it from a terminal window:

    ~/projects$   cookiedough

Keep an eye on the terminal when rolling out a template. Not all prompts
might be captured by monkeypatching.


# Notes

There's some usage information in the man page, and in the →Help→Help.


## Bugs / Caveats

 * No support for template dictionary variables. (They're not widely used though.)
 * Database does not contain any directoried templates yet. (A few exist however.)
 * The README colorization is fairly basic. (But more processsing would
   slow it down too much.)
 * It can crash when speed-scrolling through the templates. (Perhaps PSG
   vs Tk threads issue.)
 * Tkinter might also crash when encountering emojis. (Either install
   Symbola font and get rid of Noto Color Emoji. Or upgrade to tcl/tk
   8.6.10, or go back to Ubuntu 18.04 where it miraculously worked.)


## See also

 * [Improving your cookiecutter.json](https://fossil.include-once.org/cookiedough/wiki/improve)
 * [How/what to contribute](https://fossil.include-once.org/cookiedough/wiki/contribute)
 * [uidata struct](https://fossil.include-once.org/cookiedough/wiki/uidata)
 * [usage](https://fossil.include-once.org/cookiedough/wiki/usage)


## API

Unlike cookiecutter, there aren't many public APIs in a GUI tool. The
internal database is easily accessible though:

    import cookiedough
    ls = cookiedough.repos.search(["pyproject.toml", "\w+test"])

There's not much in the update module yet, besides the scoring method:

    cookiedough.update.score(ls.values()[0])

Whereas the rollout module provides the cc config interface:

    ccc = cookiecutter.rollout.CookieCutterConfig()
    print(ccc.fn, ccc.dir, ccc.replay)
    d = ccc.read_config()

As well as the `.cutting()` wrapper, or even `.hijack_prompt()` and `.task()`.


## from `project` import `meta`

| meta           | info                                                            |
|:---------------|:----------------------------------------------------------------|
| depends        | [pysimplegui](https://pypi.org/project/PySimpleGUI/), sys:[tkinter](https://docs.python.org/3/library/tkinter.html), [cookiecutter](https://pypi.org/project/cookiecutter/), [pluginconf](https://pypi.org/project/pluginconf/), [appdirs](https://pypi.org/project/appdirs/), [requests](https://pypi.org/project/requests/), ... |
| compat         | Python ≥3.8, BSD/Linux                                          |
| compliancy     | xdg, pluginspec, !pep8, !desktop, !xdnd, mallard, man, !netrc, dotenv, !http_proxy, nobackup, !releases.json, !doap, !packfile |
| system usage   | rare (xdg-open only)                                            |
| paths          | ~/.config/cookiedough/                                          |
| testing        | `None`                                                          |
| docs           | minimal wiki, mallard/yelp, news                                |
| activity       | backburner                                                      |
| state          | beta                                                            |
| support        | email                                                           |
| contrib        | mail, fossil                                                    |
| announce       | [freshcode.club](https://freshcode.club/projects/cookiedough)   |


