Install
install.sh copies the configs into your home folder, installs what they need, and backs up
anything it replaces. It asks two questions first and shows a plan before changing anything.
Quick start
Section titled “Quick start”git clone https://github.com/aamnah/dotfiles && cd dotfiles && ./install.shUse this on your own machines — you can git pull later to get updates.
curl -fsSL https://raw.githubusercontent.com/aamnah/dotfiles/main/install.sh | bash -s -- --remoteDownloads each config straight from GitHub. Handy on a fresh VPS where git isn’t
installed yet.
curl -fsSL: download quietly (-sS), fail on HTTP errors instead of saving the error page (-f), and follow redirects (-L).| bash -s --: run what was downloaded with bash.-sreads the script from the pipe;--means “everything after this is for the script, not for bash”.--remote: fetch the config files from GitHub too (there’s no local checkout to copy from).
What happens when you run it
Section titled “What happens when you run it”-
It detects your system — Linux or macOS (Intel / Apple Silicon), and which package manager you have (
apt,dnf,yum,pacman,zypper,apkorbrew). -
It asks for your login shell.
Login shell? (configs for both zsh and bash are installed either way)1) zsh (default)2) bashChoose [1]:Your login shell is the one you get when you log in or SSH in. A third option, keep current, appears when your current shell is something else (fish, tcsh…), so you can install the configs without being moved off it.
-
It asks for your locale — the language and formats for dates, numbers and sorting.
Locale? (language and formats for dates, numbers, sorting)1) en_US.UTF-8 (default)2) en_GB.UTF-83) other (type it, e.g. ja_JP.UTF-8)For “other”, type
ja_JPorja_JP.UTF-8— both work. See Locale. -
On a desktop, it asks for a terminal font — a Nerd Font: a programming font with icons added, so the prompt, tmux and editors show icons instead of boxes.
Terminal font? (a Nerd Font, so prompt and tmux icons show instead of boxes)1) Hasklug (default)2) JetBrains Mono3) Fira Code4) Meslo5) Caskaydia Cove6) Hack7) none (skip)It’s installed just for you (no
sudo), and kitty’s config is set to use it. Not asked on servers or in containers — the font belongs on the machine you look at. See kitty. -
It shows the plan and asks
Proceed? [Y/n]. Press Enter to go ahead. Anything else stops the script — nothing has been changed at that point. -
It installs — configs, missing tools, the locale, the font — and sets your login shell. See What gets installed for the full list.
-
Log out and back in so the new login shell takes effect.
Press Enter at any question to take the default. Typing something invalid just asks again.
Skip the questions
Section titled “Skip the questions”| Flag | What it does |
|---|---|
-y, --yes |
Don’t ask anything — use the defaults (or the values from the flags below). |
--shell=zsh|bash|keep |
Login shell. Default: zsh. Configs for both shells are installed either way. |
--locale=LOCALE |
UTF-8 locale to generate and use, e.g. fi_FI or ja_JP.UTF-8. Default: en_US.UTF-8. |
--font=FONT |
Nerd Font for the terminal (desktops only): Hasklig (default, installs as “Hasklug”), JetBrainsMono, FiraCode, Meslo, CascadiaCode, Hack, or none. |
--remote |
Fetch configs from GitHub instead of the local checkout. |
-h, --help |
Show all options. |
./install.sh -y # accept all defaults./install.sh --shell=bash --locale=fi_FI # answer up front, still shows the plancurl -fsSL https://raw.githubusercontent.com/aamnah/dotfiles/main/install.sh | bash -s -- --remote -yEvery option at once
Section titled “Every option at once”Run remotely without cloning, with every answer given up front — nothing is asked. The values here are the defaults; swap in your own:
curl -fsSL https://raw.githubusercontent.com/aamnah/dotfiles/main/install.sh | bash -s -- --remote -y --shell=zsh --locale=en_US.UTF-8 --font=Hasklig| Part | Meaning |
|---|---|
curl -fsSL <url> |
download install.sh from GitHub |
| bash -s -- |
run it with bash; -s reads the script from the pipe, -- passes everything after it to the script |
--remote |
download the configs from GitHub too (there’s no local copy) |
-y |
don’t ask anything |
--shell=zsh |
make zsh the login shell |
--locale=en_US.UTF-8 |
US English with UTF-8 |
--font=Hasklig |
install Hasklug Nerd Font (only on a desktop; skipped on servers) |
From a clone, the same without curl and --remote:
./install.sh -y --shell=zsh --locale=en_US.UTF-8 --font=HaskligA wrong value (for example --shell=fish, --locale=japanese or --font=comic) stops the script with an error
before anything is changed.
Backups
Section titled “Backups”Every file the installer would overwrite is first moved to <file>.bak.<timestamp>, for example
~/.zshrc.bak.20261013143005. To undo a change, move the backup back:
mv ~/.zshrc.bak.20261013143005 ~/.zshrcBackups are never deleted automatically — clean them up when you’re happy.
Running it again
Section titled “Running it again”It’s safe to re-run. Things that are already in place are reported as found: and skipped —
packages, the locale, the login shell. Config files are copied again (with a new backup each
time), so that’s how you pull in updated configs after a git pull.
Updating
Section titled “Updating”cd dotfiles && git pull && ./install.sh -y-y keeps the defaults. If you chose something else the first time, pass the same flags again
(for example --shell=bash --locale=fi_FI), or run without -y and answer the questions.
Related
Section titled “Related”- Supported systems — what’s been tested, root vs. sudo
- Installer internals — how the script works
- Troubleshooting