Add VMware Workstation installation script for CachyOS
- Automated installer that handles VMware Workstation setup - Builds kernel modules with clang/lld for CachyOS compatibility - Includes dependency checking and installation - Comprehensive error handling and logging - README with usage instructions and troubleshooting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
c08daf3f85
commit
77693e96f7
2 changed files with 271 additions and 248 deletions
328
README.md
328
README.md
|
|
@ -1,10 +1,18 @@
|
|||
# CachyOS Shell Environment Setup
|
||||
# CachyOS Setup Scripts
|
||||
|
||||
A comprehensive shell environment setup script for CachyOS (or any Arch-based distro) featuring modern CLI tools, Dracula theming, and a beautiful terminal experience.
|
||||
A collection of installation and setup scripts for CachyOS Linux, featuring modern CLI tools, shell environment setup with Dracula theming, and system configuration scripts.
|
||||
|
||||
## Features
|
||||
## Scripts
|
||||
|
||||
### Modern CLI Tools
|
||||
### Shell Environment Setup
|
||||
|
||||
A comprehensive shell environment setup script featuring modern CLI tools, Dracula theming, and a beautiful terminal experience.
|
||||
|
||||
**File:** `install.sh`
|
||||
|
||||
#### Features
|
||||
|
||||
##### Modern CLI Tools
|
||||
- **eza** - Modern replacement for `ls` with git integration and icons
|
||||
- **bat** - Better `cat` with syntax highlighting (Dracula theme)
|
||||
- **fd** - Faster and more user-friendly alternative to `find`
|
||||
|
|
@ -22,7 +30,7 @@ A comprehensive shell environment setup script for CachyOS (or any Arch-based di
|
|||
- **hyperfine** - Command-line benchmarking tool
|
||||
- **tokei** - Code statistics tool
|
||||
|
||||
### Development Tools
|
||||
##### Development Tools
|
||||
- **neovim** - Modern vim-based text editor
|
||||
- **NvChad** - Blazing fast Neovim config
|
||||
- **lazygit** - Simple terminal UI for git
|
||||
|
|
@ -31,39 +39,79 @@ A comprehensive shell environment setup script for CachyOS (or any Arch-based di
|
|||
- **zellij** - Terminal workspace with layouts (Dracula theme)
|
||||
- **navi** - Interactive cheatsheet tool
|
||||
|
||||
### Shell Environment
|
||||
##### Shell Environment
|
||||
- **zsh** - Powerful shell with Oh-My-Zsh
|
||||
- **oh-my-zsh** - Framework for managing zsh configuration
|
||||
- **zsh-syntax-highlighting** - Fish-like syntax highlighting
|
||||
- **zsh-autosuggestions** - Fish-like autosuggestions
|
||||
- **Ghostty** - Fast, native terminal emulator (Dracula theme)
|
||||
|
||||
### Theming
|
||||
All tools are configured with **Dracula theme** for a consistent, beautiful dark theme experience.
|
||||
### VMware Workstation Installation
|
||||
|
||||
## Directory Structure
|
||||
**File:** `install-vmware-workstation.sh`
|
||||
|
||||
```
|
||||
cachyos-setup/
|
||||
├── install.sh # Main installation script
|
||||
├── README.md # This file
|
||||
├── dotfiles/ # Shell configuration files
|
||||
│ ├── .zshrc # Main zsh configuration
|
||||
│ ├── .zshenv # Zsh environment variables
|
||||
│ ├── .bashrc # Bash configuration (fallback)
|
||||
│ ├── .bash_logout # Bash logout script
|
||||
│ ├── .profile # Profile configuration
|
||||
│ └── .zsh/ # Zsh completions
|
||||
├── config/ # Application configurations
|
||||
│ ├── starship.toml # Starship prompt config
|
||||
│ ├── zellij/ # Zellij workspace config
|
||||
│ ├── yazi/ # Yazi file manager config
|
||||
│ ├── fastfetch/ # Fastfetch system info config
|
||||
│ └── htop/ # Htop config
|
||||
└── fonts/ # JetBrains Mono Nerd Font
|
||||
Automated installation script for VMware Workstation on CachyOS. This script:
|
||||
- Installs VMware Workstation from the official bundle
|
||||
- Builds kernel modules (vmmon, vmnet) with clang/lld to match CachyOS kernel
|
||||
- Loads kernel modules and starts services
|
||||
- Verifies installation
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
- CachyOS Linux
|
||||
- VMware Workstation bundle file (download from VMware website)
|
||||
- Root/sudo access
|
||||
|
||||
#### Usage
|
||||
|
||||
```bash
|
||||
# Download VMware Workstation bundle from https://www.vmware.com/products/workstation-pro.html
|
||||
|
||||
# Make the script executable
|
||||
chmod +x install-vmware-workstation.sh
|
||||
|
||||
# Run with sudo (auto-detects bundle in ~/Downloads)
|
||||
sudo ./install-vmware-workstation.sh
|
||||
|
||||
# Or specify bundle path explicitly
|
||||
sudo ./install-vmware-workstation.sh /path/to/VMware-Workstation-Full-*.bundle
|
||||
```
|
||||
|
||||
## Installation
|
||||
#### What it does
|
||||
|
||||
1. Checks for required packages (kernel headers, build tools, clang, lld)
|
||||
2. Installs missing dependencies via pacman
|
||||
3. Runs VMware Workstation installer
|
||||
4. Builds vmmon and vmnet kernel modules using clang (matching CachyOS kernel compiler)
|
||||
5. Installs and loads kernel modules
|
||||
6. Enables and starts VMware services
|
||||
7. Verifies everything is working
|
||||
|
||||
#### Troubleshooting
|
||||
|
||||
If the installation fails:
|
||||
|
||||
1. Check kernel headers are installed:
|
||||
```bash
|
||||
pacman -Q linux-cachyos-headers
|
||||
```
|
||||
|
||||
2. Verify build tools:
|
||||
```bash
|
||||
pacman -Q base-devel clang lld
|
||||
```
|
||||
|
||||
3. Check VMware service status:
|
||||
```bash
|
||||
systemctl status vmware
|
||||
```
|
||||
|
||||
4. Verify kernel modules:
|
||||
```bash
|
||||
lsmod | grep -E "vmmon|vmnet"
|
||||
```
|
||||
|
||||
## Shell Environment Installation
|
||||
|
||||
### Prerequisites
|
||||
- A fresh CachyOS installation (or Arch-based distro)
|
||||
|
|
@ -103,230 +151,14 @@ The installation script will:
|
|||
|
||||
**Note:** The script will automatically backup your existing configurations to `~/.config_backup_<timestamp>/`
|
||||
|
||||
## Post-Installation
|
||||
## Contributing
|
||||
|
||||
After the installation completes:
|
||||
|
||||
1. **Logout and login** (or reboot) to apply the shell changes
|
||||
2. **Open Ghostty terminal** to experience your new setup
|
||||
3. **Run `nvim`** for the first time to complete NvChad plugin installation
|
||||
4. **Enjoy your new environment!**
|
||||
|
||||
## Key Features & Usage
|
||||
|
||||
### Enhanced Shell Commands
|
||||
|
||||
The new `.zshrc` includes many convenient aliases:
|
||||
|
||||
#### File Operations
|
||||
```bash
|
||||
ls # eza with icons and colors
|
||||
ll # eza long format
|
||||
la # eza show all files
|
||||
lt # eza tree view
|
||||
cat # bat with syntax highlighting
|
||||
```
|
||||
|
||||
#### Navigation
|
||||
```bash
|
||||
cd <dir> # Uses zoxide (learns your habits)
|
||||
.. # Go up one directory
|
||||
... # Go up two directories
|
||||
mkcd # Create directory and cd into it
|
||||
```
|
||||
|
||||
#### System Monitoring
|
||||
```bash
|
||||
top # Opens btop
|
||||
du # Uses dust
|
||||
df # Uses duf
|
||||
ps # Uses procs
|
||||
```
|
||||
|
||||
#### Git
|
||||
```bash
|
||||
lg # Opens lazygit
|
||||
gs # git status
|
||||
ga # git add
|
||||
gc # git commit
|
||||
gd # git diff (with delta)
|
||||
```
|
||||
|
||||
#### Utilities
|
||||
```bash
|
||||
help # Uses tldr for quick examples
|
||||
zconfig # Edit .zshrc
|
||||
nconfig # Edit nvim config
|
||||
sconfig # Edit starship config
|
||||
zj # Start zellij with dracula theme
|
||||
```
|
||||
|
||||
### Atuin Shell History
|
||||
|
||||
Press `Ctrl+R` to search through your shell history with atuin's powerful interface.
|
||||
|
||||
### FZF Fuzzy Finding
|
||||
|
||||
- `Ctrl+T` - Search for files
|
||||
- `Ctrl+R` - Search command history (atuin)
|
||||
- `Alt+C` - Change directory with fuzzy search
|
||||
|
||||
### Starship Prompt
|
||||
|
||||
The starship prompt shows:
|
||||
- Current directory
|
||||
- Git branch and status
|
||||
- Programming language versions (Python, Node, Rust, Go, etc.)
|
||||
- Docker context
|
||||
- Custom git remote icons (GitHub, GitLab, etc.)
|
||||
|
||||
### Zellij Terminal Workspace
|
||||
|
||||
Start zellij with Dracula theme:
|
||||
```bash
|
||||
zj
|
||||
```
|
||||
|
||||
Key bindings:
|
||||
- `Ctrl+O` - Open zellij commands
|
||||
- `Ctrl+T` - New tab
|
||||
- `Ctrl+P` - New pane
|
||||
- `Ctrl+N` - Switch panes
|
||||
|
||||
## Customization
|
||||
|
||||
### Change Themes
|
||||
|
||||
All configurations support Dracula theme by default, but you can customize:
|
||||
|
||||
- **Starship**: Edit `~/.config/starship.toml`
|
||||
- **Ghostty**: Edit `~/.config/ghostty/config`
|
||||
- **Zellij**: Edit `~/.config/zellij/config.kdl`
|
||||
- **Bat**: Change `BAT_THEME` in `.zshrc`
|
||||
- **FZF**: Modify `FZF_DEFAULT_OPTS` in `.zshrc`
|
||||
|
||||
### Add More Tools
|
||||
|
||||
To add more Rust-based tools:
|
||||
```bash
|
||||
cargo install <tool-name>
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Fonts not showing correctly
|
||||
```bash
|
||||
fc-cache -f ~/.local/share/fonts
|
||||
```
|
||||
|
||||
### Zsh not default shell
|
||||
```bash
|
||||
chsh -s $(which zsh)
|
||||
```
|
||||
|
||||
### Cargo tools not in PATH
|
||||
Add to `.zshrc`:
|
||||
```bash
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
```
|
||||
|
||||
### NvChad plugins not loading
|
||||
```bash
|
||||
nvim
|
||||
# Wait for installation to complete
|
||||
# Press Enter when prompted
|
||||
```
|
||||
|
||||
## Included Configurations
|
||||
|
||||
### .zshrc Features
|
||||
- Oh-My-Zsh with plugins
|
||||
- Starship prompt
|
||||
- Zoxide integration
|
||||
- Dracula theme for fzf, bat
|
||||
- Atuin history search
|
||||
- Modern CLI tool aliases
|
||||
- Helpful functions (extract, mkcd)
|
||||
- Git aliases
|
||||
- Custom completions support
|
||||
|
||||
### Starship Configuration
|
||||
- Minimalist design
|
||||
- Git integration with custom icons
|
||||
- Language detection (Python, Node, Rust, Go, etc.)
|
||||
- Custom git remote symbols
|
||||
- Dracula color scheme
|
||||
|
||||
### Ghostty Configuration
|
||||
- Dracula color scheme
|
||||
- JetBrains Mono Nerd Font
|
||||
- Custom padding
|
||||
- Shell integration
|
||||
- No close confirmation
|
||||
|
||||
## Package List
|
||||
|
||||
### System Packages (pacman)
|
||||
```
|
||||
zsh git curl wget base-devel fzf ripgrep bat fd xclip htop
|
||||
ruby rubygems python python-pip fontconfig unzip neovim go
|
||||
```
|
||||
|
||||
### Cargo Tools
|
||||
```
|
||||
starship zoxide yazi-fm yazi-cli zellij navi eza bat fd-find
|
||||
dust duf procs bottom sd tealdeer git-delta atuin hyperfine tokei
|
||||
```
|
||||
|
||||
### Additional Tools
|
||||
- lazygit
|
||||
- btop
|
||||
- ghostty (via AUR)
|
||||
|
||||
## Backup Information
|
||||
|
||||
The install script automatically backs up:
|
||||
- All existing dotfiles in your home directory
|
||||
- All existing configs in `~/.config/`
|
||||
|
||||
Backups are stored in: `~/.config_backup_<timestamp>/`
|
||||
|
||||
## Manual Installation Steps
|
||||
|
||||
If you prefer to install components individually:
|
||||
|
||||
1. **Install Rust**:
|
||||
```bash
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
```
|
||||
|
||||
2. **Install Oh-My-Zsh**:
|
||||
```bash
|
||||
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
|
||||
```
|
||||
|
||||
3. **Install a tool via cargo**:
|
||||
```bash
|
||||
cargo install <tool-name>
|
||||
```
|
||||
|
||||
4. **Copy configs**:
|
||||
```bash
|
||||
cp dotfiles/.zshrc ~/
|
||||
cp -r config/* ~/.config/
|
||||
```
|
||||
|
||||
## Credits
|
||||
|
||||
- **Dracula Theme**: https://draculatheme.com/
|
||||
- **NvChad**: https://nvchad.com/
|
||||
- **Starship**: https://starship.rs/
|
||||
- **Oh-My-Zsh**: https://ohmyz.sh/
|
||||
Feel free to submit issues or pull requests for improvements.
|
||||
|
||||
## License
|
||||
|
||||
Free to use and modify for personal use.
|
||||
MIT License - Feel free to use and modify these scripts.
|
||||
|
||||
---
|
||||
|
||||
**Enjoy your beautiful new shell environment! 🚀**
|
||||
**Enjoy your CachyOS setup! 🚀**
|
||||
|
|
|
|||
191
install-vmware-workstation.sh
Executable file
191
install-vmware-workstation.sh
Executable file
|
|
@ -0,0 +1,191 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# VMware Workstation Installation Script for CachyOS
|
||||
# This script installs VMware Workstation and builds kernel modules for CachyOS
|
||||
#
|
||||
# Usage: sudo ./install-vmware-workstation.sh [path-to-vmware-bundle]
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging functions
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
log_error "This script must be run as root (use sudo)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Find VMware installer bundle
|
||||
VMWARE_BUNDLE="$1"
|
||||
if [ -z "$VMWARE_BUNDLE" ]; then
|
||||
log_info "Searching for VMware Workstation bundle in ~/Downloads..."
|
||||
VMWARE_BUNDLE=$(find /home/*/Downloads -name "VMware-Workstation-Full-*.bundle" -type f 2>/dev/null | head -n 1)
|
||||
|
||||
if [ -z "$VMWARE_BUNDLE" ]; then
|
||||
log_error "VMware Workstation bundle not found in Downloads"
|
||||
log_error "Usage: sudo $0 [path-to-vmware-bundle]"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f "$VMWARE_BUNDLE" ]; then
|
||||
log_error "VMware bundle not found: $VMWARE_BUNDLE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "Found VMware bundle: $VMWARE_BUNDLE"
|
||||
|
||||
# Check for required packages
|
||||
log_info "Checking for required packages..."
|
||||
REQUIRED_PACKAGES="linux-cachyos-headers base-devel clang lld"
|
||||
MISSING_PACKAGES=""
|
||||
|
||||
for pkg in $REQUIRED_PACKAGES; do
|
||||
if ! pacman -Q $pkg &>/dev/null; then
|
||||
MISSING_PACKAGES="$MISSING_PACKAGES $pkg"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$MISSING_PACKAGES" ]; then
|
||||
log_warn "Missing required packages:$MISSING_PACKAGES"
|
||||
log_info "Installing missing packages..."
|
||||
pacman -S --needed --noconfirm $MISSING_PACKAGES
|
||||
fi
|
||||
|
||||
# Create /etc/init.d if it doesn't exist (needed for VMware installer)
|
||||
if [ ! -d /etc/init.d ]; then
|
||||
log_info "Creating /etc/init.d directory..."
|
||||
mkdir -p /etc/init.d
|
||||
fi
|
||||
|
||||
# Make installer executable
|
||||
log_info "Making installer executable..."
|
||||
chmod +x "$VMWARE_BUNDLE"
|
||||
|
||||
# Run VMware installer
|
||||
log_info "Running VMware Workstation installer..."
|
||||
if "$VMWARE_BUNDLE" --console --required --eulas-agreed; then
|
||||
log_info "VMware Workstation installed successfully"
|
||||
else
|
||||
log_error "VMware Workstation installation failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if vmware is installed
|
||||
if ! command -v vmware &>/dev/null; then
|
||||
log_error "VMware installation verification failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VMWARE_VERSION=$(vmware --version)
|
||||
log_info "Installed: $VMWARE_VERSION"
|
||||
|
||||
# Build kernel modules
|
||||
log_info "Building VMware kernel modules..."
|
||||
KERNEL_VERSION=$(uname -r)
|
||||
BUILD_DIR="/tmp/vmware-build-$$"
|
||||
|
||||
mkdir -p "$BUILD_DIR"
|
||||
|
||||
# Extract module sources
|
||||
log_info "Extracting module sources..."
|
||||
tar -xf /usr/lib/vmware/modules/source/vmmon.tar -C "$BUILD_DIR/"
|
||||
tar -xf /usr/lib/vmware/modules/source/vmnet.tar -C "$BUILD_DIR/"
|
||||
|
||||
# Build vmmon module
|
||||
log_info "Building vmmon module..."
|
||||
if make -C "$BUILD_DIR/vmmon-only" CC=clang LD=ld.lld HOSTLD=ld.lld &>/dev/null; then
|
||||
log_info "vmmon module built successfully"
|
||||
else
|
||||
log_error "Failed to build vmmon module"
|
||||
log_warn "Check /tmp/vmware-build-$$/vmmon-only for details"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build vmnet module
|
||||
log_info "Building vmnet module..."
|
||||
if make -C "$BUILD_DIR/vmnet-only" CC=clang LD=ld.lld HOSTLD=ld.lld &>/dev/null; then
|
||||
log_info "vmnet module built successfully"
|
||||
else
|
||||
log_error "Failed to build vmnet module"
|
||||
log_warn "Check /tmp/vmware-build-$$/vmnet-only for details"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Install kernel modules
|
||||
log_info "Installing kernel modules..."
|
||||
mkdir -p "/lib/modules/$KERNEL_VERSION/misc"
|
||||
cp "$BUILD_DIR/vmmon-only/vmmon.ko" "/lib/modules/$KERNEL_VERSION/misc/"
|
||||
cp "$BUILD_DIR/vmnet-only/vmnet.ko" "/lib/modules/$KERNEL_VERSION/misc/"
|
||||
|
||||
# Update module dependencies
|
||||
log_info "Updating module dependencies..."
|
||||
depmod -a
|
||||
|
||||
# Load kernel modules
|
||||
log_info "Loading kernel modules..."
|
||||
modprobe vmmon
|
||||
modprobe vmnet
|
||||
|
||||
# Verify modules are loaded
|
||||
if lsmod | grep -q vmmon && lsmod | grep -q vmnet; then
|
||||
log_info "Kernel modules loaded successfully"
|
||||
else
|
||||
log_error "Failed to load kernel modules"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start VMware services
|
||||
log_info "Starting VMware services..."
|
||||
systemctl enable vmware
|
||||
systemctl start vmware
|
||||
|
||||
# Verify service status
|
||||
if systemctl is-active --quiet vmware; then
|
||||
log_info "VMware services started successfully"
|
||||
else
|
||||
log_error "VMware services failed to start"
|
||||
systemctl status vmware --no-pager
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
log_info "Cleaning up build directory..."
|
||||
rm -rf "$BUILD_DIR"
|
||||
|
||||
# Print summary
|
||||
echo
|
||||
log_info "====================================="
|
||||
log_info "VMware Workstation Installation Complete!"
|
||||
log_info "====================================="
|
||||
echo
|
||||
log_info "Version: $VMWARE_VERSION"
|
||||
log_info "Kernel modules: vmmon, vmnet"
|
||||
log_info "Service status: $(systemctl is-active vmware)"
|
||||
echo
|
||||
log_info "You can launch VMware Workstation with:"
|
||||
echo " - GUI: vmware"
|
||||
echo " - Player: vmplayer"
|
||||
echo
|
||||
log_info "To check service status: systemctl status vmware"
|
||||
echo
|
||||
|
||||
exit 0
|
||||
Loading…
Reference in a new issue