- hooks/pre-push: bash -n + shellcheck -S warning -e SC1090 on every tracked *.sh; fails closed when shellcheck is missing, bypassable with --no-verify; enable with 'git config core.hooksPath hooks' (documented) - tests/smoke.sh: manual docker/podman Arch-container run of bat.sh, zsh.sh and fish.sh with assertions (idempotent bat config, timestamped zsh backups, fisher actually installed in fish); LazyVim.sh opt-in. This catches the inverted-condition/quoting class shellcheck cannot. fish.sh gains a SKIP_END4_SETUP=1 test hook to skip end-4's installer - README: scripts table (documents installbeta.sh vs install.sh and why SecureBoot.sh is not in the menu), apt full-upgrade note, development section; claims audited against current behavior (gum wording already correct, no whiptail/selection claims remain) - remove untracked vendored gum.md (reference only, per decision)
79 lines
4.3 KiB
Markdown
79 lines
4.3 KiB
Markdown
# Single-install-script
|
|
|
|
This script automatically installs my favourite Linux applications I use every day such as:
|
|
[Docker](https://www.docker.com/), [zsh, oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh) and [neovim](https://neovim.io/). This uses the [shelly-cli](https://github.com/Seafoam-Labs/Shelly-ALPM) package manager. You can choose what sections to install with the [gum](https://github.com/charmbracelet/gum) menu.
|
|
|
|
This script will automatically install [shelly-cli](https://github.com/Seafoam-Labs/Shelly-ALPM) 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:
|
|
|
|
```bash
|
|
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):
|
|
|
|
```bash
|
|
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`):
|
|
|
|
```bash
|
|
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):
|
|
|
|
```bash
|
|
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](https://ohmyz.sh/): git, [zsh-history-substring-search](https://github.com/zsh-users/zsh-history-substring-search), [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions), [zsh-autocomplete](https://github.com/marlonrichert/zsh-autocomplete), [fzf-zsh-plugin](https://github.com/unixorn/fzf-zsh-plugin) and [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting.git)
|
|
|
|
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.
|
|
```sh
|
|
╭─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.
|