Releases: YASoftwareDev/dotfiles
Releases · YASoftwareDev/dotfiles
v1.4.0
Added
Dockerfile.nosudo: parameterized test image covering two no-sudo install
scenarios, selected via build args:nosudo-auto(GRANT_SUDO=false,NOSUDO_INSTALL=""): nosudobinary
present;detect_sudo()auto-detectsCAN_SUDO=false— mirrors bare Ubuntu
containers and shared hosts without sudonosudo-forced(GRANT_SUDO=true,NOSUDO_INSTALL=1): user has passwordless
sudobutNOSUDO=1overrides it — tests that the explicit env-var override
is respected even when sudo would otherwise work
Both variants install theminimalprofile and land all binaries in~/.local/bin.
Changed
modules/tmux.sh: removedtmux-resurrectandtmux-continuumfrom
_TMUX_PLUGINS— they were removed from.tmux.conf.localin v1.1.3 but the
installer was never updated; they were being cloned on every workstation install
without ever being sourcedtest.sh: comprehensive coverage improvements across all profiles:- Critical fix: nosudo
sudo -vcheck was_failif sudo was present —
this always failednosudo-forced(where user intentionally has sudo but
NOSUDO=1overrides it). Replaced with informational_okfor both variants;
the real invariant (binaries in~/.local/bin) is verified bycheck_local_bin check_local_binmade strict: no longer accepts system-path binaries via
command -vfallback — binary must be specifically at~/.local/bin/<cmd>
so aNOSUDO=1regression (binary landing in/usr/local/bin) is caught- Added
delta,jq,python3to core tools section (installed by every
profile; were only partially or never tested) - Added
ezaandshellcheckto the minimal/workstation section - Added eza and delta functional smoke tests to the nosudo section
- Added tmux plugin dir checks (
tmux-fzf,tmux-cpu) for workstation profile - Fixed
_skip(): used$*where$1was intended, doubling the label text - Fixed fd smoke test label ("can find files") to actually search files instead of
running--version - Removed unreachable
else _fail "zoxide not installed"(zoxide is now in
core tools, which already catches a missing binary) - Added
nosudoto the profile list in the usage comment
- Critical fix: nosudo
ci-local.sh(renamed fromtest-local.sh): expanded nosudo coverage from one
scenario to two variants (forced/auto); added--profile nosudo-forcedand
--profile nosudo-autoCLI selectors (--profile nosudostill selects both);
_run_stepgained an optional-u USERflag so nosudo containers run tests as
the owninguserrather than root;run_nosudonow runs the full 5-step pipeline
(install → test → idempotency → update → re-test) matchingrun_combinationfor
regular profiles; total default combinations increased from 12 to 15.github/workflows/install.yml:install-nosudojob expanded with
variant: [auto, forced]matrix axis (3 Ubuntu × 2 variants = 6 combinations,
up from 3); addedif: matrix.variant == 'forced'step that installssudo
and grants passwordless access only for theforcedvariant; added
update.shstep and re-test step so the no-sudo CI pipeline matches the
regularinstalljob; total CI combinations increased from 12 to 15
Fixed
get.sh/install.sh:NOSUDO=1 curl ... | bashwas silently ignored because
in a shell pipelineVAR=val cmd1 | cmd2the variable prefix is scoped only to
cmd1(curl), notcmd2(bash). Both scripts now accept--nosudoas a CLI flag
so the curl-pipe form works:curl ... | bash -s -- --nosudo workstation.
NOSUDO=1 bash get.sh workstation(local-file usage) is unchanged and still works.README.md: updated nosudo one-liner to use--nosudoflag instead of the broken
NOSUDO=1 curl ...form.update.sh: spurious\"in cheat URL pattern ("linux-${cheat_arch}\"") injected
a literal"into the grep pattern, making it impossible to match the.gzasset
URL. Cheat updates had been silently failing. Fixed to"linux-${cheat_arch}.gz".update.sh: xcape update block usedlocalandtrap ... RETURNat script
top-level whereRETURNtraps never fire, leaking the mktemp directory on every
xcape rebuild. Extracted into_do_update_xcape()function so the trap fires
correctly on function return.modules/base.sh: no-sudo install paths fordelta,ripgrep,fd, andzoxide
all constructed GitHub asset download URLs manually. CLAUDE.md forbids this because
asset names change between releases (delta 0.19.0 renamed its tarball). All four now
use_gh_release_infoto look up the actual asset URL from the API, matching the
pattern already used by the sudo paths.modules/zsh.sh_install_ohmyzsh:sh -c "$($installer)"— if curl/wget failed,
sh -c ""returned 0 andset -enever triggered, silently reporting success while
oh-my-zsh was never installed. Now downloads the script into a variable with an
explicit failure guard before passing tosh -c. Installer failure also now warns
and returns instead of triggeringset -e.update.shoh-my-zsh update:zsh ... || git pull— ifgit pull(the fallback)
failed,set -eexited the entire update script, leaving all remaining tools not
updated with no warning message. Rewritten asif/elif/elsethat logs a warning
and continues.lib/utils.sh_download_tar_bin: notrap RETURNand no|| return 1on the
pipe, so a download failure triggeredset -eexit inside the function — callers'
|| log_warnhandlers were never reached. Addedtrap RETURNfor cleanup and
|| return 1so failures propagate correctly to callers.modules/neovim.shinstall_neovim,update.sh_do_update_neovim,
update.sh_do_update_uv,update.shcheat update,
modules/base.sh_install_ezaPPA: all hadcurl | tar/gpg/gunzippipes with
no error handlers. A network failure would exit the whole script mid-run with no
user message. Each now logs a warning and returns/skips cleanly.scripts/install-git.sh/scripts/install-cmake.sh:curl | tarandcurl -o
download failures were silently caught byset -euo pipefail, exiting the script
with no message. Both now use|| die "…"so network failures print an actionable
error before exiting.modules/base.sh_install_eza(no-sudo path) and_install_jq: used
_gh_latest_tag_noapifollowed by manual URL construction — the same fragile
pattern that CLAUDE.md prohibits because asset names change between releases.
Both now use_gh_release_infoto look up the verified asset URL in one API call.
v1.3.0
What's Changed
Added
scripts/install-neovim-src.sh: standalone script to build the latest stable neovim from source; intended for systems where glibc < 2.32 prevents running prebuilt GitHub release binaries (e.g. Ubuntu 20.04); supportsNEOVIM_TAG(pin version) andNEOVIM_PREFIX(install path) env vars
Fixed
modules/neovim.sh: detect glibc version before downloading — saves ~100 MB download on incompatible systems; fall back to v0.9.5 tarball (nvim-linux64.tar.gz, built on Ubuntu 18.04 CI, glibc 2.17+ baseline) when system glibc < 2.32; verify binary executes before declaring success; clean up any broken binary left by a prior failed install when the glibc fallback triggers; ARM64 systems with glibc < 2.32 fall back to aptnvim/init.lua: gatenvim-treesitter,nvim-lspconfig,nvim-treesitter-context,mini.ai, andmini.bracketedbehindcond = vim.fn.has('nvim-0.10') == 1— these plugins use nvim 0.10+ APIs (vim.fs.joinpath,LspRequestevent) or declare nvim < 0.10 soft-deprecated; nvim 0.9.5 now starts cleanly with regex highlighting and no LSPnvim/init.lua: use the correct post-2024 nvim-treesitter install API (require('nvim-treesitter').install({...})) — the oldrequire('nvim-treesitter.install').ensure_initializedno longer exists after the nvim-treesitter refactor
Full Changelog: v1.2.5...v1.3.0
v1.2.5 — tmux bell notification for Claude Code sessions
What's Changed
Added
tmux/.tmux.conf.local: enablebell-action anyso terminal bells from background tmux windows propagate to the status bar, triggering the existing 🔔 tab indicator andblink,boldstyling on the window tab~/.claude/settings.json: append& printf '\a' > /dev/ttyto thePermissionRequest,PreToolUse→AskUserQuestion, andStophook commands so Claude Code sessions emit a terminal bell (alongside the existing audio alert) when they need user attention
Full Changelog: v1.2.4...v1.2.5
v1.2.4
Fixed
get.sh: existing-clone update block now fails loudly instead of silently continuing with a stale clone whengit pullcannot proceed; detects and handles four distinct failure modes with actionable recovery instructions:- Stale
.git/index.lock(interrupted git operation) — die withrmcommand - Unfinished merge or rebase state — die with
git statusguidance - Local modifications (dirty working tree) — die with full manual stash sequence including
exec bashescape hatch for broken~/.zshrcvia symlink; recovery points tobash install.sh(not get.sh, which is gone after curl-pipe) - Local commits ahead of upstream — die with
git fetch && reset --hard '@{u}' - Network / diverged-history pull failure — warn and continue on existing clone (resilient)
- Stale
- All die/warn paths consistently point to
bash <dest>/install.shrather than "re-run get.sh"
Added
tmux/.tmux.conf.local: server-local override include at end of file — machine-specific tmux settings now go in~/.tmux.conf.server(untracked) sogit pullnever conflicts with server customisations
Removed
VERSION.md: stale duplicate ofVERSION(stuck at 1.1.3);VERSIONis the canonical semver file
v1.2.3
Fixed
nvim/init.lua: blink.cmp path completions truncated long names — defaultlabel.width.max=60andlabel_description.width.max=30were the culprits; raised to 80/50 respectively and bumpedmin_widthfrom 15 to 30
v1.2.2
Bug fix
Fixed
- delta install broken on Ubuntu 20.04/22.04 (
modules/base.sh): delta 0.19.0 renamed its Debian package asset fromgit-delta_VERSION_amd64.debtogit-delta-musl_VERSION_amd64.deb. The installer was constructing the filename rather than looking it up, so the download silently 404'd and delta was left uninstalled. Fixed by using_gh_release_infoto retrieve the exact asset URL from the GitHub API — no more brittle filename construction that breaks on upstream renames.
v1.2.1
Changes
Fixed
- Post-install message showed
./scripts/install-fonts.sh(relative path) which doesn't work when installed viacurl | bashsince the user is not in the dotfiles directory.
Changed
- Font install instructions now offer three explicit options in both the post-install message and README:
- Option A —
p10k configure(wizard installs MesloLGS NF interactively, easiest path) - Option B —
~/.dotfiles/scripts/install-fonts.sh(absolute path, always works) - Option C —
bash <(curl -fsSL .../install-fonts.sh)(no local repo needed)
- Option A —
v1.2.0
What's new
Added
- PATH shadow detection (
update.sh):_check_path_shadowsruns at the end of everyupdate.shinvocation (read-only). It walks PATH dirs before/usr/local/binand reports older, duplicate, or newer shadows for managed tools (nvim,xcape). Skipped gracefully if/usr/local/binis absent from PATH. - Neovim shadow check (
modules/neovim.sh):_nvim_warn_shadowsruns at install time and on the skip-already-current path. Uses direct file probes (~/.local/bin/nvim,~/bin/nvim) — bypasses install-time bash PATH ambiguity. _ver_older_than(lib/utils.sh): version comparison helper usingsort -V; handles0.9.0 < 0.10.4correctly.
Fixed
- Perl locale warning on
Ctrl+R(modules/base.sh): addslocalespackage and runslocale-gen en_US.UTF-8on fresh minimal Ubuntu images where the locale data is absent. fzf's history widget invokesperlfor multi-line deduplication — without the locale data, everyCtrl+Rproduced a Perl warning. - Post-install messaging (
install.sh+modules/zsh.sh): the "next steps" block now correctly reports whether the default shell change succeeded or failed (via_SHELL_IS_ZSHflag). Clarifies thatexec zshactivates the shell immediately without a re-login.
v1.1.3
What's Changed
Fixed
zsh/.zshrc: setfzf-tabpopup minimum size (60 columns × 8 rows) so file/folder names are not truncated in the completion popuptmux/.tmux.conf.local: removedtmux-resurrectandtmux-continuumplugins —@continuum-restore 'on'was automatically restoring all saved sessions on every tmux launch, causing ~20 unwanted windows/panes to appear on startup
Removed
tmux-resurrectandtmux-continuumtmux plugins
Full Changelog: v1.1.2...v1.1.3
v1.1.2
Changed
README.md: added Table of Contents