Skip to content

Latest commit

Β 

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

 β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—  β–ˆβ–ˆβ•—β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—  β–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘
β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β•šβ•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β•šβ•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•   β–ˆβ–ˆβ•‘   β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘
β•šβ•β•  β•šβ•β•β•šβ•β•  β•šβ•β•β•šβ•β•β•β•β•β•β•β•šβ•β•  β•šβ•β• β•šβ•β•β•β•β•β•    β•šβ•β•    β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β•β•β•šβ•β•  β•šβ•β•

Arch Linux Β· Omarchy Β· Hyprland β€” my daily driver, versioned.

Arch Linux Hyprland Omarchy Shell License: MIT


▢️ Live Demo

Demo Video


$ cat table_of_contents.txt


πŸ“Έ Screenshots

Desktop

Hero shot: Hyprland + Omarchy shell + wallhaven

Terminal VS Code
Ghostty + Fastfetch + Starship Editor workflow in VS Code
Neovim Yazi Screensaver
LazyVim Yazi file manager Idle screensaver

✨ Features

πŸ–₯️ WM Hyprland on Omarchy (Quickshell-based shell)
🎨 Theme wallhaven, applied system-wide via Aether
⚑ System Info Fastfetch
⭐ Prompt Starship
πŸ“ Editors Neovim (LazyVim) & VS Code
πŸ“‚ File Manager Yazi
🐚 Shell Zsh (fish in foot)
πŸ‘» Terminal Ghostty / Alacritty / Kitty / Foot
πŸ“Š Monitor Btop
πŸš€ Bar / Launcher / OSD Omarchy shell (Quickshell)
πŸ–ΌοΈ Wallpapers Curated collection included

πŸ“¦ Included Configurations

alacritty Β· atuin Β· btop Β· fastfetch Β· fish Β· foot Β· ghostty Β· hyprland
kitty Β· lazydocker Β· lazygit Β· mise Β· mpv Β· neovim Β· omarchy Β· starship
tmux Β· voxtype Β· VS Code Β· yazi Β· zellij Β· zsh

πŸ“₯ Installation

Option A β€” One-shot bootstrap (fresh machine)

curl -fsSL https://raw.githubusercontent.com/Aashutosh31/dotfiles/main/bootstrap.sh | bash

Handles everything: installs git/yay if missing, clones the repo, and runs the installer.

Option B β€” Manual (already have the repo cloned, or want to review first)

git clone https://github.com/Aashutosh31/dotfiles.git
cd dotfiles
chmod +x install.sh
./install.sh

After installation, if Hyprland is running, reload the config to apply changes:

hyprctl reload

Then open a new terminal β€” the installer makes sure zsh is your login shell, and a shell change only applies to new login sessions.


πŸ” Updating an Existing Installation

install.sh is safe to re-run at any time β€” that is the update mechanism:

cd ~/dotfiles
git pull
./install.sh
  • Every file it overwrites is backed up first to ~/.dotfiles-backup/<timestamp>/.
  • It never deletes your config directories and never removes files that only exist on your system.
  • It does not perform a system upgrade (no pacman -Syu) β€” on Omarchy, upgrades belong to omarchy update, which the installer never bypasses. It only installs packages from packages/ that are missing.
  • If something in your shell environment is still off afterwards, see Diagnose & Repair below.

🩺 Diagnose & Repair

Two companion scripts let you fix problems without reinstalling everything.

doctor.sh β€” read-only health check

./doctor.sh

Checks, without touching anything:

Check Severity
Required packages installed (zsh, starship, zoxide, atuin, yazi, mise, plugins, …) FAIL if missing
Commands resolvable on $PATH FAIL if missing
/bin/zsh + /usr/bin/zsh exist, zsh listed in /etc/shells FAIL if missing
Login shell is zsh FAIL otherwise
~/.local/bin/env + env.fish present FAIL if missing
zsh-autosuggestions / zsh-syntax-highlighting plugin files FAIL if missing
Installed shell configs match the repo WARN on drift
Broken symlinks under ~/.config WARN

Exit code is non-zero when any required component is missing, so you can use it in scripts or CI.

repair.sh β€” fix an existing installation

./repair.sh

Safe and idempotent β€” run it as many times as you like; unchanged state prints [SKIP]. It:

  1. Installs only required packages that are actually missing.
  2. Ensures zsh is installed and listed in /etc/shells.
  3. Sets your login shell to zsh β€” only if it isn't already (never repeats chsh), printing a clear message and reminding you to start a new session.
  4. Recreates ~/.local/bin/env / env.fish when they are missing (see below).
  5. Re-applies only the shell-related configs (.zshrc, .XCompose, starship, fish, mise, atuin) β€” each backed up before being overwritten.

It never runs a system upgrade, never deletes home/config data, and exits non-zero if anything could not be fixed.


🐚 Zsh Is Required

This setup requires Zsh. The shell environment depends on zsh-specific features:

  • zsh options & completion (setopt, autoload -Uz compinit)
  • zoxide integration (z, cd=z)
  • atuin history integration (eval "$(atuin init zsh)")
  • zsh-autosuggestions & zsh-syntax-highlighting
  • Starship prompt
  • all existing aliases/functions in .zshrc

install.sh and repair.sh both ensure: zsh installed β†’ /bin/zsh present and listed in /etc/shells β†’ login shell set to /bin/zsh (only when needed). After the change you must start a new login session/terminal for it to take effect. Don't try to source ~/.zshrc from Bash β€” it uses zsh-only builtins and will error.


About ~/.local/bin/env

The last line of .zshrc sources ~/.local/share/../bin/env (= ~/.local/bin/env). That file is created by uv's standalone installer (curl -LsSf https://astral.sh/uv/install.sh | sh), not by mise, Omarchy, pacman, or this repo. On a fresh machine where uv was never installed standalone, the file doesn't exist and every zsh startup ends with:

/home/<you>/.local/share/../bin/env: No such file or directory

install.sh and repair.sh recreate this file β€” byte-for-byte identical to uv's template β€” whenever it is missing, so the shell always starts cleanly even before uv itself is installed.


πŸ” What install.sh Actually Does

Click to expand the step-by-step breakdown
  1. Resolves the repo path β€” works regardless of where you run it from ($REPO = script's own directory).
  2. Installs missing official packages β€” ensures everything in packages/pacman.txt is present, using Omarchy's omarchy-pkg-add helper when available (falling back to pacman -S --needed). This does not perform a full system upgrade β€” on Omarchy, system upgrades belong to omarchy update, which the installer never bypasses.
  3. Installs AUR packages β€” if yay is present, installs everything in packages/aur.txt non-interactively (--answerclean None --answerdiff None). Skips gracefully if yay isn't found.
  4. Creates a timestamped backup at ~/.dotfiles-backup/<YYYY><MM><DD>-<HHMMSS>/ β€” see Backups & Rollback below.
  5. Backs up and replaces each config β€” for every tool in the list (alacritty, atuin, btop, fastfetch, fish, foot, ghostty, hypr, kitty, lazydocker, lazygit, mise, mpv, nvim, omarchy, tmux, voxtype, yazi, zellij):
    • if a matching config exists in this repo, each file in your current ~/.config/<tool> is backed up individually, then replaced in-place (safe to run while a desktop session is live β€” the directory is never deleted).
  6. Installs starship at ~/.config/starship.toml, the wallhaven theme background into ~/.config/omarchy/themes/wallhaven/, and the custom About screen launcher to ~/.local/bin/omarchy-launch-about.
  7. Backs up and replaces dotfiles β€” ~/.zshrc and ~/.XCompose get the same backup-then-overwrite treatment.
  8. Sets up the shell environment (Stage 4) β€” makes sure copying .zshrc actually results in a usable shell:
    • adds zsh to /etc/shells if missing,
    • sets your login shell to zsh only if it isn't already (never re-runs chsh unnecessarily; prints a clear message when it changes and reminds you that a new login session is needed),
    • recreates ~/.local/bin/env + env.fish if they're missing (uv-installer template β€” see About ~/.local/bin/env),
    • verifies every command .zshrc depends on resolves, warning about any that don't.
  9. Prints the backup location so you always know exactly where your previous setup went.

Nothing is deleted without a backup first. Every overwrite is preceded by a copy (cp -a) into the timestamped backup folder. Configs are installed via per-file in-place replacement so a running desktop session never sees a missing or partially-written config directory.


πŸ₯Ύ What bootstrap.sh Actually Does

Click to expand

Bootstrap is for a brand-new machine that doesn't have this repo (or possibly git/yay) yet:

  1. Verifies you're on Arch β€” checks for pacman, exits cleanly otherwise (no Arch, no dice).
  2. Installs Git if missing.
  3. Installs yay if missing β€” clones and builds it from the AUR via makepkg -si.
  4. Clones or updates the repo β€” clones fresh to ~/dotfiles if it doesn't exist, or git pulls if it does.
  5. Makes scripts executable β€” install.sh and everything in scripts/.
  6. Hands off to install.sh to do the actual config installation described above.

In short: bootstrap.sh gets a bare Arch install to the point where install.sh can run β€” then runs it.


πŸ“‚ Repository Structure

.
β”œβ”€β”€ alacritty/
β”œβ”€β”€ atuin/
β”œβ”€β”€ btop/
β”œβ”€β”€ doctor.sh       # read-only installation health check
β”œβ”€β”€ fastfetch/
β”œβ”€β”€ fish/
β”œβ”€β”€ foot/
β”œβ”€β”€ ghostty/
β”œβ”€β”€ home/          # ~/.zshrc, ~/.XCompose
β”œβ”€β”€ hypr/          # Hyprland Lua config (Quattro)
β”œβ”€β”€ kitty/
β”œβ”€β”€ lazydocker/
β”œβ”€β”€ lazygit/
β”œβ”€β”€ mise/
β”œβ”€β”€ mpv/
β”œβ”€β”€ nvim/
β”œβ”€β”€ repair.sh      # safe, idempotent in-place repair
β”œβ”€β”€ vscode/
β”œβ”€β”€ omarchy/       # shell, bar plugin, theme, hooks, theme.name
β”œβ”€β”€ bootstrap.sh   # one-shot installer for fresh machines
β”œβ”€β”€ packages/       # pacman.txt, aur.txt
β”œβ”€β”€ scripts/       # omarchy-launch-about, lib/shell-env.sh
β”œβ”€β”€ starship/
β”œβ”€β”€ tmux/
β”œβ”€β”€ voxtype/
β”œβ”€β”€ wallpapers/
β”œβ”€β”€ yazi/
└── zellij/

πŸ›  Requirements

  • Arch Linux
  • Omarchy
  • Zsh (installed and set as login shell automatically by install.sh / repair.sh β€” required for this setup to function)
  • yay (auto-installed by bootstrap.sh if missing)
  • Git

πŸ”„ Backups & Rollback

Every run of install.sh creates a fresh timestamped snapshot before touching anything:

~/.dotfiles-backup/20260701-143022/

To roll back a specific config manually:

cp -a ~/.dotfiles-backup/<timestamp>/.config/<tool> ~/.config/

πŸ“œ License

MIT License

built in the terminal, for the terminal

About

Personal Arch Linux + Omarchy + Hyprland dotfiles with a production-ready development environment.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages