Script ligero para crear estructuras de proyectos a partir de plantillas predefinidas.
Ideal para proyectos en C++, Python o cualquier otro lenguaje donde quieras empezar rápido sin repetir siempre lo mismo.
- Clonar el repositorio:
git clone https://github.com/tomas2p/fast-setup.git
cd fast-setup- Ejecutar el script de instalación:
./install.shEsto hará:
- Copiar
fast-setup.sha~/.local/bin/fast-setup - Copiar la carpeta
templates/que contiene plantillas ytemplate.confa~/.config/fast-setup/
Asegúrate de que
~/.local/binesté en tu$PATHpara ejecutar el comandofast-setupdesde cualquier lugar.
fast-setup <nombre_proyecto> [opciones]- Las plantillas se definen en un único archivo de configuración:
~/.config/fast-setup/template.conf- Cada plantilla puede contener carpetas y archivos, separados por
: - Los archivos existentes en la carpeta
templates/(junto atemplate.conf) se copian automáticamente al proyecto. - Si no existen, se crean vacíos.
[default-c++]
src:main_{{PROJECT}}.cc,{{PROJECT}}.h
include:{{PROJECT}}.h
data:input.txt
docs
.:README.md
.:Makefile
[python]
src:main.py
tests:test_main.py
requirements.txt.:Makefile→ copiaMakefiledesdetemplates/Makefilea la raíz del proyectosrc:main.cpp,project.h→ crea carpetasrccon los archivos listados
El placeholder {{PROJECT}} se usa dentro de template.conf y en los archivos dentro de la carpeta templates/ para indicar el nombre del proyecto que suministres al ejecutar el script.
-
Sustitución por defecto: cuando ejecutas
fast-setup MiProyecto, el script reemplaza todas las ocurrencias de{{PROJECT}}porMiProyectoen:- Nombres de carpetas definidos en
template.conf. - Nombres de archivos listados en
template.conf. - Contenido de archivos copiados desde
templates/si contienen{{PROJECT}}.
- Nombres de carpetas definidos en
-
Ejemplo de uso:
template.conf:[default-c++] src:main_{{PROJECT}}.cc,{{PROJECT}}.h .:README.mdAl ejecutar
fast-setup MyLib -t default-c++se generansrc/main_MyLib.cc,src/MyLib.hyREADME.mdcuyo contenido tendráMyLibsi eltemplates/README.mdcontenía{{PROJECT}}. -
Desactivar sustituciones: si pasas la opción
--no-placeholderal script, el texto{{PROJECT}}no se reemplaza y quedará literalmente en los nombres y contenido (por ejemplomain_{{PROJECT}}.cc). -
Casos importantes a tener en cuenta:
- El reemplazo se realiza con
sedy no es seguro para binarios; evita usar{{PROJECT}}en plantillas binarias. - La sustitución es literal y sensible a mayúsculas:
{{project}}no es lo mismo que{{PROJECT}}. - Si quieres transformar el nombre (mayúsculas/minúsculas) o usar otras variantes, puedo añadir soporte para
{{PROJECT_UPPER}}/{{PROJECT_LOWER}}.
- El reemplazo se realiza con
-
Transformaciones disponibles:
{{PROJECT_UPPER}}→ nombre del proyecto en mayúsculas.{{PROJECT_LOWER}}→ nombre del proyecto en minúsculas. Estas variantes funcionan tanto en nombres (carpetas/archivos) como en el contenido de archivos dentro detemplates/.
-
Nombres no seguros y validación:
- Por defecto el script valida que
PROJECT_NAMEuse solo caracteres alfanuméricos, guiones, guiones bajos y puntos ([A-Za-z0-9._-]). - Si necesitas usar caracteres especiales, pasa la opción
--allow-unsafe-name(no recomendado; responsabilidad del usuario).
- Por defecto el script valida que
-
--dry-run:- Muestra las acciones que se ejecutarían sin modificar el disco (útil para comprobar la estructura resultante antes de crear archivos).
# Ver qué crearías sin ejecutar cambios
fast-setup MiProyecto -t default-c++ --dry-runSi quieres que implemente validación del nombre del proyecto o escape seguro para la sustitución en sed, dímelo y lo añado.
| Opción | Descripción |
|---|---|
-h, --help |
Muestra la ayuda |
-v, --version |
Muestra la versión del script |
-l, --list |
Lista las plantillas disponibles |
-t <template> |
Selecciona la plantilla (por defecto: default-c++) |
--force |
Sobrescribe el directorio si ya existe |
--dry-run |
Muestra las acciones que se realizarían sin crear ni modificar archivos |
--allow-unsafe-name |
Permite nombres de proyecto con caracteres no estándar (no recomendado) |
-p <path>, --template-path <path> |
Especifica un archivo template.conf personalizado |
--no-placeholder |
Desactiva el placeholder '{{PROJECT}}' en template.conf para no ser sustituido automáticamente por el nombre del proyecto |
# Crear un proyecto con la plantilla por defecto
fast-setup MiProyecto
# Crear un proyecto usando la plantilla Python
fast-setup MiProyecto -t python
# Sobrescribir un proyecto existente
fast-setup MiProyecto -t default-c++ --force
# Usar un archivo de plantillas personalizado
fast-setup MiProyecto -p ~/mis-plantillas/template.conf -t python
# Listar plantillas disponibles
fast-setup -l- Todos los archivos existentes en la carpeta
templates/relativa altemplates.confse copiarán al proyecto automáticamente (ej.makefile). - Archivos que no existan se crean vacíos.
- La opción
--template-pathpermite usar diferentes colecciones de plantillas según tu flujo de trabajo. - Mantener
legacy/para referencia de versiones anteriores.
fast-setup/
├── legacy/
│ ├── v1-bash/README.md
│ ├── v2-python-json/README.md
│ ├── v3-python-yaml/README.md
│ └── v4-python-full/README.md
├── templates/
│ ├── template.conf
│ ├── makefile
│ └── ...
├── fast-setup.sh
├── install.sh
├── LICENSE
└── README.md
El proyecto incluye versiones anteriores para referencia y comparación:
Consulta los README en cada subcarpeta para detalles y ejemplos históricos.
MIT License – ver archivo LICENSE