What is MyLiCuLa?
MyLiCuLa is a customization layer for Ubuntu Linux that automates system setup to ensure homogeneity across all your Linux devices. Never manually set up a new Linux machine again.
π¦ Applications & Packages
Automatically installs applications and packages
π οΈ Custom Utilities
Installs custom scripts and shell functions
π¨ UI Customizations
Configures templates, icons, and UI elements
βοΈ Development Tools
Sets up development environment and tools
Quick Start
π One-Line Installation (Recommended)
curl -fsSL https://raw.githubusercontent.com/franciscoguemes/mylicula/main/bootstrap.sh | bash
For security-conscious users, download and review first:
curl -fsSL https://raw.githubusercontent.com/franciscoguemes/mylicula/main/bootstrap.sh -o bootstrap.sh
less bootstrap.sh # Review the script
bash bootstrap.sh
π₯ Manual Installation
git clone https://github.com/franciscoguemes/mylicula.git
cd mylicula
./install.sh
~/.config/mylicula/mylicula.conf with your settings.
Key Features
β Interactive Installation
User-friendly installation with configuration collection and whiptail dialogs
π§ Configuration System
Persistent configuration stored in ~/.config/mylicula/ for future runs
π Dry-Run Mode
Preview changes before applying them with --dry-run mode
π¦ Package Management
Supports APT packages, Snap packages, and custom repositories with automatic GPG key import
π Interpolation System
Template system with <<<KEY>>> patterns replaced with your configuration
π§ͺ Comprehensive Testing
52+ unit tests using BATS framework, all passing
π‘οΈ Idempotent Operations
Safe to run multiple times - scripts check if already installed
π Well Documented
Extensive documentation, code comments, and examples
Documentation
Architecture
MyLiCuLa's architecture is documented through Architectural Decision Records (ADRs). These documents capture important decisions made during the project's development.
π What are ADRs?
Architectural Decision Records document the "why" behind important architectural and design decisions. They help:
- Understand the reasoning behind technical choices
- Track the evolution of the project
- Onboard new contributors effectively
- Avoid repeating past mistakes
ADR-0001: Installer Interface Pattern
Documents the Template Method pattern used for all installation scripts with required functions and return code conventions.
Read ADRADR-0002: Centralized Logging
Explains why all logs go to /var/log/mylicula/ and how permissions are managed for both sudo and non-sudo scripts.
ADR-0003: Configuration-Driven Scripts
Documents the approach using ~/.config/mylicula/mylicula.conf for runtime configuration with bash associative arrays.
ADR-0004: Package Installation Structure
Explains the hybrid approach using metadata comments in package files to maintain relationships between packages, repositories, and GPG keys.
Read ADRADR-0005: Integrate Bash Scripts
Documents the decision to integrate custom bash scripts into the MyLiCuLa repository rather than maintaining them separately.
Read ADRContributing
Contributions are welcome! Here's how to contribute:
- Fork the Repository - Create your own fork for your Linux distribution
- Follow Conventions - Use existing scripts as templates
- Start in Review - New scripts go in
in_review/ - Test Thoroughly - Use dry-run mode and test on fresh system
- Document - Include clear documentation headers
- Create ADRs - Document significant architectural decisions (see Architecture section)
- Submit PR - Once tested, submit a pull request
- Support for other Linux distributions (Fedora, Arch, etc.)
- New customization scripts
- Improved templates
- Better error handling
- Additional utility functions