aboutsummaryrefslogtreecommitdiff
path: root/bin/post.sh
blob: 3c4b483e657df19cd50ffa157c84b122f7e6640e (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/bin/sh
set -eu

# shellcheck source=/dev/null
. "$DOTFILES/sh/colors.sh"

missing() {
  red "Missing argument <${1}>.\n" >&2
}

usage() {
  cat <<EOF >&2
Usage:
    $0 <TYPE> <FULL_TITLE>

    Arguments:
      TYPE             The type of the article: article, til, slides, podcast, screencast
      FULL_TITLE       Full title of the post

Examples:
    $0 til 'I just learned this'
    $0 article 'My example article title'
EOF
}

TYPE="${1:-}"
[ -z "$TYPE" ] && {
  missing 'TYPE'
  usage
  exit 2
}

EXTRA=''
case "$TYPE" in
  article|til)
    LAYOUT=post
    DIR="_${TYPE}s"
    EXT=md
    ;;
  podcast|screencast)
    LAYOUT=post
    DIR="_${TYPE}s"
    EXT=md
    EXTRA="
$TYPE: true
"
    ;;
  slides)
    LAYOUT=slides
    DIR=_slides
    EXT=slides
    ;;
  *)
    red "Invalid type '$TYPE'\n" >&2
    usage
    exit 2
    ;;
esac

FULL_TITLE="${2:-}"
[ -z "$FULL_TITLE" ] && {
  missing 'FULL_TITLE'
  usage
  exit 2
}

# Derived from:
# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519
slugify() {
  echo "$1"                     | \
    tr '[:upper:]' '[:lower:]'  | \
    perl -ne 'tr/\000-\177//cd;
              s/[^\w\s-]//g;
              s/^\s+|\s+$//g;
              s/[-\s]+/-/g;
              print;'
}

WEBSITE_REPO="$HOME/dev/libre/website"
SLUG_TITLE="$(slugify "$FULL_TITLE")"
PASTE_DATE="$(date -I)"
OUT="$WEBSITE_REPO/$DIR/$PASTE_DATE-$SLUG_TITLE.$EXT"

cd "$WEBSITE_REPO"

if [ -f "$OUT" ]; then
  exec vi "$OUT"
fi

if [ "$LAYOUT" = 'slides' ]; then
  ARTICLE="$($0 article "$FULL_TITLE")"
  cat<<EOF > "$OUT"
---

title: $FULL_TITLE

date: $PASTE_DATE

layout: $LAYOUT

lang: en

ref: $SLUG_TITLE

article: $ARTICLE
$EXTRA
---

---

## Thank you!

References:

1. FIXME
2. FIXME
EOF
else
  cat <<EOF > "$OUT"
---

title: $FULL_TITLE

date: $PASTE_DATE

layout: $LAYOUT

lang: en

ref: $SLUG_TITLE

---
EOF
fi

vi "$OUT"