feat: add NixOS support, Go, and Ruby on Rails; remove Rust
- Add nixos/ directory with declarative flake.nix and home.nix for NixOS - Make all setup scripts NixOS-aware with proper detection and early exit - Update bashrc, zshrc, and aliases with Go, Ruby on Rails, and Nix profile paths - Replace Rust/Cargo references in shell configs with rbenv/Ruby on Rails - Update README with NixOS quick start and full documentation
This commit is contained in:
@@ -2,9 +2,43 @@
|
||||
|
||||
# 02-dev-tools-setup.sh
|
||||
# Installs various development tools and utilities.
|
||||
# Supports NixOS (declarative via flake), Fedora, and Debian/Ubuntu.
|
||||
# Relies on DISTRO and PACKAGE_MANAGER being set by the caller.
|
||||
|
||||
echo "--- Starting Development Tools Setup ---"
|
||||
|
||||
if [ -z "$DISTRO" ] || [ -z "$PACKAGE_MANAGER" ]; then
|
||||
echo "ERROR: DISTRO and PACKAGE_MANAGER must be set in the environment."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── NixOS path ─────────────────────────────────────────────
|
||||
if [ "$DISTRO" == "nixos" ]; then
|
||||
echo "NixOS detected: development tools are managed declaratively"
|
||||
echo "via nixos/flake.nix and nixos/home.nix."
|
||||
echo ""
|
||||
echo "The following packages are already configured in the flake:"
|
||||
echo " - Go (go, gopls, delve)"
|
||||
echo " - Ruby on Rails (ruby, bundler, rails, rbenv, nodejs)"
|
||||
echo " - Python (python3, pip, virtualenv)"
|
||||
echo " - Neovim (latest)"
|
||||
echo " - Cloud/DevOps (kubectl, k9s, terraform, helm, awscli2)"
|
||||
echo " - Other tools (oh-my-posh, fzf, bat, eza, ripgrep, fd)"
|
||||
echo ""
|
||||
echo "Run the main-setup.sh NixOS workflow or apply manually:"
|
||||
echo ""
|
||||
echo " sudo nixos-rebuild switch --flake ~/dotfiles/nixos#nixos"
|
||||
echo " home-manager switch --flake ~/dotfiles/nixos#blake"
|
||||
echo ""
|
||||
echo "Skipping imperative dev tools setup."
|
||||
echo "--- Development Tools Setup Finished ---"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ═══════════════════════════════════════════════════════════
|
||||
# TRADITIONAL DISTRO PATH (Fedora / Ubuntu / Debian / Pop)
|
||||
# ═══════════════════════════════════════════════════════════
|
||||
|
||||
# Setup NVIM
|
||||
echo "Setting up Neovim..."
|
||||
_nvim_asset_name() {
|
||||
@@ -140,21 +174,68 @@ else
|
||||
echo "✔ Oh-My-Posh already installed: $(oh-my-posh --version | head -n1)"
|
||||
fi
|
||||
|
||||
# Install Rust Up
|
||||
echo "Installing Rust via rustup..."
|
||||
if command -v rustc &>/dev/null; then
|
||||
echo "Rust (rustc) already installed."
|
||||
# ── Ruby on Rails ──────────────────────────────────────────
|
||||
echo ""
|
||||
echo "--- Setting up Ruby on Rails ---"
|
||||
|
||||
if ! command -v ruby &>/dev/null; then
|
||||
echo "➤ Installing Ruby via rbenv..."
|
||||
|
||||
# Install rbenv
|
||||
if [ ! -d "$HOME/.rbenv" ]; then
|
||||
git clone https://github.com/rbenv/rbenv.git "$HOME/.rbenv"
|
||||
git clone https://github.com/rbenv/ruby-build.git "$HOME/.rbenv/plugins/ruby-build"
|
||||
echo 'export PATH="$PATH:$HOME/.rbenv/bin"' >> "$HOME/.bashrc"
|
||||
echo 'export PATH="$PATH:$HOME/.rbenv/bin"' >> "$HOME/.zshrc"
|
||||
echo 'eval "$(rbenv init -)"' >> "$HOME/.bashrc"
|
||||
echo 'eval "$(rbenv init -)"' >> "$HOME/.zshrc"
|
||||
echo "rbenv installed. A new shell is needed or run:"
|
||||
echo " export PATH=\"\$PATH:\$HOME/.rbenv/bin\" && eval \"\$(rbenv init -)\""
|
||||
else
|
||||
echo "rbenv already installed."
|
||||
fi
|
||||
|
||||
# Install Ruby latest stable via rbenv
|
||||
export PATH="$PATH:$HOME/.rbenv/bin"
|
||||
eval "$(rbenv init - bash 2>/dev/null || true)"
|
||||
|
||||
if command -v rbenv &>/dev/null; then
|
||||
RUBY_LATEST=$(rbenv install -l 2>/dev/null | grep -v - | tail -1)
|
||||
if [ -n "$RUBY_LATEST" ]; then
|
||||
echo "➤ Installing Ruby ${RUBY_LATEST} (this may take a while)..."
|
||||
rbenv install "$RUBY_LATEST"
|
||||
rbenv global "$RUBY_LATEST"
|
||||
echo "Ruby ${RUBY_LATEST} installed and set as global version."
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# The -y flag automates the installation, --no-modify-path prevents it from altering .profile/.bashrc directly
|
||||
# You'll need to source "$HOME/.cargo/env" or add it to your shell's config manually
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path
|
||||
echo "Rust installed via rustup. Source \"\$HOME/.cargo/env\" or add it to your shell config."
|
||||
echo "For the current session, you can run: source \"\$HOME/.cargo/env\""
|
||||
echo "✔ Ruby already installed: $(ruby --version 2>/dev/null | head -n1)"
|
||||
fi
|
||||
|
||||
# Install Bundler
|
||||
if command -v gem &>/dev/null; then
|
||||
if ! command -v bundler &>/dev/null; then
|
||||
echo "➤ Installing Bundler..."
|
||||
gem install bundler
|
||||
echo "Bundler installed."
|
||||
else
|
||||
echo "✔ Bundler already installed."
|
||||
fi
|
||||
|
||||
# Install Rails
|
||||
if ! command -v rails &>/dev/null; then
|
||||
echo "➤ Installing Rails..."
|
||||
gem install rails
|
||||
rbenv rehash 2>/dev/null || true
|
||||
echo "Rails installed."
|
||||
else
|
||||
echo "✔ Rails already installed: $(rails --version 2>/dev/null | head -n1)"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "--- Development Tools Setup Finished ---"
|
||||
|
||||
# --- Helm (Kubernetes package manager) ---
|
||||
# ── Helm (Kubernetes package manager) ──────────────────────
|
||||
echo ""
|
||||
echo "--- Installing Helm ---"
|
||||
if command -v helm &>/dev/null; then
|
||||
|
||||
Reference in New Issue
Block a user