You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
---
 | 
						|
title: Blog Composer Script
 | 
						|
layout: post
 | 
						|
date: 2022-09-07 17:47:15
 | 
						|
permalink: /dev/2022/SEP/07-blog-composer-script.php
 | 
						|
excerpt_separator: <!--more-->
 | 
						|
---
 | 
						|
 | 
						|
One thing I love about this setup is I just have to write markdown; and I can easily do that from my text editor in console. However it became apparent that I needed more stuff in my front matter than I thought; so I decided to automate things a bit.
 | 
						|
 | 
						|
<!--more-->
 | 
						|
 | 
						|
```
 | 
						|
---
 | 
						|
title: Blog Composer Script
 | 
						|
layout: post
 | 
						|
date: 2022-09-07 17:47:15
 | 
						|
permalink: /dev/2022/SEP/07-blog-composer-script.php
 | 
						|
excerpt_separator: <!--more-->
 | 
						|
---
 | 
						|
```
 | 
						|
 | 
						|
 | 
						|
This is quite literally the front matter for this post. No, it's not a whole lot of information; but it would be really nice to just have all of that dumped in to a file right in to a ready-to-write state. Run a command and get to typing. This why we run Linux and self-host, right? To automate all the self-hosted things! 
 | 
						|
 | 
						|
 | 
						|
Well, that's why I do it. Either way, here's the bash script that I hastly hacked together:
 | 
						|
 | 
						|
 | 
						|
```bash
 | 
						|
#!/bin/bash
 | 
						|
# pickmy.org post composer
 | 
						|
# by: Jay/nq4t/@music_onhold
 | 
						|
 | 
						|
# usage: ./compose.sh [category] [title]
 | 
						|
# example: /compose.sh blog MY AWESOME POST TITLE NO YOU DON'T NEED TO ENCLOSE IT!
 | 
						|
# run in the root of your site files/repository
 | 
						|
# assumes categories are directories in root
 | 
						|
 | 
						|
# Variables and category argument
 | 
						|
category=$1
 | 
						|
pd=$(date +'%Y-%m-%d')
 | 
						|
pt=$(date +'%T')
 | 
						|
file=blog$$.md
 | 
						|
# Ditch the category argument
 | 
						|
shift 1
 | 
						|
# Read everything else as title.
 | 
						|
title=$@
 | 
						|
t=${title,,}
 | 
						|
t=${t// /-}
 | 
						|
fd=$(date +'%Y/%^b/%d')
 | 
						|
# Let's write the front matter to our temp file.
 | 
						|
printf -- "---\ntitle: $title\nlayout: post\ndate: $pd $pt\npermalink: /$category/$fd-$t.php\nexcerpt_separator: <!--more-->\n---\n\n" >> $file
 | 
						|
# Write the post in whatever editor you want.
 | 
						|
nano + $file
 | 
						|
 | 
						|
# Move the file to category/_posts replacing spaces with hyphen
 | 
						|
mv $file $category/_posts/$pd-${t// /-}.md
 | 
						|
# Display some output to verify it's done.
 | 
						|
printf "\nPost $title created in $category: $category/_posts/$pd-$t.md\n\n"
 | 
						|
```
 | 
						|
 | 
						|
 | 
						|
Weeeeee, it's more comments than actual code; and it literally is just printing lines to files and playing fill in the blanks. Plus I don't think I have to write much more, it's already documented.
 | 
						|
 | 
						|
The only issue I had was when I had a naughty character in a title; so I may need to improve this by adding some stuff to escape those. You can use any editor you want. I'm just used to nano; and being even lazier; I wanted nano to drop the cursor at the *end* of the file. It's made dealing with the front matter sooooooo much easier. Template it once and fill in the blanks.
 |