Github pages with Hugo
Github allows you to publish a Website for your projects called Github pages. You can publish Github pages per project and once per username/organization.
What this means is that you can publish/host your own website on https://<USERNAME|ORGANIZATION>.github.io
.
Setup
Install Hugo by following the official instructions. For Ubuntu users the recommended way is to use the snap package:
$ snap install hugo --channel=extended
Next, follow the official step-by-step instructions to publish your pages to github.
Development notes
Serve locally from source repo:
$ cd ~/workspace/github/blog-source-repo
$ /snap/bin/hugo server --watch
Serve drafts:
$ /snap/bin/hugo server --watch --buildDrafts
When ready to publish:
$ cd ~/workspace/github/blinkeye.github.io
$ rm -rf *
Next, from Hugo source repo re-publish:
$ cd ~/workspace/github/blog-source-repo
$ hugo -d ~/workspace/github/blinkeye.github.io
Back to the target repo:
$ cd ~/workspace/github/blinkeye.github.io
$ git add --all
$ git commit -m "rebuilding site `date`" -a
$ git push origin master
Automation script
#!/bin/sh
# If a command fails then the deploy stops
set -e
# cleanup generated content from earlier runs
rm -rf public/*
printf "\033[0;32mDeploying updates to GitHub...\033[0m\n"
# Build the project.
hugo -t beautifulhugo
# Go To Public folder
cd public
# Add changes to git.
git add .
# Commit changes.
msg="rebuilding site $(date)"
if [ -n "$*" ]; then
msg="$*"
fi
git commit -m "$msg"
# Push source and build repos.
git push origin master
References:
- https://vaibhavk.github.io/post/beautiful_blog/
- https://gohugo.io/hosting-and-deployment/hosting-on-github/
- Configuring a publishing source for github-pages
Image handling (jpg)
Convert all images in hugo’s static/img
directory to jpeg:
$ cd ~/Pictures/braindump
$ find resized/ -type f -delete
$ for file in `find orig -type f`; do convert -resize 700x $file resized-jpg/${file%.*}.webp; done
$ ./optimize_jpegs.pl resized-jpg
Image handling (webp)
WebP is a modern image format that provides superior lossless and lossy compression for images on the web.
Convert single image to .webp:
$ cwebp -q 60 input.webp -o output.webp
$ cd static/img
$ for file in `find -type f -not -name '*.webp'`; do cwebp -q 60 $file -o ; done
$ find -type f -not -name '*.webp' -delete
# find jpg/ -type f -delete
# for file in `find orig -type f`; do ./downsize.sh -s 600 $file jpg/$file; done
# find png/ -type f -delete
# for file in `find webp -type f -name '*.webp'`; do convert $file png/${file%.*}.png; done
Galleries
Free image galleries:
- https://unsplash.com/search/photos
- https://www.pexels.com
- https://www.reshot.com
- https://pixabay.com
List of free galleries: