<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Website on Voltaicforge</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/categories/website/</link>
        <description>Recent content in Website on Voltaicforge</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-au</language><atom:link href="https://6e2dbc8c.voltaicforge.pages.dev/categories/website/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Neovim setup for better writing</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/</link>
        <pubDate>Sat, 17 Jun 2023 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/nvim-zen-mode.png" alt="Featured image of post Neovim setup for better writing" /&gt;&lt;h1 id=&#34;setting-up-nvim-for-writing&#34;&gt;Setting up nvim for writing&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve been getting into using nvim a lot of late, and thus wanted to integrate it well into my website workflow.&lt;/p&gt;
&lt;p&gt;One fault I&amp;rsquo;ve seen in my older posts during my redesign was some spelling mistakes and poor grammar. I used to write in other editors and then copy &amp;amp; paste into Grammarly, which was cumbersome. Of course, this meant at times I would either forget or not be bothered to do so.&lt;/p&gt;
&lt;p&gt;The other thing I used to find is because of how cumbersome it was to write I ended up not bothering to write.&lt;/p&gt;
&lt;p&gt;So the goal of any new setup needed to be an easy as possible workflow for writing and getting the post to GitHub, and build in spell/grammar checking.&lt;/p&gt;
&lt;h1 id=&#34;better-language-with-ltex-ls-ltex-extra-and-language-tools&#34;&gt;Better language with ltex-ls, ltex-extra, and language-tools&lt;/h1&gt;
&lt;p&gt;As I was already running a &lt;a class=&#34;link&#34; href=&#34;https://languagetool.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;language-tools&lt;/a&gt; docker instance in my cluster I was keen to utilise it as well, over sending my data out to another website for review.
I found &lt;a class=&#34;link&#34; href=&#34;https://www.google.com/search?q=ltex-ls&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ltex-ls&lt;/a&gt; a good candidate for integrating spell/grammar checking, so I added it to my &lt;a class=&#34;link&#34; href=&#34;https://www.lazyvim.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Lazyvim&lt;/a&gt; config.&lt;/p&gt;
&lt;p&gt;After some fiddling with it, I found that I wasn&amp;rsquo;t able to add Neovim&amp;rsquo;s default additional dictionary words to it—the docs show its able to load an external file for user added words. However, this isn&amp;rsquo;t functional in &lt;code&gt;ltex-ls&lt;/code&gt;. You can make a workaround by running lua to load the nvim user dictionary words, then pass them into the model. This doesn&amp;rsquo;t reload unless you restart nvim, which can be a tad annoying as it adding a word doesn&amp;rsquo;t remove the error until you restart nvim.&lt;/p&gt;
&lt;p&gt;Using &lt;code&gt;ltex-extra&lt;/code&gt; provides a wrapper to enable some of these functions and adds code actions. I was able to set up my nvim directory as the location for user added words, and it loaded this dictionary at load/new words being added.&lt;/p&gt;
&lt;p&gt;So now, a &lt;code&gt;[d&lt;/code&gt; or &lt;code&gt;]d&lt;/code&gt; takes me to the next diagnostic, &lt;code&gt;&amp;lt;leader&amp;gt;cd&lt;/code&gt; will show me a popup with the diagnostic text, and &lt;code&gt;&amp;lt;leader&amp;gt;ca&lt;/code&gt; brings up code actions with proposed fixes or the ability to add words to the dictionary. &lt;code&gt;&amp;lt;leader&amp;gt;sd&lt;/code&gt; will bring all document diagnostics in a telescope window.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/telescope-diagnostics.png&#34;
  width=&#34;1511&#34;
  height=&#34;802&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/telescope-diagnostics_hu9852f18669cf3da99185ee06d0a1d677_223545_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/telescope-diagnostics_hu9852f18669cf3da99185ee06d0a1d677_223545_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Telescope diagnostics showing a number of grammar and spelling errors&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;188&#34;
    data-flex-basis=&#34;452px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;First to add it in as a requirement for &lt;code&gt;Mason&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;~/.config/nvim/lua/plugins/lsp.lua&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;williamboman/mason.nvim&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  opts = function(_, opts)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    vim.list_extend(opts.ensure_installed, {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;stylua&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;selene&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;luacheck&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;shellcheck&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;prettier&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;shfmt&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;black&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;isort&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;flake8&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+     &amp;#34;ltex-ls&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  end,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then to set it up in &lt;code&gt;nvim-lspconfig&lt;/code&gt;
&lt;em&gt;~/.config/nvim/lua/plugins/lsp.lua&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;neovim/nvim-lspconfig&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    opts = {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ---@type lspconfig.options
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      servers = {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+       ltex = {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+         on_attach = function(client, bufnr)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           print(&amp;#34;Loading ltex from ltex_extra&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           require(&amp;#34;ltex_extra&amp;#34;).setup({
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             init_check = true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             load_langs = { &amp;#34;en-AU&amp;#34; }, -- table &amp;lt;string&amp;gt; : language for witch dictionaries will be loaded
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             log_level = &amp;#34;error&amp;#34;, -- string : &amp;#34;none&amp;#34;, &amp;#34;trace&amp;#34;, &amp;#34;debug&amp;#34;, &amp;#34;info&amp;#34;, &amp;#34;warn&amp;#34;, &amp;#34;error&amp;#34;, &amp;#34;fatal&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             path = vim.fn.expand(&amp;#34;~&amp;#34;) .. &amp;#34;/.config/nvim/spell/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           })
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+         end,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+         settings = {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           ltex = {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             completionEnabled = true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             statusBarItem = true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             languageToolHttpServerUri = &amp;#34;https://language-tools.trux.dev/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             checkFrequency = &amp;#34;save&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             language = &amp;#34;en-AU&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             additionalRules = {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+               enablePickyRules = true,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+             },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+           },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+         },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+       },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;        ansiblels = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bashls = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        dockerls = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        html = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        gopls = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        marksman = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        pyright = {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          enabled = false,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        vimls = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      },
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      setup = {},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And once satisfied in the results, disable Lazyvim&amp;rsquo;s spellcheck, to avoid having two sets of spell checking occurring, especially as Neovim isn&amp;rsquo;t aware of the user words you are adding via &lt;code&gt;ltex-extra&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;~/.config/nvim/lua/config/autocmds.lua&lt;/em&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-- Disable spelling
vim.api.nvim_del_augroup_by_name(&amp;#34;lazyvim_wrap_spell&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This has given me solid grammar advice direct into neovim. Next steps for this would be to build a more custom docker with specific &lt;a class=&#34;link&#34; href=&#34;https://dev.languagetool.org/finding-errors-using-n-gram-data&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;n-gram&lt;/a&gt; data.&lt;/p&gt;
&lt;h1 id=&#34;zen-mode-with-zen-mode-and-twilight&#34;&gt;Zen mode with zen-mode and twilight&lt;/h1&gt;
&lt;p&gt;While I have not had a lot of experience with zen mode editors, I do think this could also help me write, as I&amp;rsquo;m easily distracted. &lt;code&gt;zen-mode&lt;/code&gt; hides everything and just gives a reduced width view of just the text you are editing. &lt;code&gt;twilight&lt;/code&gt; dims everything on the screen except the current block you are working on, helping you focus on your current text.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/nvim-zen-mode.png&#34;
  width=&#34;1771&#34;
  height=&#34;463&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/nvim-zen-mode_hu3b6abfa980cefedeadc4ed60b9546684_53862_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2023/06/nvim-for-writing/nvim-zen-mode_hu3b6abfa980cefedeadc4ed60b9546684_53862_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Neovim zen mode using zen-mode and twilight plugins&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;382&#34;
    data-flex-basis=&#34;918px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;~/.config/nvim/lua/plugins/misc.lua&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;folke/zen-mode.nvim&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;cmd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ZenMode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;opts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plugins&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;gitsigns&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;tmux&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;kitty&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;font&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;+2&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;leader&amp;gt;z&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;cmd&amp;gt;ZenMode&amp;lt;cr&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Zen Mode&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- twilight&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;folke/twilight.nvim&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;nvim-treesitter/nvim-treesitter&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
        <title>Website redesign with Hugo &amp; Cloudflare pages!</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2023/05/website-redesign-hugo-cf-workers/</link>
        <pubDate>Mon, 22 May 2023 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2023/05/website-redesign-hugo-cf-workers/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2023/05/website-redesign-hugo-cf-workers/new_site_nvim.png" alt="Featured image of post Website redesign with Hugo &amp; Cloudflare pages!" /&gt;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I wanted to give you a quick update about some changes I&amp;rsquo;ve made to my website. Previously, my site was built using Jekyll and hosted on GitHub Pages, but I&amp;rsquo;ve recently migrated it to a new platform: Hugo, powered by Cloudflare Pages. I wanted to take a moment to explain why I made this switch and how it benefits both me and you as a reader.&lt;/p&gt;
&lt;h2 id=&#34;reason-for-the-migration&#34;&gt;Reason for the Migration&lt;/h2&gt;
&lt;p&gt;While Jekyll and GitHub Pages served me well, I was looking for a more streamlined and efficient workflow for managing my site. After exploring various options, I decided to switch to Hugo, a static site generator, combined with Cloudflare Pages for hosting and delivery.&lt;/p&gt;
&lt;p&gt;Unfortunately, I found that Jekyll was somewhat slow at times and its site methodology required me to bastardise the template quite a bit, leading to it being somewhat painful to work with at times.
I just want to be able to add a new post, save and &lt;code&gt;git push&lt;/code&gt; it into the ether, with confidence it would be live shortly thereafter.&lt;/p&gt;
&lt;h2 id=&#34;benefits-of-hugo-and-cloudflare-pages&#34;&gt;Benefits of Hugo and Cloudflare Pages&lt;/h2&gt;
&lt;p&gt;The move to Hugo and Cloudflare Pages brings several advantages. Firstly, Hugo offers a simpler and faster site building process, allowing me to create and update content more efficiently.  Hugo being written in Go makes it quite a lot quicker than Jekyll&amp;rsquo;s Ruby pipeline (Pity Hugo isnt Rust&amp;hellip;)&lt;/p&gt;
&lt;p&gt;Cloudflare Pages, on the other hand, offer robust hosting capabilities and improved site delivery. With their global network of servers, my site now loads faster for readers around the world. The combination of Hugo and Cloudflare Pages ensures a seamless browsing experience with minimal downtime.  Cloudflare workers are free for small traffic sites, and has a build pipeline that scans this sites github repo, builds it with a worker immedaitly on push and the new site is live quite quickly.  I can also see a history of commits if I want to check a commit, and even build branches other main so I can adopt a branch -&amp;gt; push to dev -&amp;gt; check it looks OK -&amp;gt; PR for new post.&lt;/p&gt;
&lt;h2 id=&#34;cicd-workflows-and-automation&#34;&gt;CI/CD Workflows and Automation&lt;/h2&gt;
&lt;p&gt;One of the highlights of this migration is the implementation of strong CI/CD (Continuous Integration/Continuous Deployment) workflows. I&amp;rsquo;ve set up automated processes that handle tasks such as building, testing, and deploying my site whenever I make updates. This automation saves me time and ensures that the latest content is always available to you.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In summary, I&amp;rsquo;ve migrated my website from Jekyll/GitHub Pages to Hugo/Cloudflare Pages, aiming for a more efficient and optimized experience. The transition brings benefits like improved performance, streamlined workflows, and automated deployment. I hope you&amp;rsquo;ll enjoy the enhanced browsing experience, and I&amp;rsquo;m excited to continue sharing great content with you on this shiny new platform.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Responsive Images in Jekyll</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/jekyll-responsive-images/</link>
        <pubDate>Tue, 10 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/jekyll-responsive-images/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/jekyll-responsive-images/Code.jpg" alt="Featured image of post Responsive Images in Jekyll" /&gt;&lt;h2 id=&#34;responsive-images-the-jekyll-way&#34;&gt;Responsive images, the Jekyll way&lt;/h2&gt;
&lt;p&gt;One of the first things I did in my exploration of Jekyll was to go away from using GitHub to generate the site. The first limitation that frustrated me was the inability to use plugins. Currently, I only use one plugin that I couldn&amp;rsquo;t use on GitHub - which relates to responsive images.&lt;/p&gt;
&lt;p&gt;I shoot most of my pictures that I&amp;rsquo;m using for the site on my DSLR - which means I&amp;rsquo;m getting large pictures. I export from Lightroom via a preset I have setup. However, the process of resizing images for the web is an additional step in publishing a post. I want to be able to toss the image into a folder, type out some text in Notepad++, and upload the site without worrying about image size, resizing, srcset, etc.&lt;/p&gt;
&lt;p&gt;Without plugins, this means that all the images you have on your site are going to be resized in the browser - which is a big detractor for page load speed and general usability of the site.&lt;/p&gt;
&lt;p&gt;So I set out to find a plugin that would do responsive images (via srcset or picture tags) as well as automatically resizing the images, so I didn&amp;rsquo;t have to worry about anything except the parent image.&lt;/p&gt;
&lt;h2 id=&#34;jekyll-picture-tags&#34;&gt;Jekyll-picture-tags&lt;/h2&gt;
&lt;p&gt;After a bit of searching, I found three candidates for creating responsive images.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/wildlyinaccurate/jekyll-responsive-image&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jekyll-responsive-images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/robwierzbowski/jekyll-picture-tag&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jekyll-picture-tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/netlify/jekyll-srcset&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jekyll-srcset&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I found Jekyll-srset broken as of May 2016, and it did not generate multiple images. I couldn&amp;rsquo;t get Jekyll-responsive-images to run properly either.&lt;/p&gt;
&lt;p&gt;Jekyll-picture-tags works a treat after some setup. Unfortunately, it has poor error messages (generic Ruby messages) and was tough to debug.&lt;/p&gt;
&lt;p&gt;After installing into my &lt;code&gt;gemfile&lt;/code&gt;, I ended up on the following addition to &lt;code&gt;_config.yml&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;picture:
  source: &amp;#34;images&amp;#34;
  output: &amp;#34;images/resize&amp;#34;
  markup: &amp;#34;picture&amp;#34;
  presets:
    default:
      ppi: [1, 1.5, 2.0]
      source_medium:
        media: &amp;#34;(min-width: 40em)&amp;#34;
        width: &amp;#34;600&amp;#34;
      source_default:
        width: &amp;#34;600&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; Ensure your indentation is correct if copying a config - misalignment&amp;rsquo;s will give you a dreaded generic error message &lt;code&gt;Liquid Exception: undefined method [] for nil:NilClass in _drafts/JekyllAnchors.md/#excerpt&lt;/code&gt;
&lt;/blockquote&gt;

&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; Also ensure your &lt;code&gt;base-url&lt;/code&gt; in &lt;code&gt;_config.yml&lt;/code&gt; is set to an empty string &amp;quot;&amp;quot; (&lt;code&gt;base-url:   &amp;quot;&amp;quot;&lt;/code&gt;). Without this, the images won&amp;rsquo;t be found or load correctly, even if it generates correctly.
&lt;/blockquote&gt;

&lt;p&gt;After much fiddling and debugging, I had it working. I decided to add it to my shortcuts in Notepad++ using &lt;a class=&#34;link&#34; href=&#34;https://github.com/erinata/FingerText&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;FingerText&lt;/a&gt;. I came up with the following code, which also allowed me to have an alt and title text in the tag.&lt;/p&gt;
&lt;p&gt;FingerText enables me Notepad++ users to write blocks of text with a single keyword (amongst other uses). So now when I type &lt;code&gt;respimage&lt;/code&gt; with a tab immediately after, the below code will be automatically inserted and the text between &lt;code&gt;$[![&lt;/code&gt; and &lt;code&gt;]!]&lt;/code&gt; will be selected upon each tab to allow me to enter the relevant details. Entering an Image Filename (from my /assets/images/ folder) and an Image title defines the image, and the Preset name will tell Jekyll-picture-tag which config branch to run - which dictates the which sets of images to include.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-liquid&#34; data-lang=&#34;liquid&#34;&gt;{% capture imagesrc %}$[![Image_Filename]!]{% endcapture %}
{% capture imagetitle %}$[![Image_Title]!]{% endcapture %}
&amp;lt;a href=&amp;#34;/assets/images/{{ imagesrc }}&amp;#34;&amp;gt;{% picture $[![Preset_name]!] {{ imagesrc }} alt=&amp;#34;{{ imagetitle }}&amp;#34; title=&amp;#34;{{ imagetitle }}&amp;#34; %}&amp;lt;/a&amp;gt;
{: .text-center}
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; Jekyll-picture-tag also hates spaces in picture filenames. Not that you should have spaces in filenames anyway, but that&amp;rsquo;s another thing I stumbled on.
&lt;/blockquote&gt;

&lt;p&gt;I now have images that (should) be responsive for mobile and desktop, and I don&amp;rsquo;t have to do the resizing myself.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>New Site</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/new-site/</link>
        <pubDate>Sat, 09 Apr 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/new-site/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/04/new-site/Code.jpg" alt="Featured image of post New Site" /&gt;&lt;h2 id=&#34;new-site-hits-the-internet&#34;&gt;New Site hits the Internet&lt;/h2&gt;
&lt;p&gt;Finally found the inspiration to build a nice personal site. I&amp;rsquo;ve been toying with &lt;a class=&#34;link&#34; href=&#34;https://www.wordpress.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Wordpress&lt;/a&gt; for some time, but it&amp;rsquo;s quite bloated for a nice basic site. And then there&amp;rsquo;s the security hassles, addons, database setup, theme setup, etc. It&amp;rsquo;s so far beyond what I want to be doing for a personal site it&amp;rsquo;s not funny.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve wanted to be getting posts back online about projects and tinkering I&amp;rsquo;m always doing, so that will be the aim for this site. I&amp;rsquo;ve also been looking for some time for a better layout to be able to post about projects. The default blogging layout to be &lt;em&gt;inadequate&lt;/em&gt; for something project like, or anything that is posted about over time. Making a visitor have to browse multiple posts to piece together the history of one project really doesn&amp;rsquo;t work.&lt;/p&gt;
&lt;p&gt;With what I&amp;rsquo;m crafting here, I will be able to have static pages for projects that can be appended to over time to add up to one larger page per project. Most likely with blog posts for updates or miscellaneous stuff that fits on the site. I&amp;rsquo;ll also be planning to write up some mini-guides for things I&amp;rsquo;ve come across in my hobby projects.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve gone with an &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AWS&lt;/a&gt; approach, along with using &lt;a class=&#34;link&#34; href=&#34;https://jekyllrb.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Jekyll&lt;/a&gt;. This gives me a simpler way of posting and updating a site without the big CMS overhead, and after skipping over static site generators as being probably more effort than their worth, I went back to check out Jekyll, then using Jekyll with S3 and AWS. And that was the end of that search.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;thoroughly&lt;/em&gt; enjoy the ease of use of Markdown for writing HTML and if you haven&amp;rsquo;t checked it out and have some basic HTML background, definitely check it out.&lt;/p&gt;
&lt;p&gt;Now its time go get cracking writing up all the projects past and present and getting the site filled out.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
