|
| 1 | +--- |
| 2 | +title: A Glimer of Sunshine |
| 3 | +date: |
| 4 | + created: 2026-02-23 |
| 5 | + updated: 2026-02-23 |
| 6 | +authors: |
| 7 | + - practicalli |
| 8 | +categories: |
| 9 | + - practicalli |
| 10 | +tags: |
| 11 | + - debian |
| 12 | + - clojure |
| 13 | + - neovim |
| 14 | +draft: false |
| 15 | +--- |
| 16 | + |
| 17 | + |
| 18 | +The weather looks promising, so maybe a couple of rides during the week 🤞 |
| 19 | + |
| 20 | +At the end of March I planned to [start testing AstroNvim v6 and :fontawesome-brands-neovim: Neovim 0.12](#neovim) (for its up coming release). Looking at the migration guide though, it was so simple I started already. Now I am using AstroNvim v6 and Neovim nightly as the day to day setup. |
| 21 | + |
| 22 | +I added the [:fontawesome-brands-github: Markdown language pack](https://github.com/AstroNvim/astrocommunity/tree/main/lua/astrocommunity/pack/markdown){target=_blank} to the Astronvim v6 config, which automatically installs treesitter parsers for markdown and the marksman language server. Marksman provides completion for heading when typing the `#` character, so correct in-page links are easy to create. |
| 23 | + |
| 24 | +I finalised the [Debian Linux Post Install scripts](), separating each tool into its own script. |
| 25 | + |
| 26 | +<!-- more --> |
| 27 | + |
| 28 | + |
| 29 | +## Neovim |
| 30 | + |
| 31 | +AstroNvim is used as the base configuration for Neovim. AstroNvim turns Neovim in to a feature rich editor (IDE) whist still keeping the editor extremely fast and with near instant startup. |
| 32 | + |
| 33 | +There is [:fontawesome-brands-github: a pull request containing AstroNvim v6 changes along with a migration guide](https://github.com/AstroNvim/AstroNvim/pull/2822){target=_blank} |
| 34 | + |
| 35 | +### Preparing to Testing AstroNvim v6 |
| 36 | + |
| 37 | +The `dra` tool was used to download and install the Neovim AppImage from the Neovim GitHub repository releases. |
| 38 | + |
| 39 | +As its a pre-release, the binary was installed for the current user in their `~/.local/bin` directory (which should already be on the execution path). |
| 40 | + |
| 41 | +!!! NOTE "Shell script to install Nightly Neovim release for current user" |
| 42 | + ```shell |
| 43 | + #!/usr/bin/env bash |
| 44 | + |
| 45 | + # Install the pre-release version of Neovim from GitHub, for the current user |
| 46 | + |
| 47 | + echo "# ---------------------------------------" |
| 48 | + echo "Neovim hyper-configurable editor - installed for all users in `/usr/local/bin`" |
| 49 | + # remove the existing nvim binary as DRA fails to override the file |
| 50 | + # sudo rm -f /usr/local/bin/nvim |
| 51 | + |
| 52 | + # Install nvim.appimage nightly release tag and rename to nvim-nightly |
| 53 | + dra download --tag nightly --select nvim-linux-x86_64.appimage --install --output ~/.local/bin/nvim-nightly neovim/neovim |
| 54 | + |
| 55 | + echo "# ---------------------------------------" |
| 56 | + echo "" |
| 57 | + ``` |
| 58 | + |
| 59 | + |
| 60 | +Clone a separate copy of [practicalli nvim-astro5](https://github.com/practicalli/nvim-astro5) |
| 61 | + |
| 62 | +```shell |
| 63 | +git clone --depth=1 git@github.com:practicalli/nvim-astro5 ~/.config/nvim-astro6 |
| 64 | +``` |
| 65 | + |
| 66 | +Change into the `nvim-astro6` directory and create a new git branch. |
| 67 | + |
| 68 | +```shell |
| 69 | +git branch nvim-astro6 |
| 70 | +``` |
| 71 | + |
| 72 | + |
| 73 | +!!! EXAMPLE |
| 74 | + ```shell-output |
| 75 | + ❯ git branch nvim-astro6 |
| 76 | + |
| 77 | + ❯ git branches |
| 78 | + * main 3341c1d snippet: update to year 2026 in post header |
| 79 | + nvim-astro6 3341c1d snippet: update to year 2026 in post header |
| 80 | + remotes/origin/HEAD -> origin/main |
| 81 | + remotes/origin/main 3341c1d snippet: update to year 2026 in post header |
| 82 | + |
| 83 | + ❯ git checkout nvim-astro6 |
| 84 | + Switched to branch 'nvim-astro6' |
| 85 | + ``` |
| 86 | + |
| 87 | + |
| 88 | +Create a shell alias to launch neovim nightly with the astronvim v6 branch. This simplifies the command needed (and means I dont have to remember it). |
| 89 | + |
| 90 | +I added the shell alias to the [practicalli/dotfiles shell-aliases](https://github.com/practicalli/dotfiles/blob/main/shell-aliases) file |
| 91 | + |
| 92 | +!!! NOTE "Launch Neovim nightly with AstroNvim v6 config to test Practicalli customisations" |
| 93 | + ```shell |
| 94 | + alias astro6="NVIM_APPNAME=nvim-astro6 nvim-nightly" |
| 95 | + ``` |
| 96 | + |
| 97 | +### Update Config |
| 98 | + |
| 99 | +Edited `lua/lazy_setup.lua` and commented line 4 which defined a `version` key for AstroNvim/AstroNvim plugin |
| 100 | + |
| 101 | +Comment the `version` key and value (it will be changed to `version = ^6` once AstroNvim v6 is released). |
| 102 | + |
| 103 | +Add a `branch` key with the value of `v6`. |
| 104 | + |
| 105 | +!!! NOTE "Configure Astronvim plugin to use branch v6" |
| 106 | + ```lua |
| 107 | + require("lazy").setup({ |
| 108 | + { |
| 109 | + "AstroNvim/AstroNvim", |
| 110 | + -- version = "^5", -- Remove version tracking to elect for nightly AstroNvim |
| 111 | + branch = "v6", -- Use branch until AstroNvim v6 released |
| 112 | + -- |
| 113 | + }, |
| 114 | + -- |
| 115 | + }, |
| 116 | + } --[[@as LazyConfig]]) |
| 117 | + ``` |
| 118 | + |
| 119 | +!!! INFO "Initiall the branch was not set correctly, causing errors" |
| 120 | + [Testing AstroNvim v6](#testing-astronvim-v6) highlights errors that were caused because the branch was not set to v6. |
| 121 | + |
| 122 | + |
| 123 | +AstroNvim v6 uses newer versions of its three core plugins. A new plugin config is created to ensure the new versions are installed. |
| 124 | + |
| 125 | +!!! NOTE "Created astronvim plugin file with specific versions" |
| 126 | + ```lua title="lua/plugins/astronvim.lua" |
| 127 | + return { |
| 128 | + { "AstroNvim/astrocore", version = false, branch = "v3" } |
| 129 | + { "AstroNvim/astrolsp", version = false, branch = "v4" }, |
| 130 | + { "AstroNvim/astroui", version = false, branch = "v4" }, |
| 131 | + } |
| 132 | + ``` |
| 133 | + |
| 134 | +EDIT: Updated the AstroCommunity plugin spec to use v6. |
| 135 | + |
| 136 | +!!! NOTE "Add branch v6 to AstroCommunity plugin spec" |
| 137 | + ```lua title="lua/community.lua" |
| 138 | + ---@type LazySpec |
| 139 | + return { |
| 140 | + -- "AstroNvim/astrocommunity", -- default release |
| 141 | + |
| 142 | + { "AstroNvim/astrocommunity", branch = "v6" }, -- AstroNvim v6 |
| 143 | + } |
| 144 | + ``` |
| 145 | + |
| 146 | + |
| 147 | + |
| 148 | +### Testing AstroNvim v6 |
| 149 | + |
| 150 | +!!! INFO "The AstroNvim branch was not set correctly, causing the following errors" |
| 151 | + [Testing AstroNvim v6](#testing-astronvim-v6) highlights errors that were caused because the branch was not set to v6. |
| 152 | + |
| 153 | + AstroNvim v5 was installed due to the misconfiguration and had incompatibilities with the new implementation of Treesitter. |
| 154 | + |
| 155 | + |
| 156 | + |
| 157 | +Ran `astro6` and then `SPC p a` to let neovim automatically update plugins and supporting development tools. |
| 158 | + |
| 159 | +Ran a second update, `U`, from the Lazy popup to ensure everything was up to date. |
| 160 | + |
| 161 | + |
| 162 | +!!! EXAMPLE "Error in User Autocommands" |
| 163 | +```shell-output |
| 164 | +Error in User Autocommands for "LazyLoad": |
| 165 | +Lua callback: .../nvim-astro6/lazy/astrocore/lua/astrocore/treesitter.lua:38: attempt to call field 'get_installed' (a nil value) |
| 166 | +stack traceback: |
| 167 | + .../nvim-astro6/lazy/astrocore/lua/astrocore/treesitter.lua:38: in function 'installed' |
| 168 | + .../nvim-astro6/lazy/astrocore/lua/astrocore/treesitter.lua:128: in function 'load_op' |
| 169 | + .../share/nvim-astro6/lazy/astrocore/lua/astrocore/init.lua:232: in function <.../share/nvim-astro6/lazy/astrocore/lua/astrocore/init.lua:230> |
| 170 | + [C]: in function 'nvim_exec_autocmds' |
| 171 | + ...hare/nvim-astro6/lazy/lazy.nvim/lua/lazy/core/loader.lua:368: in function <...hare/nvim-astro6/lazy/lazy.nvim/lua/lazy/core/loader.lua:367> |
| 172 | +``` |
| 173 | + |
| 174 | +My initial assumption is a package that doesnt like the new version of treesitter. Probably something from AstroCommunity. |
| 175 | + |
| 176 | +Although I have a couple of other plugins from their GitHub repository. |
| 177 | + |
| 178 | + |
| 179 | +Error in User Autocommands for "LazyLoad": |
| 180 | + |
| 181 | +!!! EXAMPLE "Error on Neovim startup - with many additional plugins" |
| 182 | +```shell-output |
| 183 | +Lua callback: .../nvim-astro6/lazy/astrocore/lua/astrocore/treesitter.lua:38: attempt to call field 'get_installed' (a nil value) |
| 184 | +stack traceback: |
| 185 | + .../nvim-astro6/lazy/astrocore/lua/astrocore/treesitter.lua:38: in function 'installed' |
| 186 | + .../nvim-astro6/lazy/astrocore/lua/astrocore/treesitter.lua:128: in function 'load_op' |
| 187 | + .../share/nvim-astro6/lazy/astrocore/lua/astrocore/init.lua:232: in function <.../share/nvim-astro6/lazy/astrocore/lua/astrocore/init.lua:230> |
| 188 | + [C]: in function 'nvim_exec_autocmds' |
| 189 | + ...hare/nvim-astro6/lazy/lazy.nvim/lua/lazy/core/loader.lua:368: in function <...hare/nvim-astro6/lazy/lazy.nvim/lua/lazy/core/loader.lua:367> |
| 190 | +``` |
| 191 | + |
| 192 | +Asking in the Next channel on the AstroNvim discord community, the believed I should run `:Lazy update` |
| 193 | + |
| 194 | +When using `astro6` to open the Practicalli dotfiles project, opening the `dev-.sh` file caused the following error. |
| 195 | + |
| 196 | +```shell-output |
| 197 | +Failed to run `config` for mason-lspconfig.nvim |
| 198 | +
|
| 199 | +...roNvim/lua/astronvim/plugins/configs/mason-lspconfig.lua:4: module 'astrolsp.mason-lspconfig' not found: |
| 200 | + no field package.preload['astrolsp.mason-lspconfig'] |
| 201 | + cache_loader: module 'astrolsp.mason-lspconfig' not found |
| 202 | + cache_loader_lib: module 'astrolsp.mason-lspconfig' not found |
| 203 | + no file './astrolsp/mason-lspconfig.lua' |
| 204 | + no file '/home/runner/work/neovim/neovim/.deps/usr/share/luajit-2.1/astrolsp/mason-lspconfig.lua' |
| 205 | + no file '/usr/local/share/lua/5.1/astrolsp/mason-lspconfig.lua' |
| 206 | + no file '/usr/local/share/lua/5.1/astrolsp/mason-lspconfig/init.lua' |
| 207 | + no file '/home/runner/work/neovim/neovim/.deps/usr/share/lua/5.1/astrolsp/mason-lspconfig.lua' |
| 208 | + no file '/home/runner/work/neovim/neovim/.deps/usr/share/lua/5.1/astrolsp/mason-lspconfig/init.lua' |
| 209 | + no file './astrolsp/mason-lspconfig.so' |
| 210 | + no file '/usr/local/lib/lua/5.1/astrolsp/mason-lspconfig.so' |
| 211 | + no file '/home/runner/work/neovim/neovim/.deps/usr/lib/lua/5.1/astrolsp/mason-lspconfig.so' |
| 212 | + no file '/usr/local/lib/lua/5.1/loadall.so' |
| 213 | + no file './astrolsp.so' |
| 214 | + no file '/usr/local/lib/lua/5.1/astrolsp.so' |
| 215 | + no file '/home/runner/work/neovim/neovim/.deps/usr/lib/lua/5.1/astrolsp.so' |
| 216 | + no file '/usr/local/lib/lua/5.1/loadall.so' |
| 217 | +
|
| 218 | +# stacktrace: |
| 219 | + - /AstroNvim/lua/astronvim/plugins/configs/mason-lspconfig.lua:4 |
| 220 | + - /AstroNvim/lua/astronvim/plugins/lspconfig.lua:25 _in_ **config** |
| 221 | + - /astrocore/lua/astrocore/init.lua:119 |
| 222 | +``` |
| 223 | + |
| 224 | + |
| 225 | +### Fixing my config |
| 226 | + |
| 227 | +I made a typo. in `lua/lazy_setup.lua` I added `branch = ^6` when I should have added `branch = v6`. |
| 228 | + |
| 229 | +Everything seems to work now. There may be issues with specific plugins though. More time to test during the week. |
| 230 | + |
| 231 | + |
| 232 | +### Testing Extra Plugins and Tools |
| 233 | + |
| 234 | +Using AstroNvim v6 for my every day tasks a simple way to start testing all the extra plugins and tools I use are working correctly. |
| 235 | + |
| 236 | +As there have been changes in Treesitter, it is probable that those plugins would need updating. |
| 237 | + |
| 238 | + |
| 239 | +Issues: |
| 240 | + |
| 241 | +- Neogit: two popup dialogs shown when deleting a hunk in the git status window |
| 242 | + |
| 243 | + |
| 244 | +Resolved: |
| 245 | + |
| 246 | +- Marksman: I forgot to install the tool via Mason :face_palm: |
| 247 | + |
| 248 | + |
| 249 | +Working correctly: |
| 250 | + |
| 251 | +- VM Visual Cursors |
| 252 | + |
| 253 | + |
| 254 | +## Debian Linux |
| 255 | + |
| 256 | +Refining disk use by the default install |
| 257 | + |
| 258 | + |
| 259 | +### Remove unneeded locals |
| 260 | + |
| 261 | + |
| 262 | +!!! EXAMPLE "Current Locale configuration" |
| 263 | + ```shell-output |
| 264 | + ❯ locale |
| 265 | + LANG=en_GB.UTF-8 |
| 266 | + LANGUAGE=en_GB:en |
| 267 | + LC_CTYPE="en_GB.UTF-8" |
| 268 | + LC_NUMERIC="en_GB.UTF-8" |
| 269 | + LC_TIME="en_GB.UTF-8" |
| 270 | + LC_COLLATE="en_GB.UTF-8" |
| 271 | + LC_MONETARY="en_GB.UTF-8" |
| 272 | + LC_MESSAGES="en_GB.UTF-8" |
| 273 | + LC_PAPER="en_GB.UTF-8" |
| 274 | + LC_NAME="en_GB.UTF-8" |
| 275 | + LC_ADDRESS="en_GB.UTF-8" |
| 276 | + LC_TELEPHONE="en_GB.UTF-8" |
| 277 | + LC_MEASUREMENT="en_GB.UTF-8" |
| 278 | + LC_IDENTIFICATION="en_GB.UTF-8" |
| 279 | + LC_ALL= |
| 280 | + |
| 281 | + ❯ cat /etc/default/locale |
| 282 | + # File generated by update-locale |
| 283 | + LANG="en_GB.UTF-8" |
| 284 | + LANGUAGE="en_GB:en" |
| 285 | + ``` |
| 286 | + |
| 287 | + |
| 288 | + |
| 289 | +## Bash scripting |
| 290 | + |
| 291 | +There are a long list of tests that can be used within an `if` statement when writing a bash script. |
| 292 | + |
| 293 | +The Gnu Bash Manual describes [Conditional Expressions](https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html#Bash-Conditional-Expressions-1){target=_blank} in detail, as does the [test manual page](https://www.man7.org/linux/man-pages/man1/test.1.html){target=_blank}. |
| 294 | + |
| 295 | +Commonly used tests include: |
| 296 | + |
| 297 | +- ! expression: True if the expression is false. |
| 298 | +- -n string: True if the length of the string is greater than zero. |
| 299 | +- -z string: True if the length of the string is zero. That is, it's an empty string. |
| 300 | +- string1 = string2: True if string1 is the same as string2. |
| 301 | +- string1 != string2: True if string1 is not the same as string2. |
| 302 | +- integer1 -eq integer2: True if integer1 is numerically equal to integer2 |
| 303 | +- integer1 -qt integer2: True if integer1 is numerically greater than integer2 |
| 304 | +- integer1 -lt integer2: True if integer1 is numerically less than integer2 |
| 305 | +- -d directory: True if the directory exists. |
| 306 | +- -e file: True if the file exists. |
| 307 | +- -s file: True if the file exists with a size of more than zero. |
| 308 | +- -r file: True if the file exists and the read permission is set. |
| 309 | +- -w file: True if the file exists and the write permission is set. |
| 310 | +- -x file: True if the file exists and the execute permission is set. |
| 311 | + |
| 312 | +[Bash Conditional Expressions - Gnu Bash Manual](https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html#Bash-Conditional-Expressions-1){target=_blank .md-button} |
| 313 | + |
| 314 | +[Linux manual page - test](https://www.man7.org/linux/man-pages/man1/test.1.html){target=_blank .md-button} |
| 315 | + |
| 316 | + |
| 317 | +--- |
| 318 | +Thank you. |
| 319 | + |
| 320 | +[:globe_with_meridians: Practical.li Website](https://practical.li){target=_blank .md-button} |
| 321 | + |
| 322 | +[:fontawesome-brands-github: Practical.li GitHub Org](https://github.com/practicalli){target=_blank .md-button} |
| 323 | +[:fontawesome-brands-github: practicalli-johnny profile](https://github.com/practicalli-johnny){target=_blank .md-button} |
| 324 | + |
| 325 | +[:fontawesome-brands-mastodon: @practicalli@clj.social](https://clj.social/@practicalli){target=_blank .md-button} |
| 326 | +[:fontawesome-brands-twitter: @practical_li](https://twitter.com/practcial_li){target=_blank .md-button} |
0 commit comments