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
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.
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.
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
| 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 |
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
| Package | Description |
|---|---|
linux-zen |
Performance and latency optimised kernel |
linux-zen-headers |
Kernel headers required for module compilation |
| Fonts |
|---|
| DejaVu Β· Liberation Β· Roboto Β· Ubuntu Β· Noto (+ Emoji + CJK) |
| Fira Code Β· Fira Mono Β· Fira Sans Β· JetBrains Mono |
| Hack Β· Inconsolata Β· Nerd Fonts Β· OpenSans Β· Terminus |
kitty Β· zsh Β· git Β· github-cli Β· ranger
base-devel Β· make Β· gcc Β· clang Β· cmake
vim Β· neovim Β· emacs + emacs-apel Β· emacs-haskell-mode Β· emacs-lua-mode Β· emacs-python-mode Β· emacs-slime
lazygit Β· git-delta Β· kdiff3
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
ufw Β· clamav Β· gnupg Β· openssh
isync Β· offlineimap Β· msmtp Β· mu Β· w3m Β· gnupg
sqlite Β· jq Β· direnv
shfmt Β· shellcheck Β· tidy Β· stylelint
pandoc Β· languagetool Β· hunspell Β· hunspell-en_us
| 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 |
| 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) |
graphviz Β· gnuplot Β· maim Β· scrot Β· plantuml Β· transmission Β· wine
qemu Β· virt-manager Β· virt-viewer Β· libvirt Β· dnsmasq Β· bridge-utils Β· virtualbox Β· virtualbox-host-modules-arch
auto-cpufreq Β· backintime Β· downgrade
β οΈ 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.
- Fresh Arch Linux installation
- Internet connection
gitinstalled:sudo pacman -S gitzshinstalled:sudo pacman -S zsh
git clone https://github.com/bdostumski/arch-frame.git
cd arch-frameEdit 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.
chmod +x install.sh
./install.shYou 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
After Option 1 completes, restart your terminal using Kitty and re-run for Option 2 if needed:
exec zshThe 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 configurePlugins 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) |
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
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 |
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.
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 statusClamAV 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
clamavsystem 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.servicesystemd unit - Enables desktop notifications via sudoers
- Enables all three services at boot
Automated scanning runs via:
cron.dailyβ daily home directory scancron.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# 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 keyDoom Emacs is installed and pre-configured as a full-featured IDE and personal productivity system.
The framework clones Doom Emacs and runs doom install automatically:
git clone https://github.com/doomemacs/doomemacs ~/.config/emacs
~/.config/emacs/bin/doom install| 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 |
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 # Open Emacs GUI client (emacsclient -c)
emacs. # Open Emacs in terminal mode (emacsclient -c -a 'emacs -nw')
emacs-kill # Kill Emacs server and restart daemonThe framework auto-generates a complete .gitconfig with your personal details and the following configuration:
| Setting | Value |
|---|---|
| Default branch | main |
| Editor | vim |
| Pager | bat (syntax highlighted) |
| Diff tool | kitty (Kitty terminal diff viewer) |
| Merge tool | vimdiff |
| Browser | firefox |
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
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 | 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 |
| 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 |
| 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 |
| Key | Action |
|---|---|
Alt + \ |
Copilot suggest |
Alt + Shift + \ |
Copilot explain |
v # /bin/vim (raw, no config)
vi / vim # nvim β vim fallback
emacs # emacsclient GUI
emacs. # emacsclient terminal (no window)
emacs-kill # Kill + restart Emacs daemonc. # 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 exitls # 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 directoriesfind-text <pat> # ripgrep recursive search
find-file <name> # fd + fzf β open result in nvim
find-dir <name> # fd + fzf β open result in nvimextract <file> # Auto-detect format and extract
# Supports: tar, gz, bz2, xz, zip, rar,
# 7z, deb, iso, exe, cpio, ace...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 | batcopilot # 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 closeinstall <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 agekitty-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)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.cfgsys-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 statusping <host> # ping -c 5 (5 packets)
httpie # http --print=HhBb (headers + body)
network-speed # speedtest-clipsa # ps auxf (all processes, tree)
psmem # ps sorted by memory usage
pscpu # ps sorted by CPU usage
psgrep <name> # grep running processesThis 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."
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 π₯"