Website updates
This commit is contained in:
parent
41fe56cf13
commit
44e710a464
9 changed files with 252 additions and 6 deletions
10
build.sh
10
build.sh
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
getBlogSlug(){
|
getBlogSlug(){
|
||||||
echo "$1" | sed 's/^content\///' | sed 's/.md$/.html/' | sed -E 's/[0-9]+-/\/blog\//'
|
echo "$1" | sed 's/^content\//\//' | sed 's/.md$/.html/' | sed -E 's/[0-9]+-//'
|
||||||
}
|
}
|
||||||
|
|
||||||
blog(){
|
blog(){
|
||||||
|
@ -54,7 +54,7 @@ index(){
|
||||||
local template="$(echo "" | pandoc --template=templates/blog.html -f markdown -t html5 -M frontpage 2> /dev/null )"
|
local template="$(echo "" | pandoc --template=templates/blog.html -f markdown -t html5 -M frontpage 2> /dev/null )"
|
||||||
|
|
||||||
# First loop makes all the intros needed and stores them in tmp/intros
|
# First loop makes all the intros needed and stores them in tmp/intros
|
||||||
find content/ -type f -name '*.md' | sort -r | head -n 10 | while read file; do
|
find content/blog/ -type f -name '*.md' | sort -r | head -n 10 | while read file; do
|
||||||
makeIntro "$file" &
|
makeIntro "$file" &
|
||||||
done
|
done
|
||||||
wait
|
wait
|
||||||
|
@ -62,8 +62,8 @@ index(){
|
||||||
# Once they are created, we will put them in, in order
|
# Once they are created, we will put them in, in order
|
||||||
(
|
(
|
||||||
echo "$template" | sed -n '1,/#CONTENT#/p' | head -n -1
|
echo "$template" | sed -n '1,/#CONTENT#/p' | head -n -1
|
||||||
find content/ -type f -name '*.md' | sort -r | head -n 10 | while read file; do
|
find content/blog/ -type f -name '*.md' | sort -r | head -n 10 | while read file; do
|
||||||
getIntro "$file"
|
grep -Eq '^draft: true' "$file" || getIntro "$file"
|
||||||
done
|
done
|
||||||
echo "$template" | sed -n '/#CONTENT#/,$p' | sed '1d'
|
echo "$template" | sed -n '/#CONTENT#/,$p' | sed '1d'
|
||||||
) > public_html/index.html
|
) > public_html/index.html
|
||||||
|
@ -110,7 +110,7 @@ tags(){
|
||||||
# Loops through each blog and puts it in tag lists, although only blogs that have changed
|
# Loops through each blog and puts it in tag lists, although only blogs that have changed
|
||||||
local newer=""
|
local newer=""
|
||||||
[ -f tmp/lastTagUpdate ] && newer="-newer tmp/lastTagUpdate"
|
[ -f tmp/lastTagUpdate ] && newer="-newer tmp/lastTagUpdate"
|
||||||
find content/ -type f -name '*.md' $newer | while read file; do
|
find content/blog/ -type f -name '*.md' $newer | while read file; do
|
||||||
sed -n '/---/,/---/p' "$file" | sed '/^---$/d' | sed '/^$/,$d' | yq -r 'if ( .tags | type ) == "array" then .tags else [ .tags ] end | join("\n")' | while read tag; do
|
sed -n '/---/,/---/p' "$file" | sed '/^---$/d' | sed '/^$/,$d' | yq -r 'if ( .tags | type ) == "array" then .tags else [ .tags ] end | join("\n")' | while read tag; do
|
||||||
# Adds the file to the tags list if it's not already in there
|
# Adds the file to the tags list if it's not already in there
|
||||||
grep -q "$file" tmp/tag/"$tag" 2> /dev/null || echo "$file" >> tmp/tag/"$tag"
|
grep -q "$file" tmp/tag/"$tag" 2> /dev/null || echo "$file" >> tmp/tag/"$tag"
|
||||||
|
|
|
@ -149,6 +149,7 @@ Anyone who has used the terminal a couple of times knows about the `cat` command
|
||||||
|
|
||||||
If you are not piping the output to another file, Bat will syntax highlight your code, it will add line numbers and, if you're in a git repo, it will show you which lines have changed since your last commit.
|
If you are not piping the output to another file, Bat will syntax highlight your code, it will add line numbers and, if you're in a git repo, it will show you which lines have changed since your last commit.
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
This is by no means an extensive list. There are many tools I use that I have not listed here, but these are the ones that have made the biggest difference to my workflow.
|
This is by no means an extensive list. There are many tools I use that I have not listed here, but these are the ones that have made the biggest difference to my workflow.
|
120
content/blog/005-keyboard-driven-firefox.md
Normal file
120
content/blog/005-keyboard-driven-firefox.md
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
---
|
||||||
|
title: Making Firefox the browser to rule them all
|
||||||
|
date: 2020-04-04
|
||||||
|
description: So much of what we do these days is in a browser, so I thought it would be worth while taking some time to optimize / customize by browser
|
||||||
|
tags:
|
||||||
|
- Firefox
|
||||||
|
---
|
||||||
|
|
||||||
|
We spend a lot of time these days in a browser. Given that , I thought it might be worth sharing some of the changes I have made to my browser. I use Firefox with a very select few extensions. As a general rule, I don't like extensions, although there are a couple of open source ones that I run, as well as a few I have made myself.
|
||||||
|
|
||||||
|
## Vim Navigation
|
||||||
|
|
||||||
|
Since using Qutebrowser, I have loved having the ability to browse the web from my keyboard. There are times that I use the mouse, but they are rare now. Until recently, I was using [a fork of Vim Vixen](https://git.jonathanh.co.uk/jab2870/Vim-Vixen). This fork didn't do much more than change the colour scheme and I added the ability to set a proxy server using it. However, I have recently been experimenting with [Tridactyl](https://github.com/tridactyl/tridactyl). I plan to write a blog post about it in the near future but if you are looking for a browser plugin to give you Vim-like navigation, both Vim-Vixen and Tridactyl are excellent choices.
|
||||||
|
|
||||||
|
I think it is fair to say that Tridactyl does more, that isn't always a benefit though. A tool with fewer features is far more likely to contain serious bugs. However, for me, the ability to easily call external scripts was enough to make the switch.
|
||||||
|
|
||||||
|
## Custom Stylesheets
|
||||||
|
|
||||||
|
Almost all websites are dark text on a light background. I like a dark background with light text. There are a lot of plugins that add dark mode, and a lot that allow you to use custom stylesheets. However, none of the ones I looked at allowed me to easily keep a repository of stylesheets locally.
|
||||||
|
|
||||||
|
I decided I would write a [very simple extension](https://git.jonathanh.co.uk/jab2870/browser-overides) that adds stylesheets to web pages. I then just use the extension manifest file to specify which stylesheets should be loaded and when:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"content_scripts": [
|
||||||
|
{
|
||||||
|
"matches": ["*://*.archlinux.org/*"],
|
||||||
|
"css": [ "css/archwiki.css" ],
|
||||||
|
"run_at": "document_start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matches": ["*://*.amazon.com/*","*://*.amazon.co.uk/*"],
|
||||||
|
"css": [ "css/amazon.css" ],
|
||||||
|
"run_at": "document_start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matches": ["*://*.bbc.com/*","*://*.bbc.co.uk/*"],
|
||||||
|
"css": [ "css/bbc.css" ],
|
||||||
|
"run_at": "document_start"
|
||||||
|
},
|
||||||
|
"...":"..."
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
This makes it very easy to version control and maintain, and means I am not putting my trust in a plugin maintainer.
|
||||||
|
|
||||||
|
I also have a default stylesheet that I load on web pages that don't have custom stylesheet applied to them. It is not perfect but it is simple and works well enough 90% of the time.
|
||||||
|
|
||||||
|
```css
|
||||||
|
@import "./gruvbox-colours.less";
|
||||||
|
|
||||||
|
html{
|
||||||
|
background: #fff - @gb-dm-bg0;
|
||||||
|
filter: invert(100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
body{
|
||||||
|
background: #fff - @gb-dm-bg0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img,svg,video{
|
||||||
|
filter: invert(100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
#vimvixen-console-frame{
|
||||||
|
filter: invert(100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
#cmdline_iframe{
|
||||||
|
filter: invert(100%);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
<https://git.jonathanh.co.uk/jab2870/browser-overides/src/branch/master/less/global.less>
|
||||||
|
|
||||||
|
It is quite simple. I set the background of the html and body elements to the inverse of the colour I like ( in this case a gruvbox dark colour ), then inverse everything. This works well for most things. I then invert again images and videos which makes them the colour they should be.
|
||||||
|
|
||||||
|
This is not a perfect solution, a notable problem is that background images appear inverted. For me though, it is good enough. If a website really doesn't work well with this applied, I can simply disable the extension.
|
||||||
|
|
||||||
|
## Full screen
|
||||||
|
|
||||||
|
Since using Qutebrowser and Surf, I have liked having minimal browser interfaces. Since Tridactyl or VimVixen mean that I very rarely need to touch the top bar, I would prefer not to have it (or at least not see it). Fortunately, if you enable the `toolkit.legacyUserProfileCustomizations.stylesheet` flag, you can customize the look of the browser using CSS.
|
||||||
|
|
||||||
|
To enable the flag:
|
||||||
|
|
||||||
|
1. Open about:config
|
||||||
|
1. Set `toolkit.legacyUserProfileCustomizations.stylesheets` to True
|
||||||
|
1. Restart Firefox
|
||||||
|
|
||||||
|
You can then create a file called `userChrome.css`
|
||||||
|
|
||||||
|
1. Open about:support
|
||||||
|
1. Click on `Profile Folder` -> `Open Folder`
|
||||||
|
1. Create a sub-folder named `chrome`
|
||||||
|
1. Change into the new folder
|
||||||
|
1. Create a file named `userChrome.css`
|
||||||
|
|
||||||
|
Now, you can add styles to the `userChrome.css` file to alter how Firefox looks.
|
||||||
|
|
||||||
|
The following will hide the url bar and the tabs, until you move your mouse to the top of the screen.
|
||||||
|
|
||||||
|
```css
|
||||||
|
/* hides the url bar unless I hover over it */
|
||||||
|
#navigator-toolbox {
|
||||||
|
margin-top: -72px;
|
||||||
|
transition: 0.2s margin-top ease-out;
|
||||||
|
border-bottom-width: 0;
|
||||||
|
}
|
||||||
|
#navigator-toolbox:hover {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
<https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/NOSTOW/firefox/userChrome.css#L18-L25>
|
||||||
|
|
||||||
|
## Other extensions
|
||||||
|
|
||||||
|
I only use 2 other extensions, those are [HTTPS Everywhere](https://www.eff.org/https-everywhere) and [Privacy Badger](https://privacybadger.org/), both are built by the [EFF](https://www.eff.org/) and I think are essential in my ongoing effort to be tracked as little as possible.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
105
content/blog/006-building-a-zsh-prompt.md
Normal file
105
content/blog/006-building-a-zsh-prompt.md
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
---
|
||||||
|
title: Building a ZSH prompt
|
||||||
|
tags:
|
||||||
|
- Linux
|
||||||
|
- ZSH
|
||||||
|
description: There are many frameworks out there to help you build a prompt, I thought I'd see how far I could get without one.
|
||||||
|
date: 2020-03-24
|
||||||
|
draft: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Until recently, I was using [oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh) with the [Power Level 9k](https://github.com/Powerlevel9k/powerlevel9k) prompt.
|
||||||
|
|
||||||
|
In part of my effort to understand how different parts of my system works, and to reduce my reliance on some libraries, I decided to see if I could get what I needed without them. In this blog post, I am going to focus on my prompt configuration.
|
||||||
|
|
||||||
|
If you want to follow along, my configuration can be found in [my dotfiles](https://github.com/Jab2870/dotfiles/blob/master/shells/zsh/includes/promptconfig.zsh).
|
||||||
|
|
||||||
|
My prompt currently looks something like this:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Basics
|
||||||
|
|
||||||
|
Zsh simply prints the variables `PROMPT` and `RPROMPT` when drawing the left and right prompts respectively. `PROMPT` is roughly equivalent to the `PS1` variable in bash.
|
||||||
|
|
||||||
|
By setting the variable, you can change how the prompt works. E.g.
|
||||||
|
|
||||||
|
```
|
||||||
|
oldPrompt $ PROMPT="new prompt > "
|
||||||
|
new prompt > ls
|
||||||
|
Documents Downloads GitRepos
|
||||||
|
new prompt > █
|
||||||
|
```
|
||||||
|
|
||||||
|
## ZSH Hooks
|
||||||
|
|
||||||
|
Zsh has a concept called hooks. These allow you to run a function (or functions) automatically at certain times.
|
||||||
|
|
||||||
|
For the purposes of setting my prompt, I want to run a function to set `PROMPT` and `RPROMPT` before the prompt is drawn. This can be done with the `precmd` hook.
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
set_prompts(){
|
||||||
|
PROMPT="$ "
|
||||||
|
RPROMPT=""
|
||||||
|
}
|
||||||
|
zle -N set_prompts
|
||||||
|
autoload -U add-zsh-hook
|
||||||
|
add-zsh-hook precmd set_prompts
|
||||||
|
```
|
||||||
|
|
||||||
|
This defines a function `set_prompts` and it will be run just before the prompt is drawn, every time. We can therefore use it to build the prompt.
|
||||||
|
|
||||||
|
## Drawing segments
|
||||||
|
|
||||||
|
I like the arrow style that was made popular by [Powerline](https://github.com/powerline/powerline). To achieve this, you will need a font that contains the powewline glyphs. If you don't have one, I highly recommend the [Nerd Fonts](https://www.nerdfonts.com/) project that aggregates a lot of icons as well as the powerline symbols. It even includes a script that allows you to add them to your favourite font.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Exit Code
|
||||||
|
|
||||||
|
In ZSH (and most other shells), the exit code of the previous command is available in the special `$?` variable. If we want the exit code of the last command run, we need to assign this to a variable first.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Get the return status of the previous command
|
||||||
|
local RETVAL=$?
|
||||||
|
```
|
||||||
|
|
||||||
|
## Git
|
||||||
|
|
||||||
|
I use Git a lot. It is useful to tell, at a glance, which branch I'm on, which tag I'm on and what the state of repository is. The function is quite simple:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
prompt_git(){
|
||||||
|
local repoTopLevel="$(command git rev-parse --show-toplevel 2> /dev/null)"
|
||||||
|
if [ -n "$repoTopLevel" ]; then
|
||||||
|
local branch="$(git branch --show-current 2> /dev/null)"
|
||||||
|
local tag="$(git describe --tags --exact-match HEAD 2> /dev/null)"
|
||||||
|
local color="green"
|
||||||
|
local ret=""
|
||||||
|
[ -n "$branch" ] && ret="$branch "
|
||||||
|
[ -n "$tag" ] && ret+="$tag "
|
||||||
|
[ -n "$ret" ] || ret="$(git rev-parse --short HEAD 2> /dev/null)"
|
||||||
|
local repoTopLevel="$(command git rev-parse --show-toplevel 2> /dev/null)"
|
||||||
|
local untrackedFiles=$(command git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null)
|
||||||
|
local modified=$(command git diff --name-only 2> /dev/null)
|
||||||
|
local staged=$(command git diff --staged --name-only 2> /dev/null)
|
||||||
|
|
||||||
|
if [ -n "$untrackedFiles" ]; then
|
||||||
|
ret+=" "
|
||||||
|
color="orange1"
|
||||||
|
fi
|
||||||
|
if [ -n "$modified" ]; then
|
||||||
|
ret+=" "
|
||||||
|
color="orange1"
|
||||||
|
fi
|
||||||
|
if [ -n "$staged" ]; then
|
||||||
|
ret+=" "
|
||||||
|
color="orange1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ret="$(echo "$ret" | sed -e 's/ *$//')"
|
||||||
|
echo "$ret"
|
||||||
|
echo "$color"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
20
content/help-me-out.md
Normal file
20
content/help-me-out.md
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
title: Help Me Out
|
||||||
|
---
|
||||||
|
|
||||||
|
I hate websites tracking me so I won't be tracking you if you visit my website. This makes monetizing the website almost impossible. If you like what I do, and want to support the content I put on this website, there are a few ways you can do it.
|
||||||
|
|
||||||
|
|
||||||
|
## Directly
|
||||||
|
|
||||||
|
* Bitcoin Wallet: 132AM5imvDiWXJQGfMiGBmvnfaChaUTaQ6
|
||||||
|
* PayPal Me: <https://paypal.me/jab2870>
|
||||||
|
|
||||||
|
## Indirectly
|
||||||
|
|
||||||
|
If you can't afford (or don't want) to support me, that's fine. The content I put out will always be freely available and without any form of tracking. There are some affiliate links you can use that I will get a kick back from. Be warned though, some of these services might track you - unfortunately that is out of my control. If you don't want them to, don't click the links.
|
||||||
|
|
||||||
|
* Lbry: <https://lbry.tv/$/invite/@jonathanh:7> - Lbry is a decentralised video sharing platform. By signing up with this link, they give me some of the crypto currency the platform is built around.
|
||||||
|
* Digital Ocean: <https://m.do.co/c/e6f44c36362f> - Digital ocean is a hosting platform. By using this link, you will get $100 to spend (it expires after 60 days). I will also get $25 if you use it.
|
||||||
|
* Smarty: <http://referme.to/KZ6bPZx> - (UK Only) If you sign up for Smarty sim card, we both get a free month.
|
||||||
|
* Curve: <http://www.curve.app/join#DWGGW26E> - All your cards in one. If you sign up, we each get £5
|
|
@ -67,7 +67,7 @@ $body$
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
<a href="https://paypal.me/jab2870">Buy me a coffee?</a>
|
<a href="/help-me-out.html">Help me out</a>
|
||||||
<a href="https://git.jonathanh.co.uk/jab2870/Website">Website Source</a>
|
<a href="https://git.jonathanh.co.uk/jab2870/Website">Website Source</a>
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue