Changelog

All notable changes to this project will be documented in this file.

[Unreleased]

Added

  • Installation: Automatically preselect AMD, Intel, NVIDIA, and hybrid Intel/NVIDIA graphics-driver groups from detected PCI hardware, and safely remove installed driver packages that belong only to unselected GPU profiles. Preselect the base, GTK, and Hyprland package groups as standard defaults.
  • Installation: Add selectable SRE/DevOps, container-runtime, IaC, GPU-driver, and vendor-specific printer package groups.
  • AWWW: Add configurable local and mounted NFS/CIFS sources, including multiple directories and automatic local fallback. Preserve image ratios with blurred backgrounds and optional date/city metadata.

Changed

  • Docs: Document AWWW source, rendering, and troubleshooting options.
  • Zsh:
    • Centralize and deduplicate PATH setup in .zshenv, with user binaries taking precedence consistently in login, interactive, and nested shells.
    • Move UWSM startup to .zprofile, restrict Fastfetch to top-level terminals, and cap saved command history at 100,000 entries.
  • Hyprlock:
    • Update the animation, DPMS, and sleep-lock settings for Hyprlock 0.9.6 and Hypridle 0.1.8.
    • Show the website behind browser media, including service-specific names and icons for Deezer, YouTube, and other common streaming sites.
    • Escape player metadata and limit artwork downloads, conversions, cache size, and retry frequency.
    • Keep a cached cover when the same URL fails to refresh or Firefox removes its temporary MPRIS image. Artwork refreshes every 3 seconds so the script can save that image before it disappears.
    • Detect USB, USB-C, USB-PD, and wireless chargers in the lock-screen power status.

Fixed

  • Installation: Replace removed Arch package names, remove conflicting power managers and redundant transitive dependencies, and count packages only once when multiple selected groups overlap. Track packages installed by the dotfiles installer and provide read-only planning plus opt-in, confirmed reconciliation of packages that are no longer selected. Stop the backup job from automatically removing every orphan package outside that managed state.
  • AWWW: Render wallpapers at each monitor's scaled pixel dimensions so they fill mixed-DPI and HiDPI displays instead of appearing small and centered.
  • Steam Optimize: Select the active Steam account correctly, avoid mixed AMD and NVIDIA driver overrides on hybrid systems, preserve the inherited Hyprland session, and restore mouse DPI only from valid command output.
  • Zsh: Stop reloading /etc/profile.d in every interactive shell and remove redundant completion, color, path, and editor initialization.

v5.5.3

Fixed

  • AWWW: Start the wallpaper timer after UWSM has imported the Hyprland session environment, so the initial wallpaper is applied at login.
  • CI / Pages: Preserve two-space nested lists when generating HTML instead of flattening child items into the parent list.

v5.5.2

Added

  • Zsh: Add mtail to follow multiple files or quoted glob patterns with filename prefixes. It scans for new matches every second and uses tail -F to handle rotation and recreation. Ctrl+C cleans up its followers and temporary files without closing the calling shell.

Changed

  • Desktop session:
    • Move host-specific GPU settings from the common UWSM environment to env-hyprland. UWSM now sets the session's XDG_* variables.
    • Restrict AWWW, Hypridle, Mako, and Waybar user units to Hyprland sessions, and start nm-applet through XDG autostart outside KDE and GNOME.
    • Cycle through every available audio sink from Waybar, wrapping back to the first sink, and open pavucontrol with a right click.
  • Installation:
    • Separate official repository packages from AUR candidates and remove duplicates from the selection. Report a missing multilib repository and each AUR package that fails to install.
    • Reuse an installed paru or yay, or offer to build yay-bin as a regular user after installing its official build dependencies.
    • Refresh the Arch package lists and installation guide for current package names, required desktop components, sudo, and multilib setup.
    • Update the Dotbot submodule.
  • Docs: Rewrite and shorten the README. Setup instructions are now separate from the shell, desktop, script, and release documentation.

Fixed

  • Hyprlock:
    • Centralize the lock-screen palette variables.
    • Refresh player labels every second, battery status every 10 seconds, and artwork every 5 seconds instead of leaving the display unchanged.
    • Replace obsolete general options with the fadeIn animation setting for Hyprlock 0.9.6.
    • Identify media sources by playerName and use the Nerd Font Firefox glyph.
    • Use a transparent image when artwork is missing or cannot be processed. Cache covers by URL and publish converted PNGs with an atomic rename.
    • Keep the battery display independent of device order, show a percentage for each system battery, and exclude peripheral batteries.
  • Installation:
    • Resolve the Dotbot configuration from the repository path, so install works when invoked outside the dotfiles directory.
    • Read menu input directly from the terminal and check pacman, sudo, and credentials before installing packages. If the user declines the AUR helper, skip AUR packages instead of sending their names to pacman.
  • Desktop:
    • Override PipeWire's existing realtime module settings instead of loading a duplicate module.
    • Stop the logout menu from terminating the whole user session when both UWSM and Hyprland dispatch fail.
  • Yay: Load hooks with yay's embedded Lua runtime. Invalid maintainer state now produces a warning instead of aborting the upgrade.
  • Portability: stop tracking machine-generated systemd activation links and the package-provided _yay completion symlink; ignore them when generated locally.
  • Steam-Optimize:
    • Detect failed helper commands instead of treating non-zero exits as successful.
    • Set and restore the mouse's detected DPI using the correct razer-cli option instead of silently treating the device-selection option as a DPI change.
    • Limit installer changes to Steam's most recently used account, validate all inputs before shutting Steam down, and report partial save failures.
    • Atomically replace localconfig.vdf after writing a durable temporary file, keeping a backup of the previous file and avoiding truncated Steam configuration files after an interrupted save.
    • Preserve the existing Mako notification modes when temporarily enabling do-not-disturb.

v5.5.1

Changed

  • Hyprland:
    • Factor the duplicated Dell monitor block and its workspace 2 rule, plus the shared ASUS monitor output/position/scale (only the refresh rate differs per host), out of hosts/PadsTower.lua and hosts/PadsP5560.lua into a new shared hosts/common.lua.
    • Factor the ad-hoc hostname check in the PadsTower suspend listener (hypridle.conf) into a shared is-host.sh helper, reusable by any future host-conditional listener.
    • Document the Gruvbox Dark palette duplicated across hyprtoolkit.conf, hyprlock.conf, .config/mako/config, waybar/style.css and .tmux.conf with cross-referencing comments, so future theme edits don't silently drift out of sync.
  • Zsh:
    • Normalize inconsistent style: if [ $(command -v x) ] guards now use command -v x &>/dev/null throughout, and mixed function foo {} declarations now use foo() {} consistently across zsh/functions/*.zsh.
    • Collapse three redundant rehash calls in .zshrc into one, run once after all PATH mutations.
    • Document the security tradeoff of gpg --trust-model always in crypt.zsh (kept deliberately; skips the web-of-trust check).
  • Scripts:
    • Add set -uo pipefail to bin/diff-cmd and bin/vscodium_ext.sh.
  • Steam-Optimize:
    • Trim the Forza Horizon 5/6 profile down to its confirmed-working overrides: drop single_queue from VKD3D_CONFIG (a hang workaround for older vkd3d-proton releases that serializes GPU queues and costs performance), and remove the untested SDL_VIDEODRIVER=x11 and WINEDLLOVERRIDES entries, which had no observed effect on the current Proton stack.
    • Factor the duplicated Grand Theft Auto V / Enhanced profile into a shared _GTA_PROFILE.
    • Centralize the UserLocalConfigStore → apps VDF path traversal (duplicated across get_app_entry, get_app_entry_safe, and the installer's launch-options reader) into a single get_apps_dict() helper.
    • Simplify NotificationCollector's duplicated __init__/start reset logic into a shared _reset().
    • Replace the magic icon parameter (1/0/3/None) on log_msg with an explicit notify boolean.
    • Compose the override notification label from a list of active fragments (wayland/battleye/dpi/env) instead of an elif chain that silently dropped fragments when several applied at once.
  • CI:
    • Narrow the flake8/black bin/ exclusion in .pre-commit-config.yaml to just bin/steam-optimize (pending a dedicated formatting pass); bin/razer_dpi.py is now PEP8/black-compliant and linted.
  • Docs:
    • Document bin/hypr-screenshot.sh, comcut, comskip.sh, diff-cmd and vscodium_ext.sh in the README's Custom Scripts section, and mention dist/*_excludes.txt next to backup.sh.
    • Add the missing v3.0 release notes to CHANGELOG.md, reconstructed from git log v2.1..v3.0, and correct/clarify which older entries are retrospective summaries.

Fixed

  • Hyprland:
    • Turn the screens back on when resuming from the 1h-inactivity suspend on PadsTower (hypridle.conf). The suspend listener had no on-resume, so the monitors stayed off after wake.
  • Zsh:
    • Fix the history alias always falling back to the default format (zsh/init/history.zsh, .zshrc): HIST_STAMPS was exported in .zshrc after init.zsh had already sourced init/history.zsh and built the alias from it, and the exported value (a strftime pattern) never matched the alias's keyword-based case. Export HIST_STAMPS/HISTFILE/HISTSIZE/SAVEHIST before sourcing init.zsh, and support arbitrary strftime patterns via fc -t, removing the now-redundant duplicate history block from .zshrc.
    • Merge http_time into curl_time (zsh/functions/http_checks.zsh, curl.zsh). The two were near-identical CURL_FORMAT timing helpers, and http_time mislabeled curl's %{time_*} values (always seconds) as milliseconds. http_time is now an alias to the corrected curl_time.
  • Scripts:
    • Fix make screenshot writing a WebP file named hyprland-showcase.png at the repo root instead of dist/hyprland.webp (Makefile). The default SCREENSHOT path didn't match hypr-screenshot.sh's own default output, which always encodes WebP regardless of the given extension.
    • Fix bin/comcut's lockfile handling: the acquire loop was check-then-touch (racy under concurrent invocations) and never released the lock on error or signal, permanently deadlocking future runs after a crash. Acquire the lock atomically (noclobber) and release it via an EXIT trap.
    • Fix bin/comcut silently continuing after a failed comskip/ffmpeg invocation, which could produce a corrupted or partial output with no error reported. The relevant calls now abort the script on failure.
    • Fix bin/comskip.sh forwarding an unset argument to comcut instead of failing with a usage message.
    • Fix bin/razer_dpi.py always exiting 0, even when no compatible mouse was found or every DPI write failed, hiding failures from callers (e.g. a systemd unit). It now exits 1 when nothing succeeded.
  • Steam-Optimize:
    • Fix the SIGTERM/SIGHUP handler blocking indefinitely if the game process ignored terminate(); it now falls back to kill() after a 10s timeout.
    • Add -a/--app-id to force the AppID used for game-profile lookup and log tagging. Non-Steam game shortcuts report a generic SteamAppId (e.g. 480/Spacewar) instead of the real store AppID, silently skipping the matching GAME_PROFILES entry. The override never touches the real SteamAppId env var inherited by the game process: forcing it to either the real store AppID or the shortcut's own internal AppID both crashed a Forza Horizon 6 non-Steam shortcut during CoreCLR startup. Any value other than Steam's own default breaks it, for a reason still unclear. This also means Steam Input can't find the shortcut's controller config, which keys off the same env var and is stuck on Spacewar's empty one; no fix found for that yet.
    • Add -g/--no-gamescope to skip the Gamescope wrapper entirely, for diagnosing whether a game's issue comes from Gamescope itself. Add a matching per-game no_gamescope profile flag.
    • Split Forza Horizon 6's profile out of the shared _FORZA_PROFILE. Its crash-on-launch and black-screen-with-audio symptoms had several independent causes, each requiring its own override: a forced VKD3D_CONFIG (FH5's no_upload_hvv, the community enable_experimental_features,descriptor_heap workaround, or AMD_ENV_VARS' global dxr default) crashes FH6 during CoreCLR startup on RADV on every Proton build tested except proton-cachyos; COMMON_ENV_VARS' PROTON_ENABLE_WAYLAND native-Wayland renderer and AMD_ENV_VARS' experimental RADV_PERFTEST/ENABLE_LAYER_MESA_ANTI_LAG each independently produce a black screen with audio still running; Gamescope itself produces the same black screen even with no forced resolution/output, and must be skipped entirely (known tradeoff: the game's own exclusive fullscreen then doesn't render under Hyprland either, so use windowed mode in-game instead); and PROTON_FSR4_*_UPGRADE injects an FSR4 upscaling shim that flickers green pixels on this title (a stale/corrupt ~/.cache/mesa_shader_cache entry turned out to be the real cause of that last one, not the env var). FH6's profile now pops the driver overrides, skips Gamescope, keeps Steam Input on (its 8BitDo XInput translation is required, though it doesn't auto-activate for this shortcut and needs a manual overlay toggle on every launch, likely tied to the same SteamAppId issue), sets only PROTON_SET_GAME_DRIVE=1, and requires proton-cachyos as the compat tool.

Removed

  • Zsh:
    • Remove zsh/functions/rambox.zsh: hardcoded dnf/rpm for Fedora/CentOS, dead on this Arch-based setup.

v5.5.0

Added

  • CI / Pages:
    • Add a sticky navigation menu to every generated documentation page (gen_pages.py) linking Home / Changelog / Installation / CI Workflows / GitLab CI, with the current page highlighted and links resolved relatively so the site works under a subpath.
    • Render the documentation pages with their heading emoji/icons intact (gen_pages.py) and homogenize the icon style across all docs (README, changelog, install guide, and both CI READMEs).
    • Add .github/workflows/README.md documenting the workflows, the shared .ci_bin/ scripts, and the multi-forge (GitHub/GitLab/Gitea) setup, and publish it to the docs site (mirroring its source path) via build_pages.sh.
    • Add .gitlab/README.md documenting the GitLab CI pipeline (stages, jobs, the pages build-vs-deploy rules, and the shared .ci_bin/ scripts), and publish it to the docs site (mirroring its source path) via build_pages.sh. build_pages.sh also writes a .nojekyll marker so GitHub Pages serves the dot-directory pages verbatim.
    • Add a Continuous Integration section to the main README.md summarising the multi-forge (GitHub/GitLab/Gitea) setup and linking to both CI READMEs.
    • Document the variables/secrets in both CI READMEs: all tokens (GITHUB_TOKEN, OIDC, CI_JOB_TOKEN) are auto-provided, so no manual secrets are required; note the GitHub Pages / Gitea Actions one-time setup prerequisites.
  • Docs:
    • Add a Hyprland desktop showcase screenshot (dist/hyprland.webp) as a hero illustration at the top of README.md, and refresh the Neovim feature list (treesitter main/Neovim 0.12, LSP LspAttach keymaps, gitsigns hunk/blame keymaps).
  • Hyprland:
    • Suspend the machine after 1h of inactivity on PadsTower only (hypridle.conf). hypridle has no per-host mechanism, so the listener guards on the hostname; the laptop keeps its lock/DPMS-only behaviour.
    • Add screen zoom on SUPER + PgUp/PgDn (Home resets), driven via hyprctl eval + hl.config since the Lua parser disables hyprctl keyword, with an animated zoomFactor. Keyboard binds are used because Hyprland scroll binds leak the scroll event to the focused window (#9319).
  • Neovim:
    • Add neovim and tree-sitter-cli to the Arch package list (dist/arch/packages/20_apps.txt). neovim was missing from the curated lists, and the nvim-treesitter main branch compiles parsers through the tree-sitter CLI (the master branch built them directly with cc).
    • Add LSP keymaps via an LspAttach autocmd (lsp.lua): gd/gD/gi (definition/declaration/implementation), <leader>e (diagnostic float) and <leader>lf (format), complementing Neovim 0.11's built-in grn/gra/grr/K. The LSP was previously configured but had no bindings.
    • Add gitsigns hunk keymaps via on_attach (editor.lua): ]c/[c to navigate hunks, <leader>gs/gr/gp/gd to stage/reset/preview/diff, and <leader>gb to toggle inline blame.

Changed

  • Tmux:
    • Theme the status bar, panes, messages and copy mode with the Gruvbox Dark palette (.tmux.conf), aligned with waybar, gruvbox.nvim and hyprtoolkit, replacing the solarized plugin (seebi/tmux-colors-solarized) and a dead powerline include (hardcoded python3.7 path, powerline not installed). Also enable true color (tmux-256color + RGB terminal override).
  • CI / Pages:
    • Generate the Pages site in both deploy-pages.yml (GitHub) and the pages job (GitLab) by calling the reusable .ci_bin/build_pages.sh script instead of duplicating the gen_pages.py invocations, keeping the page list in a single source of truth. Made build_pages.sh POSIX sh and git-optional so it runs on minimal CI images (GitLab alpine).
    • Copy static assets referenced by the docs (the dist/hyprland.webp README showcase image) into public/, mirroring their source path, so relative src links resolve on both GitHub Pages and GitLab Pages (build_pages.sh).
    • Factor the CHANGELOG release-notes extraction shared by the GitHub and GitLab release jobs into a single POSIX .ci_bin/extract_release_notes.sh script, removing the duplicated sed logic.
    • Make release.yml forge-agnostic: create the release through the REST API (POST /repos/{owner}/{repo}/releases via jq/curl) instead of the gh CLI, so the same workflow runs on both GitHub and the Gitea runner (which also scans .github/workflows).
    • Guard the GitHub-Pages (deploy-pages.yml) and Vim-package (package-vim.yml) workflows with if: github.server_url == 'https://github.com' so they don't run on the Gitea runner.
    • Theme the documentation-site navbar with the Catppuccin palette (Mantle background, Mauve brand/active link) instead of Bootstrap's default bg-dark, and limit heading dividers to h1/h2 to reduce visual clutter.
  • Hyprland:
    • Output the isolated showcase capture (bin/hypr-screenshot.sh) as a web-optimised WebP (lossy, q80 via WEBP_QUALITY, max compression effort) instead of PNG. grim writes a temporary PNG that is re-encoded with the first available encoder (cwebp/magick/convert/ffmpeg).
    • Source the GTK theme name from hyprtoolkit.conf (gtk_theme) instead of hardcoding Materia-dark-compact in config.lua, keeping a single source of truth for theming.
    • Adopt physics spring animations for window open/move (spring curve easy) and align the full animation tree with Hyprland's upstream example, adding dedicated layers/fadeLayers animations for layer-shell surfaces (launcher, notifications, Waybar) and a popin effect on windowsIn.
    • Drop the 10-bit bitdepth override on the ASUS XG32WCS monitor (PadsTower), reverting to the default depth.
  • Neovim:
    • Lazy-load Telescope (cmd = "Telescope") and gitsigns (event = "VeryLazy") instead of loading them at startup (editor.lua).
    • Move the Treesitter foldmethod/foldexpr out of the global options.lua into the per-filetype FileType autocmd in treesitter.lua, so folding is only set where a parser is actually started (alongside highlight/indent).
    • Point the Mason dependencies at mason-org/mason.nvim and mason-org/mason-lspconfig.nvim (the repos moved org), and drop the redundant manual vim.lsp.enable("lua_ls") now that mason-lspconfig's automatic_enable handles it (lsp.lua).
    • Default gitsigns current_line_blame to off (toggle via <leader>gb) instead of always-on inline blame (editor.lua).
    • Translate all configuration comments to English across the nvim config.

Fixed

  • Hyprland:
    • Fix hypridle no longer turning displays off (and waybar workspace scrolling) after the migration to the Lua config: with hyprland.lua, hyprctl dispatch evaluates its arguments as Lua (hl.dispatch(...)), so the legacy dpms off / workspace e+1 syntax failed with a parse error. hypridle.conf now dispatches hl.dsp.dpms("off"/"on") and waybar/conf/workspaces.json uses hl.dsp.focus({ workspace = "e±1" }).
  • Installer:
    • Make Dotbot linking non-destructive for existing ~/.config/* entries by enabling backups and directory creation instead of forcing removal.
  • CI / Releases:
    • Fix release-note extraction for changelog headings that include an emoji and release link, and match tag names literally instead of interpolating them into sed regexes.
    • Split GitLab Pages validation into a real build_pages_review job so non-default branches build docs without using the special pages deployment job.
  • Desktop:
    • Remove forced Hyprland client killing from wlogout reboot/shutdown/logout actions to avoid bypassing application save prompts.
    • Store Hyprlock MPRIS artwork under the user runtime directory instead of fixed /tmp paths.
    • Add the missing Waybar headsetcontrol helper referenced by the audio module.
  • Docs & Shell:
    • Fix the Vim-only bootstrap command to pipe into bash, and remove shebangs from sourced/non-executable shell files so pre-commit executable checks pass.
    • Guard uwsm startup in .zshrc and avoid running tty from .zshenv for non-interactive shells.
  • CI / Pages:
    • Fix fenced code blocks nested inside list items rendering as a plain paragraph (e.g. the git clone … ./install install snippet leaking :::sh). gen_pages.py now extracts every fenced block, dedents it, and renders it with Pygments before Markdown conversion, so in-list code blocks display correctly with highlighting.
    • Add the Pygments syntax-highlighting colour theme (dracula, scoped to .codehilite) to the generated stylesheet. Code blocks were emitting token spans with no matching CSS, so they rendered monochrome.
    • Fix the custom table-of-contents styling never applying: the rules targeted nav[data-toggle='toc'] but the element is <nav id="toc">, so they are now keyed on #toc.
    • Keep the sticky table of contents below the navbar (offset + higher navbar z-index) so it no longer slides over the menu when scrolling.
    • Fix the 404 on the CI Workflows page on GitHub Pages. actions/upload-pages-artifact strips .git/.github from the deployed tarball, so the page generated under public/.github/workflows/README.md/ was never published. It is now published under public/github/workflows/README.md/ (leading dot dropped), with the site nav (gen_pages.py) and README updated to match.
  • Docs:
    • Annotate the code fences in dist/arch/install.md with languages (sh, text, ini) so they get syntax highlighting, and wrap the previously unfenced shell snippet in the Sound section in a fenced block.
  • Neovim:
    • Fix the treesitter highlighter crashing on Markdown (README.md) under Neovim 0.12: Decoration provider "start" … attempt to call method 'range' (a nil value). The pinned nvim-treesitter master branch is frozen at Neovim 0.10/0.11 support; migrate treesitter.lua to the main branch (require('nvim-treesitter').install() + vim.treesitter.start() via a FileType autocmd) which supports Neovim 0.12, restoring Markdown highlighting.

v5.4.0

Added

  • CI / Pages:
    • Add a post-commit hook (via pre-commit) that regenerates the local public/ documentation preview after each commit, backed by a reusable .ci_bin/build_pages.sh script also usable in CI.

Changed

  • Hyprland:
    • Increase animation speeds for windows, borders, fades, and workspaces for snappier UI transitions, and remove unused borderangle animation.
    • Tone down blur and shadow effects: reduce blur passes, disable opacity ignore and xray, and lower shadow range and render power.
    • Cap ASUS XG32WCS monitor at 60 Hz for productivity use on PadsP5560.
    • Remove hardware cursor override from PadsP5560 host config (use global default).
    • Simplify window rules: remove legacy KeePassXC, Bitwarden, and Dolphin rules, keep only Proton Pass for password manager.
    • Trim blur layer rules to logout_dialog only, removing unused swaync entries.
    • Launch hyprlauncher in daemon mode (-d) at autostart for instant toggle via keybind.
    • Simplify Lua configuration: merge layout.lua into appearance.lua, inline utils.lua helpers, delete empty workspaces.lua, and remove verbose comment banners across all files (~75% noise reduction).
    • Simplify the logout command to pkill wlogout || wlogout by removing the dead Quickshell (qs/$qsConfig) branch, since Quickshell is not installed.
    • Remove the redundant SUPER+SHIFT+F float-toggle binding (kept on SUPER+ALT+Space).
  • Hyprlock:
    • Reduce playerctl widget update frequency from 1s/2s to 3s/5s to lower lock screen resource usage.
  • PipeWire:
    • Enable WebRTC voice activity detection (VAD) and lazy activation (node.passive) on echo-cancel module to reduce CPU usage when mic is idle.
    • Compact voice effects configuration, removing redundant comments and whitespace.
  • Waybar:
    • Split config into per-host files (config.PadsTower, config.PadsP5560). Desktop omits battery, backlight, and Intel temperature modules.
    • Remove unused weather module (custom/weather) configuration.
    • Remove dead #custom-spotify/#custom-weather CSS selectors.
  • Alacritty:
    • Vendor the single in-use base16-material-darker-256 theme under themes/ and drop the 2 MB base16-alacritty submodule.
  • GTK:
    • Fix gtk-application-prefer-dark-theme to true, align icon theme to Papirus-Dark and cursor to Adwaita to match Hyprland settings.
    • Remove stale Breeze Light colors.css that conflicted with the dark theme.
  • Systemd:
    • Remove redundant awww.service enablement in default.target.wants (already in graphical-session.target.wants).
    • Change wallpaper rotation interval from 15 minutes to 30 minutes.
  • Installer:
    • Add automatic hostname-based Waybar config symlink creation in install.conf.yaml.
    • Restore the terminal cursor on exit in the AUR-helper bootstrap (trap '… show_cursor' EXIT) and drop the obsolete xrdb/.Xresources reload step from apply_live_changes.
  • XDG:
    • Move xdg-dirs/ files to standard .config/ root location for xdg-user-dirs-update compatibility.
  • Zsh:
    • Cache the compinit dump and only rebuild it (with the security audit) once a day, reusing it with -C otherwise to speed up shell startup; remove a duplicate single-ignored completion zstyle.
  • Scripts:
    • Modernize the empty-argument test in diff-cmd ([ -z "$3" ]) and remove a dead meld comment line.
  • CI / Pages:
    • Simplify the CSS-path logic in gen_pages.py by removing redundant public/-prefixed branches that duplicated the generic depth-based formula.
    • Make the generated documentation pages responsive: wide tables now scroll horizontally on small screens instead of overflowing the layout, with adapted heading sizes and container padding on mobile; widen the main content block to the standard Bootstrap 1140px container; remove a stray non-project comment block from style.css.
    • Minify the generated HTML and the copied style.css in gen_pages.py: collapse inter-tag whitespace (preserving <pre>/<code>/<script> content) and strip CSS comments/whitespace (~36% smaller CSS); drop the now-unused shutil import.

Removed

  • neofetch:
    • Remove deprecated neofetch configuration (743 lines), replaced by fastfetch.
  • ashell, noctalia:
    • Remove empty unused configuration directories.
  • Alacritty:
    • Remove stale base16 auto-backup file.
  • Submodules:
    • Prune five stale .gitmodules entries left over from the i3/X11 era: zsh-notify, i3blocks-contrib, i3spotifystatus, gruvbox-rofi, and base16-alacritty.
  • X11:
    • Remove vestigial .Xresources and .screenrc (byobu/screen) leftovers on the all-Wayland setup.
  • Hyprland:
    • Remove the orphan hyprpaper.conf (wallpapers are handled by awww).
  • Waybar:
    • Remove three unused module scripts (modules/headsetcontrol, modules/spotify, modules/mediaplayer.py). headsetcontrol is superseded by the inline exec in audio.json.
    • Remove the unused network module config from conf/network.json and its CSS: it duplicated the nm-applet tray indicator.

v5.3.2

Added

  • Hyprland:
    • Add hyprlauncher support as the primary desktop application launcher and clipboard history picker.
    • Add modular helper scripts in .config/hypr/include/ to encapsulate configuration loading (toolkit.lua), host configuration loading (host.lua), and core layout/utility helpers (utils.lua).
  • Theming:
    • Add hyprtoolkit.conf to configure global hyprtoolkit aesthetics matching the Gruvbox colorscheme (using 0xAARRGGBB hex color format).
  • Neovim:
    • Add StyLua configuration file stylua.toml to support local code validation.
  • Alacritty:
    • Add Shift+Return keyboard binding to send escape sequence for improved terminal compatibility.
  • yay:
    • Add Lua-based configuration system with automated AUR safety hooks, including validation checks for suspicious PKGBUILD patterns, orphan packages, and maintainer changes.
    • Add update cooldown hook to automatically defer upgrading packages updated less than 48 hours ago.

Changed

  • Hyprland:
    • Refactor Lua configurations to dynamically parse and source appearance, typography, and color settings from hyprtoolkit.conf with automatic hex format translation and fallbacks.
    • Modularize and factorize main entrypoint and component sub-configurations (.config/hypr/conf/input.lua, .config/hypr/conf/layout.lua, .config/hypr/conf/appearance.lua) to eliminate duplicate config parameters and structural redundancy.
    • Optimize workspace bindings in .config/hypr/conf/keybindings.lua by lifting hardware keycode allocations out of loops and extending support to a 10th workspace mapped to key 0 and numpad 0.
    • Guard device-specific input overrides to only apply when a device name is configured, and remove hardcoded placeholder device entry.
    • Fix fullscreen keybinding syntax and remove stale Rofi references from window rules and blur layers.
    • Fix hypridle DPMS commands to use proper hyprctl dispatch dpms on/off syntax instead of invalid Lua dispatch calls.
    • Fix typos in hyprlock comment and playerctlock.sh messages and usage output.
  • Neovim:
    • Migrate from deprecated vim.loop to vim.uv API, consolidate backup/writebackup options removing redundant swap directory setup, and change nvim-cmp confirm behavior to not auto-select the first completion item.
  • Waybar:
    • Remove legacy Sway workspace, mode, and taskbar module definitions from configuration; retain Hyprland-only modules.
    • Fix spotify module string comparison, variable quoting, icon, and JSON output (now uses jq); fix headsetcontrol shebang to bash.
  • Zsh:
    • Harden .zshrc with proper variable quoting, remove duplicate compinit call, remove bash-specific HISTCONTROL/HISTIGNORE variables, and fix fastfetch detection using command -v.
    • Refactor and simplify system update function in arch.zsh to improve error handling and command checks.
  • Electron:
    • Remove redundant --ozone-platform-hint=auto flag from Chrome/Electron configuration, keeping explicit --ozone-platform=wayland.
  • Backup Utility:
    • Switch shebang to bash, use $XDG_RUNTIME_DIR for SSH control socket, and change yay -Scc to yay -Sc to preserve non-package caches.
  • Scripts:
    • Fix shell quoting and test syntax in comcut, replace eval with safer bash -c in diff-cmd, and simplify DPI logic in razer_dpi.py.
  • Steam-Optimize:
    • Add signal handling (SIGTERM/SIGHUP) and atexit cleanup for robust session teardown, propagate game exit code, track mouse DPI changes, add gamescope/game-performance availability checks, factor shared Forza Horizon profile, defer DND activation until after startup, create .bak backups before writing VDF configs, and specify utf-8 encoding on all file operations.
  • Installer:
    • Refactor install script for improved reliability, safer path expansion, headless TTY checking, and optimized package installation caching.

Removed

  • Wofi:
    • Clean up and remove all wofi configuration files (.config/wofi) and package installer entries.
  • Kanshi:
    • Remove legacy Sway/Kanshi monitor profile configuration (.config/kanshi/config).
  • Systemd:
    • Remove legacy X11 xautolock.service unit file.
  • Wlogout:
    • Remove unused icon assets (hibernate-hover1.png, moon_865813.png, sleep2.png).

v5.3.1

Added

  • Backup Utility:
    • Introduce remote disk space delta calculation and log file size changes upon backup completion.
  • Installer:
    • Add post-installation hook (apply_live_changes) to dynamically rebuild font cache, reload X resources (xrdb), and refresh desktop environments (Mako, Waybar).

Changed

  • System Fonts:
    • Standardize system-wide body and desktop environment UI fonts (GTK, Hyprland, Mako, wlogout, wofi) to DejaVu Sans and terminal/code blocks to JetBrainsMono Nerd Font.
  • Hyprland:
    • Unify and centralize font and cursor configurations using dynamic Lua variables in compositor configurations.
  • Backup Utility:
    • Refactor backup.sh to query loaded keys via ssh-agent rather than relying on hardcoded private key paths, exclude Lutris runner files, prune deprecated .localised exclude pattern, and translate logs from French to English.

Removed

  • Legacy OS Support:
    • Drop Ubuntu-specific bootstrap installer script (dist/ubuntu/install.sh) and related documentation.
  • Zsh & Utilities:
    • Remove deprecated command-not-found shell plugin and its assets from .zshrc and plugin directory.

v5.3.0

Added

  • Security & Passwords:
    • Migrate from 1Password to Proton Pass as the default password manager.
    • Add proton-pass-ssh-agent.service systemd user service to manage the Proton Pass SSH agent.
    • Add pass-cli Zsh autocomplete plugin.
    • Add a centralized SSH agent initialization script (zsh/init/ssh-agent.zsh) to automatically detect and export the active SSH socket.
  • Zsh & Utilities:
    • Add a custom ssh-copy-agent-keys function in zsh/functions/ssh.zsh to interactively select public keys loaded in the local ssh-agent and copy them to a remote server while avoiding duplicates.
  • Neovim & Editors:
    • Implement a fully modular Lua-based Neovim configuration (lazy.nvim, Telescope, Treesitter, Lualine) and add native Wayland support configurations for Antigravity IDE.
  • Hyprland & Display:
    • Refactor monitor/workspace setups to host-specific modular configurations (hosts/PadsTower.lua, hosts/PadsP5560.lua), update keybindings, and enable tearing support for low-latency gaming.
  • UWSM & Session Startup:
    • Integrate UWSM for session management, centralize environment variables, and document systemd startup/GNOME Keyring PAM setup in the Arch Linux install guide.
  • Audio & Services:
    • Implement a shelly-notifications user service, migrate Bluetooth configuration to Wireplumber (50-bluez-config.conf), and improve awww service reliability with dynamic Wayland socket checks.
  • CI/CD & Docs:
    • Implement GitHub Actions pipelines for pages deployment/Vim packaging, and add an automated page generator (gen_pages.py) with table of contents support.

Changed

  • Hyprland & Keybindings:
    • Update applications launcher, keybindings, and window rules to run Proton Pass instead of 1Password.
  • OS Packages:
    • Update Arch Linux package lists to install Proton Pass CLI instead of 1Password.
  • Gaming & Scripting:
    • Rewrite steam-optimize from Bash to Python 3 (adding JSON parsing, monitor detection, and Forza Horizon 6 overrides), and refactor awww.sh wallpaper script with robust error handling and array safety.
  • Modernization & Cleanup:
    • Clean up .gitconfig structure, migrate global VS Code Lua LSP settings to a project-specific .luarc.json, and remove xml2 dependency from http_crawler.zsh.
  • Aesthetics & UI:
    • Update desktop component styling (Waybar, Wofi, Mako, wlogout) to the official Catppuccin Mocha palette.

Removed

  • Legacy Components:
    • Remove legacy 1password Zsh plugin, including the helper function opswd.
    • Remove legacy ~/.xinitrc configuration and its installer symlink.
    • Remove GDM display manager, old kitty theme configuration files, legacy helper scripts (SystemControl.sh, power-profiles, xrandr.sh), and the precompiled greenclip-v4.2 binary.
  • Redundant Configs:
    • Streamline environments by removing obsolete GNOME Keyring/SSH socket environment variables.

Fixed

  • Compositor & Display:
    • Resolve Gamescope mouse containment issues on multi-monitor setups using software rendering (no_hardware_cursors = true).
  • Drivers & Stability:
    • Fix AMD RADV driver stability, refresh rate detection in steam-optimize, and correct QT QPA platform separator format compatibility.
  • Sandbox:
    • Correct Electron feature flags and sandbox configurations.

v5.2.1

Changed

  • Status Bar & Packages:
    • Clean up Waybar configuration by removing unused modules, and consolidate essential package lists (Alacritty, GNOME utilities) into 11_hyprland.txt and 20_apps.txt.
  • Documentation:
    • Update installation guide package paths and README.md to reflect archiving of legacy setups.

Removed

  • Legacy Configs:
    • Archive legacy X11, Sway, and Dunst configurations to .config-archive/, and prune obsolete package lists, old package diffs, screenshots, and Nitrogen setup instructions.

Fixed

  • Electron:
    • Fix Chromium/Chrome electron flags by properly combining multiple --enable-features onto a single line.

v5.2.0

Added

  • Hyprland Upgrades:
    • Upgrade Hyprland configuration to 0.55, introduce a centralized configuration module, define standard coding guidelines, and set default workspaces.
  • Gaming & Keybindings:
    • Add custom Doom (2016) optimizations and Gamescope fixes in steam-optimize, and enhance shortcut bindings for screenshots, lock, and session controls.

Changed

  • Desktop Daemons:
    • Migrate wallpaper daemon from swww to awww, switch notification system from Dunst to Mako, and refine Hyprland animations/autostart.
  • Refactoring:
    • Rewrite system backup utility to POSIX shell with improved rsync arguments, and optimize steam-optimize with helper functions.

Fixed

  • Stability:
    • Resolve fullscreen blackscreen issues and restore Steam overlay functionality.

v5.1.1

Added

  • Arch & System:
    • Add native Gamemode support, integrate firmware updates into the arch upgrade function, and add vimdiff instructions for .pacnew files.
  • Hyprland:
    • Add initial host-specific configuration override support.

Changed

  • CI & Aliases:
    • Optimize pre-commit hooks to respect .editorconfig settings, enhance pre-commit leak detection, and refine shell alias error checking/validation.
  • Docs & Packages:
    • Update Arch installation guide with modern practices (archinstall) and refresh the applications package list.

v5.1.0

Added

  • Features:
    • Implement automated changelog generation, add wlogout configuration, expand package manager utilities, and support newer Hyprland features.

Changed

  • Aesthetics & UI:
    • Refine Waybar status layouts, keybindings, fonts, system themes, and add missing system fonts.
  • Backup & Editor:
    • Update VS Code extension lists and configure backup scripts to ignore WebStorage directories.

Fixed

  • Status & Wallpaper:
    • Fix temperature display, network formatting, wallpaper rotation rules, and DST-related bugs in status bars.
  • System:
    • Fix Electron flags and resolve package installation inconsistencies.

v5.0.0

Entries from here down to v1.0 are retrospective summaries reconstructed after the fact, not detailed at release time: expect them to be broader and less specific than v5.1.0 onward.

Changed

  • Compositor Sync:
    • Major overhaul and synchronization of Hyprland, Sway, and Waybar configurations.

v4.4.1

Changed

  • Themes & Packages:
    • Update visual themes, system color schemes, and package management helpers.

Fixed

  • Status Bar:
    • Correct Waybar temperature readings and network status formatting bugs.

v4.4.0

Added

  • Compositor & UI:
    • Introduce new Hyprland configuration options, add new status bar modules, and enhance package installation scripts.

Changed

  • Keybinds & Fonts:
    • Update config files, modernize keyboard shortcuts, and refine typography.

v4.3.0

Added

  • Desktop Environments:
    • Support new Hyprland features, enhance dual i3/Sway configurations, and improve package management wrappers.

Changed

  • Structure:
    • Refactor layout organization, update module setups, and simplify the installation flow.

v4.2.1

Fixed

  • Stability:
    • Resolve core stability issues, fix status bar layout bugs, and correct package installation mismatches.

v4.2

Added

  • Structure:
    • Add new configuration templates, optimize package management systems, and expand documentation.

Changed

  • Architectural Overhaul:
    • Restructure file layouts, update system dependencies, and rewrite installer scripts.

v4.1

Added

  • Visuals:
    • Add new themes, layout configurations, and improve package installation helpers.

Changed

  • Polish:
    • Refine keybindings, status bar modules, and enhance overall stability.

v4.0

Added

  • Multi-Compositor:
    • Complete overhaul of the configuration system, adding initial Hyprland support alongside modernized Sway and i3 setups.

Changed

  • Architecture:
    • Redesign file structures and update configurations to support latest upstream software versions.

v3.0

Added

  • Multi-Desktop Setup:
    • Introduce Sway alongside i3, and add clipboard (Greenclip), automounting (udiskie), and notification (Mako/twmn) daemons.
  • macOS Support:
    • Add a Homebrew-based bootstrap with dedicated package lists and iTerm2/Atom configuration.
  • Terminal & Editors:
    • Add Kitty and Alacritty terminal configurations, a Vim plugin bundle (Vundle), and expanded Zsh completions/notifications.
  • Tmux:
    • Migrate to TPM, add a solarized theme, and mouse scroll/copy-paste support.

Changed

  • Desktop Environment:
    • Iterate through compositor (compton → picom) and terminal (Kitty → Alacritty) choices, switch to a base16/gruvbox color scheme, and rework the i3/Sway status bars (i3blocks, py3status, waybar backlight).
  • Configuration:
    • Merge in the previously separate Manjaro-specific configuration.

Removed

  • Terminal:
    • Prune the superseded Kitty configuration and unused submodules after settling on Alacritty.

v2.1

Added

  • Templates:
    • Add additional package configs, visual themes, and package management helpers.

Changed

  • Consistency:
    • Refine status bar layouts, improve installer script reliability, and standardize settings.

v2.0

Added

  • Visuals:
    • Add window transparency support and initial setup templates.

Changed

  • Cleanup:
    • Reorganize system modules, update core keybinds, and clean up initial files.

v1.0

Added

  • Initial Release:
    • Core Zsh configurations, visual themes, and baseline system utilities.