MyLiCuLa

My Linux Customization Layer

Install once, replicate everywhere

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
πŸ’‘ First Run: On first run, the installer will create a configuration file at ~/.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

πŸ“– README

Complete project documentation

View README

πŸ§ͺ Testing

Testing guidelines and framework

View Testing Guide

πŸ“ TODO

Planned features and enhancements

View TODO

πŸ›οΈ Architecture (ADRs)

Architectural Decision Records

View ADRs

πŸ”— GitHub Repository

Source code and issues

View on GitHub

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 ADR

ADR-0002: Centralized Logging

Explains why all logs go to /var/log/mylicula/ and how permissions are managed for both sudo and non-sudo scripts.

Read ADR

ADR-0003: Configuration-Driven Scripts

Documents the approach using ~/.config/mylicula/mylicula.conf for runtime configuration with bash associative arrays.

Read ADR

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 ADR

ADR-0005: Integrate Bash Scripts

Documents the decision to integrate custom bash scripts into the MyLiCuLa repository rather than maintaining them separately.

Read ADR
πŸ“š View All ADRs: See the complete ADR index for all architectural decisions and guidelines on creating new ADRs.

Contributing

Contributions are welcome! Here's how to contribute:

  1. Fork the Repository - Create your own fork for your Linux distribution
  2. Follow Conventions - Use existing scripts as templates
  3. Start in Review - New scripts go in in_review/
  4. Test Thoroughly - Use dry-run mode and test on fresh system
  5. Document - Include clear documentation headers
  6. Create ADRs - Document significant architectural decisions (see Architecture section)
  7. Submit PR - Once tested, submit a pull request
πŸ’‘ Contribution Ideas:
  • Support for other Linux distributions (Fedora, Arch, etc.)
  • New customization scripts
  • Improved templates
  • Better error handling
  • Additional utility functions

Requirements

OS: Ubuntu Linux (tested on 22.04+)
Bash: 4.0 or higher
Python: 3.x (for Python-based customizations)
Git: For cloning repositories