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:
@@ -3,6 +3,7 @@
|
||||
# 00-system-prep.sh
|
||||
# Updates system and sets up Flathub.
|
||||
# Relies on DISTRO and PACKAGE_MANAGER being set by the caller.
|
||||
# Supports NixOS, Fedora (dnf), and Debian/Ubuntu (apt).
|
||||
|
||||
echo "--- Starting System Preparation ---"
|
||||
|
||||
@@ -11,23 +12,32 @@ if [ -z "$DISTRO" ] || [ -z "$PACKAGE_MANAGER" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Update system before installing packages
|
||||
echo "Updating system packages..."
|
||||
if [ "$PACKAGE_MANAGER" == "dnf" ]; then
|
||||
sudo dnf update -y && sudo dnf upgrade -y
|
||||
elif [ "$PACKAGE_MANAGER" == "apt" ]; then
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
else
|
||||
echo "WARNING: Unknown package manager '$PACKAGE_MANAGER'. Skipping system update."
|
||||
# ── NixOS path: system updates are declarative via flake ──
|
||||
if [ "$DISTRO" == "nixos" ]; then
|
||||
echo "NixOS detected: system updates are managed declaratively via flake.nix."
|
||||
echo "Run 'nixos-rebuild switch --flake ~/dotfiles/nixos#nixos' to apply changes."
|
||||
echo "Skipping imperative system update."
|
||||
fi
|
||||
|
||||
# Setup Flatpak
|
||||
# ── Traditional distro path ────────────────────────────────
|
||||
if [ "$DISTRO" != "nixos" ]; then
|
||||
echo "Updating system packages..."
|
||||
if [ "$PACKAGE_MANAGER" == "dnf" ]; then
|
||||
sudo dnf update -y && sudo dnf upgrade -y
|
||||
elif [ "$PACKAGE_MANAGER" == "apt" ]; then
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
else
|
||||
echo "WARNING: Unknown package manager '$PACKAGE_MANAGER'. Skipping system update."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Setup Flatpak (works on NixOS too if enabled in flake.nix)
|
||||
echo "Setting up Flathub repository..."
|
||||
if command -v flatpak &> /dev/null; then
|
||||
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
else
|
||||
echo "WARNING: flatpak command not found. Skipping Flathub setup."
|
||||
echo "Ensure Flatpak is installed via 01-package-install.sh or manually."
|
||||
echo "Ensure Flatpak is installed via your package manager or flake.nix."
|
||||
fi
|
||||
|
||||
echo "--- System Preparation Finished ---"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# 01-package-install.sh
|
||||
# Installs system packages and Flatpak applications.
|
||||
# Relies on DISTRO and PACKAGE_MANAGER being set by the caller.
|
||||
# Supports NixOS (nix profile), Fedora (dnf), and Debian/Ubuntu (apt).
|
||||
|
||||
echo "--- Starting Package Installation ---"
|
||||
|
||||
@@ -11,6 +12,26 @@ if [ -z "$DISTRO" ] || [ -z "$PACKAGE_MANAGER" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── NixOS path ─────────────────────────────────────────────
|
||||
if [ "$DISTRO" == "nixos" ]; then
|
||||
echo "NixOS detected: packages are managed declaratively via nixos/flake.nix"
|
||||
echo "and nixos/home.nix. Run the main-setup.sh workflow or apply manually."
|
||||
echo ""
|
||||
echo " sudo nixos-rebuild switch --flake ~/dotfiles/nixos#nixos"
|
||||
echo " home-manager switch --flake ~/dotfiles/nixos#blake"
|
||||
echo ""
|
||||
echo "If you want imperative ad-hoc packages, uncomment the lines below"
|
||||
echo "or run manually:"
|
||||
echo ""
|
||||
echo " nix profile install nixpkgs#<package>"
|
||||
echo ""
|
||||
echo "Skipping imperative package installation."
|
||||
echo "--- Package Installation Finished ---"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ── Traditional distro path (Fedora / Ubuntu / Debian) ─────
|
||||
|
||||
# Define base package list
|
||||
BASE_PACKAGE_LIST=(
|
||||
ansible
|
||||
@@ -127,7 +148,7 @@ done
|
||||
if [ "$PACKAGE_MANAGER" == "apt" ] && command -v fdfind &>/dev/null && ! command -v fd &>/dev/null; then
|
||||
if dpkg-query -W -f='${Status}' "fd-find" 2>/dev/null | grep -q "ok installed"; then
|
||||
echo "Creating symlink for fd from fdfind..."
|
||||
sudo ln -sf /usr/bin/fdfind /usr/local/bin/fd
|
||||
sudo ln -sf /usr/bin/fdfind /usr/local/bin/fd
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -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