143 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/usr/bin/env bash
 | 
						|
# =============================================================================
 | 
						|
# QMK Helper Functions Library
 | 
						|
# =============================================================================
 | 
						|
# Functions for building and flashing QMK firmware
 | 
						|
# =============================================================================
 | 
						|
 | 
						|
# ----------------------
 | 
						|
# Function: build_firmware
 | 
						|
# Build QMK firmware for the specified keyboard and keymap
 | 
						|
# Usage: build_firmware "fingerpunch/sweeeeep" "smathev"
 | 
						|
# ----------------------
 | 
						|
build_firmware() {
 | 
						|
    local keyboard="$1"
 | 
						|
    local keymap="$2"
 | 
						|
 | 
						|
    if [[ -z "$keyboard" || -z "$keymap" ]]; then
 | 
						|
        echo "❌ Error: keyboard and keymap required" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >&2
 | 
						|
    echo "🛠  Building firmware for $keyboard" >&2
 | 
						|
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >&2
 | 
						|
 | 
						|
    qmk compile -kb "$keyboard" -km "$keymap"
 | 
						|
 | 
						|
    if [[ $? -eq 0 ]]; then
 | 
						|
        echo "✅ Firmware compiled successfully" >&2
 | 
						|
        echo "" >&2
 | 
						|
        return 0
 | 
						|
    else
 | 
						|
        echo "❌ Firmware compilation failed" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
# ----------------------
 | 
						|
# Function: flash_with_bootloader
 | 
						|
# Flash firmware using a specific bootloader target
 | 
						|
# Usage: flash_with_bootloader "fingerpunch/sweeeeep" "smathev" "uf2-split-left"
 | 
						|
# ----------------------
 | 
						|
flash_with_bootloader() {
 | 
						|
    local keyboard="$1"
 | 
						|
    local keymap="$2"
 | 
						|
    local bootloader="$3"
 | 
						|
 | 
						|
    if [[ -z "$keyboard" || -z "$keymap" || -z "$bootloader" ]]; then
 | 
						|
        echo "❌ Error: keyboard, keymap, and bootloader required" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    echo "📤 Flashing firmware with bootloader: $bootloader" >&2
 | 
						|
    echo "" >&2
 | 
						|
 | 
						|
    qmk flash -kb "$keyboard" -km "$keymap" -bl "$bootloader"
 | 
						|
 | 
						|
    if [[ $? -eq 0 ]]; then
 | 
						|
        echo "" >&2
 | 
						|
        echo "✅ Firmware flashed successfully!" >&2
 | 
						|
        return 0
 | 
						|
    else
 | 
						|
        echo "" >&2
 | 
						|
        echo "❌ Firmware flashing failed" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
# ----------------------
 | 
						|
# Function: flash_side
 | 
						|
# Flash firmware for a specific keyboard side (left/right)
 | 
						|
# Usage: flash_side "fingerpunch/sweeeeep" "smathev" "left"
 | 
						|
# ----------------------
 | 
						|
flash_side() {
 | 
						|
    local keyboard="$1"
 | 
						|
    local keymap="$2"
 | 
						|
    local side="$3"
 | 
						|
 | 
						|
    if [[ -z "$keyboard" || -z "$keymap" || -z "$side" ]]; then
 | 
						|
        echo "❌ Error: keyboard, keymap, and side required" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [[ "$side" != "left" && "$side" != "right" ]]; then
 | 
						|
        echo "❌ Error: side must be 'left' or 'right'" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    local bootloader="uf2-split-$side"
 | 
						|
 | 
						|
    echo "🎯 Flashing $side side with handedness" >&2
 | 
						|
 | 
						|
    flash_with_bootloader "$keyboard" "$keymap" "$bootloader"
 | 
						|
}
 | 
						|
 | 
						|
# ----------------------
 | 
						|
# Function: check_qmk_installed
 | 
						|
# Verify QMK CLI is installed and available
 | 
						|
# Usage: check_qmk_installed || exit 1
 | 
						|
# ----------------------
 | 
						|
check_qmk_installed() {
 | 
						|
    if ! command -v qmk &> /dev/null; then
 | 
						|
        echo "❌ Error: 'qmk' CLI is not installed or not in PATH" >&2
 | 
						|
        echo "   Install it with: python3 -m pip install qmk" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
# ----------------------
 | 
						|
# Function: verify_keyboard_exists
 | 
						|
# Check if a keyboard definition exists in QMK
 | 
						|
# Usage: verify_keyboard_exists "fingerpunch/sweeeeep"
 | 
						|
# ----------------------
 | 
						|
verify_keyboard_exists() {
 | 
						|
    local keyboard="$1"
 | 
						|
 | 
						|
    if [[ -z "$keyboard" ]]; then
 | 
						|
        echo "❌ Error: keyboard required" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    # Try to list keymaps for this keyboard
 | 
						|
    qmk list-keymaps -kb "$keyboard" &>/dev/null
 | 
						|
 | 
						|
    if [[ $? -eq 0 ]]; then
 | 
						|
        return 0
 | 
						|
    else
 | 
						|
        echo "❌ Error: Keyboard '$keyboard' not found in QMK" >&2
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
# ----------------------
 | 
						|
# Function: clean_build
 | 
						|
# Clean previous build artifacts
 | 
						|
# Usage: clean_build
 | 
						|
# ----------------------
 | 
						|
clean_build() {
 | 
						|
    echo "🧹 Cleaning previous build..." >&2
 | 
						|
    qmk clean &>/dev/null
 | 
						|
    echo "✅ Build directory cleaned" >&2
 | 
						|
}
 |