Skip to content

Getting healthier Feeling healthier

I've lost 1 and a half bags of sugar in the last 4 days and had an excellent ride through Northern France, so feeling very motivated.

My Hyprland setup is working well, so I should be able to stop yak shaving all the configuration files 🤣 I do need to version control the config and document Garuda Linux and my own preferences for Hyprland.

Neovim 0.11.4 released with a several changes to key bindings to investigate. Some changes are moving to newer standard function calls. There are also new mappings for navigating quicklists, locaiton lists and tag-match lists.

  • [ Space adds a space above the current line, without moving the cursor
  • ] Space adds a space below the current line, without moving the cursor

Neovimλ︎

  • A question about Treesitter change from master to main branch. Change committed to remove legacy dependency.
  • Any breaking changes for Neovim 0.11.4 release ? Nope.

New key bindingsλ︎

• |grn| in Normal mode maps to |vim.lsp.buf.rename()| • |grr| in Normal mode maps to |vim.lsp.buf.references()| • |gri| in Normal mode maps to |vim.lsp.buf.implementation()| • |gO| in Normal mode maps to |vim.lsp.buf.document_symbol()| • |gra| in Normal and Visual mode maps to |vim.lsp.buf.code_action()| • |grt| in Normal mode maps to |vim.lsp.buf.type_definition()| • CTRL-S in Insert and Select mode maps to |vim.lsp.buf.signature_help()| • Mouse |popup-menu| includes an "Open in web browser" item when you right-click on a URL. • Mouse |popup-menu| includes a "Go to definition" item when LSP is active in the buffer. • Mouse |popup-menu| includes "Show Diagnostics", "Show All Diagnostics" and "Configure Diagnostics" items when there are diagnostics in the buffer. • |]d-default| and |[d-default| accept a count. • |[D-default| and |]D-default| jump to the first and last diagnostic in the current buffer, respectively. • Mappings inspired by Tim Pope's vim-unimpaired: • |[q|, |]q|, |[Q|, |]Q|, |[CTRL-Q|, |]CTRL-Q| navigate through the |quickfix| list • |[l|, |]l|, |[L|, |]L|, |[CTRL-L|, |]CTRL-L| navigate through the |location-list| • |[t|, |]t|, |[T|, |]T|, |[CTRL-T|, |]CTRL-T| navigate through the |tag-matchlist| • |[a|, |]a|, |[A|, |]A| navigate through the |argument-list| • |[b|, |]b|, |[B|, |]B| navigate through the |buffer-list| • |[|, |]| add an empty line above and below the cursor • |[[| and |]]| in Normal mode jump between shell prompts for shells which emit OSC 133 sequences ("shell integration" or "semantic prompts").

Hyprlandλ︎

Change the SDDM login profile picture by coping an image to /usr/share/sddm/faces/, using the file name form username.face.icon.

File Managerλ︎

Garuda Linux Hyprland edition uses Thunar as the file manager. It has some quirks but has enough features for my needs.

Thunar stalls quite badly when copying large files or large amounts of files, especially to or from a Network Attached Storage (NAS) device. Thunar makes the operating system grind to a halt and constantly prompts errors.

NOTE: stalling seems to be a problem for Dolphin file manager too, so maybe an issue with something they are both using ?

Dolphin is the file manager for the KDE Plasma desktop environment, and it works well on Garuda Linux with Hyprland by leveraging its KDE Plasma integration, allowing users to navigate, manage, and interact with files and folders across their system, USB drives, and network shares.

Dolphin supports advanced features like tabbed browsing, previews, split view, network protocols (FTP, SMB), and plugins for enhanced functionality, making it a powerful choice for file management within Hyprland.

To use Dolphin, install the dolphin package and then ensure it's set as the default file manager in Hyprland's configuration, or launch it manually from the terminal or applications menu.

Install Dolphin file manager

sudo pacman -S dolphin

Running Dolphin on Garuda Hyprland works, but the theme is not correct and most of the text of the application is unreadable.

A redit discussion had several solutions and the suggestion in the final comment worked.

KDE theme Configure

[UiSettings]
ColorScheme=*

Set KDE QPA Platform theme to qt6ct

~/.config/hypr/settings/manual_settings.conf
# Practicalli: add for dolphin file manager
env = QT_QPA_PLATFORMTHEME,qt6ct

Another challenge with Dolphin is that it doesn't have the default application (or know about any applications) for opening a file.

KDE-applications rely on the KService desktop-file system configuration cache, kbuildsycoca6, for selecting desktop entries.

The Dolphin page on the Arch Linux Wiki suggests installing the archlinux-xdg-menu package

Then run a command in a terminal to update the application menu:

$ XDG_MENU_PREFIX=arch- kbuildsycoca6 --noincremental

The --noincremental argument is optional.

XDG_MENU_PREFIX is needed because archlinux-xdg-menu creates an XDG Desktop Menu with an arch- prefix (see xdg-menu).

The XDG Desktop Menu files can be found in /etc/xdg/menus/*-applications.menu.

NOTE: kbuildsycoca6 is part of the kservice package, which is a dependency of dolphin, so normally shouldnt need to be installed manually.

Disable Application Not Responding dialog

Prevent the "Application Not Responding" dialog from showing, as its way too sensitive, especially copying files over the network.

~/.config/hypr/settings/manual_settings.conf
misc {
    enable_anr_dialog = false
}

Practicalli has updated the G-Hyprland config to include a few options around the Application Not Responding dialog

Now that the configuration is more stable ( :crossed_fingers: ) I will switch of the automatic reloading of the config on changes.

misc {
    disable_hyprland_logo = true

    # Practicalli
    # Application Not Responding dialog

    # Prevent file managers spamming with a dialog
    enable_anr_dialog = false

    # Increase missed 'alive' pings to limit how often the dialog shows
    # anr_missed_pings = 10

    # Disable automatic reload of the config when change detected
    # Use `hyprctrl reload` to update changes
    # Can save on power usage
    disable_autoreload = true
}

Manually reload Hyprland configuration

hyprctrl reload

Wallpaperλ︎

The wpaperd GitHub readme has a detailed section on wallpaper configuration

The duration time format is quite flexible. I set the wallpaper to change once a day, every 24 hours.

A wallpaper can be set for a specific monitor or use any as a fall-back wallpaper.

hyprctrl monitors command shows the names used to refer to each monitor detected.

NOTE: To use a fixed wallpaper, specify the filename of the image in the path rather than a directory.

Configure Wpaperd for multiple monitors

.config/wpaperd/config.toml
[default]
transition-time = 600
duration = '24 hours'

[any]
path = "~/Pictures/wallpaper/hyprland/"

# Laptop monitor
[eDP-1]
path = "~/Pictures/wallpaper/favorites/"

# External monitor display link
[DP-2]
path = "~/Pictures/wallpaper/practicalli/"

Wpaperd image format support

wpaperd support image formats: AVIF, BMP, DDS, EXR, FF, GIF, HDR, ICO, JPEG, PNG, PNM, QOI, TGA, TIFF, and WebP

image-rs/image readme

Hyprland workspace rulesλ︎

Define workspace rules that

  • set name for each workspace
  • assign workspace to specific monitor
  • launch an app on the default workspaces
  • set default workspace for each monitor
# Laptop monitor
workspace = 1, name:Kitty, monitor:DP-2, on-created-empty:kitty, default:true
workspace = 2, name:Neovim, monitor:DP-2
workspace = 3, name:Firefox, monitor:DP-2
workspace = 4, name:Data, monitor:DP-2
workspace = 5, name:Hacking, monitor:DP-2

# External Dell Monitor
workspace = 6, name:browser, monitor:eDP-1, on-created-empty:firefox, default:true
workspace = 7, name:Audio, monitor:eDP-1
workspace = 8, name:Graphics, monitor:eDP-1
workspace = 9, name:Screencast, monitor:eDP-1
workspace = 0, name:Config, monitor:eDP-1

Material for MkDocsλ︎

Install Material for MkDocs on Arch Linux to support the local testing of Practicalli books.

Create a python virtual environment, into which packages for Material for MkDocs will be installed

Create Python Virtual Environment for Practicalli books

python -m venv ~/.local/venv
Material for MkDocs install logoutput
❯ ~/.local/venv/bin/pip3 install mkdocs-material mkdocs-callouts mkdocs-glightbox mkdocs-git-revision-date-localized-plugin mkdocs-redirects pillow cairosvg
Collecting mkdocs-material
  Downloading mkdocs_material-9.6.19-py3-none-any.whl.metadata (19 kB)
Collecting mkdocs-callouts
  Downloading mkdocs_callouts-1.16.0-py3-none-any.whl.metadata (4.7 kB)
Collecting mkdocs-glightbox
  Downloading mkdocs_glightbox-0.5.1-py3-none-any.whl.metadata (7.2 kB)
Collecting mkdocs-git-revision-date-localized-plugin
  Downloading mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl.metadata (5.8 kB)
Collecting mkdocs-redirects
  Downloading mkdocs_redirects-1.2.2-py3-none-any.whl.metadata (5.2 kB)
Collecting pillow
  Downloading pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (9.0 kB)
Collecting cairosvg
  Downloading cairosvg-2.8.2-py3-none-any.whl.metadata (2.7 kB)
Collecting babel~=2.10 (from mkdocs-material)
  Downloading babel-2.17.0-py3-none-any.whl.metadata (2.0 kB)
Collecting backrefs~=5.7.post1 (from mkdocs-material)
  Downloading backrefs-5.9-py313-none-any.whl.metadata (3.2 kB)
Collecting click<8.2.2 (from mkdocs-material)
  Using cached click-8.2.1-py3-none-any.whl.metadata (2.5 kB)
Collecting colorama~=0.4 (from mkdocs-material)
  Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)
Collecting jinja2~=3.1 (from mkdocs-material)
  Using cached jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)
Collecting markdown~=3.2 (from mkdocs-material)
  Downloading markdown-3.9-py3-none-any.whl.metadata (5.1 kB)
Collecting mkdocs-material-extensions~=1.3 (from mkdocs-material)
  Downloading mkdocs_material_extensions-1.3.1-py3-none-any.whl.metadata (6.9 kB)
Collecting mkdocs~=1.6 (from mkdocs-material)
  Downloading mkdocs-1.6.1-py3-none-any.whl.metadata (6.0 kB)
Collecting paginate~=0.5 (from mkdocs-material)
  Downloading paginate-0.5.7-py2.py3-none-any.whl.metadata (11 kB)
Collecting pygments~=2.16 (from mkdocs-material)
  Downloading pygments-2.19.2-py3-none-any.whl.metadata (2.5 kB)
Collecting pymdown-extensions~=10.2 (from mkdocs-material)
  Downloading pymdown_extensions-10.16.1-py3-none-any.whl.metadata (3.1 kB)
Collecting requests~=2.26 (from mkdocs-material)
  Using cached requests-2.32.5-py3-none-any.whl.metadata (4.9 kB)
Collecting MarkupSafe>=2.0 (from jinja2~=3.1->mkdocs-material)
  Using cached MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)
Collecting ghp-import>=1.0 (from mkdocs~=1.6->mkdocs-material)
  Downloading ghp_import-2.1.0-py3-none-any.whl.metadata (7.2 kB)
Collecting mergedeep>=1.3.4 (from mkdocs~=1.6->mkdocs-material)
  Downloading mergedeep-1.3.4-py3-none-any.whl.metadata (4.3 kB)
Collecting mkdocs-get-deps>=0.2.0 (from mkdocs~=1.6->mkdocs-material)
  Downloading mkdocs_get_deps-0.2.0-py3-none-any.whl.metadata (4.0 kB)
Collecting packaging>=20.5 (from mkdocs~=1.6->mkdocs-material)
  Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)
Collecting pathspec>=0.11.1 (from mkdocs~=1.6->mkdocs-material)
  Downloading pathspec-0.12.1-py3-none-any.whl.metadata (21 kB)
Collecting pyyaml-env-tag>=0.1 (from mkdocs~=1.6->mkdocs-material)
  Downloading pyyaml_env_tag-1.1-py3-none-any.whl.metadata (5.5 kB)
Collecting pyyaml>=5.1 (from mkdocs~=1.6->mkdocs-material)
  Downloading PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)
Collecting watchdog>=2.0 (from mkdocs~=1.6->mkdocs-material)
  Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl.metadata (44 kB)
Collecting charset_normalizer<4,>=2 (from requests~=2.26->mkdocs-material)
  Using cached charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (36 kB)
Collecting idna<4,>=2.5 (from requests~=2.26->mkdocs-material)
  Using cached idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting urllib3<3,>=1.21.1 (from requests~=2.26->mkdocs-material)
  Using cached urllib3-2.5.0-py3-none-any.whl.metadata (6.5 kB)
Collecting certifi>=2017.4.17 (from requests~=2.26->mkdocs-material)
  Using cached certifi-2025.8.3-py3-none-any.whl.metadata (2.4 kB)
Collecting selectolax==0.3.29 (from mkdocs-glightbox)
  Downloading selectolax-0.3.29-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.3 kB)
Collecting gitpython>=3.1.44 (from mkdocs-git-revision-date-localized-plugin)
  Downloading gitpython-3.1.45-py3-none-any.whl.metadata (13 kB)
Collecting pytz>=2025.1 (from mkdocs-git-revision-date-localized-plugin)
  Downloading pytz-2025.2-py2.py3-none-any.whl.metadata (22 kB)
Collecting cairocffi (from cairosvg)
  Downloading cairocffi-1.7.1-py3-none-any.whl.metadata (3.3 kB)
Collecting cssselect2 (from cairosvg)
  Downloading cssselect2-0.8.0-py3-none-any.whl.metadata (2.9 kB)
Collecting defusedxml (from cairosvg)
  Downloading defusedxml-0.7.1-py2.py3-none-any.whl.metadata (32 kB)
Collecting tinycss2 (from cairosvg)
  Downloading tinycss2-1.4.0-py3-none-any.whl.metadata (3.0 kB)
Collecting python-dateutil>=2.8.1 (from ghp-import>=1.0->mkdocs~=1.6->mkdocs-material)
  Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting gitdb<5,>=4.0.1 (from gitpython>=3.1.44->mkdocs-git-revision-date-localized-plugin)
  Downloading gitdb-4.0.12-py3-none-any.whl.metadata (1.2 kB)
Collecting smmap<6,>=3.0.1 (from gitdb<5,>=4.0.1->gitpython>=3.1.44->mkdocs-git-revision-date-localized-plugin)
  Downloading smmap-5.0.2-py3-none-any.whl.metadata (4.3 kB)
Collecting platformdirs>=2.2.0 (from mkdocs-get-deps>=0.2.0->mkdocs~=1.6->mkdocs-material)
  Downloading platformdirs-4.4.0-py3-none-any.whl.metadata (12 kB)
Collecting six>=1.5 (from python-dateutil>=2.8.1->ghp-import>=1.0->mkdocs~=1.6->mkdocs-material)
  Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting cffi>=1.1.0 (from cairocffi->cairosvg)
  Downloading cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.6 kB)
Collecting pycparser (from cffi>=1.1.0->cairocffi->cairosvg)
  Downloading pycparser-2.23-py3-none-any.whl.metadata (993 bytes)
Collecting webencodings (from cssselect2->cairosvg)
  Downloading webencodings-0.5.1-py2.py3-none-any.whl.metadata (2.1 kB)
Downloading mkdocs_material-9.6.19-py3-none-any.whl (9.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2/9.2 MB 14.3 MB/s  0:00:00
Downloading babel-2.17.0-py3-none-any.whl (10.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2/10.2 MB 15.2 MB/s  0:00:00
Downloading backrefs-5.9-py313-none-any.whl (399 kB)
Using cached click-8.2.1-py3-none-any.whl (102 kB)
Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Using cached jinja2-3.1.6-py3-none-any.whl (134 kB)
Downloading markdown-3.9-py3-none-any.whl (107 kB)
Downloading mkdocs-1.6.1-py3-none-any.whl (3.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.9/3.9 MB 15.1 MB/s  0:00:00
Downloading mkdocs_material_extensions-1.3.1-py3-none-any.whl (8.7 kB)
Downloading paginate-0.5.7-py2.py3-none-any.whl (13 kB)
Downloading pygments-2.19.2-py3-none-any.whl (1.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 14.3 MB/s  0:00:00
Downloading pymdown_extensions-10.16.1-py3-none-any.whl (266 kB)
Using cached requests-2.32.5-py3-none-any.whl (64 kB)
Using cached charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (151 kB)
Using cached idna-3.10-py3-none-any.whl (70 kB)
Using cached urllib3-2.5.0-py3-none-any.whl (129 kB)
Downloading mkdocs_callouts-1.16.0-py3-none-any.whl (8.6 kB)
Downloading mkdocs_glightbox-0.5.1-py3-none-any.whl (26 kB)
Downloading selectolax-0.3.29-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 14.1 MB/s  0:00:00
Downloading mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl (25 kB)
Downloading mkdocs_redirects-1.2.2-py3-none-any.whl (6.1 kB)
Downloading pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.6/6.6 MB 14.0 MB/s  0:00:00
Downloading cairosvg-2.8.2-py3-none-any.whl (45 kB)
Using cached certifi-2025.8.3-py3-none-any.whl (161 kB)
Downloading ghp_import-2.1.0-py3-none-any.whl (11 kB)
Downloading gitpython-3.1.45-py3-none-any.whl (208 kB)
Downloading gitdb-4.0.12-py3-none-any.whl (62 kB)
Downloading smmap-5.0.2-py3-none-any.whl (24 kB)
Using cached MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23 kB)
Downloading mergedeep-1.3.4-py3-none-any.whl (6.4 kB)
Downloading mkdocs_get_deps-0.2.0-py3-none-any.whl (9.5 kB)
Downloading packaging-25.0-py3-none-any.whl (66 kB)
Downloading pathspec-0.12.1-py3-none-any.whl (31 kB)
Downloading platformdirs-4.4.0-py3-none-any.whl (18 kB)
Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Downloading pytz-2025.2-py2.py3-none-any.whl (509 kB)
Downloading PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (759 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 759.5/759.5 kB 13.7 MB/s  0:00:00
Downloading pyyaml_env_tag-1.1-py3-none-any.whl (4.7 kB)
Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl (79 kB)
Downloading cairocffi-1.7.1-py3-none-any.whl (75 kB)
Downloading cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (219 kB)
Downloading cssselect2-0.8.0-py3-none-any.whl (15 kB)
Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
Downloading pycparser-2.23-py3-none-any.whl (118 kB)
Downloading tinycss2-1.4.0-py3-none-any.whl (26 kB)
Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
Installing collected packages: webencodings, selectolax, pytz, paginate, watchdog, urllib3, tinycss2, smmap, six, pyyaml, pygments, pycparser, platformdirs, pillow, pathspec, packaging, mkdocs-material-extensions, mkdocs-glightbox, mergedeep, MarkupSafe, markdown, idna, defusedxml, colorama, click, charset_normalizer, certifi, backrefs, babel, requests, pyyaml-env-tag, python-dateutil, pymdown-extensions, mkdocs-get-deps, jinja2, gitdb, cssselect2, cffi, gitpython, ghp-import, cairocffi, mkdocs, cairosvg, mkdocs-redirects, mkdocs-material, mkdocs-git-revision-date-localized-plugin, mkdocs-callouts
Successfully installed MarkupSafe-3.0.2 babel-2.17.0 backrefs-5.9 cairocffi-1.7.1 cairosvg-2.8.2 certifi-2025.8.3 cffi-2.0.0 charset_normalizer-3.4.3 click-8.2.1 colorama-0.4.6 cssselect2-0.8.0 defusedxml-0.7.1 ghp-import-2.1.0 gitdb-4.0.12 gitpython-3.1.45 idna-3.10 jinja2-3.1.6 markdown-3.9 mergedeep-1.3.4 mkdocs-1.6.1 mkdocs-callouts-1.16.0 mkdocs-get-deps-0.2.0 mkdocs-git-revision-date-localized-plugin-1.4.7 mkdocs-glightbox-0.5.1 mkdocs-material-9.6.19 mkdocs-material-extensions-1.3.1 mkdocs-redirects-1.2.2 packaging-25.0 paginate-0.5.7 pathspec-0.12.1 pillow-11.3.0 platformdirs-4.4.0 pycparser-2.23 pygments-2.19.2 pymdown-extensions-10.16.1 python-dateutil-2.9.0.post0 pytz-2025.2 pyyaml-6.0.2 pyyaml-env-tag-1.1 requests-2.32.5 selectolax-0.3.29 six-1.17.0 smmap-5.0.2 tinycss2-1.4.0 urllib3-2.5.0 watchdog-6.0.0 webencodings-0.5.1

Thank you.

🌐 Practical.li Website

Practical.li GitHub Org practicalli-johnny profile

@practicalli@clj.social @practical_li