alvinlollo 8320546ad4 Fix fisher conflicts and stale end-4 paths found by the smoke test
First real run of tests/smoke.sh surfaced three issues:

- fish.sh: repo configs/ ships fisher.fish and nvm.fish functions, so the
  new (previously always-broken) 'fisher install' hit fisher's own
  conflict check and aborted. Now: check 'type -q fisher' / 'type -q nvm'
  inside fish and only bootstrap what is actually missing.
- fish.sh: end-4 renamed hypr/hyprland/colors.conf to colors.lua and
  moved hyprlock colors under hypr/hyprlock/ - the stale paths made the
  old script abort on cp. Updated paths, warn-and-skip stays as the
  safety net if upstream moves again.
- LazyVim.sh: same fisher conflict class in its fish branch - guard the
  nvm.fish install with a 'type -q nvm' check.
- tests/smoke.sh: the zsh backup assertion was wrong (fresh container has
  no .zshrc for run 1 to back up). Pre-seed a marker config instead and
  assert both rotation (2 backups) and that neither run destroys the
  original content.

Verified: tests/smoke.sh fish.sh zsh.sh -> PASS/PASS, bat.sh -> PASS;
pre-push hook green on all 9 scripts.
2026-10-08 14:26:56 +11:00

Single-install-script

This script automatically installs my favourite Linux applications I use every day such as: Docker, zsh, oh-my-zsh and neovim. This uses the shelly-cli package manager. You can choose what sections to install with the gum menu.

This script will automatically install shelly-cli if it is not already present.

Most of this script is intended for Arch Linux with some Debian compatibility on the zsh, bat and LazyVim install scripts.

It also installs custom configuration for zsh and it's plugins.

If you don't like the configurations fork this and edit to you liking.

Please consider staring this project. It helps me see how important this is for everyone.

Usage

Warning: Run this script with bash, not fish (or another shell). It uses bash-only syntax and will fail if run under fish. Keep bash in the commands below — do not replace it with fish or source the script. If fish is your default shell, a warning (a gum confirm dialog if gum is installed, otherwise a text prompt) will remind you before anything is installed.

To use this script paste the following in the Terminal:

curl -fsSL https://raw.githubusercontent.com/alvinlollo/Single-install-script/refs/heads/main/install.sh | bash

For installing zsh and themes (also works on Debian based systems):

curl -fsSL https://raw.githubusercontent.com/alvinlollo/Single-install-script/refs/heads/main/zsh.sh | bash

Note: on Debian-based systems the installer runs apt full-upgrade -y as part of its prerequisites. On Arch it installs prerequisites through shelly without upgrading the whole system.

Scripts

Script Purpose
install.sh Main menu (gum) that dispatches to the scripts below.
installbeta.sh Same menu, but logs every step and records failures instead of aborting, then exits non-zero if anything failed. This is the next install.sh — once tested it replaces it.
zsh.sh zsh + oh-my-zsh + plugins and my config (also works on Debian).
fish.sh fish + Fisher plugins + end-4 dotfiles config.
LazyVim.sh My LazyVim neovim config.
bat.sh bat + Catppuccin Mocha theme + MANPAGER setup.
SecureBoot.sh Not in the menu (intentional): manual UEFI-only Secure Boot setup with sbctl. It verifies every sign target and asks before enrolling keys — read it before running.

Development

Enable the pre-push gate once per clone (runs bash -n and shellcheck on every tracked *.sh):

git config core.hooksPath hooks

There is also a manual end-to-end smoke test that runs the installers in a throwaway Arch container (needs docker or podman, network access; not part of the hook):

tests/smoke.sh                 # bat.sh, zsh.sh, fish.sh
tests/smoke.sh LazyVim.sh      # opt in to the heavy LazyVim run

Zsh configuration

My Zsh configuration includes the following plugins run through oh-my-zsh: git, zsh-history-substring-search, zsh-autosuggestions, zsh-autocomplete, fzf-zsh-plugin and zsh-syntax-highlighting

Running the update function will update all your package managers if the command exists without confirmation. (Please use shelly-cli if you are on Arch Linux)

Using the key bind ALT + S will add the sudo command before your previously run command e.g.

╭─alvin@Alvin ~
╰─➤  nano /etc/fstab
# Pressed CTRL + U
╭─alvin@Alvin ~
╰─➤  sudo !!
╭─alvin@Alvin ~
╰─➤  sudo nano /etc/fstab

If you have any issues please add one in the issues tab.

S
Description
No description provided
Readme GPL-2.0
587 KiB
Languages
Shell 95.5%
Lua 4.5%