inits commits
commit
ed8c8d64ea
|
@ -0,0 +1,11 @@
|
|||
this work is licensed under the TILDE ZINE LICENSE, version 7.
|
||||
|
||||
it may be freely remixed, cut up, pounded into dust, or simply used as
|
||||
a handkerchief, provided the following conditions are met:
|
||||
|
||||
1. You submit to the next available issue of the TILDE ZINE.
|
||||
2. You get up right now and do a little dance.
|
||||
3. You promise to love yourself every day. Sometimes it's hard but
|
||||
that's why we promise.
|
||||
|
||||
<3 dozens
|
|
@ -0,0 +1,109 @@
|
|||
# MEALS
|
||||
|
||||
This is my own personal recipe database and meal planner
|
||||
|
||||
STATUS: janky, proof of concept, unsafe, used in production
|
||||
|
||||
## ABOUT
|
||||
|
||||
recipes.rec contains two types: meals and recipes
|
||||
|
||||
a meal may contain many recipe components.
|
||||
|
||||
```
|
||||
%rec: meal
|
||||
%doc: a meal can consist of several recipes
|
||||
%key: name
|
||||
%type: recipe rec recipe
|
||||
%type: name line
|
||||
%mandatory: name recipe
|
||||
%allowed: name recipe
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
name: Lemon Couscous w Salmon and roast broccoli
|
||||
recipe: lemon couscous
|
||||
recipe: frozen salmon patties
|
||||
recipe: roast brocolli
|
||||
```
|
||||
|
||||
|
||||
and a recipe comprises several ingredients and steps.
|
||||
|
||||
```
|
||||
%rec: recipe
|
||||
%doc: a recipe for one thing
|
||||
%key: name
|
||||
%type: name,ingredient,step line
|
||||
%mandatory: name ingredient step
|
||||
%allowed: name ingredient step
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
name: lemon couscous
|
||||
ingredient: couscous
|
||||
ingredient: veggie stock
|
||||
ingredient: lemon juice
|
||||
ingredient: garlic
|
||||
step: cook the couscous in the stock
|
||||
step: drain
|
||||
step: add lemon and garlic
|
||||
```
|
||||
|
||||
menu.rec
|
||||
contains meals for breakfast, lunch, and dinner for each day.
|
||||
|
||||
```
|
||||
%rec: menu
|
||||
%doc: a menu of meals
|
||||
%type: breakfast rec meal
|
||||
%type: lunch rec meal
|
||||
%type: dinner rec meal
|
||||
%type: day line
|
||||
%type: date date
|
||||
%allowed: day date breakfast lunch dinner
|
||||
%mandatory: day date breakfast lunch dinner
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
day: Wednesday
|
||||
date: 2024-02-07
|
||||
breakfast: eggs n peanutbutter
|
||||
lunch: chipotle bowl
|
||||
dinner: Lemon Couscous w Salmon and roast broccoli
|
||||
```
|
||||
|
||||
the justfile contains scrips for creating a `.rem` file for remind(1).
|
||||
(from there you can use the `rem2ics` utility to create a calendar file,
|
||||
or `rem2ps` to create a pdf.)
|
||||
it also can create a simple pdf menu via groff and tbl.
|
||||
finally it print a list of ingredients needed for next week's menu
|
||||
so you can plan your shoping.
|
||||
|
||||
## YOU WILL NEED
|
||||
|
||||
- recutils
|
||||
- groff
|
||||
- zx
|
||||
|
||||
## GETTING STARTED
|
||||
|
||||
- add recipes and meals to db/recipes.rec
|
||||
- plan your weekly menu in db/menu.rec
|
||||
- `just menu` to create `.rem` and `.pdf` menus for the week
|
||||
- `just shopping` to print a shopping list
|
||||
|
||||
## TODO
|
||||
|
||||
This might eventually become part of the backend for supervegan.neocities.org
|
||||
|
||||
- [ ] remove zx dep (i thought it would make dates easier in the beginning)
|
||||
- [ ] parameterize the date for which the week should be calculated.
|
||||
- [ ] quantity for recipe ingredient?
|
||||
- [ ] yield for recipe?
|
|
@ -0,0 +1,103 @@
|
|||
%rec: menu
|
||||
%doc: a menu of meals
|
||||
%type: breakfast rec meal
|
||||
%type: lunch rec meal
|
||||
%type: dinner rec meal
|
||||
%type: day line
|
||||
%type: date date
|
||||
%allowed: day date breakfast lunch dinner
|
||||
%mandatory: day date breakfast lunch dinner
|
||||
|
||||
# WEEK 05 / 52
|
||||
|
||||
day: Monday
|
||||
date: 2024-02-05
|
||||
breakfast: eggs n peanutbutter
|
||||
lunch: chipotle bowl
|
||||
dinner: stirfry w roast brocolli
|
||||
|
||||
day: Tuesday
|
||||
date: 2024-02-06
|
||||
breakfast: eggs n peanutbutter
|
||||
lunch: chipotle bowl
|
||||
dinner: pasta with balls and roast broccoli
|
||||
|
||||
day: Wednesday
|
||||
date: 2024-02-07
|
||||
breakfast: eggs n peanutbutter
|
||||
lunch: chipotle bowl
|
||||
dinner: Lemon Couscous w Salmon and roast broccoli
|
||||
|
||||
day: Thursday
|
||||
date: 2024-02-08
|
||||
breakfast: eggs n peanutbutter
|
||||
lunch: chipotle bowl
|
||||
dinner: Roast squash w mashed potatoes
|
||||
|
||||
day: Friday
|
||||
date: 2024-02-09
|
||||
breakfast: eggs n peanutbutter
|
||||
lunch: chipotle bowl
|
||||
dinner: Burgers
|
||||
|
||||
|
||||
# WEEK 04 / 52
|
||||
|
||||
day: Monday
|
||||
date: 2024-01-29
|
||||
breakfast: eggs n cornbread
|
||||
lunch: 3P Pasta
|
||||
dinner: stirfry w roast brocolli
|
||||
|
||||
day: Tuesday
|
||||
date: 2024-01-30
|
||||
breakfast: eggs n cornbread
|
||||
lunch: 3P Pasta
|
||||
dinner: Corndogs n fries
|
||||
|
||||
day: Wednesday
|
||||
date: 2024-01-31
|
||||
breakfast: eggs n cornbread
|
||||
lunch: 3P Pasta
|
||||
dinner: Black bean grain bowl
|
||||
|
||||
day: Thursday
|
||||
date: 2024-02-01
|
||||
breakfast: eggs n cornbread
|
||||
lunch: 3P Pasta
|
||||
#dinner: Roast squash w mashed potatoes
|
||||
dinner: canceled
|
||||
|
||||
day: Friday
|
||||
date: 2024-02-02
|
||||
breakfast: eggs n cornbread
|
||||
lunch: 3P Pasta
|
||||
dinner: FFY
|
||||
|
||||
|
||||
|
||||
# WEEK 02/52
|
||||
|
||||
day: Monday
|
||||
date: 2024-01-15
|
||||
breakfast: eggs n cornbread
|
||||
lunch: Chili
|
||||
dinner: gnocci and squash
|
||||
|
||||
day: Tuesday
|
||||
date: 2024-01-16
|
||||
breakfast: eggs n cornbread
|
||||
lunch: Chili
|
||||
dinner: mashed potatoes w mac-n-cheese
|
||||
|
||||
day: Wednesday
|
||||
date: 2024-01-17
|
||||
breakfast: eggs n cornbread
|
||||
lunch: Chili
|
||||
dinner: stirfry w roast brocolli
|
||||
|
||||
day: Thursday
|
||||
date: 2024-01-18
|
||||
breakfast: eggs n cornbread
|
||||
lunch: Chili
|
||||
dinner: spaghetti n balls
|
|
@ -0,0 +1,103 @@
|
|||
%rec: meal
|
||||
%doc: a meal can consist of several recipes
|
||||
%key: name
|
||||
%type: recipe rec recipe
|
||||
%type: name line
|
||||
%mandatory: name recipe
|
||||
%allowed: name recipe
|
||||
|
||||
name: chipotle bowl
|
||||
recipe: chipotle bowl
|
||||
|
||||
name: stirfry w roast brocolli
|
||||
recipe: stirfry
|
||||
recipe: roast brocolli
|
||||
|
||||
name: pasta with balls and roast broccoli
|
||||
recipe: pasta
|
||||
recipe: gardein frozen balls
|
||||
recipe: roast brocolli
|
||||
|
||||
name: Lemon Couscous w Salmon and roast broccoli
|
||||
recipe: lemon couscous
|
||||
recipe: frozen salmon patties
|
||||
recipe: roast brocolli
|
||||
|
||||
name: Roast squash w mashed potatoes
|
||||
recipe: frozen roast squash
|
||||
recipe: mashed potatoes
|
||||
|
||||
name: Burgers
|
||||
recipe: beyond burger cookout classic
|
||||
|
||||
%rec: recipe
|
||||
%doc: a recipe for one thing
|
||||
%key: name
|
||||
%type: name,ingredient,step line
|
||||
%mandatory: name ingredient step
|
||||
%allowed: name ingredient step
|
||||
|
||||
name: chipotle bowl
|
||||
ingredient: black beans
|
||||
ingredient: brown rice or farro
|
||||
ingredient: yellow onions
|
||||
ingredient: corn
|
||||
ingredient: peppers
|
||||
step: cook the beans
|
||||
step: cook the rice
|
||||
step: saute the onions and peppers
|
||||
step: combine everything and spice it up
|
||||
|
||||
name: mashed potatoes
|
||||
ingredient: russet potato
|
||||
ingredient: butter
|
||||
ingredient: milk
|
||||
step: boil water
|
||||
step: add potatoes (do not peel)
|
||||
step: boil until soft enough to pass a knife though
|
||||
|
||||
name: lemon couscous
|
||||
ingredient: couscous
|
||||
ingredient: veggie stock
|
||||
ingredient: lemon juice
|
||||
ingredient: garlic
|
||||
step: cook the couscous in the stock
|
||||
step: drain
|
||||
step: add lemon and garlic
|
||||
|
||||
name: beyond burger cookout classic
|
||||
ingredient: beyond burgers
|
||||
ingredient: burger buns
|
||||
ingredient: ketchup and mustard
|
||||
ingredient: red onion
|
||||
ingredient: sliced tomato
|
||||
step: air fry at 365 for 30 minutes
|
||||
|
||||
name: frozen roast squash
|
||||
ingredient: frozen squash
|
||||
step: cook it in the air frier
|
||||
|
||||
name: frozen salmon patties
|
||||
ingredient: frozen salmon patty
|
||||
step: fry it in the pan
|
||||
|
||||
name: pasta
|
||||
ingredient: spaghetti or other pasta
|
||||
ingredient: pasta sauce
|
||||
step: boil the pasta
|
||||
step: heat up the sauce in a sauce pan
|
||||
|
||||
name: gardein frozen balls
|
||||
ingredient: frozen balls
|
||||
step: heat them up in the microwave
|
||||
|
||||
name: stirfry
|
||||
ingredient: frozen stirfry
|
||||
step: heat it up in a pan
|
||||
|
||||
name: roast brocolli
|
||||
ingredient: brocolli
|
||||
step: preheat the oven to 350
|
||||
step: tear the brocolli into bite sized pieces
|
||||
step: add drizzle of oil and dash of seasond salt
|
||||
step: bake for 30 minutes
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,42 @@
|
|||
rem 2024-02-05 at 08:00 tag breakfast msg eggs n peanutbutter%
|
||||
rem 2024-02-05 at 12:00 tag lunch msg chipotle bowl%
|
||||
rem 2024-02-05 at 18:00 tag dinner msg stirfry w roast brocolli%
|
||||
rem 2024-02-06 at 08:00 tag breakfast msg eggs n peanutbutter%
|
||||
rem 2024-02-06 at 12:00 tag lunch msg chipotle bowl%
|
||||
rem 2024-02-06 at 18:00 tag dinner msg pasta with balls and roast broccoli%
|
||||
rem 2024-02-07 at 08:00 tag breakfast msg eggs n peanutbutter%
|
||||
rem 2024-02-07 at 12:00 tag lunch msg chipotle bowl%
|
||||
rem 2024-02-07 at 18:00 tag dinner msg Lemon Couscous w Salmon and roast broccoli%
|
||||
rem 2024-02-08 at 08:00 tag breakfast msg eggs n peanutbutter%
|
||||
rem 2024-02-08 at 12:00 tag lunch msg chipotle bowl%
|
||||
rem 2024-02-08 at 18:00 tag dinner msg Roast squash w mashed potatoes%
|
||||
rem 2024-02-09 at 08:00 tag breakfast msg eggs n peanutbutter%
|
||||
rem 2024-02-09 at 12:00 tag lunch msg chipotle bowl%
|
||||
rem 2024-02-09 at 18:00 tag dinner msg Burgers%
|
||||
rem 2024-01-29 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-01-29 at 12:00 tag lunch msg 3P Pasta%
|
||||
rem 2024-01-29 at 18:00 tag dinner msg stirfry w roast brocolli%
|
||||
rem 2024-01-30 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-01-30 at 12:00 tag lunch msg 3P Pasta%
|
||||
rem 2024-01-30 at 18:00 tag dinner msg Corndogs n fries%
|
||||
rem 2024-01-31 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-01-31 at 12:00 tag lunch msg 3P Pasta%
|
||||
rem 2024-01-31 at 18:00 tag dinner msg Black bean grain bowl%
|
||||
rem 2024-02-01 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-02-01 at 12:00 tag lunch msg 3P Pasta%
|
||||
rem 2024-02-01 at 18:00 tag dinner msg canceled%
|
||||
rem 2024-02-02 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-02-02 at 12:00 tag lunch msg 3P Pasta%
|
||||
rem 2024-02-02 at 18:00 tag dinner msg FFY%
|
||||
rem 2024-01-15 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-01-15 at 12:00 tag lunch msg Chili%
|
||||
rem 2024-01-15 at 18:00 tag dinner msg gnocci and squash%
|
||||
rem 2024-01-16 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-01-16 at 12:00 tag lunch msg Chili%
|
||||
rem 2024-01-16 at 18:00 tag dinner msg mashed potatoes w mac-n-cheese%
|
||||
rem 2024-01-17 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-01-17 at 12:00 tag lunch msg Chili%
|
||||
rem 2024-01-17 at 18:00 tag dinner msg stirfry w roast brocolli%
|
||||
rem 2024-01-18 at 08:00 tag breakfast msg eggs n cornbread%
|
||||
rem 2024-01-18 at 12:00 tag lunch msg Chili%
|
||||
rem 2024-01-18 at 18:00 tag dinner msg spaghetti n balls%
|
|
@ -0,0 +1,100 @@
|
|||
# show all recipes
|
||||
default:
|
||||
just --list --unsorted
|
||||
|
||||
remtmpl := '''
|
||||
"rem {{date}} at 08:00 tag breakfast msg {{breakfast}}%
|
||||
rem {{date}} at 12:00 tag lunch msg {{lunch}}%
|
||||
rem {{date}} at 18:00 tag dinner msg {{dinner}}%
|
||||
"'''
|
||||
|
||||
# build menu.rem from menu.rec
|
||||
rem:
|
||||
#!/bin/sh
|
||||
exec > dist/menu.rem
|
||||
recsel db/menu.rec | recfmt {{remtmpl}}
|
||||
|
||||
# build menu pdf from menu.rec
|
||||
pdf:
|
||||
#!/usr/bin/env zx
|
||||
const curr = new Date()
|
||||
const firstday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
|
||||
const lastday = new Date(curr.setDate(curr.getDate() - curr.getDay()+6));
|
||||
const options = {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
};
|
||||
const rec = await $`recsel db/menu.rec -e ${'date >> "' + firstday + '"'}`.quiet()
|
||||
.pipe($`recsel -e ${'date << "' + lastday + '"'}`).quiet()
|
||||
const bkfst = await $`echo ${rec}`.quiet()
|
||||
.pipe($`recsel -p breakfast`).quiet()
|
||||
.pipe($`recfmt '.ad l
|
||||
{{{{breakfast}}
|
||||
T};T{
|
||||
'`).quiet()
|
||||
const lunch = await $`echo ${rec}`.quiet()
|
||||
.pipe($`recsel -p lunch`).quiet()
|
||||
.pipe($`recfmt '.ad l
|
||||
{{{{lunch}}
|
||||
T};T{
|
||||
'`).quiet()
|
||||
const dinner = await $`echo ${rec}`.quiet()
|
||||
.pipe($`recsel -p dinner`).quiet()
|
||||
.pipe($`recfmt '.ad l
|
||||
{{{{dinner}}
|
||||
T};T{
|
||||
'`).quiet()
|
||||
const firstdaygroff = new Date(firstday.setDate(firstday.getDate()+1 - firstday.getDay())).toLocaleString('en-US', options);
|
||||
const lastdaygroff = new Date(lastday.setDate(lastday.getDate() - lastday.getDay()+5)).toLocaleString('en-US', options);
|
||||
const tmpl=`
|
||||
.ce
|
||||
.I
|
||||
chez brun
|
||||
.sp 2
|
||||
.LP
|
||||
.ps 14
|
||||
${firstdaygroff} - ${lastdaygroff}
|
||||
.ps
|
||||
.sp 3
|
||||
.LP
|
||||
.TS
|
||||
center expand tab(;);
|
||||
l | lp+2 lp+2 lp+2 lp+2 lp+2
|
||||
- | - - - - -
|
||||
l | l l l l l.
|
||||
;Monday;Tuesday;Wednesday;Thursday;Friday
|
||||
Breakfast;T{
|
||||
${bkfst}
|
||||
T}
|
||||
.sp
|
||||
Lunch;T{
|
||||
${lunch}
|
||||
T}
|
||||
.sp
|
||||
Dinner;T{
|
||||
${dinner}
|
||||
T}
|
||||
.TE`
|
||||
await $`echo ${tmpl}`.quiet()
|
||||
.pipe($`groff -t -ms -Tpdf -d paper=letterl -P-pletterl > dist/${new Date(firstdaygroff).toISOString().slice(0, 10)}-${new Date(lastdaygroff).toISOString().slice(8,10)}.pdf`)
|
||||
|
||||
# build menus!
|
||||
menu: rem pdf
|
||||
|
||||
# shopping list
|
||||
shopping:
|
||||
#!/usr/bin/env sh
|
||||
begin=$(gdate -d'next sun')
|
||||
end=$(gdate -d'next sun +7 days')
|
||||
recsel db/menu.rec -e "date >> '$begin'" \
|
||||
| recsel -e "date << '$end'" -P breakfast,lunch,dinner -C \
|
||||
| sort \
|
||||
| uniq \
|
||||
| xargs -I % recsel db/recipes.rec \
|
||||
-t meal \
|
||||
-j recipe \
|
||||
-e "name = '%'" \
|
||||
-G name \
|
||||
-P recipe_ingredient \
|
||||
| sort
|
Loading…
Reference in New Issue