I made this script for myself to make it easier starting on different systems, so the stuff inside is focused on my personal preferences and keeping my configs exactly the same. Run at your own risk.
curl -fsSLhttps://raw.githubusercontent.com/956MB/dotfiles/main/install.sh | shThe script will:
- Backup existing configs (bat, btop, delta, fish, ghostty, herdr, nvim, yazi, zellij, starship.toml, .gitconfig)
- Install Homebrew, Fish shell, and Fish tooling (eza, starship, zoxide, zellij, herdr)
- Clone the repo and create symlinks for the same set of configs
- Install packages from the Brewfile (optional, with GUI/non-GUI prompts)
- Set Fish as the default shell
It runs on macOS (Intel + Apple Silicon) and Linux, with an interactive menu on first launch.
./install.sh
./install.sh {-p, --packages-only} # Packages only (no symlinks/shell changes)
./install.sh {-r, --revert} # Revert to previous configuration (restores from backup)alias v='nvim'# Open neovimalias nv='nvim'# Open neovim (alternative)alias z-='z -'# Navigate to previous directory using zoxidealias cd..='z ..'# Go up one directory using zoxidealias z..='z ..'# Go up one directory using zoxide (alternative)alias ..='z ..'# Go up one directory using zoxidealias ...='z ../..'# Go up two directories using zoxidealias ....='z ../../..'# Go up three directories using zoxidealias zfreq='zoxide query -l'# List most frequently used directoriesalias yy='yazi'# Open yazialias fct='find . -maxdepth 1 -type d ! -name ".*" | wc -l'# Count number of directories in the current directory (excluding hidden ones)alias func='functions'# List all functionsalias cat='bat'# Use bat instead of catalias oldcat='cat'# Use original catalias l='eza --group-directories-first'# List with icons, directories firstalias ls='eza --group-directories-first'# List with icons, directories firstalias ll='eza -l --group-directories-first'# Long format with iconsalias la='eza -la --group-directories-first'# List all (including hidden) with iconsalias lt='eza --tree --icons'# Tree view with iconsalias l.='eza -a | grep -E "^\."'# Show only hidden filesalias lsa='eza -la --group-directories-first'# List all with icons (including hidden)alias lsr='eza -R --icons'# List recursivelyalias lsf='eza -1 | wc -l'# Count number of filesalias lss='eza -la --group-directories-first --sort=size'# Sort by sizealias cls='clear'# Clear the terminal screenalias top='btop'# Use btop instead of topalias oldtop="/usr/bin/top"# Run the original top commandalias nf="neofetch"# Display system information using neofetchalias of='onefetch --no-color-palette --include-hidden -E --no-title --ascii-input "$(cat ~/dotfiles/.github/logos/logo.txt)"'# Display git repository information using onefetch with logoalias ep="echo $PATH"# Print the PATH environment variablealias resh="source ~/.config/fish/config.fish"# Reload the fish configurationalias nvs="nvim ~/.scratch/$(date +%Y-%m-%d-%H%M%S).txt"# Open a timestamped scratch file in neovimalias mkd="mkdir"# Create a new directoryalias ld='lazydocker'# Open Lazydocker interfacealias ff='fastfetch --logo ~/dotfiles/logo.txt'# Display system info with logoalias cl='linecounts'# List files sorted by line countalias vzsh='nvim ~/.config/fish/config.fish'alias vlua='nvim ~/dotfiles/nvim'alias zsr='zellij ac rename-session'# Rename zellij session <name>alias zsa='zellij a'# Attach to zellij session <name>alias zsl='zellij ls'# List zellij sessionsalias zsk='zellij k'# Kill zellij session <name>alias zsd='zellij d'# Delete zellij session <name>alias ts='tailscale'# Tailscale commandalias tsh='tailscale --help'# Tailscale helpalias tsv='tailscale version'# Tailscale versionalias tsup='tailscale up'# Start Tailscalealias tsdown='tailscale down'# Stop Tailscalealias tss='tailscale status'# Show Tailscale statusalias tsip='tailscale ip'# Show Tailscale IPv4 addressalias tssh='tailscale ssh'# SSH into a Tailscale machinealias tsdc='ps aux | grep tailscaled | grep -v grep'# Check if tailscaled daemon is runningalias tsre='sudo pkill tailscaled; sleep 1; brew services start tailscale'# Restart tailscaled daemon (after brew upgrade)alias vicstart='systemctl --user start vicinae.service'alias vicstop='systemctl --user stop vicinae.service'alias vicrestart='systemctl --user restart vicinae.service'alias vicstatus='systemctl --user status vicinae.service'alias vicenable='systemctl --user enable --now vicinae.service'alias vicdisable='systemctl --user disable vicinae.service'alias zup='zigup'# <version>: Fetch compiler and set defaultalias zupf='zigup fetch'# <version>: Fetch Zig compileralias zuph='zigup --help'# Zigup helpalias zupls='zigup list'# List installed Zig versionsalias zupdef='zigup default'# Set global Zig versionalias zupcl='zigup cleanup'# Clean compilers that aren't default/master/keepalias zupkp='zigup keep'# <version>: Mark compiler as keepalias zupr='zigup run'# <version> <args>: Run specific compileralias hreload='herdr server reload-config'# Reload config without restartalias hsa='herdr session attach'# Attach to session <name>alias hsl='herdr session list'# List sessionsalias hsk='herdr session stop'# Stop session <name>alias hsd='herdr session delete'# Delete session <name>alias hsr='herdr workspace rename'# Rename workspace <id> <name>alias hwl='herdr workspace list'# List workspacesalias hwc='herdr workspace create'# Create a new workspacealias hst='herdr status'# Show herdr statusalias ftl='find . -type f -name "*.*" -exec basename {} \; | sed "s/.*\.//" | sort -u'# List unique file extensions in current directoryalias ga='git add'# Stage changesalias gaa='git add .'# Stage all changes in current directoryalias gaaa='git add -A'# Stage all changesalias gc='git commit'# Commit changesalias gcm='git commit -m'# Commit changes with a messagealias gbr='git branch -M'# Rename current branchalias gcr='git clone'# Clone a repositoryalias gd='git diff'# Show changes between commits, commit and working tree, etc.alias gds='git diff --stat'# Show diff stats (files changed, insertions, deletions)alias gi='git init'# Initialize a new Git repositoryalias gl='git log'# Show commit logsalias gp='git pull'# Fetch from and integrate with another repository or a local branchalias gpsh='git push'# Update remote refs along with associated objectsalias gss='git status'# Show the working tree statusalias gwho='git shortlog -s -n | head'# Show top contributorsalias gcnt='git ls-files | wc -l'# Count number of files in the repositoryalias lg='lazygit'# Open Lazygit interfacealias grl='gh repo ls 956MB'# List my repos on GitHubalias grlf='gh repo ls 956MB --fork'# List my forked repos on GitHub# GitHub Copilot CLI function aliasesexp() {
gh copilot explain "$*"
}
sug() {
gh copilot suggest "$*"
}A better alias command, and my first thing written in Zig for fun. Uses color and description comments in fish/conf.d/aliases.fish.
brew wrapper that mirrors install/uninstall/reinstall into Brewfile. Parses --cask and known flags so the Brewfile stays in sync automatically.
Prints the absolute path of a file/directory (default .) and copies it to the clipboard.
Counts total first-level subdirectories across all top-level folders.
Clones a repo from https/ssh (and z into it), and as backup uses github cli
{gcr,gcrz}https://github.com/Next-Flip/Momentum-Firmware.gitOpens a herdr session, defaulting to the current directory name.
hj# -> herdr --session <cwd>Lists all files (skipping node_modules, .git, dist, etc.) sorted by line count.
Create a directory and z into it in one step.
Renames the current directory and stays inside it.
Manage the persistent opencode web service (launchd + Tailscale).
ocw# show statusocwstart# kickstart the serviceocwstop# SIGTERM the serviceocwlog# tail both log filesocwurl# print Tailscale URLocwinstall|uninstall|enable|disable|restartAttach the opencode TUI to the running web service on localhost:4096. Reads password from Keychain. Accepts an optional session name.
opc# attach to current diropcmy-sess# attach to a named sessionFinds all .psd files recursively and prints their sizes in MB/GB with a total.
Initialize a git repo and publish it to GitHub as a new repo (defaults to private, pass --public to override).
Updates Tailscale via Homebrew and restarts the daemon, handling root-owned tailscaled and firewall rules.
Copy file contents or stdin to clipboard. Works on macOS (pbcopy) and Linux (wl-copy/xclip/xsel).
Opens a zellij session if it exists and creates it if not
zj# -> zellij attach <cwd> -cDelete all exited zellij sessions except the ones specified
zsdedotfiles|Momentum-Firmware.wiki# -> zellij ls -n | grep EXITED | grep -v "dotfiles\|Momentum-Firmware.wiki" | awk '{print $1}' | xargs -I {} zellij d {}# onefetch --no-color-palette --include-hidden -E --no-title --ascii-input "$(cat ./.github/logos/logo-52b.txt)"
⠀⠀⣀⠀⡀⢀⡀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⡀⠀⠀ HEAD: 5a958a3 (main, github/main)
⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⡂ Pending: 2+-3+
⠈⠻⣿⣿⣿⣿⣶⡀⠈⠈⠈⠉⠉⠉⠉⠃⠋⠉⠋⠉⠉⠉⠉⠉⣿⣿⢿⡯⡟⠀ Created: 2yearsago
⠀⠀⠈⠻⣿⣻⣽⣷⣢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⡿⡽⠊⠀⠀ Languages:
⠀⠀⠀⠀⠈⠛⢯⣷⣿⣳⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⠯⠋⠀⠀⠀⠀ ● Lua (83.0%) ● Fish (8.5%)
⠀⠀⠀⠀⠀⠀⠀⠙⢾⢵⢯⡳⣑⡀⠀⠀⠀⠀⢀⣴⣿⣿⡿⠇⠁⠀⠀⠀⠀⠀ ● Shell (3.1%) ● Python (1.5%)
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢵⢹⡪⡪⡢⡀⣀⣴⣿⣿⣿⠏⠁⠀⠀⠀⠀⠀⠀⠀ ● BASH (1.2%) ● Zig (1.1%)
⠀⢠⣾⣿⣧⣄⡀⠀⠀⠀⠀⠑⠕⡝⣼⣾⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ ● Other (1.5%)
⠀⢸⣿⣿⢿⡿⣿⣷⣤⣀⠀⠀⠀⣠⣿⣟⣿⣟⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ Authors: 50%956MB<bays@956mb.com>76
⠀⠀⣟⣾⣻⠟⣿⢾⣻⡿⣿⣦⣾⣻⣽⡟⣟⢮⣳⢥⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 48%AlexanderBays<bays@956mb.com>73
⠀⠀⣟⡾⣽⠃⠀⠙⠫⣿⣯⣿⣽⣿⣷⣧⡀⠙⣾⣯⣷⣅⡀⠀⠀⠀⠀⠀⠀⠀ 1%AlexanderBays<bays@MacBookPro.attlocal.net>2
⠀⠀⣗⣯⣳⡃⠀⢠⣾⣳⣿⢾⢿⡾⣯⣿⣿⣷⣮⣷⣷⣻⢮⣄⠀⠀⠀⠀⠀⠀ Lastchange: 34secondsago
⠀⠀⣗⢧⣳⣃⣴⣿⣯⣿⡾⠅⠁⠈⠙⠳⢿⣽⣿⣽⣿⣿⣯⣿⣵⡀⠀⠀⠀⠀ Commits: 151
⠀⠀⢸⣳⣿⣿⣿⣟⣯⠏⠁⠀⠀⠀⠀⠀⠀⠉⠚⠿⣾⣟⣿⢿⣿⣿⣦⡀⠀⠀ Churn (2): .gitignore2
⠀⠀⠘⣿⣿⢿⣽⡟⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⢿⣿⣻⣿⣯⣆⠀ …/kanso.nvim/README.md1
⠀⠀⠀⠙⠁⠁⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠟⠁⠀ …/kanso/colors.lua1Linesofcode: 18426Size: 21.24MiB (178files)
License: MIT
