summaryrefslogtreecommitdiff
path: root/blog-zola.sh
blob: c620789b02eac9db5e5d60c850d3387a1db55aac (plain)
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
#!/usr/bin/env sh

######################################################################
# @author      : garhve (dev@garhve.com)
# @file        : blog
# @created     : Friday Dec 09, 2022 16:09:42 CST
#
# @description : simplify blog publishing, it only can use in blog dir
######################################################################

# usage: prog funct

push() {
    read -r -p "Do you want to push?[y/n] " ans
    if [ "$ans" == 'y' ]; then
        zola build
        git add .
        if [ ! -z "$(git status | grep 'Changes to be committed')" ]; then
            read -r -p "commit message: " msg
            git commit -m "$msg"
            git push origin main
        fi
    echo -e "push done"
    fi
}

edit() {
    path="content/post"

    # --- get editing file
    choice=1
    declare -a arr
    for file in $path/*; do
        [[ "$file" == *"_index.md" ]] && continue
        echo -ne "($choice)\x1b[0;32m${file##*/}\x1b[0m  "     # n get rid of trailing new line, e strip backslash
        arr[$choice]="$file"
        choice=$((choice+1))
    done
    echo ""
    read -r -p "please choose file by number you want to edit from above: " num
    [[ "$num" == "q" ]] && exit 0
    vim "${arr[$num]}"
    # --- end
    echo -e "edit done\n"

    push
    echo -e "\nall done"
}

new() {
    read -r -p "blog name: " name
    path="content/post/$name"

    if [ ! -f "$path".md ]; then

        # get basic format
        d="$(date +%F)"
        echo -ne "\x1b[32m"
        echo -n "existing categories: "
        grep -wrn content -e "categories" | \
            awk -F = '{ print $2 }' | \
            sort | uniq | paste -s -d ' '
        echo -ne "\x1b[0m"
        read -r -p "category: " category
        echo -ne "\x1b[32m"
        echo -n "existing tags: "
        grep -wrn content -e "tags" | \
            awk -F = '{ print $2 }' | \
            sort | uniq | paste -s -d ' '
        echo -ne "\x1b[0m"
        read -r -p "tag: " tags
        read -r -p "math support [y/n]: " m
        if [ "${m,,}" == 'y' ]; then
            math_support="true"
        else
            math_support="false"
        fi

        cat << EOF > "$path".md
+++
title = "$name"
date = $d
[taxonomies]
categories = ["$category"]
tags = ["$tags"]
[extra]
math = $math_support
+++
EOF

        [ "$?" -eq 0 ] && echo "creation done"
        [ "$?" -ne 0 ] && echo "creation fail, please check error" && exit 1

    else
        echo "File exist"
    fi

    read -r -p "do you want to edit now?[y/n] " ans
    [ "${ans,,}" == 'y' ] && vim "$path.md" && echo "edit done"

    push

    echo -e "\nall done"
}

list() {
    echo -e "\x1b[1;34mList content:\x1b[0m"
    tree ./content/post
}


funct="new/edit/push/ls"

[ $# -lt 1 ] && echo "usage: $(basename $0) $funct"

[ $1 == "new" ] && new
[ $1 == "edit" ] && edit
[ $1 == "push" ] && push
[ $1 == "ls" ] && list