Skip to content

sebanc/linuxloops

Repository files navigation

License Issues Discord

Linuxloops

About This Project

Linuxloops is an adaptable / declarative linux distro installer.

Why create a linux distro installer ?
Linux is very modular thanks to package management systems, however most distribution installers are either completely manual or focus on a specific DE and bring lots of packages that are not necessarily needed. Linuxloops allows minimal Linux installs with more DE options, to directly add custom packages, Secure Boot support, nvidia proprietary drivers or Linux-surface patches.
In addition, Linuxloops supports installing linux distros in disk image files that can be booted natively by the GRUB bootloader (from btrfs, ext4, exfat or ntfs partitions) or in VMs.

The main limitation of Linuxloops is that the partitionning is not currently customizable (EFI, BOOT and ROOT partitions). As such, it is not aimed at users needing complex partition tables (or they can customize the Linuxloops script to their liking).

How does it work ?

The Linuxloops script will chroot into a temporary rootfs image (usually a linux container rootfs or an actual distribution iso) and then perform the install from there using the target distribution package manager.

For security purpose, Linuxloops will not install packages/binaries that are not present in the official distribution repositories. The only exceptions are:

  • The "RPM fusion" repo for Fedora and the "EPEL" repo for RedHat based distros that are enabled by default as they contain necessary packages for standard use.
  • For Arch based distros, the "shim-signed" AUR package is included in order to support Secure Boot.

Supported Hardware

✔ Base Requirements:

  • x86_64 based computer with UEFI BIOS.
  • Administrative privileges on the device.
  • A drive with at least 14 GB available space.

Overview of supported distros and features

Distro Version Secure Boot support Nvidia proprietary driver support Linux-surface patches support Notes
AlmaLinux 9 notes
Arch Current ✓ (shim-signed AUR) notes
Artix Current ✓ (shim-signed AUR) notes
BlendOS v4 ✓ (shim-signed AUR) notes
BlissOS 14 / 15 / 16
Brunch Latest ✓ (partially included) notes
ChromeOS-Flex Latest notes
Debian Bookworm
Devuan Daedalus
Elementary 7
Fedora 40 notes
Gentoo Current
Kali Current disk images only notes
Linuxmint Virginia
LMDE Faye
Manjaro Current ✓ (shim-signed AUR) notes
MX 23
Neon Current
NixOS 23.11 notes
Nobara 39
OpenSUSE Tumbleweed notes
Parrot Current disk images only notes
Pop 22.04
Proxmox VE 8
Qubes 4.2 notes
RockyLinux 9 notes
SteamOS 3.6 ✓ (shim-signed AUR) notes
Tails Latest notes
Ubuntu 24.04
Ubuntu-LTS 22.04
Void Current
Zorin 17

Quick start

Linuxloops can be used from any Linux distribution or from Windows WSL, it has limited dependencies that are generally installed by default (most notably curl, tar, xz).
Note: Windows WSL does not allow to write directly to a disk but you can create disk images and flash them to a drive using Rufus/Etcher or boot them from Grub2Win.

Download the Linuxloops script:
curl -L https://raw.githubusercontent.com/sebanc/linuxloops/main/linuxloops -o ~/linuxloops

GUI installer

Install the zenity package for your distro:

  • Debian-based distro: sudo apt install zenity
  • Arch-based distro: sudo pacman -S zenity
  • Fedora-based distro: sudo dnf install zenity

Start the installer in GUI mode:
sudo bash ~/linuxloops

CLI installer

Below is the list of command line flags:

Usage: sudo bash linuxloops -distro <distribution name> -env <desktop environment> -dst <disk name or disk image path> [-s <total install size>] [-z <swap size>] [-b] [-e] [-a] [-H <hostname>] [-L <locale>] [-K <keymap>] [-T <timezone>] [-n] [-S] [-c <custom_packages_list>] [-C <custom_script_path>] [-k <kernel_parameters_list>]
-distro, --distribution <distribution name>			(Distribution to install)
-env, --environment <desktop environment>			(Desktop environment to install)
-dst, --destination <disk name or disk image path>		(e.g. /dev/sda or /ubuntu.img)
-s, --size <total install size>					(number in GB, minimum 14GB)
-z, --swapsize <swap size>					(number in GB)
-b, --btrfs							(Use btrfs for the root filesystem)
-e, --encrypt							(Encrypt the root filesystem)
-a, --autologin							(Enable user autologin)
-H, --hostname							(Provide a specific hostname)
-L, --locale <locale>						(specify locale to be used, by default "en_US")
-K, --keymap <keymap>						(specify keymap to be used, by default "us")
-T, --timezone <timezone>					(specify timezone to be used, by default "UTC")
-n, --nvidia							(Install nvidia drivers)
-S, --surface							(Add patches for Surface devices from github.com/linux-surface)
-c, --custom-packages						(list of additional packages to be installed - space separated)
-C, --custom-script						(bash script that should be run at the end of the install process)
-k, --kernel-parameters						(specific kernel parameters to be applied - space separated)
-d, --declarative <config_file_path>				(Use a declarative configuration file)
-l, --list							(List available distros and desktop environments)
-ll, --list-locales						(List available locales)
-lk, --list-keymaps						(List available keymaps)
-lt, --list-timezones						(List available timezones)
-h, --help							(Display this menu)

The only mandatory parameters are: the distribution, the environment and the destination. Use the below command to list available distributions and environments:
sudo bash ~/linuxloops -l

As an example:
sudo bash ~/linuxloops -distro Ubuntu -env Plasma/Full -dst /dev/sdX -e will install Ubuntu with the complete kde environment on the drive /dev/sdX with encryption.
sudo bash ~/linuxloops -distro Arch -env Cinnamon -dst /home/username/arch.img -s 30 -S will install Arch with the cinnamon desktop environment and linux-surface patches in a 30 GB image located at /home/username/arch.img.

Declarative installer

Have a look at the declarative configuration examples available here:
Declarative configuration examples

The only mandatory parameters are: the distribution, the environment and the destination. Use the below command to list available distributions and environments:
sudo bash ~/linuxloops -l

Create your own declarative configuration and run the below command to start the install:
sudo bash ~/linuxloops -d <path_to_your_declarative_configuration>

Complementary instructions

Support

Support for Linuxloops is provided in the dedicated section of the Brunch Discord server:

Discord

Special Thanks

  • The linuxcontainers project for maintaining Linux container rootfs archives.
  • The Grub2Win project for allowing the GRUB bootloader to be installed on devices running Windows.
  • The Linux-Surface crew for greatly improving Linux support on Surface devices.