Skip to content

A lighter load

Three rides in three consecutive days this week, so I am looking forward to a relaxing Sunday. I plan to cuddle up with Omarchy.

I continue to use Garuda Linux for a Hyprland & Wayland based system on my main computer and it is an enjoyable experience athough there has been quite a lot to learn.

As the huge push for 'AI' services over the last year has been mostly hype I have dismissed much of it. To evaluate if there is any value in the current 'AI' tools I've started considering how I gather and organise information, to find opportunities for optimisation.

Downsizing my life continues with my older bicycles and accessories being recycled or upcycled. I am also investigating where are effective places to sell my bicycle.

I bought a Cannondale Quick Carbon Hybrid bike back in 2018 for commuting into London (42 minutes was my fastest time into London, this was before the cycle super-highways).

Cycling UK has tips on selling a bicycle. There is also a For Sale Forum. I have posted my Cannondale hybrid bike on this forum to see if there is interest.

Bike Delivery provides a delivery service for 42.99 GBP, with a further 19.99 GBP for a cardboard box to pack the bike in. 100 GBP liability insurance is free, 14.99 GBP for cover up to 500 GBP.

I will still have 3 bicycles left after I sell one.

I have a much greater appreciation for a simpler life over the last few years (since Covid). I will focus on a small number of things I value deeply.

This simplification lightens my mental load and enables focus on the things I really value. It will also be far easier to relocate, should I find a new place to live.

It sounds like the HMRC is swampped with self-assessment returns. According to the Gov.uk website it will be 44th November by the time they process and reply to my self-assessment submission.

The Gov.uk website has a check the status where an estimated date will be shown. along with the current submissions date being processed (16th May). It may be worth checking again in a few weeks to see if HMRC has got faster or slower.

Clojureλ︎

The Clojurians/community-development repository is a useful place to send people to who wish to get involved with the Clojure community.

AI In Realityλ︎

Gathering information, deeply understanding it and presenting that knowledge in a clearly understandable form is the underpinnings of Practicalli.

The following tools are used to discover and learn:

  • Wikipedia: factual and unbiased information (a valued source)
  • Internet search: opinions which may have the answers required or at least point me in the right direction
  • Stack Overflow: usually presented via an internet search
  • Community discussions: clojurians, astronvim, omarchy, conjure, etc all have a Slack or Discord channel to ask questions or generally keep up with changes and new things.

I am starting to use Claude but only as a free account and only via its web UI.

Currently I have no use cases that would warrant a subscription to an 'AI' service or time taken to integrate such a service into my software development tooling.

I plan to carry out experiments with a few 'AI' services for the latter part of this year, to identify where the potential value would be as well as better understanding the challenges of integrating AI into the software development workflow.

Ask AI: Garuda Linux Hyprland window placement

Question: I am using Garuda Linux Hyprland with the G-Hyprland optional install. I would like a new window to appear underneath an existing window.

In Hyprland, you can control window positioning using window rules and workspace management. Here are several approaches to make a new window appear underneath an existing window:
Method 1: Using Window Rules

Add window rules to your Hyprland config (~/.config/hypr/hyprland.conf) to control where specific applications spawn:
bash

# Make specific apps spawn below existing windows
windowrule = float, class:(your-app-name)
windowrule = move 100 150, class:(your-app-name)  # Adjust coordinates as needed

Method 2: Manual Positioning

You can manually move windows after they spawn:

    Super + Shift + Arrow keys - Move windows around
    Super + mouse drag - Drag windows to reposition them

Method 3: Using Workspaces

Create the window on a different workspace then move it:

    Super + [number] to switch to another workspace
    Launch your application
    Super + Shift + [number] to move the window to your desired workspace
    Use Super + Shift + Arrow keys to position it below the existing window

Method 4: Stack Windows

Use Hyprland's stacking feature:

    Super + S to toggle stacked layout
    New windows will stack below existing ones

Method 5: Script Solution

You can create a script that:

    Gets the position/size of the current focused window
    Launches the new application
    Positions it below the existing window

Would you like me to help you implement any of these methods, or do you have a specific application in mind that you want to always spawn below other windows?

Hyprlandλ︎

Just when I thought I was done configuring Hyprland and all its associated tools (a silly assumption), then along comes Omarchy

I saw a video walkthrough of Omarchy distribution and focus on simplicity is very appealing. Omarchy is entirely keyboard driven, providing a simple to use experience.

Omachyλ︎

Omarchy seems on the surface to be a near perfect Operating System distribution.

Omarchy has a strong focus on Terminal UI's (TUI's) and presenting Web Apps (Google Mail, Spotify, etc.) as a headless browser (to treat it like a desktop app).

It is using Arch Linux rather than a Debian Linux base, so I would need to be extra careful with package updates (especially from the Arch User Repository). Omachy does have its own repository too, but those packages should be well managed (for as long as the Omachy project is active).

The user experience seems excellent, with everything driven from the keyboard.

The menu system goes beyond the typical application launcher, providing a unified tool to switch themes and update configuration files, as well as launch apps.

Some things are very useful

  • PRINT to create a region screenshot, the result opening in a graphical image editor with decorations.

There are some things I would change

  • Kitty terminal over Alacritty (I have used Kitty for several years, but I can give Alacritty a try, hopefully it has session tabs that I can easily switch between)
  • Zsh over Bash (unless bash is configured with terminal history and fish-style completion)
  • AstroNvim over LazyVim (the Clojure extension is still broken in LazyVim, but I could add the relevant Clojure packages directly)
  • Libre Office (I dont really need this as I have few office type documents and they are all on my Google account)
  • remove spotify and other apps I dont need (simple enough to do, some things can be removed via the Omarchy menu)

There may be other adjustments, but I assume they can all be easily made through the ~/.config/ files that Omarchy invites the user to modify.

Latest updateλ︎

Hyprland has release a new extension

TODO: how to check which version of hyprland is running.

The guesture config has changed and ... is no longer supported.

Gesture syntax change in latest hyprland

# gestures {
#     # See https://wiki.hyprland.org/Configuring/Variables/ for more
#     workspace_swipe = on
# }

Check Hyprland versionλ︎

hyprctl version command shows the current version of Hyprland running. This is useful information to know when there has been an upgrade and configuration names have changed and there are errors at the top of the screen.

❯ hyprctl version
Hyprland 0.51.0 built from branch  at commit 46174f78b374b6cea669c48880877a8bdcf7802f  (version: bump to 0.51.0).
Date: Wed Sep 10 12:41:05 2025
Tag: v0.51.0, commits: 6418
built against:
 aquamarine 0.9.4
 hyprlang 0.6.3
 hyprutils 0.8.4
 hyprcursor 0.1.13
 hyprgraphics 0.1.5


no flags were set

LazyVimλ︎

Omarchy opens Neovim by default to edit .config configuration files. LazyVim is used as the Neovim configuration.

It seems prudent to give LazyVim a trial run for a week to see if its as usable for my work as AstroNvim. This would be one less change I needed to make to Omarchy.

LazyVim had a lot of commits in the last week or so, partly due to Folke being back from holiday it seems.

Unfortunately the LazyVim Clojure extra is still broken for Neovim 0.11.x, as it includes nvim-treesitter-sexp package. Its not clear what the correct proceedure is to resolved, especially as the issue was raised on nvim-treesitter-sexp repository on 2024-11-10.

As its only one package, then I should be able to disable it easily (if LazyVim is as simple as AstroNvim) and add nvim-parpar (parinfer and paredit).

TOP TIP: Visually select an expression

Shift+v % when on the opening or closing paren of an expression selects the whole expression.

LazyVim positivesλ︎

  • extensive use of Snacks and includes the graphic toggles in the UI toggles menu.
  • low package use (apparently only around 32 packages - does this count snacks as one package?)
  • snacks explorer by default (no neotree)

LazyVim challengesλ︎

  • no git client by default. This seems a huge omission, maybe I need to install lazygit before I see something. Otherwise I will check the LazyVim Extras for Neogit) - Update: install LazyGit TUI and LazyVim provides key mappings, e.g. SPC g g
  • completion uses Enter key and arrow keys to navigate (rather than ++Tab++)
  • no which key mapping to save, e.g. ++SPC+"w"++, so using :w for now (maybe there is a save on quit - no, but it is possible to save the current session, although I would need to test if that also includes unsaved changes). It seems quiting LazyVim does prompt to save unsaved files (as least one of them). Update: C-s is used to save the current buffer to its file,

  • Links in markdown hide (which is nice) but automatically expand when the cursor is on top. I could get used to this, but it also messes up the format on some lines when not expanded. See []

  • marksman not part of the markdown mode (missing anchor completion). This was an addition required for AstroNvim, via Mason tool installer.
  • no popup terminal, although ++SPC+"f"+"t"++ creates a split that shows a terminal window. The format of the prompt theme doesnt look quite right though.
  • LazyVim Clojure Extra contains the broken nvim-treesitter-sexp package. Update: Folke has updated the Clojure Extra to use nvim-paredit. I will still need to include a lua/plugins/clojure.lua file to include nvim-parinfer package.

Conceal level feels awkwardλ︎

LazyVim in markdown hides the full links and code block languages, showing only the link name and content of the code block.

I find this a little fiddly to work with code blocks, as you have to just trust that you are entering code in the right place. The open and close notations do show when the cursor is on that line though.

In theory I like the hyperlinks url being hidden and just showing the title. The problem is that the format of the surrounding text is down as if the url text was still there. Therefore the text looks incorrectly formatted.

Space+u+c toggles the use of conceal level.

Git Signsλ︎

Space g h menu includes commands to stage the current hunk (s) or stage the current buffer (S)

lazygitλ︎

I installed LazyGit in the hope that LazyVim would automatically use it. This was not the case :sad-face:

Actually it does work but Neovim must be run after LazyGit is installed. LazyVim only checks for LazyGit when it starts up (which makes sense).

Run LazyGit from the command line first

When running LazyGit from LazyVim it checks for a configuration file. Either add your own config file or run lazygit on the command line (outside of Neovim) which creates an empty config file.

Running LazyGit or manually adding the config file should be done before trying to run LazyGit in LazyVim, otherwise you get the following error.

2025/09/19 18:00:10 stat /home/practicalli/.config/lazygit/config.yml: no such file or directory

[Process exited 1]
> sudo pacman -S lazygit
[sudo] password for practicalli:                 
resolving dependencies...
looking for conflicting packages...

Package (1)    New Version  Net Change  Download Size

extra/lazygit  0.55.1-1      21.48 MiB       6.16 MiB

Total Download Size:    6.16 MiB
Total Installed Size:  21.48 MiB

:: Proceed with installation? [Y/n] 
:: Retrieving packages...
 lazygit-0.55.1-1-x86_64                                                                6.2 MiB  11.1 MiB/s 00:01 [--------------------------------------------------------------------] 100%
(1/1) checking keys in keyring                                                                                    [--------------------------------------------------------------------] 100%
(1/1) checking package integrity                                                                                  [--------------------------------------------------------------------] 100%
(1/1) loading package files                                                                                       [--------------------------------------------------------------------] 100%
(1/1) checking for file conflicts                                                                                 [--------------------------------------------------------------------] 100%
(1/1) checking available disk space                                                                               [--------------------------------------------------------------------] 100%
:: Running pre-transaction hooks...
(1/2) Rejecting pacman transaction if running in snapshot...
(2/2) Performing snapper pre snapshots for the following configurations...
==> root: 122
:: Processing package changes...
(1/1) installing lazygit                                                                                          [--------------------------------------------------------------------] 100%
:: Running post-transaction hooks...
(1/6) Arming ConditionNeedsUpdate...
(2/6) Foreign/AUR package notification
puddletag 2.5.0-1
(3/6) Orphaned package notification...
mathjax 4.0.0-1
(4/6) Checking for .pacnew and .pacsave files...
(5/6) Performing snapper post snapshots for the following configurations...
==> root: 123
(6/6) Syncing all file systems...

LazyGit Mini Cheatsheetλ︎

space commit the selected changes c to create a commit with staged changes A amend without edit P pushes local commits to remote repository. When changing remote history, Enter to --force-with-lease or Esc to abort push. p to pull

I recall there is a way to select specific lines of a file to stage. Investigate the key mappings to do so.

After a little playing around if found the keys.

In the Files menu, use j / k to navigate to the relevant file name

Enter switches to the Unstaged Changes window, showing a diff of changes in that file. All the changes are highlighted, so space would stage them all.

Instead, v switches to visual select and j / k or arrow keys selects individual lines.

space stages which ever lines are highlighted.

l moved to the Staged Changes panel and v enters visual mode to select lines.

space will unstage all the highlighted lines.

LazyGit: stage individual lines

LazyVim Extras Gitλ︎

:LazyExtras command opens a menu to add (and remove) the LazyVim Extras available.

TODO: it is unclear what this extra offers. Investigate the specific plugins it provides.

Eric Evantsλ︎

Strategic Design can help with Generative AI

AI embedded in products in surprising and yet unknown ways. Me: Meta Content Protocol is one visable presence of AI.

What has changed in strategic design in the last two decades

Bounded context has become a very prevelant concept for software engineers, making it easier to reason and design systems.

Event storming pays a lot of attention to bounded contenxt.

Is there a difference between the discovery and design phase

Bounded context in an existing 'legacy' environment requires a discovery phase ?

Eric: tends to do discovery and design in concert, perhaps focusing on one aspect during any particular hour (or strategic design session). The elaboration of discovery and design is iterative.

How does AI support core domain thinking?

Eric: I appreciate generic sub-domains more, especially as those sub-domains are pealed away and mastered then it makes the system easier to reason about.


Thank you.

🌐 Practical.li Website

Practical.li GitHub Org practicalli-johnny profile

@practicalli@clj.social @practical_li