Add man page for bashblog #3

Merged
ben merged 7 commits from alzwded/bashblog:manpage into master 2022-11-09 15:42:11 +00:00
3 changed files with 871 additions and 3 deletions

View File

@ -1,13 +1,17 @@
BINDIR ?= /usr/local/bin
MANDIR ?= /usr/local/man
MANFLAVOR ?= man
install:
@echo Installing the executable to $(BINDIR)
@mkdir -p $(BINDIR)
@cp -f bb.sh $(BINDIR)/bb
@chmod 755 $(BINDIR)/bb
@install -D -m 755 bb.sh $(BINDIR)/bb
@echo Installing the '$(MANFLAVOR)' man page to $(MANDIR)/man1
@install -D -m 644 bb.1.$(MANFLAVOR) $(MANDIR)/man1/bb.1
uninstall:
@echo Removing the executable from $(BINDIR)
@rm -f $(BINDIR)/bb
@echo Removing the man page from $(MANDIR)
@rm -f $(MANDIR)/man1/bb.1
.PHONY: install uninstall

435
bb.1.man Normal file
View File

@ -0,0 +1,435 @@
.\" Automatically generated from an mdoc input file. Do not edit.
.\" Use mandoc -T man ./bb.1.mdoc > bb.1.man to conver to the old
.\" (but still actively encouraged) Linux "an" format.
.TH "BB" "1" "November 7, 2022" "Linux 3.10.0-1160.76.1.el7.x86_64" "General Commands Manual"
.nh
.if n .ad l
.SH "NAME"
\fBbb\fR
\- A single bash script to create blogs
.SH "SYNOPSYS"
\fBbb\fR
\fBpost\fR
[\fB\-html\fR]
[\fIfilename\fR]
.PP
\fBbb\fR
\fBedit\fR
[\fB\-n\fR
|
\fB\-f\fR]
\fIfilename\fR
.PP
\fBbb\fR
\fBdelete\fR
\fIfilename\fR
.PP
\fBbb\fR
\fBrebuild|reset|list\fR
.PP
\fBbb\fR
\fBtags\fR
[\fB\-n\fR]
.SH "DESCRIPTION"
When invoked without arguments or with invalid arguments,
\fBbb\fR
will print usage. Before you go any further, you may want to check the CONFIGURATION section.
.PP
\fBbb\fR
\fBpost\fR
will open your
\fR$EDITOR\fR
to author a new post in markdown. if available, else in html directly. Use
\fBbb\fR
\fBpost\fR
\fB\-html\fR
to start a new post using HTML even when markdown is available. After you
save and exit your editor, you will be asked if you want to post
(\(lap\(ra),
edit
(\(laE\(ra)
or keep this for later as a draft
(\(lad\(ra).
Posts will be served at
\fBhttps://tilde.club/~you/blog/\fR
Specifying a
\fIfilename\fR
will pre-load the editor with the contents of that file.
\fIfilename\fR
is relative to
\fI~/public_html/blog/.\fR
.PP
\fBbb\fR
\fBedit\fR
\fIfilename\fR
allows you to edit an already published .html or .md file.
\fIfilename\fR
is relative to
\fR~/public_html/blog\fR
and can be either the .md or .html.
\fBNever\fR
manually edit a published .html file, always use this function as it
keeps internal data and rebuilds the blog.
Use
\fB\-n\fR
to give the file a new name, if the title is changed.
Use
\fB\-f\fR
to edit the full html.
.PP
\fBbb\fR
\fBdelete\fR
\fIfilename\fR
will delete a post and rebuild the blog.
.PP
\fBbb\fR
\fBrebuild\fR
regenerates all pages and posts, preserving the content of the entries.
.PP
\fBbb\fR
\fBreset\fR
deletes everything. Use with caution and
\fIbackup everything\fR
first.
.PP
\fBbb\fR
\fBlist\fR
lists all posts.
.PP
\fBbb\fR
\fBtags\fR
lists all tags in alphabetical order.
\fB\-n\fR
sorts by number of posts under each tag.
.SH "ENVIRONMENT"
The following environment variables are used by
\fBbb\fR
:
.TP 9n
\fREDITOR\fR
Tell
\fBbb\fR
which editor you want to use to edit your posts.
.SH "FILES"
.TP 20n
\fI~/public_html/blog\fR
The default path for your production blog folder. Make sure to create this,
otherwise you will see strange behaviour.
\fIAll paths are relative to this directory.\fR
.TP 20n
\fI.config\fR
Configuration file overriding the global defaults.
.TP 20n
\fIdrafts/\fR
Folder where you drafts are saved if you choose the
\(oqd\(cq
option after exiting your
\fREDITOR\fR.
.TP 20n
\fI.backup.tar.gz\fR
Backup from before you did something silly.
.TP 20n
\fI.yesterday.tar.gz\fR
A backup from yesterday in case
\fI.backup.tar.gz\fR
already includes the silly mistake.
.SH "CONFIGURATION"
Global defaults are kept within the
\fBbb\fR
sh script itself, in the
\fBglobal_variables\fR()
function.
.PP
You can create
\fI~/public_html/blog/.config\fR
which allows you to set
\fBbash\fR
variables which override the global defaults.
\fINote,\fR
this is a bash script, so the format is
.RS 6n
var="value"
.RE
Please do not try to get fancy.
.SS "General Blog Settings"
.TP 24n
global_title
Blog title
.TP 24n
global_description
The typical subtitle for each blog.
.TP 24n
global_url
The public base URL for this blog.
.TP 24n
global_author
Your name
.TP 24n
global_author_url
You can use your tildehome, Twitter, Facebook, etc. as your
\(oqglobal_author_url\(cq
.TP 24n
global_email
Your email address.
.TP 24n
global_license
CC by-nc-nd is a good starting point, but you can pick a different license. You can change this to
\(oq©\(cq
for Copyright.
.TP 24n
global_feedburner
Set to empty
(\(oq\(cq)
if you don't use feedburner, otherwise point it to your URL.
.TP 24n
global_twitter_username
.br
Set this to your username if you want to use Twitter for comments.
.TP 24n
global_twitter_cookieless
Set this to
\(oqfalse\(cq
for a Twitter button with a share count. The cookieless version is just a link. This is to comply to EU GDPR regulations.
.TP 24n
global_twitter_search
Default search page, where tweets more than a week old are hidden.
.SS "Blog Generated Files Settings"
.TP 24n
index_file
The index page of the blog. Probably a good idea to stick with
\(oqindex.html\(cq
.TP 24n
number_of_index_articles
How many posts to show on the index page.
.TP 24n
archive_index
Page name of your
\(lqall posts\(rq
page.
.TP 24n
tags_index
Page name of your
\(lqall tags\(rq
page.
.TP 24n
gophermap
Ignore gophermap?
.TP 24n
non_blogpost_files
A bash array of files that
\fBbb\fR
will ignore. Useful for static resources. E.g.
.RS 30n
.RE
.RS 24n
non_blogpost_files=("news.html" "test.html")
.RE
.TP 24n
blog_feed
RSS feed file name.
.TP 24n
number_of_feed_articles
.br
How many posts to put in the RSS feed.
.TP 24n
cut_do
\(lqcut\(rq
blog entry when putting it to index page. Leave blank for full
articles in front page, i.e. include only up to first
\(oq<hr>\(cq
or
\(oq----\(cq
in markdown.
.TP 24n
cut_tags
When cutting, cut also tags? If
\(oqno\(cq
, tags will appear in index page for cut articles. If
\(oqyes\(cq,
they won't.
.TP 24n
cut_line
regex(7)
matching the HTML line where to do the cut.
\fINote\fR
that the slash is regexp separator so you need to prepend it with backslash
(\(oq\e\(cq).
.TP 24n
save_markdown
If
\(oqyes\(cq,
save markdown file when posting with
\(oqbb post\(cq
(and markdown is available).
.TP 24n
prefix_tags
Prefix for tags/categories files. Please make sure no other html file starts with this prefix.
.TP 24n
header_file
.TP 24n
footer_file
Personalized header and footer (only if you know what you're doing).
\fIDO NOT\fR
name them
\(oq.header.html\(cq,\(oq.footer.html\(cq
or they will be overwritten. Leave blank
("")
to generate them, which is recommended.
.TP 24n
body_begin_file
Extra content to add just before we open the
\(oq<body>\(cq
tag and before the actual blog content.
.TP 24n
body_end_file
Extra content to add just before we close
\(oq<body>\(cq
tag (just before
\(oq</body>\(cq).
.TP 24n
css_include
CSS files to include on every page, e.g.
.RS 30n
css_include=('main.css' 'blog.css')
.RE
.RS 24n
Leave blank ("") to use the generated ones.
.RE
.TP 24n
html_exclude
HTML files to exclude from index, e.g.
.RS 30n
html_exclude=('imprint.html' 'aboutme.html')
.RE
.SS "Localization and Internationalization"
.TP 24n
template_comments
\(lqComments?\(rq
(used in twitter link after every post).
.TP 24n
template_read_more
\(lqRead more...\(rq
(link under cut article on index page).
.TP 24n
template_archive
\(lqView more posts\(rq
(used on bottom of index page as link to archive).
.TP 24n
template_archive_title
\(lqAll posts\(rq
(title of archive page).
.TP 24n
template_tags_title
\(lqAll tags\(rq
.TP 24n
template_tags_posts
\(lqposts\(rq
(on
\(lqAll tags\(rq
page, text at the end of each tag line, like
\(lq2.Music-15posts\(rq)
.TP 24n
template_tags_posts_2_4
.br
Some slavic languages use a different plural form for 2-4 items.
.TP 24n
template_tags_posts_singular
Word to use for one post.
.TP 24n
template_tag_title
\(lqPosts tagged\(rq
(text on a title of a page with index of one tag, like
\(lqMy Blog - Posts tagged \(oqMusic\(cq\(rq)
.TP 24n
template_tags_line_header
\(lqTags:\(rq
(beginning of line in HTML file with list of all tags for this article)
.TP 24n
template_archive_index_page
\(lqBack to the index page\(rq
(used on archive page, it is link to blog index)
.TP 24n
template_subscribe
\(lqSubscribe\(rq
(used on bottom of index page, it is link to RSS feed)
.TP 24n
template_subscribe_browser_button
\(lqSubscribe to this page...\(rq
(used as text for browser feed button that is embedded to html)
.TP 24n
template_twitter_button
.br
\(lqTweet\(rq
(used as twitter text button for posting to twitter)
.TP 24n
template_twitter_comment
Default comment used to prepopulate the form.
.TP 24n
date_format
strftime(3)
format to use for dates.
.TP 24n
date_locale
locale(1)
to use for dates.
.TP 24n
date_inpost
\(oqbashblog_timestamp\(cq
.TP 24n
convert_filename
Perform the post title -> filename conversion. Experts only. You may need to tune the locales too. Set to empty ("") for no conversion, which is not recommended. The default filter respects backwards compatibility.
.TP 24n
preview_url
URL where you can view the post while it's being edited. By default, it is
\(oqglobal_url\(cq\&.
You can change it to the path on your computer, if you write posts locally, before copying them to the server.
.SH "EXAMPLES"
Post a markdown file:
.RS 6n
bb post ~/my_new_post.md
.RE
then hit
\(lap\(ra\&.
.PP
Continue editing a draft:
.RS 6n
bb post drafts/the-title-I-was-thinking-of.md
.RE
.SH "SEE ALSO"
bash(1),
for a reference on variable assignments.
.SH "AUTHORS"
cfenollosa \(la\fIhttps://github.com/cfenollosa\fR\(ra
.PP
man page by Vlad Me\[u0219]co \(la\fIalzwded@tilde.club\fR\(ra
.SH "CAVEATS"
The tilde.club version imposes that the
\fIblog\fR
root directory is
\fI~/public_html/blog\fR,
and it will
cd(1)
to that directory before doing anything else. This makes all
\fIpaths\fR
be relative to that directory.
.PP
As a side effect, if the
\fI~/public_html/blog/\fR
directory does not exist,
\fBbb\fR
will get confused and dump files where you don't expect them. Make sure
you create that path before running
\fBbb\fR:
.RS 6n
mkdir -p ~/public_html/blog/
.RE
.PP
Post file names might get de-unicoded, so if
\fBbb\fR
complains it couldn't find your file, use
find(1)
or
grep(1)
in
\fI~/public_html/blog/\fR
to find them.

429
bb.1.mdoc Normal file
View File

@ -0,0 +1,429 @@
.\" Use mandoc -T man ./bb.1.mdoc > bb.1.man to conver to the old
.\" (but still actively encouraged) Linux "an" format.
.Dd $Mdocdate$
.Dt BB 1
.Os
.Sh NAME
.Nm bb
.Nd A single bash script to create blogs
.Sh SYNOPSYS
.Nm
.Cm post
.Op Fl html
.Op Pa filename
.Pp
.Nm
.Cm edit
.Oo Fl n
|
.Fl f
.Oc
.Pa filename
.Pp
.Nm
.Cm delete
.Pa filename
.Pp
.Nm
.Cm rebuild|reset|list
.Pp
.Nm
.Cm tags
.Op Fl n
.Sh DESCRIPTION
When invoked without arguments or with invalid arguments,
.Nm
will print usage. Before you go any further, you may want to check the CONFIGURATION section.
.Pp
.Nm
.Cm post
will open your
.Ev $EDITOR
to author a new post in markdown. if available, else in html directly. Use
.Nm
.Cm post
.Fl html
to start a new post using HTML even when markdown is available. After you
save and exit your editor, you will be asked if you want to post
.Sm off
(
.Aq p
),
.Sm on
edit
.Sm off
(
.Aq E
)
.Sm on
or keep this for later as a draft
.Sm off
(
.Aq d
).
.Sm on
Posts will be served at
.Lk https://tilde.club/~you/blog/
\.
Specifying a
.Pa filename
will pre-load the editor with the contents of that file.
.Pa filename
is relative to
.Pa ~/public_html/blog/.
.Pp
.Nm
.Cm edit
.Pa filename
allows you to edit an already published .html or .md file.
.Pa filename
is relative to
.Ev ~/public_html/blog
and can be either the .md or .html.
.Sy Never
manually edit a published .html file, always use this function as it
keeps internal data and rebuilds the blog.
Use
.Fl n
to give the file a new name, if the title is changed.
Use
.Fl f
to edit the full html.
.Pp
.Nm
.Cm delete
.Pa filename
will delete a post and rebuild the blog.
.Pp
.Nm
.Cm rebuild
regenerates all pages and posts, preserving the content of the entries.
.Pp
.Nm
.Cm reset
deletes everything. Use with caution and
.Em backup everything
first.
.Pp
.Nm
.Cm list
lists all posts.
.Pp
.Nm
.Cm tags
lists all tags in alphabetical order.
.Fl n
sorts by number of posts under each tag.
.Sh ENVIRONMENT
The following environment variables are used by
.Nm
:
.Bl -tag -width EDITORX
.It Ev EDITOR
Tell
.Nm
which editor you want to use to edit your posts.
.Sh FILES
.Bl -tag -width x/public_html/blog
.It Pa ~/public_html/blog
The default path for your production blog folder. Make sure to create this,
otherwise you will see strange behaviour.
.Em All paths are relative to this directory.
.It Pa .config
Configuration file overriding the global defaults.
.Pp
.It Pa drafts/
Folder where you drafts are saved if you choose the
.Sq d
option after exiting your
.Ev EDITOR .
.It Pa .backup.tar.gz
Backup from before you did something silly.
.It Pa .yesterday.tar.gz
A backup from yesterday in case
.Pa .backup.tar.gz
already includes the silly mistake.
.El
.Sh CONFIGURATION
Global defaults are kept within the
.Nm
sh script itself, in the
.Fn global_variables
function.
.Pp
You can create
.Pa ~/public_html/blog/.config
which allows you to set
.Sy bash
variables which override the global defaults.
.Em Note,
this is a bash script, so the format is
.Dl var="value"
Please do not try to get fancy.
.Pp
.Ss General Blog Settings
.Bl -tag -width xxxxxxxxxxxxxxxxxxxxxx
.It global_title
Blog title
.It global_description
The typical subtitle for each blog.
.It global_url
The public base URL for this blog.
.It global_author
Your name
.It global_author_url
You can use your tildehome, Twitter, Facebook, etc. as your
.Sq global_author_url
.It global_email
Your email address.
.It global_license
CC by-nc-nd is a good starting point, but you can pick a different license. You can change this to
.Ql &copy;
for Copyright.
.It global_feedburner
Set to empty
.Sm off
(
.Ql ""
)
.Sm on
if you don't use feedburner, otherwise point it to your URL.
.It global_twitter_username
Set this to your username if you want to use Twitter for comments.
.It global_twitter_cookieless
Set this to
.Ql false
for a Twitter button with a share count. The cookieless version is just a link. This is to comply to EU GDPR regulations.
.It global_twitter_search
Default search page, where tweets more than a week old are hidden.
.El
.Pp
.Ss Blog Generated Files Settings
.Bl -tag -width xxxxxxxxxxxxxxxxxxxxxx
.It index_file
The index page of the blog. Probably a good idea to stick with
.Ql index.html
.It number_of_index_articles
How many posts to show on the index page.
.It archive_index
Page name of your
.Dq all posts
page.
.It tags_index
Page name of your
.Dq all tags
page.
.It gophermap
Ignore gophermap?
.It non_blogpost_files
A bash array of files that
.Nm
will ignore. Useful for static resources. E.g.
.Dl
non_blogpost_files=("news.html" "test.html")
.It blog_feed
RSS feed file name.
.It number_of_feed_articles
How many posts to put in the RSS feed.
.It cut_do
.Dq cut
blog entry when putting it to index page. Leave blank for full
articles in front page, i.e. include only up to first
.Ql <hr>
or
.Ql ----
in markdown.
.It cut_tags
When cutting, cut also tags? If
.Ql no
, tags will appear in index page for cut articles. If
.Sm off
.Ql yes
,
.Sm on
they won't.
.It cut_line
.Xr regex 7
matching the HTML line where to do the cut.
.Em Note
that the slash is regexp separator so you need to prepend it with backslash
.Sm off
(
.Ql \e
).
.Sm on
.It save_markdown
If
.Sm off
.Ql yes
,
.Sm on
save markdown file when posting with
.Ql bb post
(and markdown is available).
.It prefix_tags
Prefix for tags/categories files. Please make sure no other html file starts with this prefix.
.It header_file
.It footer_file
Personalized header and footer (only if you know what you're doing).
.Em DO NOT
name them
.Sm off
.Ql .header.html
,
.Ql .footer.html
.Sm on
or they will be overwritten. Leave blank
("")
to generate them, which is recommended.
.It body_begin_file
Extra content to add just before we open the
.Ql <body>
tag and before the actual blog content.
.It body_end_file
Extra content to add just before we close
.Ql <body>
tag (just before
.Sm off
.Ql </body>
).
.Sm on
.It css_include
CSS files to include on every page, e.g.
.Dl css_include=('main.css' 'blog.css')
Leave blank ("") to use the generated ones.
.It html_exclude
HTML files to exclude from index, e.g.
.Dl html_exclude=('imprint.html' 'aboutme.html')
.El
.Pp
.Ss Localization and Internationalization
.Bl -tag -width xxxxxxxxxxxxxxxxxxxxxx
.It template_comments
.Dq Comments?
(used in twitter link after every post).
.It template_read_more
.Dq Read more...
(link under cut article on index page).
.It template_archive
.Dq View more posts
(used on bottom of index page as link to archive).
.It template_archive_title
.Dq All posts
(title of archive page).
.It template_tags_title
.Dq All tags
.It template_tags_posts
.Dq posts
(on
.Dq All tags
page, text at the end of each tag line, like
.Sm off
.Dq 2. Music - 15 posts
)
.Sm on
.It template_tags_posts_2_4
Some slavic languages use a different plural form for 2-4 items.
.It template_tags_posts_singular
Word to use for one post.
.It template_tag_title
.Dq Posts tagged
(text on a title of a page with index of one tag, like
.Sm off
.Do "My Blog - Posts tagged "
.Sq Music
.Dc
)
.Sm on
.It template_tags_line_header
.Dq Tags:
(beginning of line in HTML file with list of all tags for this article)
.It template_archive_index_page
.Dq Back to the index page
(used on archive page, it is link to blog index)
.It template_subscribe
.Dq Subscribe
(used on bottom of index page, it is link to RSS feed)
.It template_subscribe_browser_button
.Dq Subscribe to this page...
(used as text for browser feed button that is embedded to html)
.It template_twitter_button
.Dq Tweet
(used as twitter text button for posting to twitter)
.It template_twitter_comment
Default comment used to prepopulate the form.
.It date_format
.Xr strftime 3
format to use for dates.
.It date_locale
.Xr locale 1
to use for dates.
.It date_inpost
.Ql bashblog_timestamp
.It convert_filename
Perform the post title -> filename conversion. Experts only. You may need to tune the locales too. Set to empty ("") for no conversion, which is not recommended. The default filter respects backwards compatibility.
.It preview_url
URL where you can view the post while it's being edited. By default, it is
.Sm off
.Ql global_url
\&.
.Sm on
You can change it to the path on your computer, if you write posts locally, before copying them to the server.
.El
.Sh EXAMPLES
Post a markdown file:
.Dl bb post ~/my_new_post.md
then hit
.Sm off
.Aq p
\&.
.Sm on
.Pp
Continue editing a draft:
.Dl bb post drafts/the-title-I-was-thinking-of.md
.Sh SEE ALSO
.Sm off
.Xr bash 1
,
.Sm on
for a reference on variable assignments.
.Sh AUTHORS
.An cfenollosa Aq Pa https://github.com/cfenollosa
.Pp
.An man page by Vlad Meșco Aq Pa alzwded@tilde.club
.Sh CAVEATS
The tilde.club version imposes that the
.Pa blog
root directory is
.Sm off
.Pa ~/public_html/blog
,
.Sm on
and it will
.Xr cd 1
to that directory before doing anything else. This makes all
.Pa paths
be relative to that directory.
.Pp
As a side effect, if the
.Pa ~/public_html/blog/
directory does not exist,
.Nm
will get confused and dump files where you don't expect them. Make sure
you create that path before running
.Sm off
.Nm
:
.Sm on
.Dl mkdir -p ~/public_html/blog/
.Pp
Post file names might get de-unicoded, so if
.Nm
complains it couldn't find your file, use
.Xr find 1
or
.Xr grep 1
in
.Pa ~/public_html/blog/
to find them.
.\" .Sh BUGS