Colophon
I use various tools for authoring my content, like me; most are fairly basic.
From the use of vim as an editor, to the use of Google Gemini Workspaces for
much of my hero banner and other image creations.
Created as an experiment, this site serves to represent the types of articles I produce by dogfooding my own ideas back into my site.
Editing Tools
I’ll often write directly in vim using a fairly vanilla installation as I have for the past 30 years, it’s what I’m comfortable with. Once a draft is complete, I use Gemini for Google Workspaces to proof the text, primarily focusing on grammar and language consistency
My .vimrc
My .vimrc has been evolving since the mid-90s. It’s a “vanilla-plus” setup
using the classic desert colorscheme. While I keep it simple, I’ve
optimised it with specific indentation rules for Terraform hcland YAML, and
I use vim-plug to manage essential
plugins like vim-terraform.
"
" .vimrc
"
" Evolving since some time in the mid 90's
"
" Author: Brett Ryan
"
" Return to last known cursor location for file.
if has("autocmd")
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
endif
syntax on
colorscheme desert
set background=dark
" Don't be so vi strict, allow backspace like a normal human being.
set backspace=indent,eol,start
" Looks good until the background screws up in the latest version
set hlsearch " Highlight search results.
set tabstop=4 " Number of spaces a <TAB> character represents
" It doesn't really matter since I use `.expandtab'
" though I think traditionally a <TAB> is 8 characters
" (it's the default anyway).
set softtabstop=4 " Inserts a mix of <TAB> and `shiftwidth' spaces.
set shiftwidth=4 " Spaces used in smart indent.
set expandtab " Places `.shiftwidth' spaces when <TAB> is pressed.
"set cindent " Inserts c style indent ruls (I think `smartindent'
" overrides this).
set smartindent " Smart auto-indenting when inserting a line.
set autoindent " Copies the current indent position from the previous
" line for iserts and <CR>.
set smarttab " Inserts `shiftwidth' spaces in place of a <TAB>,
" likewise a <BS> will remove the `shiftwidth' spaces.
set nowrap " Text is not wrapped from one line to another.
set sidescroll=1 " For lines that are larger than 1 character I like to
" have the left/right cursor movement scroll the
" window by 1 character.
"set textwidth=80 " Sets the default text width to 78 characters (I
" later use this in a highlighting pattern I once
" found.
" While I love this visually, it's annoying if I want to copy/past from the
" terminal.
"set colorcolumn=81
"highlight ColorColumn ctermbg=8 " 9 guibg=lightgrey
" Some alternates for highlighting things I want to clean up.
" Highlight tabs, trailing whitespace and lines exceeding textwidth.
" NOTE: This seems to cause some files to not render correctly.
"au BufEnter * exec 'match debugPC /\t\|\s\+$\|\%>' . &textwidth . 'v.\+/'
" Highlight tabs and trailing whitespace.
au BufEnter * exec 'match debugPC /\t\|\s\+$/'
" Just highlight trailing whitespace.
"au BufEnter * exec 'match debugPC /\s\+$/'
" Map <F2> to perform append then paste
map <F2> gJ<END>p<DOWN>
" nvim not supported
" set pastetoggle=<F6>
" statusline
" cf the default statusline: %<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
" format markers:
" %< truncation point
" %n buffer number
" %f relative path to file
" %m modified flag [+] (modified), [-] (unmodifiable) or nothing
" %r readonly flag [RO]
" %y filetype [ruby]
" %= split point for left and right justification
" %-35. width specification
" %l current line number
" %L number of lines in buffer
" %c current column number
" %V current virtual column number (-n), if different from %c
" %P percentage through buffer
" %) end of width specification
set statusline=%<\ %n:%f\ %m%r%y%=%-35.(line:\ %l\ of\ %L,\ col:\ %c%V\ (%P)%)
set laststatus=2
" I used to swear by modelines and you might find many of my original files
" authored with them, however; modern security concerns recommend turning this
" off.
"set modelines=5
"set modeline
" 2MB search memory (I think default is 1000)
set maxmempattern=2000
" Some file formats I prefer with an indent size of 2.
au! BufRead,BufNewFile
\ *.html,*.json,*.md,*.tf,.vimrc,*.yaml,*.yml
\ setlocal ts=2 sts=2 sw=2
" Modern version using filetype instead of file extension. I know I should
" move to this from the above, however; I'm too lazy.
" set filetype on
autocmd FileType
\ hcl,js,javascript,sh,sql,tf,xml
\ setlocal shiftwidth=2 tabstop=2
" Make sure we have a completely black background
highlight Normal ctermbg=Black
highlight NonText ctermbg=Black
highlight Normal ctermbg=0
" Line numbers are great, but they get copied when copy/pasting.
"set nu
"set relativenumber
"set numberwidth=3
"highlight clear SignColumn
" highlight LineNr guifg=#050505
" highlight CursorLineNr gui=bold guifg=DarkRed guibg=#c0d0e0
" Execute the current script when pressing F5
if executable(expand('%'))
nnoremap <F5> :!%<CR>
endif
" Use vim-plugged https://github.com/junegunn/vim-plug
call plug#begin('~/.vim/plugged')
Plug 'hashivim/vim-terraform'
Plug 'aperezdc/vim-template'
call plug#end()
" With my templates I want to use
function! GetISOCurrentTimestamp()
return strftime('%Y-%m-%dT%H:%M:%SZ')
endfunction
let g:templates_directory = '~/.vim/templates'
let g:templates_user_variables = [
\ ['FDATE_UTC_ISO', 'GetISOCurrentTimestamp'],
\ ]
Built With
I’m using the Hugo toolchain to build static content from Markdown content. This allows for a natural content to delivery machinery. I’m using the Anake theme that I’ve been customising with my own partials to help me learn the hugo environment from a simple building block.
Image Creation
While not the most creative when it comes to image creation, I often use Gemini for Google Workspaces to create my hero banners for me. I’ll often attach my raw markdown content and ask Gemini to create me an image that matches the content, often prompting with my desired style or focus elements for the image. For all my images created by Gemini, I leave the watermark in for attribution.
Hosting
All content is hosted on the Amazon Web Services (AWS) Amplify platform using home-grown ABAC CI/CD architecture. This utilises OpenID Connect (OIDC) authorisation for Continuous Integration (CI) and Continuous Delivery (CD).
Continuous Delivery
I’m using my own OpenID Connect (OIDC) Attribute Based Access Control (ABAC) machinery to deliver up-to-date content to my site.