Skip to content

bdostumski/arch-frame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

166 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ—οΈ arch-frame

Automated Arch Linux Installation & Configuration Framework

Arch Linux Shell Script Zsh License: MIT

A professional-grade shell scripting framework that automatically installs and configures 100+ GB of software on Arch Linux β€” with a single command.

πŸ“– About β€’ πŸš€ Features β€’ πŸ—‚οΈ Structure β€’ πŸ“¦ Packages β€’ βš™οΈ Installation β€’ πŸ”§ Configuration β€’ πŸ›‘οΈ Security β€’ 🧠 Doom Emacs β€’ ⌨️ Key Bindings β€’ πŸ“ Aliases β€’ πŸ”€ Git Config


πŸ“– About

arch-frame was born from a passion for learning and real-world automation.

It started as a hands-on project while completing the Linux Shell Scripting course on Udemy β€” a course that taught the foundations of POSIX shell scripting, automation, and system administration. What began as a learning exercise quickly evolved into a fully-fledged, production-quality framework.

πŸ’‘ The Problem It Solves

Setting up a complete Arch Linux development environment from scratch is a time-consuming, error-prone, and repetitive process. It can take days of manual work to:

  • Install hundreds of packages
  • Configure security tools (antivirus, firewall)
  • Set up editors, terminals, shells and plugins
  • Configure mail, virtualisation, and development languages
  • Personalise dotfiles, aliases, keybindings and themes

arch-frame eliminates all of that. It automates the entire process end-to-end.

🏒 Enterprise Value

This kind of automation has direct value for companies that need to:

  • πŸ–₯️ Provision developer workstations consistently across a team
  • πŸ”’ Enforce security policies (antivirus, firewall, GPG encryption) at installation time
  • βš™οΈ Deploy Linux environments for specific purposes (data science, web dev, DevOps, etc.)
  • πŸ“‹ Standardise tooling across engineering teams without manual setup
  • πŸ”„ Rebuild environments quickly after hardware failure or OS reinstall

πŸš€ Features

Feature Description
πŸ€– One-command setup Full system from scratch with a single interactive script
🐚 Dual shell support Shared config works seamlessly in both zsh and bash
πŸ“¦ 100+ GB of software Packages organised by category β€” kernel, fonts, dev tools, GUI apps, virtualisation
🎨 Beautiful terminal Powerlevel10k Pure theme + Nerd Fonts + lsd + bat + vivid colours
πŸ”Œ Plugin management Zinit with autosuggestions, syntax highlighting, fzf-tab completions
πŸ›‘οΈ Security built-in ClamAV antivirus (with on-access scanning) + UFW firewall + GPG encryption
πŸ“§ Email in terminal mu4e + isync + msmtp β€” full email workflow inside Emacs/terminal
🧠 Doom Emacs Pre-configured IDE with LSP, org-mode, mu4e, Magit, and more
πŸ”€ Rich Git config Auto-generated .gitconfig with 100+ aliases, delta diffs, kitty difftool
πŸ–₯️ Virtualisation ready QEMU/KVM + VirtualBox fully pre-configured
πŸ”§ Polyglot dev env Python, Node, Go, Rust, Java (11/17/21), Ruby, Kotlin, Clojure, Haskell, Scala
πŸ’Ύ Safe backups All existing configs backed up as .bak before replacing
🧩 Template system Built-in templates for Git, Docker, Docker Compose, Kubernetes, Vagrant
⚑ Idempotent Skips already-installed packages, safe to re-run

πŸ—‚οΈ Project Structure

arch-frame/
β”‚
β”œβ”€β”€ install.sh                          # πŸš€ Main entry point (interactive menu)
β”œβ”€β”€ install-config.sh                   # βš™οΈ  Your personal configuration (fill this in)
β”‚
β”œβ”€β”€ dependencies/
β”‚   β”œβ”€β”€ pacman-packages.sh              # Main package installer (pacman + dotfiles + tools)
β”‚   β”œβ”€β”€ yay-packages.sh                 # AUR package installer
β”‚   β”œβ”€β”€ git-packages.sh                 # Packages installed from git
β”‚   β”œβ”€β”€ dev-tools.sh                    # Dev tools: Docker, Vagrant, K8s, etc.
β”‚   β”œβ”€β”€ drivers.sh                      # System drivers & firmware
β”‚   β”œβ”€β”€ doom-emacs.sh                   # Doom Emacs installer & configuration
β”‚   β”‚
β”‚   β”œβ”€β”€ packages/
β”‚   β”‚   β”œβ”€β”€ pkg-pacman.sh               # Pacman package list (100+ packages)
β”‚   β”‚   └── pkg-yay.sh                  # AUR package list (VSCode, IntelliJ, Postman...)
β”‚   β”‚
β”‚   β”œβ”€β”€ configurations/
β”‚   β”‚   β”œβ”€β”€ config-env-variables.sh     # Generate ~/.env.sh (GPG-encrypted credentials)
β”‚   β”‚   β”œβ”€β”€ config-gitconfig.sh         # Generate ~/.gitconfig (100+ git aliases)
β”‚   β”‚   β”œβ”€β”€ config-ufw.sh               # UFW firewall rules (HTTP/HTTPS/SSH/VNC)
β”‚   β”‚   β”œβ”€β”€ config-clamav.sh            # ClamAV full setup (daemon, freshclam, clamonacc)
β”‚   β”‚   └── config-vbox.sh              # VirtualBox guest drivers
β”‚   β”‚
β”‚   └── utils/
β”‚       └── install-utils.sh            # Shared utilities: log(), backup_and_copy(),
β”‚                                       # install_pacman_packages(), install_yay_packages()
β”‚
└── dotfiles/
    β”œβ”€β”€ .zshrc                          # Zsh entry point
    β”œβ”€β”€ .bashrc                         # Bash entry point
    β”‚
    β”œβ”€β”€ .zshrc.d/                       # Zsh-specific modules
    β”‚   β”œβ”€β”€ initialize.zsh              # Zinit bootstrap + log/history dirs
    β”‚   β”œβ”€β”€ history.zsh                 # History size, deduplication, sharing
    β”‚   β”œβ”€β”€ plugins.zsh                 # Zinit plugins + Powerlevel10k
    β”‚   β”œβ”€β”€ key-bindings.zsh            # All custom key bindings
    β”‚   └── config.d/
    β”‚       β”œβ”€β”€ env/                    # Generated .env.sh (credentials)
    β”‚       β”œβ”€β”€ gitconf/                # Generated .gitconfig
    β”‚       └── themes/
    β”‚           β”œβ”€β”€ shell/              # Powerlevel10k theme configs (pure, lean, etc.)
    β”‚           └── ls/                 # lsd colour themes
    β”‚
    └── .shell.d/                       # Shared shell modules (zsh + bash)
        β”œβ”€β”€ environment.sh              # PATH additions + exports (pyenv, go, emacs, etc.)
        β”œβ”€β”€ aliases.sh                  # 100+ aliases (editors, git, pacman, ufw, clamav...)
        β”œβ”€β”€ functions.sh                # Function loader
        β”œβ”€β”€ templates.sh                # Interactive template menu
        β”œβ”€β”€ shell-detect.sh             # Detect current shell
        β”œβ”€β”€ local.sh                    # Machine-local overrides (gitignored)
        β”‚
        β”œβ”€β”€ functions.d/
        β”‚   β”œβ”€β”€ archive-extraction.sh   # extract <file> β€” all formats
        β”‚   β”œβ”€β”€ change-dir-up.sh        # up <n> β€” go up N directories
        β”‚   β”œβ”€β”€ find-file.sh            # find-file <name> β€” fd + fzf β†’ nvim
        β”‚   β”œβ”€β”€ find-dir.sh             # find-dir <name> β€” fd + fzf β†’ nvim
        β”‚   β”œβ”€β”€ ranger-cd.sh            # ranger with automatic cd on exit
        β”‚   β”œβ”€β”€ editor-nvim-vim.sh      # nvim β†’ vim fallback
        β”‚   β”œβ”€β”€ editor-lvim-nvim-vim.sh # lvim β†’ nvim β†’ vim fallback
        β”‚   └── git-logauthor.sh        # logauthor <author> β€” filtered git log
        β”‚
        β”œβ”€β”€ templates.d/                # File templates
        β”‚   β”œβ”€β”€ git/.gitignore          # Universal .gitignore template
        β”‚   β”œβ”€β”€ docker/                 # Dockerfile templates
        β”‚   β”œβ”€β”€ docker-compose/         # docker-compose.yml templates
        β”‚   β”œβ”€β”€ kubernetes/             # K8s manifest templates
        β”‚   └── vagrant/                # Vagrantfile templates
        β”‚
        └── config.d/                   # Application configurations
            β”œβ”€β”€ arch/pacman.conf        # Pacman configuration
            β”œβ”€β”€ kitty/                  # Kitty terminal config + themes
            β”œβ”€β”€ tmux/                   # Tmux config
            β”œβ”€β”€ ranger/                 # Ranger file manager config
            β”œβ”€β”€ vim/.vimrc              # Vim configuration
            β”œβ”€β”€ doom/                   # Doom Emacs config (init.el, config.el, packages.el)
            β”œβ”€β”€ doom-back/              # Doom Emacs backup config
            β”œβ”€β”€ clamav/                 # ClamAV clamd.conf + freshclam.conf
            β”œβ”€β”€ cron/
            β”‚   β”œβ”€β”€ cron.daily/         # Daily automated virus scans
            β”‚   └── cron.weekly/        # Weekly full system scans
            β”œβ”€β”€ ufw/before.rules        # UFW custom firewall rules
            └── themes/                 # lsd colour theme files

πŸ“¦ What Gets Installed

🐧 Linux Kernel

Package Description
linux-zen Performance and latency optimised kernel
linux-zen-headers Kernel headers required for module compilation

πŸ”€ Fonts (14 font families)

Fonts
DejaVu Β· Liberation Β· Roboto Β· Ubuntu Β· Noto (+ Emoji + CJK)
Fira Code Β· Fira Mono Β· Fira Sans Β· JetBrains Mono
Hack Β· Inconsolata Β· Nerd Fonts Β· OpenSans Β· Terminus

🐚 Shell & Terminal

kitty Β· zsh Β· git Β· github-cli Β· ranger

πŸ› οΈ Base Development Tools

base-devel Β· make Β· gcc Β· clang Β· cmake

✏️ Editors & IDE Support

vim Β· neovim Β· emacs + emacs-apel Β· emacs-haskell-mode Β· emacs-lua-mode Β· emacs-python-mode Β· emacs-slime

πŸ”€ Version Control

lazygit Β· git-delta Β· kdiff3

πŸ–₯️ System Utilities

tmux Β· fzf Β· fd Β· bat Β· btop Β· htop Β· lsd Β· ripgrep Β· ncdu Β· tldr Β· glances Β· trash-cli Β· neofetch Β· fastfetch Β· onefetch Β· vivid Β· httpie Β· curl Β· reflector Β· stow Β· pass Β· haveged Β· wl-clipboard

πŸ” Security

ufw Β· clamav Β· gnupg Β· openssh

πŸ“§ Mail & Communication

isync Β· offlineimap Β· msmtp Β· mu Β· w3m Β· gnupg

πŸ’Ύ File & Data Management

sqlite Β· jq Β· direnv

βœ… Linting & Formatting

shfmt Β· shellcheck Β· tidy Β· stylelint

πŸ“š Documentation

pandoc Β· languagetool Β· hunspell Β· hunspell-en_us

🌐 Programming Languages

Language Packages
Python python Β· pip Β· pipenv Β· virtualenv Β· pynvim Β· pyenv Β· black Β· pyflakes Β· isort Β· pytest
JavaScript nodejs Β· npm Β· yarn
Go go Β· gopls Β· gomodifytags Β· gotests Β· gore
Rust rust Β· cargo
Java jdk11-openjdk Β· jdk17-openjdk Β· jdk21-openjdk Β· maven Β· gradle Β· spring
JVM kotlin Β· clojure Β· leiningen Β· scala Β· scalafmt Β· metals
Haskell cabal-install Β· haskell-language-server
Lisp emacs-slime Β· lisp
Ruby ruby
Lua luarocks
PHP php Β· composer Β· lighttpd

πŸ–ΌοΈ GUI Applications

Category Applications
Browsers & Mail Firefox Β· Thunderbird
Office & Productivity LibreOffice Β· FileZilla
Media & Design GIMP Β· OBS Studio Β· Kdenlive Β· VLC
System Tools GParted Β· DBeaver Β· system-config-printer
Entertainment Steam Β· Discord
Dev Tools (AUR) Visual Studio Code Β· IntelliJ IDEA Β· Postman Β· Stacer
Communication (AUR) Viber
System Widget eww (Wayland/X11 widget system)

🎬 Multimedia & Graphics

graphviz Β· gnuplot Β· maim Β· scrot Β· plantuml Β· transmission Β· wine

πŸ–₯️ Virtualisation

qemu Β· virt-manager Β· virt-viewer Β· libvirt Β· dnsmasq Β· bridge-utils Β· virtualbox Β· virtualbox-host-modules-arch

πŸ”§ System Optimisation (AUR)

auto-cpufreq Β· backintime Β· downgrade


βš™οΈ Installation

⚠️ WARNING: This script installs 100+ GB of software and modifies system-level files. Always test on a virtual machine or a fresh Arch Linux installation first.

Prerequisites

  • Fresh Arch Linux installation
  • Internet connection
  • git installed: sudo pacman -S git
  • zsh installed: sudo pacman -S zsh

Step 1 β€” Clone the repository

git clone https://github.com/bdostumski/arch-frame.git
cd arch-frame

Step 2 β€” Configure your personal details

Edit install-config.sh and fill in your real values:

USER_NAME="your-username"          # Your Linux username
FIRST_NAME="Your"                  # Your first name
LAST_NAME="Name"                   # Your last name
GIT_USER="your-github-username"    # Your GitHub username
GMAIL_EMAIL="your@gmail.com"       # Your Gmail address
GMAIL_USER="your-gmail-user"       # Your Gmail username
GMAIL_PASSWORD="gpg-encrypted"     # Your GPG-encrypted Gmail password
DEFAULT_SHELL="zsh"                # Default shell: zsh | bash | fish

πŸ” Gmail Password should be GPG-encrypted. The framework stores it base64+GPG encrypted and decrypts it at runtime.

The installer validates all placeholders before running β€” it will refuse to proceed if default values like "johndoe" or "john.doe@gmail.com" are still in place.

Step 3 β€” Run the installer

chmod +x install.sh
./install.sh

You will see an interactive menu:

INSTALL DEPENDENCIES:
1) Main Packages Installation [Neovim, Emacs, System, ClamAV, UFW, etc]
2) Dev Packages Installation [Docker, Vagrant, K8s, etc]
3) System Drivers & Firmware Installation
x) Exit
  • Option 1 β€” Full workstation setup (recommended first run)
  • Option 2 β€” DevOps tools: Docker, Vagrant, Kubernetes
  • Option 3 β€” Hardware drivers and firmware

Step 4 β€” Restart in Kitty terminal

After Option 1 completes, restart your terminal using Kitty and re-run for Option 2 if needed:

exec zsh

🎨 Shell Configuration

Powerlevel10k β€” Pure Theme

The terminal uses Powerlevel10k with the Pure style β€” a clean, minimalist prompt inspired by sindresorhus/pure.

~/projects/arch-frame main*:⇑                              5s user@host 14:32:01
❯
Prompt Element Position Description
dir Left Current directory in blue
vcs Left Git branch + status in grey Β· * dirty Β· ⇑ ahead Β· ⇣ behind
prompt_char Left line 2 ❯ magenta = success · red = error
command_execution_time Right Duration shown only if β‰₯ 5s, in yellow
virtualenv Right Python venv name in grey
context Right user@host β€” only shown when root or SSH
time Right Current time HH:MM:SS in blue

Features:

  • ⚑ Instant prompt β€” shell loads immediately, git status updates async
  • 🎯 Transient prompt β€” previous prompts are trimmed to save screen space
  • πŸ”” No automatic git fetch β€” keeps prompt fast

To reconfigure:

zsh-theme    # runs: p10k configure

Zinit Plugin Manager

Plugins are managed with Zinit and loaded in the correct order:

Plugin Purpose
OMZ::plugins/z Jump to frecent directories
zsh-colored-man-pages Coloured man pages
zsh-autosuggestions Fish-like command suggestions
fzf-tab Replace zsh completions with fzf
powerlevel10k Prompt theme
zsh-completions Extra completion definitions
zsh-syntax-highlighting Real-time syntax highlighting (loaded last)

History Configuration

HISTSIZE=50000   # Lines in memory
SAVEHIST=50000   # Lines on disk

Options: appendhistory Β· sharehistory Β· inc_append_history Β· hist_ignore_dups Β· hist_ignore_space Β· hist_verify Β· hist_reduce_blanks


πŸ”§ Configuration

πŸ“ Config Directory (config.d/)

All application configurations live in ~/.shell.d/config.d/ and are managed by the framework:

Directory Contents
arch/ pacman.conf β€” custom Arch Linux package manager config
kitty/ Kitty terminal config, colour themes, fonts
tmux/ Tmux prefix, panes, status bar, plugins
ranger/ Ranger file manager settings, key bindings, colour schemes
vim/ .vimrc with syntax highlighting, indentation, plugins
doom/ Doom Emacs init.el, config.el, packages.el
doom-back/ Backup of previous Doom Emacs configuration
clamav/ clamd.conf + freshclam.conf β€” antivirus configuration
cron/ cron.daily/ and cron.weekly/ automated scan scripts
ufw/ before.rules β€” custom UFW packet filter rules
env/ Generated .env.sh with GPG-encrypted credentials
gitconf/ Generated .gitconfig with your user details + 100+ aliases
themes/ Powerlevel10k themes Β· lsd colour themes

🧩 Template System

The templates command opens an interactive menu to scaffold project files:

templates
= = = = = = = = =
T e m p l a t e s
= = = = = = = = =

1. Git
2. Docker
3. Docker Compose
4. Kubernetes
5. Vagrant
0. Exit

Selecting a category generates the appropriate template file directly into your current directory.


πŸ›‘οΈ Security

πŸ”₯ UFW Firewall

UFW is configured automatically with the following rules:

Rule Value Description
Default incoming DENY Block all unsolicited inbound traffic
Default outgoing ALLOW Allow all outbound traffic
HTTP (port 80) ALLOW Web browsing
HTTPS (port 443) ALLOW Secure web browsing
SSH (port 22/tcp) LIMIT Rate-limited SSH (brute-force protection)
VNC (port 5900) DENY Block remote desktop
Logging HIGH Full UFW event logging

Custom rules from ufw/before.rules are applied on top, allowing packet-level filtering.

UFW Aliases:

ufw-on                  # Enable the firewall
ufw-off                 # Disable the firewall
ufw-status              # Show all rules (verbose)
ufw-list                # Show numbered rules
ufw-allow <port>        # Allow a port or service
ufw-deny <port>         # Deny a port or service
ufw-delete <rule>       # Delete a rule by number
ufw-reload              # Reload all rules
ufw-reset               # Reset all rules to default
ufw-logs                # Follow UFW logs (journalctl)
ufw-deny-out-to <ip>    # Block outgoing traffic to an IP

# Email ports: 25, 465, 587, 143, 993, 110, 995
ufw-mail-allow          # Allow all mail ports
ufw-mail-deny           # Deny all mail ports
ufw-mail-status         # Check mail port status

🦠 ClamAV Antivirus

ClamAV is installed and fully configured with three layers of protection:

Service Description
clamav-freshclam Automatic virus database updates
clamav-daemon Background scanning daemon (clamd)
clamav-clamonacc Real-time on-access scanning β€” files are scanned as they are accessed

The installer handles all of the complex setup:

  • Creates clamav system user and correct group permissions
  • Sets up /var/lib/clamav, /var/log/clamav, quarantine directories
  • Downloads the virus database (waits up to 5 minutes on first install)
  • Writes a custom clamonacc.service systemd unit
  • Enables desktop notifications via sudoers
  • Enables all three services at boot

Automated scanning runs via:

  • cron.daily β€” daily home directory scan
  • cron.weekly β€” weekly full system scan

ClamAV Aliases:

clamscan-home                  # Scan home directory
clamscan-full                  # Full system scan (excludes /sys /proc /dev)
clamscan-home-quarantine       # Scan home + move threats to quarantine
clamscan-root-quarantine       # Full scan + quarantine
clamscan-update                # Update virus definitions (freshclam)
clamscan-logs                  # Follow ClamAV daemon logs

πŸ”‘ GPG & SSH Encryption

# SSH
ssh-ed <comment>        # Generate new ed25519 SSH key
ssh-copy <host>         # Copy public key to remote host
ssh-add                 # Add key to SSH agent
ssh-agent               # Start SSH agent
ssh-kill                # Kill SSH agent

# GPG
gpg-encrypt <file>      # Encrypt a file
gpg-decrypt <file>      # Decrypt a file
gpg-sign <file>         # Sign a file
gpg-verify <file>       # Verify a signature
gpg-list                # List public keys
gpg-list-secret         # List secret keys
gpg-import <file>       # Import a key
gpg-export <keyid>      # Export a key
gpg-delete <keyid>      # Delete a key

🧠 Doom Emacs

Doom Emacs is installed and pre-configured as a full-featured IDE and personal productivity system.

Installation

The framework clones Doom Emacs and runs doom install automatically:

git clone https://github.com/doomemacs/doomemacs ~/.config/emacs
~/.config/emacs/bin/doom install

Configured Modules

Module Description
πŸ“ org-mode Note-taking, task management, agendas, literate programming
πŸ“§ mu4e Full email client β€” read, write, search email without leaving Emacs
πŸ”€ Magit The most powerful Git interface ever built
πŸ” LSP (eglot/lsp-mode) Language Server Protocol for all major languages
🐍 Python python-mode, pyflakes, black, isort, pytest integration
β˜• Java/Kotlin Full JVM language support with metals/LSP
⚑ Scala metals language server + scalafmt
🌐 Web HTML, CSS, JavaScript, PHP support
πŸ¦€ Rust rust-analyzer LSP integration
🐹 Go gopls + gomodifytags + gotests
🎯 Haskell haskell-language-server
Ξ» Lisp/Clojure SLIME + CIDER integration
🎨 UI Nerd Fonts icons, modeline, dashboard, doom-themes
πŸ“‹ Org-roam Zettelkasten-style knowledge management

Email with mu4e

The framework configures a complete email workflow:

Component Role
isync / mbsync Sync Gmail IMAP to local Maildir
msmtp Send email via Gmail SMTP
mu / mu4e Index and search email in Emacs
gnupg Sign and encrypt emails

Gmail credentials are stored GPG-encrypted in ~/.env.sh and decrypted at runtime β€” never stored in plaintext.

Emacs Aliases

emacs           # Open Emacs GUI client (emacsclient -c)
emacs.          # Open Emacs in terminal mode (emacsclient -c -a 'emacs -nw')
emacs-kill      # Kill Emacs server and restart daemon

πŸ”€ Git Configuration

The framework auto-generates a complete .gitconfig with your personal details and the following configuration:

Core Settings

Setting Value
Default branch main
Editor vim
Pager bat (syntax highlighted)
Diff tool kitty (Kitty terminal diff viewer)
Merge tool vimdiff
Browser firefox

Delta Diff Viewer

Git diffs are displayed using delta with:

  • Line numbers
  • Coloured additions/deletions (green/red bold)
  • Magenta hunk headers with box decorations
  • Yellow file names with box decorations

Git Aliases (100+)

A sample of the most useful:

# Quick shortcuts
g a          # git add --all
g cm "msg"   # git commit -m
g s          # git status
g sb         # git status -s -b
g l          # git log --oneline
g lg         # git log --oneline --graph --decorate

# Branching
g b          # branch
g ob <name>  # checkout -b (create new branch)
g bc         # show current branch name
g bd <name>  # delete branch

# Push / Pull
g psuoc      # push -u origin <current-branch>
g psoc       # push origin <current-branch>
g ploc       # pull origin <current-branch>
g pboc       # pull --rebase origin <current-branch>

# Stash
g ss "msg"   # stash save
g sp         # stash pop
g sl         # stash list

# Useful utilities
g whois "name"    # Find author details
g aliases         # List all git aliases
g snap            # Snapshot stash (non-destructive)
g ahead           # Commits ahead of upstream
g behind          # Commits behind upstream
g assume <file>   # Ignore local changes to a tracked file
g ours <file>     # Resolve conflict with our version
g theirs <file>   # Resolve conflict with their version

⌨️ Key Bindings

Shell Navigation

Key Action
Alt + h Move backward one character
Alt + l Move forward one character
Alt + u Move backward one word
Alt + p Move forward one word
Alt + n Move to beginning of line
Alt + m Move to end of line

Editing

Key Action
Ctrl + Backspace Delete word before cursor
Ctrl + Delete Delete word after cursor
Alt + j Delete character before cursor
Alt + k Delete character under cursor
Alt + i Delete word before cursor
Alt + o Delete word after cursor

Shell Features

Key Action
Ctrl + F Accept autosuggestion
Ctrl + D Accept and execute autosuggestion
Ctrl + R FZF fuzzy history search
Ctrl + E FZF file search
Alt + [ Search history backward
Alt + ] Search history forward

GitHub Copilot (optional)

Key Action
Alt + \ Copilot suggest
Alt + Shift + \ Copilot explain

πŸ“ Aliases

✏️ Editors

v               # /bin/vim (raw, no config)
vi / vim        # nvim β†’ vim fallback
emacs           # emacsclient GUI
emacs.          # emacsclient terminal (no window)
emacs-kill      # Kill + restart Emacs daemon

πŸ“ Navigation

c.              # cd ..
c..             # cd ../..
c...            # cd ../../..
up <n>          # Go up N directories (e.g. up 3)
c <pattern>     # z fuzzy jump to directory
rr              # Ranger with automatic cd on exit

πŸ“‹ File Listing (lsd)

ls              # lsd -al (full list, hidden files, colours)
ll              # lsd -l  (long format)
lt              # lsd -a --tree (tree view)
la              # lsd -a  (all files)
l. / l.. / l... # List parent directories

πŸ” Search

find-text <pat>     # ripgrep recursive search
find-file <name>    # fd + fzf β†’ open result in nvim
find-dir  <name>    # fd + fzf β†’ open result in nvim

πŸ“¦ Archive Extraction

extract <file>      # Auto-detect format and extract
                    # Supports: tar, gz, bz2, xz, zip, rar,
                    #           7z, deb, iso, exe, cpio, ace...

πŸ”€ Git

g                   # git
git.                # lazygit TUI
gitinfo             # onefetch repo overview
diff                # git diff --color-words
difftool            # git difftool -y
mergetool           # git mergetool -y
log                 # git log --oneline --graph --decorate | bat
logall              # git log --graph --decorate | bat
logfull             # git log --full-history --graph | bat
logauthor <name>    # git log filtered by author | bat

πŸ™ GitHub CLI

copilot             # gh copilot
pull-list           # gh pr list
pull-view           # gh pr view
issue               # gh issue create -f
issue-list          # gh issue list
issue-search <q>    # gh issue list --search
issue-view <n>      # gh issue view
issue-comment <n>   # gh issue comment
issue-assign <n>    # gh issue assign
issue-close <n>     # gh issue close

πŸ“¦ Package Management

install <pkg>       # sudo pacman -S
remove <pkg>        # sudo pacman -R
search <pkg>        # pacman -Ss
update              # sudo pacman -Syu
clean               # sudo pacman -Sc (clean cache)
autoremove          # Remove orphaned packages (safe)

# Mirror optimisation
mirror              # Best 10 mirrors by speed
mirrord             # Sort by delay
mirrors             # Sort by score
mirrora             # Sort by age

πŸ–₯️ Kitty Terminal

kitty-theme         # Change Kitty colour theme
kitty-fonts         # Change Kitty font
kitty-ssh           # SSH via Kitty
compare <f1> <f2>   # Side-by-side diff in Kitty
image <file>        # Display image inline in terminal
unicode             # Browse Unicode characters
ssh-download        # Download file via Kitty transfer
ssh-upload          # Upload file via Kitty transfer
ssh-rsync-download  # Rsync download (incremental)
ssh-rsync-upload    # Rsync upload (incremental)

πŸ–₯️ System

top                 # btop (beautiful system monitor)
sysremote           # glances (HTTP API system monitor)
sysinfo             # neofetch
cpu                 # lscpu (CPU info)
du                  # ncdu (visual disk usage)
df                  # pydf -h (disk free, colourised)
journal             # journalctl -xe (recent errors)
journalf            # journalctl -f (follow live)
kernel-errors       # dmesg errors/warnings
shutdown            # sudo shutdown -h now
reboot              # sudo reboot
sleep               # systemctl suspend
grub-install        # Install GRUB (EFI, x86_64)
grub-update         # Regenerate grub.cfg

πŸ”§ Systemctl

sys-start   <svc>   # start immediately
sys-stop    <svc>   # stop
sys-restart <svc>   # restart
sys-enable  <svc>   # enable at boot
sys-disable <svc>   # disable at boot
sys-status  <svc>   # current status

🌐 Network

ping <host>         # ping -c 5 (5 packets)
httpie              # http --print=HhBb (headers + body)
network-speed       # speedtest-cli

πŸ“Š Processes

psa                 # ps auxf (all processes, tree)
psmem               # ps sorted by memory usage
pscpu               # ps sorted by CPU usage
psgrep <name>       # grep running processes

πŸŽ“ Origin

This project was created by Borislav Aleksandrov Dostumski as a practical application of skills learned during the Linux Shell Scripting course on Udemy.

What started as shell scripting practice β€” learning POSIX sh, scripting idioms, system automation and dotfile management β€” evolved into a complete, production-quality framework that demonstrates what is possible with solid fundamentals and deliberate practice.

"The best way to learn is to build something real."


πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.

Free to use, modify and distribute. ❀️


Made with ❀️ and lots of zsh by bdostumski

"Let's try to master the chaos πŸ”₯"