renamed 'shell-setup' to 'setup'

This commit is contained in:
Peter Wood
2025-05-12 15:16:35 -04:00
parent 52492f9218
commit 7d3d225b0a
7 changed files with 78 additions and 3 deletions

225
setup/debian-patches.sh Executable file
View File

@@ -0,0 +1,225 @@
#!/bin/bash
# This script applies Debian-specific patches to the setup scripts
# It should be run before bootstrap.sh on Debian systems
set -e # Exit on error
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Check if running on Debian
if [ -f /etc/os-release ]; then
. /etc/os-release
if [[ "$ID" == "debian" ]]; then
echo -e "${BLUE}Running on Debian $VERSION_ID ($PRETTY_NAME)${NC}"
else
echo -e "${YELLOW}This script is intended for Debian systems but detected $PRETTY_NAME${NC}"
echo -e "${YELLOW}Continue anyway? [y/N]${NC}"
read -r response
if [[ ! "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
echo -e "${RED}Exiting...${NC}"
exit 1
fi
fi
fi
# Create a packages mapping file
PATCH_DIR="$HOME/.shell-debian-patches"
mkdir -p "$PATCH_DIR"
echo -e "${YELLOW}Creating Debian package name mappings...${NC}"
cat > "$PATCH_DIR/debian-packages.map" << 'EOF'
# Debian package name mappings
# format: ubuntu-name|debian-name
# bat is called batcat on Debian
bat|batcat
# Keep original names for packages that are the same
git|git
python3|python3
wget|wget
curl|curl
cowsay|cowsay
lolcat|lolcat
fzf|fzf
zsh|zsh
# Different package names for Nala source
software-properties-common|software-properties-common
EOF
# Create a patching script that will be called by setup.sh
echo -e "${YELLOW}Creating Debian patching script...${NC}"
cat > "$PATCH_DIR/apply-debian-patches.sh" << 'EOF'
#!/bin/bash
# Script to apply Debian-specific patches to the setup process
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
PATCH_DIR="$HOME/.shell-debian-patches"
# Check if running on Debian
if [ -f /etc/os-release ]; then
. /etc/os-release
if [[ "$ID" != "debian" ]]; then
echo -e "${YELLOW}Not running on Debian, skipping patches${NC}"
exit 0
fi
fi
echo -e "${BLUE}Applying Debian-specific patches...${NC}"
# Function to map package names from Ubuntu to Debian
map_package() {
local ubuntu_pkg="$1"
local debian_pkg
# Look for the package in the mapping file
if [ -f "$PATCH_DIR/debian-packages.map" ]; then
debian_pkg=$(grep -v "^#" "$PATCH_DIR/debian-packages.map" | grep "^$ubuntu_pkg|" | cut -d'|' -f2)
fi
# If not found or empty, use the original name
if [ -z "$debian_pkg" ]; then
debian_pkg="$ubuntu_pkg"
fi
echo "$debian_pkg"
}
# Patch the packages.list file if it exists
if [ -f "$HOME/shell/setup/packages.list" ]; then
echo -e "${YELLOW}Patching packages.list for Debian compatibility...${NC}"
# Create a temporary patched file
temp_file=$(mktemp)
# Process each line
while IFS= read -r line; do
# Skip comments and empty lines
if [[ "$line" =~ ^//.*$ ]] || [[ -z "$line" ]]; then
echo "$line" >> "$temp_file"
continue
fi
# Map the package name
debian_pkg=$(map_package "$line")
echo "$debian_pkg" >> "$temp_file"
done < "$HOME/shell/setup/packages.list"
# Backup original and replace with patched version
cp "$HOME/shell/setup/packages.list" "$HOME/shell/setup/packages.list.orig"
mv "$temp_file" "$HOME/shell/setup/packages.list"
echo -e "${GREEN}Patched packages.list for Debian compatibility${NC}"
fi
# Other Debian-specific patches can be added here...
# Add contrib and non-free repositories if they're not already enabled
echo -e "${YELLOW}Checking Debian repositories...${NC}"
if ! grep -q "contrib" /etc/apt/sources.list; then
echo -e "${YELLOW}Adding contrib and non-free repositories...${NC}"
# Create a backup of the original sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
# Add contrib and non-free to each deb line
sudo sed -i 's/main$/main contrib non-free non-free-firmware/g' /etc/apt/sources.list
echo -e "${GREEN}Added contrib and non-free repositories${NC}"
fi
echo -e "${GREEN}Debian patches applied successfully${NC}"
EOF
chmod +x "$PATCH_DIR/apply-debian-patches.sh"
# Create a wrapper script for bootstrap.sh
echo -e "${YELLOW}Creating Debian bootstrap wrapper...${NC}"
cat > "$HOME/debian-bootstrap.sh" << 'EOF'
#!/bin/bash
# Debian wrapper for bootstrap.sh
set -e # Exit on error
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
PATCH_DIR="$HOME/.shell-debian-patches"
# Apply Debian patches first
if [ -x "$PATCH_DIR/apply-debian-patches.sh" ]; then
echo -e "${BLUE}Applying Debian patches before bootstrap...${NC}"
"$PATCH_DIR/apply-debian-patches.sh"
fi
# Download and run the bootstrap script
echo -e "${BLUE}Running bootstrap script...${NC}"
curl -s https://raw.githubusercontent.com/acedanger/shell/main/bootstrap.sh | bash
# Apply patches again after bootstrap (in case packages.list was just downloaded)
if [ -x "$PATCH_DIR/apply-debian-patches.sh" ]; then
echo -e "${BLUE}Applying Debian patches after bootstrap...${NC}"
"$PATCH_DIR/apply-debian-patches.sh"
fi
echo -e "${GREEN}Debian bootstrap completed!${NC}"
EOF
chmod +x "$HOME/debian-bootstrap.sh"
# Add a hook to setup.sh to call the Debian patch script
echo -e "${YELLOW}Creating setup.sh hook for Debian...${NC}"
cat > "$PATCH_DIR/setup-hook.sh" << 'EOF'
#!/bin/bash
# Hook to modify setup.sh to call Debian patches
if [ -f /etc/os-release ]; then
. /etc/os-release
if [[ "$ID" == "debian" ]]; then
# Modify setup.sh to call Debian patches
if [ -f "$HOME/shell/setup/setup.sh" ]; then
# Check if the patch hasn't been applied yet
if ! grep -q "apply-debian-patches" "$HOME/shell/setup/setup.sh"; then
# Add call to Debian patch script right after the shebang
sed -i '2i\
# Apply Debian patches if available\
if [ -x "$HOME/.shell-debian-patches/apply-debian-patches.sh" ]; then\
echo -e "${YELLOW}Applying Debian-specific patches...${NC}"\
"$HOME/.shell-debian-patches/apply-debian-patches.sh"\
fi' "$HOME/shell/setup/setup.sh"
fi
fi
fi
fi
EOF
chmod +x "$PATCH_DIR/setup-hook.sh"
echo -e "${GREEN}Debian compatibility patch has been set up!${NC}"
echo -e "${YELLOW}To bootstrap your Debian system, run:${NC}"
echo -e " ${BLUE}bash ~/debian-bootstrap.sh${NC}"
echo ""
echo -e "${YELLOW}This has created:${NC}"
echo -e "1. Package name mappings for Debian"
echo -e "2. A patch script for Debian-specific adjustments"
echo -e "3. A Debian-specific bootstrap wrapper"