justfiles for automating various tasks on my workstation
1# New blog entry
2[group('blogging')]
3newblog slug:
4 #!/usr/bin/env bash
5 BLOG_DIR="${HOME}/repos/tildegit.org/hyperreal/hyperreal.coffee/http"
6 FILENAME_DATE=$(date '+%Y-%m-%d')
7 POST_DATE=$(date '+%Y-%m-%d %H:%M:%S')
8 FILENAME="${FILENAME_DATE}-{{ slug }}.md"
9 cat <<EOF >"${BLOG_DIR}/content/posts/${FILENAME}"
10 +++
11 title = ''
12 date = $POST_DATE
13 tags = []
14 +++
15
16 EOF
17 nvim "${BLOG_DIR}/content/posts/${FILENAME}"
18 echo 'To add this entry to gemlog, run `blog2gmi ${BLOG_DIR}/content/posts/${FILENAME} "Blog Post Title"`'
19
20# Convert blog entry to gemlog
21[group('blogging')]
22blog2gmi filename title:
23 #!/usr/bin/env bash
24 SCRIPT_DIR="${HOME}/repos/tildegit.org/hyperreal/hyperreal.coffee/scripts"
25 BLOG_POST_FILE={{ filename }}
26 BLOG_POST_TITLE={{ title }}
27 "${SCRIPT_DIR}/blog2gemini ${BLOG_POST_FILE} ${BLOG_POST_TITLE}"
28 echo "To push and deploy changes, run `push-deploy`"
29
30# Convert website page changes to gemtext and send to capsule
31[group('blogging')]
32board-capsule:
33 #!/usr/bin/env bash
34 WEBSITE_DIR="${HOME}/repos/tildegit.org/hyperreal/hyperreal.coffee/http"
35 CAPSULE_DIR="${HOME}/repos/tildegit.org/hyperreal/hyperreal.coffee/gemini"
36
37 find "${WEBSITE_DIR}/content" \
38 -maxdepth 1 \
39 -type f \
40 -not -name "_index.md" \
41 -exec md2gemini -w -d "$CAPSULE_DIR" -f -m {} \;
42
43 echo "To push and deploy changes, run `push-deploy`"
44
45# Push hyperreal.coffee changes to git and deploy website and capsule
46[group('blogging')]
47push-deploy:
48 #!/usr/bin/env bash
49 set -euo pipefail
50
51 HC_DIR="${HOME}/repos/tildegit.org/hyperreal/hyperreal.coffee"
52 cd "$HC_DIR"
53 msg_info="$(( $(git rev-list --count HEAD) + 1)) $(date '+%Y-%m-%d %H:%M:%S')"
54 git add .
55 git commit -m "Update: ${msg_info}"
56 git push -u origin main
57
58 WEBSITE_DIR="${HC_DIR}/http"
59 CAPSULE_DIR="${HC_DIR}/gemini"
60 PUBLIC_DIR="${HOME}/public_html"
61
62 rm -rf "${PUBLIC_DIR}/"*
63 hugo --gc --minify -d "${PUBLIC_DIR}" -s "$WEBSITE_DIR"
64 rsync \
65 -avz \
66 --delete \
67 "${PUBLIC_DIR}"/ \
68 jas@hyperreal.carp-wyvern.ts.net:/home/jas/public/html
69
70 rsync \
71 -avz \
72 --delete \
73 "$CAPSULE_DIR"/ \
74 jas@hyperreal.carp-wyvern.ts.net:/home/jas/public/gemini/hyperreal.coffee
75
76 echo
77 echo "Website and capsule successfully deployed"
78
79# New feelslog entry
80[group('blogging')]
81newfeels tags:
82 #!/usr/bin/env bash
83 DATE=$(date '+%Y-%m-%d')
84 TAGS="$@"
85 FEELSDIR="${HOME}/repos/tildegit.org/hyperreal/feelslog"
86 PREV_ENTRY=$(find "$FEELSDIR/src" -name "*.md" -exec basename {} \; | sort | tail -1 | cut -c 18-21)
87 NEXT_ENTRY="00$(echo "$PREV_ENTRY" + "1" | bc)"
88 NEXT_ENTRY_FILENAME="${FEELSDIR}/src/${DATE}-entry-${NEXT_ENTRY}.md"
89 URL="$(echo "$DATE" | tr "-" "/")/entry-${NEXT_ENTRY}/"
90 cat <<EOF >"$NEXT_ENTRY_FILENAME"
91 ---
92 title: Entry $NEXT_ENTRY
93 date: $(date '+%Y-%m-%d %H:%M:%S %z')
94 tags: $(echo "${TAGS// /, }")
95 slug: entry-$NEXT_ENTRY
96 ---
97
98 EOF
99 nvim "$NEXT_ENTRY_FILENAME"
100 echo "URL: https://feels.hyperreal.coffee/${URL}"
101
102# Publish feelslog
103[group('blogging')]
104publish-feels:
105 #!/usr/bin/env bash
106 set -euo pipefail
107 BSSG_DIR="${HOME}/repos/brew.bsd.cafe/stefano/BSSG"
108 if [ ! -d "$BSSG_DIR" ]; then
109 mkdir -p "${HOME}/repos/brew.bsd.cafe/stefano"
110 git clone https://brew.bsd.cafe/stefano/BSSG.git "$BSSG_DIR"
111 else
112 cd "$BSSG_DIR" || exit 1
113 git pull
114 fi
115 FEELS_CONFIG="${HOME}/repos/tildegit.org/hyperreal/feelslog/config.sh.local"
116 "${BSSG_DIR}/bssg.sh" build --config "$FEELS_CONFIG"
117
118# vim: ts=4 sts=4 sw=4 et ft=just