initial commit
This commit is contained in:
commit
90cff4f16a
59 changed files with 6855 additions and 0 deletions
63
KiCad/Scripts/kicad-projects.sh
Normal file
63
KiCad/Scripts/kicad-projects.sh
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
#!/usr/bin/env bash
|
||||
# Rofi KiCad project launcher
|
||||
# Two-step: select folder, then select project
|
||||
# Works with both Hyprland and dwm
|
||||
|
||||
# Define project folders: "Display Name|/path/to/folder"
|
||||
PROJECT_FOLDERS=(
|
||||
"CNC|/data/3D-Printer/Electronics/PCBs"
|
||||
"Keyboard|/data/Keyboard/PCB"
|
||||
"eGPU|/data/eGPU"
|
||||
)
|
||||
|
||||
# Step 1: Select project folder
|
||||
FOLDER_MENU=""
|
||||
for entry in "${PROJECT_FOLDERS[@]}"; do
|
||||
FOLDER_MENU+="${entry%%|*}\n"
|
||||
done
|
||||
|
||||
SELECTED_FOLDER=$(echo -e "$FOLDER_MENU" | rofi -dmenu -p "KiCad Folder" -i)
|
||||
[ -z "$SELECTED_FOLDER" ] && exit 0
|
||||
|
||||
# Get the path for selected folder
|
||||
FOLDER_PATH=""
|
||||
for entry in "${PROJECT_FOLDERS[@]}"; do
|
||||
name="${entry%%|*}"
|
||||
path="${entry#*|}"
|
||||
if [ "$name" = "$SELECTED_FOLDER" ]; then
|
||||
FOLDER_PATH="$path"
|
||||
break
|
||||
fi
|
||||
done
|
||||
[ -z "$FOLDER_PATH" ] && exit 1
|
||||
|
||||
# Step 2: Find .kicad_pro files in selected folder
|
||||
# Sort by path length (shallowest first) to handle submodule duplicates
|
||||
mapfile -t PROJECTS < <(find "$FOLDER_PATH" -name "*.kicad_pro" -type f 2>/dev/null | awk '{print length, $0}' | sort -n | cut -d' ' -f2-)
|
||||
|
||||
if [ ${#PROJECTS[@]} -eq 0 ]; then
|
||||
rofi -e "No KiCad projects found in $FOLDER_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build menu with duplicate filtering (keep shallowest path for each project name)
|
||||
declare -A SEEN_PROJECTS
|
||||
MENU=""
|
||||
for project in "${PROJECTS[@]}"; do
|
||||
name=$(basename "$project" .kicad_pro)
|
||||
# Skip if we've already seen this project name (deeper path = submodule)
|
||||
if [ -z "${SEEN_PROJECTS[$name]}" ]; then
|
||||
SEEN_PROJECTS[$name]="$project"
|
||||
MENU+="$name\n"
|
||||
fi
|
||||
done
|
||||
|
||||
# Show rofi menu
|
||||
SELECTED=$(echo -e "$MENU" | rofi -dmenu -p "Project" -i)
|
||||
[ -z "$SELECTED" ] && exit 0
|
||||
|
||||
# Launch selected project
|
||||
PROJECT_PATH="${SEEN_PROJECTS[$SELECTED]}"
|
||||
if [ -n "$PROJECT_PATH" ]; then
|
||||
kicad-launch "$PROJECT_PATH"
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue