Home

Awesome

<div id="top"></div> <!-- Shields/Logos -->

License Issues Discord

<!-- Project Logo --> <p align="center"> <a href="https://github.com/sebanc/linuxloops" title="Linuxloops"> <img src="./linuxloops.png" width="128px" alt="Logo"/> </a> </p> <h1 align="center">Linuxloops</h1>

Linuxloops is a generic / declarative linux distribution installer that also supports installing linux distributions in disk image files which can be booted natively by the GRUB bootloader (from btrfs, ext4, exfat or ntfs partitions) or in VMs.

Supported hardware

✔ Base Requirements:

Quick start (GUI installer)

Install a linux distro to your HDD

Linuxloops GUI installer can be run from most linux ditributions live images as long as they provide a desktop environment (according to the instructions in the next section), however the available space is often limited in live images and some distros (Bazzite, BlissOS, Brunch, ChromeOS-Flex, Fedora-Atomic, Qubes, Tails) will not be installable due to the lack of storage. As such, it is recommended to use the linuxloops live disk instead.

Detailed instructions:
Using the Linuxloops Live image

Install a linux distro on a USB flashdrive / SD card or in a disk image (from Linux or Windows WSL)

Note: Windows WSL does not allow to write directly to a disk but you can create disk images and write them to a USB flashdrive / SD card using Rufus/Etcher or boot them using Grub2Win.

Detailed instructions:
Detailed instructions to install from Linux
Detailed instructions to install from Windows

Support

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

Overview of supported distributions and features

DistributionVersionsSecure Boot supportNvidia proprietary driver supportLinux-surface patches supportNotes
AlmaLinux9
ArchStable<br>Testing✓ (shim-signed AUR)notes
ArtixOpenrc<br>Runit<br>S6<br>Dinit<br>(Stable<br>or<br>Testing)✓ (shim-signed AUR)notes
BazziteStable<br>Testing<br>Unstable✓ (shim-signed AUR)
BlendOSv4✓ (shim-signed AUR)notes
BlissOS15<br>16
BrunchStable<br>Unstablenotes
CachyOSx86-64<br>x86-64-v3<br>x86-64-v4✓ (shim-signed AUR)notes
ChromeOS-FlexStablenotes
DebianBookworm<br>Testing<br>Unstable
DevuanDaedalus<br>Testing<br>Unstable
Elementary8
Fedora41<br>Rawhidenotes
Fedora-Atomic41<br>Rawhidenotes
Gentoo23/Openrc<br>23/Systemd
KaliRollingdisk images onlynotes
LinuxmintWilma
LMDEFaye
ManjaroStable<br>Testing<br>Unstable✓ (shim-signed AUR)notes
MX23
NeonUser<br>Testing<br>Unstable
NixOS24.05<br>Unstable
Nobara40
OpenSUSELeap/15.6<br>Slowroll<br>Tumbleweednotes
ParrotLorydisk images onlynotes
PikaOSNestdisk images only
Pop22.04<br>24.04
ProxmoxVE8
Qubes4.2.3notes
RockyLinux9
SteamOS3.6✓ (shim-signed AUR)notes
TailsStablenotes
Ubuntu24.04<br>24.10<br>25.04
VoidCurrent
Zorin17

About this project

Why create a linux distribution 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.

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.

Linuxloops can be used from any Linux distribution or from Windows WSL, it has limited dependencies that are installed by default in most if not all Linux distros: bash, coreutils, curl, grep, sed, sudo, tar, util-linux, xz.

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

Other install methods

CLI mode

Install the curl package for your distribution and download the Linuxloops script:
curl -L https://raw.githubusercontent.com/sebanc/linuxloops/main/linuxloops -O --create-dirs --output-dir ~/bin

List of command line flags:

Usage: bash ${HOME}/bin/linuxloops -distro <distribution name> -ver <distribution version> -env <environment name> -dst <disk name or disk image path>
-distro, --distribution <distribution name>		(Distribution to install)
-ver, --version <version name>				(Distribution version to install)
-env, --environment <environment name>			(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)
-r, --rootfs-compression				(Enable standard btrfs compression, implies -b)
-e, --encrypt						(Encrypt the root filesystem)
-a, --autologin						(Enable user autologin)
    --efi-name						(EFI partition name)
    --efi-mountoptions					(EFI partition specific mountoptions)
    --boot-name						(Boot partition name)
    --boot-mountoptions					(Boot partition specific mountoptions)
    --root-name						(Root partition name)
    --root-mountoptions					(Root partition specific mountoptions)
-A, --add-partition <partition details>			(Add a partition according to the below format:
							<mountpoint>*<name>*<fstype>*<mountoptions>*<size(in GB)>*<encryption>
							ex: /home*Home*ext4*noatime,discard*20*Yes)
-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)
-m, --custom-mirror <mirror details>			(Add a custom mirror according to the below format:
							<repository>*<mirror>
							ex: Arch*https://mirrors.kernel.org/archlinux)
-p, --user-password-for-encryption			(Use user account password for encryption)
-g, --grub-hide						(Hide the GRUB Bootloader)
-G, --generate-declarative-config <config_file_path>	(Generate a declarative configuration file)
-d, --apply-declarative-config <config_file_path>	(Use a declarative configuration file)
-l, --list						(List available distributions and environments)
-lb, --list-btrfs					(Confirms if btrfs is supported for chosen distribution/version)
-ld, --list-distributions				(List available distributions)
-le, --list-environments				(List available environments for chosen distribution/version)
-ll, --list-locales					(List available locales)
-lk, --list-keymaps					(List available keymaps)
-ln, --list-nvidia					(Confirms if nvidia proprietary driver is supported for chosen distribution/version)
-ls, --list-surface					(Confirms if Surface devices patches are supported for chosen distribution/version)
-lt, --list-timezones					(List available timezones)
-lv, --list-versions					(List available versions for chosen distribution)
-h, --help						(Display this menu)

The main parameters are: the distribution, the version, the environment and the destination. Use the below command to list available distributions, versions and environments:
bash ${HOME}/bin/linuxloops -l

As an example:
bash ${HOME}/bin/linuxloops -distro Ubuntu -ver 24.04 -env Plasma/Full -dst /dev/sdX -e will install Ubuntu 24.04 with the complete kde environment on the drive /dev/sdX with encryption.
bash ${HOME}/bin/linuxloops -distro Arch -ver Current -env Cinnamon -dst ~/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 mode

Install the curl package for your distribution and download the Linuxloops script:
curl -L https://raw.githubusercontent.com/sebanc/linuxloops/main/linuxloops -O --create-dirs --output-dir ~/bin

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

The main parameters are: the distribution, the version and the environment. Use the below command to list available distributions and environments:
bash ${HOME}/bin/linuxloops -l

Create your own declarative configuration and run the below command to start the install:
bash ${HOME}/bin/linuxloops -d <path_to_your_declarative_configuration>

Detailed instructions

Detailed instructions to install from Linux
Detailed instructions to install from Windows
Using the Linuxloops Live image
Use a disk image in a virtual machine
Data recovery from an image
Recommended setups
Secure Boot

Support

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

Special Thanks

<!-- Reference Links --> <!-- Badges --> <!-- Internal Links --> <!-- Outbound Links -->