From b6dbe97a62987c81ead764345b476a6f319d03c8 Mon Sep 17 00:00:00 2001 From: hacklab Date: Fri, 17 Jul 2026 01:47:12 +0200 Subject: [PATCH] =?UTF-8?q?Distribuci=C3=B3n:=20lanzador=20de=20escritorio?= =?UTF-8?q?,=20README=20del=20fork=20y=20gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - strudel-launcher.sh portable (sirve la build estática y abre el navegador; rutas relativas, puerto configurable, detecta node/nvm) - README-HACKLAB.md: qué añade el fork, instalación en Linux, icono de escritorio, packs propios y cómo seguir a upstream - gitignore: patterns personales, remixes generados y logs fuera del repo --- .gitignore | 5 +++ README-HACKLAB.md | 81 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 5 +++ strudel-launcher.sh | 43 ++++++++++++++++++++++++ 4 files changed, 134 insertions(+) create mode 100644 README-HACKLAB.md create mode 100755 strudel-launcher.sh diff --git a/.gitignore b/.gitignore index 7532adaf..ca781aa6 100644 --- a/.gitignore +++ b/.gitignore @@ -145,3 +145,8 @@ fabric.properties samples/* !samples/README.md .idea/ + +# --- fork hacklab: material personal que no se publica --- +my-patterns/ +strudel-server.log +website/src/repl/components/panel/remix-projects.mjs diff --git a/README-HACKLAB.md b/README-HACKLAB.md new file mode 100644 index 00000000..1bb17f64 --- /dev/null +++ b/README-HACKLAB.md @@ -0,0 +1,81 @@ +# Strudel · fork del hacklab + +Fork de [Strudel](https://codeberg.org/uzu/strudel) (live coding de música en +el navegador, port de TidalCycles a JavaScript) con mejoras de usabilidad +pensadas para pinchar en directo y para gente que empieza. + +Upstream: · Licencia: AGPL-3.0 (la misma, +ver `LICENSE`). Gracias al equipo de Strudel/TidalCycles por la base ♥ + +## Qué añade este fork + +- **Interfaz multiidioma** (`website/src/i18n.mjs`): castellano, inglés, + francés, alemán, italiano, portugués y más. Se cambia desde el selector del + header y se guarda en los ajustes. +- **Pestaña Projects**: gestor de proyectos locales (localStorage) con + carpetas, buscador y una librería de tracks de fábrica lista para pinchar + (bases techno/acid originales, de la casa). +- **Barra de transporte** estilo reproductor bajo el editor: anterior / + play-pausa / siguiente, tiempo transcurrido y **barra de progreso + arrastrable** (seek real: se añadió `Cyclist.setCycle()` en + `packages/core`). +- **Pestaña Guía**: chuleta de síntesis y sonidos para tener a mano mientras + se pincha. +- **Packs de temas** para el editor (`neon-madrid` + `hacklab-pack`: 5 neón + sobre negro y 5 estándar). +- **Lanzador de escritorio** (`strudel-launcher.sh`): sirve la build estática + en local y abre el navegador. Ideal para un icono clicable. + +## Instalación (Linux) + +Requisitos: `git`, `node` >= 20 y `pnpm` (`corepack enable` lo activa). + +```bash +git clone https://gitea.laenre.net/hacklab/strudel.git +cd strudel +pnpm i # instala las dependencias del monorepo +``` + +### Modo desarrollo (recarga en vivo) + +```bash +pnpm dev # abre http://localhost:4321 +``` + +### Modo "aparato" (build estática + lanzador) + +```bash +pnpm build # genera la web estática +./strudel-launcher.sh # la sirve en http://127.0.0.1:3009 y abre el navegador +``` + +Para el icono de escritorio, crea `~/.local/share/applications/strudel.desktop`: + +```ini +[Desktop Entry] +Type=Application +Name=Strudel +Comment=Live coding de música +Exec=/ruta/a/strudel/strudel-launcher.sh +Icon=audio-x-generic +Terminal=false +Categories=AudioVideo;Audio; +``` + +## Añadir tus propios packs de proyectos + +La librería de fábrica vive en +`website/src/repl/components/panel/default-projects.mjs`. Para un pack +personal sin tocar el repo, crea un módulo local con el mismo formato +`{name, folder, code}` y concaténalo en `DEFAULT_PROJECTS` (los packs +personales están en `.gitignore`). También puedes crear y organizar proyectos +directamente desde la pestaña Projects de la interfaz. + +## Mantenerse al día con upstream + +El remoto `upstream` apunta al Strudel original: + +```bash +git fetch upstream +git merge upstream/main # y resolver conflictos si los hay +``` diff --git a/README.md b/README.md index b1208e7b..efe55bd9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # strudel +> **Fork del hacklab** con interfaz multiidioma, pestaña de proyectos, barra +> de transporte con seek, guía de sonidos y lanzador de escritorio. +> Ver [README-HACKLAB.md](./README-HACKLAB.md). Upstream: +> + Live coding patterns on the web diff --git a/strudel-launcher.sh b/strudel-launcher.sh new file mode 100755 index 00000000..f0b02936 --- /dev/null +++ b/strudel-launcher.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +# Strudel launcher — sirve la build estática local y abre el navegador. +# Pensado para el lanzador de escritorio (icono clicable): si el servidor ya +# está corriendo solo abre la pestaña; si no, lo arranca desacoplado. +# +# ./strudel-launcher.sh # puerto 3009 +# STRUDEL_PORT=4000 ./strudel-launcher.sh +# +# Requiere haber hecho antes: pnpm i && pnpm build (ver README-HACKLAB.md) +set -u + +DIR="$(cd "$(dirname "$0")" && pwd)" +APP_DIR="${DIR}/website" +ASTRO="${APP_DIR}/node_modules/.bin/astro" +PORT="${STRUDEL_PORT:-3009}" +URL="http://127.0.0.1:${PORT}/" +LOG="${DIR}/strudel-server.log" + +# Si node no está en el PATH (sesión de escritorio), prueba con nvm +if ! command -v node >/dev/null 2>&1 && [ -d "${HOME}/.nvm/versions/node" ]; then + NODE_BIN="$(ls -d "${HOME}"/.nvm/versions/node/*/bin 2>/dev/null | sort -V | tail -1)" + [ -n "${NODE_BIN}" ] && export PATH="${NODE_BIN}:${PATH}" +fi + +if [ ! -x "${ASTRO}" ]; then + echo "Falta la instalación. Ejecuta en ${DIR}:" + echo " pnpm i && pnpm build" + exit 1 +fi + +# Si el servidor no está ya escuchando, lo arrancamos desacoplado del lanzador. +if ! curl -fsS -o /dev/null "${URL}" 2>/dev/null; then + cd "${APP_DIR}" || exit 1 + setsid "${ASTRO}" preview --port "${PORT}" --host 127.0.0.1 > "${LOG}" 2>&1 & + # Espera hasta ~30s a que responda + for _ in $(seq 1 30); do + curl -fsS -o /dev/null "${URL}" 2>/dev/null && break + sleep 1 + done +fi + +# Abre en el navegador por defecto +xdg-open "${URL}" >/dev/null 2>&1 &