initial commit
This commit is contained in:
134
scripts/apps.sh
Executable file
134
scripts/apps.sh
Executable file
@@ -0,0 +1,134 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/common.sh"
|
||||
source "$SCRIPT_DIR/../lib/package.sh"
|
||||
|
||||
log_info "Installing applications"
|
||||
|
||||
# VSCodium
|
||||
if command_exists codium || command_exists code; then
|
||||
log_success "VSCodium/VSCode already installed"
|
||||
else
|
||||
log_info "Installing VSCodium"
|
||||
case "$OS_TYPE" in
|
||||
macos)
|
||||
install_cask vscodium
|
||||
;;
|
||||
debian)
|
||||
wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg \
|
||||
| gpg --dearmor \
|
||||
| maybe_sudo dd of=/usr/share/keyrings/vscodium-archive-keyring.gpg
|
||||
echo 'deb [ signed-by=/usr/share/keyrings/vscodium-archive-keyring.gpg ] https://download.vscodium.com/debs vscodium main' \
|
||||
| maybe_sudo tee /etc/apt/sources.list.d/vscodium.list
|
||||
update_package_cache
|
||||
install_package codium
|
||||
;;
|
||||
arch)
|
||||
install_aur vscodium-bin
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# 1Password
|
||||
if command_exists 1password || [ -d "/Applications/1Password.app" ] 2>/dev/null; then
|
||||
log_success "1Password already installed"
|
||||
else
|
||||
log_info "Installing 1Password"
|
||||
case "$OS_TYPE" in
|
||||
macos)
|
||||
install_cask 1password
|
||||
;;
|
||||
debian)
|
||||
curl -sS https://downloads.1password.com/linux/keys/1password.asc | \
|
||||
maybe_sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/$(dpkg --print-architecture) stable main" | \
|
||||
maybe_sudo tee /etc/apt/sources.list.d/1password.list
|
||||
maybe_sudo mkdir -p /etc/debsig/policies/AC2D62742012EA22/
|
||||
curl -sS https://downloads.1password.com/linux/debian/debsig/1password.pol | \
|
||||
maybe_sudo tee /etc/debsig/policies/AC2D62742012EA22/1password.pol
|
||||
maybe_sudo mkdir -p /usr/share/debsig/keyrings/AC2D62742012EA22
|
||||
curl -sS https://downloads.1password.com/linux/keys/1password.asc | \
|
||||
maybe_sudo gpg --dearmor --output /usr/share/debsig/keyrings/AC2D62742012EA22/debsig.gpg
|
||||
update_package_cache
|
||||
install_package 1password
|
||||
;;
|
||||
arch)
|
||||
install_aur 1password
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Obsidian
|
||||
if command_exists obsidian || [ -d "/Applications/Obsidian.app" ] 2>/dev/null; then
|
||||
log_success "Obsidian already installed"
|
||||
else
|
||||
log_info "Installing Obsidian"
|
||||
case "$OS_TYPE" in
|
||||
macos)
|
||||
install_cask obsidian
|
||||
;;
|
||||
debian)
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
cd "$TEMP_DIR"
|
||||
wget -q "https://github.com/obsidianmd/obsidian-releases/releases/download/v1.5.3/obsidian_1.5.3_amd64.deb"
|
||||
maybe_sudo dpkg -i obsidian_*.deb
|
||||
maybe_sudo apt-get install -f -y
|
||||
cd -
|
||||
rm -rf "$TEMP_DIR"
|
||||
;;
|
||||
arch)
|
||||
install_aur obsidian
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Google Chrome
|
||||
if command_exists google-chrome || command_exists google-chrome-stable || [ -d "/Applications/Google Chrome.app" ] 2>/dev/null; then
|
||||
log_success "Google Chrome already installed"
|
||||
else
|
||||
log_info "Installing Google Chrome"
|
||||
case "$OS_TYPE" in
|
||||
macos)
|
||||
install_cask google-chrome
|
||||
;;
|
||||
debian)
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
cd "$TEMP_DIR"
|
||||
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
||||
maybe_sudo dpkg -i google-chrome-stable_current_amd64.deb
|
||||
maybe_sudo apt-get install -f -y
|
||||
cd -
|
||||
rm -rf "$TEMP_DIR"
|
||||
;;
|
||||
arch)
|
||||
install_aur google-chrome
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Todoist
|
||||
if command_exists todoist || [ -d "/Applications/Todoist.app" ] 2>/dev/null; then
|
||||
log_success "Todoist already installed"
|
||||
else
|
||||
log_info "Installing Todoist"
|
||||
case "$OS_TYPE" in
|
||||
macos)
|
||||
install_cask todoist
|
||||
;;
|
||||
debian)
|
||||
# Install via snap
|
||||
if ! command_exists snap; then
|
||||
log_info "Installing snapd"
|
||||
maybe_sudo apt-get install -y snapd
|
||||
fi
|
||||
maybe_sudo snap install todoist
|
||||
;;
|
||||
arch)
|
||||
install_aur todoist-appimage
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
log_success "Applications installed"
|
||||
66
scripts/golang.sh
Executable file
66
scripts/golang.sh
Executable file
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/common.sh"
|
||||
|
||||
GO_VERSION="1.23.3"
|
||||
GO_INSTALL_DIR="/usr/local/go"
|
||||
|
||||
log_info "Installing Go ${GO_VERSION}"
|
||||
|
||||
if [ -d "$GO_INSTALL_DIR" ] && [ -f "$GO_INSTALL_DIR/bin/go" ]; then
|
||||
CURRENT_VERSION=$($GO_INSTALL_DIR/bin/go version | awk '{print $3}' | sed 's/go//')
|
||||
if [ "$CURRENT_VERSION" = "$GO_VERSION" ]; then
|
||||
log_success "Go ${GO_VERSION} already installed"
|
||||
exit 0
|
||||
else
|
||||
log_info "Upgrading Go from ${CURRENT_VERSION} to ${GO_VERSION}"
|
||||
maybe_sudo rm -rf "$GO_INSTALL_DIR"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Detect architecture
|
||||
ARCH=$(uname -m)
|
||||
case "$ARCH" in
|
||||
x86_64)
|
||||
GO_ARCH="amd64"
|
||||
;;
|
||||
aarch64|arm64)
|
||||
GO_ARCH="arm64"
|
||||
;;
|
||||
*)
|
||||
log_error "Unsupported architecture: $ARCH"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Detect OS
|
||||
if is_macos; then
|
||||
GO_OS="darwin"
|
||||
else
|
||||
GO_OS="linux"
|
||||
fi
|
||||
|
||||
GO_TARBALL="go${GO_VERSION}.${GO_OS}-${GO_ARCH}.tar.gz"
|
||||
GO_URL="https://go.dev/dl/${GO_TARBALL}"
|
||||
|
||||
log_info "Downloading Go from ${GO_URL}"
|
||||
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
cd "$TEMP_DIR"
|
||||
|
||||
if ! curl -fsSL -o "$GO_TARBALL" "$GO_URL"; then
|
||||
log_error "Failed to download Go"
|
||||
rm -rf "$TEMP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "Extracting Go to ${GO_INSTALL_DIR}"
|
||||
maybe_sudo tar -C /usr/local -xzf "$GO_TARBALL"
|
||||
|
||||
cd -
|
||||
rm -rf "$TEMP_DIR"
|
||||
|
||||
log_success "Go ${GO_VERSION} installed to ${GO_INSTALL_DIR}"
|
||||
log_info "Add to PATH: export PATH=\$PATH:/usr/local/go/bin"
|
||||
108
scripts/packages.sh
Executable file
108
scripts/packages.sh
Executable file
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/common.sh"
|
||||
source "$SCRIPT_DIR/../lib/package.sh"
|
||||
|
||||
log_info "Installing packages"
|
||||
|
||||
# Essential packages
|
||||
PACKAGES=(
|
||||
"git"
|
||||
"curl"
|
||||
"wget"
|
||||
"tmux"
|
||||
"jq"
|
||||
"fzf"
|
||||
"ripgrep"
|
||||
)
|
||||
|
||||
# Modern CLI tools
|
||||
MODERN_TOOLS=(
|
||||
"starship"
|
||||
"zoxide"
|
||||
"eza"
|
||||
"fd"
|
||||
"gh"
|
||||
)
|
||||
|
||||
# Install essential packages
|
||||
for pkg in "${PACKAGES[@]}"; do
|
||||
if command_exists "$pkg" || command_exists "${pkg}find" 2>/dev/null; then
|
||||
log_success "$pkg already installed"
|
||||
else
|
||||
log_info "Installing $pkg"
|
||||
case "$pkg" in
|
||||
fd)
|
||||
install_package fd fd-find fd
|
||||
;;
|
||||
*)
|
||||
install_package "$pkg"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
|
||||
# Install modern tools
|
||||
for tool in "${MODERN_TOOLS[@]}"; do
|
||||
if command_exists "$tool"; then
|
||||
log_success "$tool already installed"
|
||||
continue
|
||||
fi
|
||||
|
||||
log_info "Installing $tool"
|
||||
|
||||
case "$tool" in
|
||||
starship)
|
||||
if is_debian; then
|
||||
curl -sS https://starship.rs/install.sh | sh -s -- -y
|
||||
else
|
||||
install_package starship
|
||||
fi
|
||||
;;
|
||||
zoxide)
|
||||
if is_debian && ! package_installed zoxide; then
|
||||
install_cargo zoxide
|
||||
else
|
||||
install_package zoxide
|
||||
fi
|
||||
;;
|
||||
eza)
|
||||
if is_debian && ! package_installed eza; then
|
||||
if command_exists exa; then
|
||||
log_success "exa (predecessor) already installed"
|
||||
else
|
||||
install_cargo eza
|
||||
fi
|
||||
else
|
||||
install_package eza
|
||||
fi
|
||||
;;
|
||||
gh)
|
||||
if is_debian && ! package_installed gh; then
|
||||
maybe_sudo mkdir -p -m 755 /etc/apt/keyrings
|
||||
wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | maybe_sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | maybe_sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
|
||||
update_package_cache
|
||||
fi
|
||||
install_package gh gh github-cli
|
||||
;;
|
||||
*)
|
||||
install_package "$tool"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Install TPM (Tmux Plugin Manager)
|
||||
TPM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/tmux/plugins/tpm"
|
||||
if [ ! -d "$TPM_DIR" ]; then
|
||||
log_info "Installing TPM (Tmux Plugin Manager)"
|
||||
ensure_dir "$(dirname "$TPM_DIR")"
|
||||
git clone https://github.com/tmux-plugins/tpm "$TPM_DIR"
|
||||
log_success "TPM installed"
|
||||
else
|
||||
log_success "TPM already installed"
|
||||
fi
|
||||
|
||||
log_success "All packages installed"
|
||||
60
scripts/plan9port.sh
Executable file
60
scripts/plan9port.sh
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/common.sh"
|
||||
|
||||
PLAN9_INSTALL_DIR="/usr/local/plan9"
|
||||
|
||||
log_info "Installing plan9port"
|
||||
|
||||
if [ -d "$PLAN9_INSTALL_DIR" ] && [ -f "$PLAN9_INSTALL_DIR/bin/9" ]; then
|
||||
log_success "plan9port already installed at ${PLAN9_INSTALL_DIR}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Install build dependencies
|
||||
log_info "Installing build dependencies"
|
||||
if is_macos; then
|
||||
# macOS needs Xcode Command Line Tools
|
||||
if ! xcode-select -p >/dev/null 2>&1; then
|
||||
log_error "Xcode Command Line Tools required. Run: xcode-select --install"
|
||||
exit 1
|
||||
fi
|
||||
elif is_debian; then
|
||||
maybe_sudo apt-get install -y build-essential libx11-dev libxt-dev libxext-dev libfontconfig1-dev
|
||||
elif is_arch; then
|
||||
maybe_sudo pacman -S --noconfirm --needed base-devel xorg-server-devel fontconfig
|
||||
fi
|
||||
|
||||
log_info "Cloning plan9port repository"
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
cd "$TEMP_DIR"
|
||||
|
||||
if ! git clone https://github.com/9fans/plan9port.git plan9; then
|
||||
log_error "Failed to clone plan9port"
|
||||
rm -rf "$TEMP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd plan9
|
||||
|
||||
log_info "Building plan9port (this may take a while)"
|
||||
if ! ./INSTALL; then
|
||||
log_error "Failed to build plan9port"
|
||||
cd -
|
||||
rm -rf "$TEMP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "Installing to ${PLAN9_INSTALL_DIR}"
|
||||
cd ..
|
||||
maybe_sudo mv plan9 "$PLAN9_INSTALL_DIR"
|
||||
|
||||
cd -
|
||||
rm -rf "$TEMP_DIR"
|
||||
|
||||
log_success "plan9port installed to ${PLAN9_INSTALL_DIR}"
|
||||
log_info "Add to environment:"
|
||||
log_info " export PLAN9=${PLAN9_INSTALL_DIR}"
|
||||
log_info " export PATH=\$PATH:\$PLAN9/bin"
|
||||
Reference in New Issue
Block a user