Skip to content

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.

Terminal window
git clone https://github.com/aamnah/dotfiles && cd dotfiles && ./install.sh

Use this on your own machines — you can git pull later to get updates.

  1. It detects your system — Linux or macOS (Intel / Apple Silicon), and which package manager you have (apt, dnf, yum, pacman, zypper, apk or brew).

  2. It asks for your login shell.

    Login shell? (configs for both zsh and bash are installed either way)
    1) zsh (default)
    2) bash
    Choose [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.

  3. 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-8
    3) other (type it, e.g. ja_JP.UTF-8)

    For “other”, type ja_JP or ja_JP.UTF-8 — both work. See Locale.

  4. 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 Mono
    3) Fira Code
    4) Meslo
    5) Caskaydia Cove
    6) Hack
    7) 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.

  5. 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.

  6. It installs — configs, missing tools, the locale, the font — and sets your login shell. See What gets installed for the full list.

  7. 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.

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.
Terminal window
./install.sh -y # accept all defaults
./install.sh --shell=bash --locale=fi_FI # answer up front, still shows the plan
curl -fsSL https://raw.githubusercontent.com/aamnah/dotfiles/main/install.sh | bash -s -- --remote -y

Run remotely without cloning, with every answer given up front — nothing is asked. The values here are the defaults; swap in your own:

Terminal window
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:

Terminal window
./install.sh -y --shell=zsh --locale=en_US.UTF-8 --font=Hasklig

A wrong value (for example --shell=fish, --locale=japanese or --font=comic) stops the script with an error before anything is changed.

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:

Terminal window
mv ~/.zshrc.bak.20261013143005 ~/.zshrc

Backups are never deleted automatically — clean them up when you’re happy.

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.

Terminal window
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.