{"id":20348962,"url":"https://github.com/sebanc/linuxloops","last_synced_at":"2026-04-08T09:00:52.555Z","repository":{"id":48414297,"uuid":"440839604","full_name":"sebanc/linuxloops","owner":"sebanc","description":"Generic / declarative Linux distribution installer","archived":false,"fork":false,"pushed_at":"2026-04-07T04:36:23.000Z","size":4604,"stargazers_count":218,"open_issues_count":1,"forks_count":16,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-04-07T06:26:33.399Z","etag":null,"topics":["declarative","generic","installer","linux"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sebanc.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-12-22T11:45:53.000Z","updated_at":"2026-04-07T04:36:27.000Z","dependencies_parsed_at":"2024-02-23T08:30:06.619Z","dependency_job_id":"4a218152-31af-4570-8de0-6490422da3ba","html_url":"https://github.com/sebanc/linuxloops","commit_stats":null,"previous_names":[],"tags_count":89,"template":false,"template_full_name":null,"purl":"pkg:github/sebanc/linuxloops","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebanc%2Flinuxloops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebanc%2Flinuxloops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebanc%2Flinuxloops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebanc%2Flinuxloops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sebanc","download_url":"https://codeload.github.com/sebanc/linuxloops/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebanc%2Flinuxloops/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31547845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["declarative","generic","installer","linux"],"created_at":"2024-11-14T22:23:19.470Z","updated_at":"2026-04-08T09:00:52.531Z","avatar_url":"https://github.com/sebanc.png","language":"Shell","readme":"\u003cdiv id=\"top\"\u003e\u003c/div\u003e\n\n\u003c!-- Shields/Logos --\u003e\n[![License][license-shield]][license-url]\n[![Issues][issues-shield]][issues-url]\n[![Discord][discord-shield]][discord-url]\n\n\u003c!-- Project Logo --\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/sebanc/linuxloops\" title=\"Linuxloops\"\u003e\n   \u003cimg src=\"./linuxloops.png\" width=\"128px\" alt=\"Logo\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eLinuxloops\u003c/h1\u003e\n\nLinuxloops 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.  \n\n## Supported hardware\n\n✔ Base Requirements:  \n- x86_64 based computer with UEFI BIOS.  \n- Administrative privileges on the device.  \n- A drive or partition with at least 14 GB available space.  \n- For native booting of disks images: A GRUB bootloader installed (or you can use the linuxloops live image one).  \n\n## Quick start (GUI installer)\n\n### Install a linux distro to your HDD\n\nLinuxloops 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.  \n\n* Download the linuxloops live 7z archive in the release section of this Github repository, extract it with your archive manager and write it to a USB flashdrive (16GB minimum) using an image writer (Gnome Disk Utility / KDE ISO Image Writer for Linux or [DiskImager][DiskImager link] for Windows).  \n\n* Reboot your computer and select the USB flashdrive from the UEFI boot menu.  \n\n* If Secure Boot is enabled, you will see the blue shim screen, select \"Enroll key from disk\" -\u003e EFI -\u003e Debian.der, confirm and reboot your computer.  \n\n* Once the live image has booted, set your keyboard layout (Preferences -\u003e Keyboard -\u003e Layout), connect to WiFi if needed and launch the \"Linuxloops installer\" from the desktop icon.  \n\nDetailed instructions:  \n[Using the Linuxloops Live image][live-image]  \n\n### Install a linux distro on a USB flashdrive / SD card or in a disk image (from Linux or Windows WSL)\n\nNote: 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 [DiskImager][DiskImager link] or boot them using [Grub2Win][Grub2Win link].  \n\n* Install the below packages depending on your distribution:  \n  * Debian / Ubuntu based distributions: `sudo apt install curl xz-utils python3-venv python3-gi gir1.2-gtk-3.0 gir1.2-webkit2-4.1`  \n  * Arch based distributions: `sudo pacman -Syu --needed curl gnupg xz python-gobject gtk3 webkit2gtk-4.1`  \n  * RHEL based distributions: `sudo dnf install curl gnupg xz python3-gobject gtk3 webkit2gtk4.1`  \n  * OpenSUSE: `sudo zypper in  curl gnupg xz python3-gobject gtk3 typelib-1_0-WebKit2-4_1`  \n  * Void: `sudo xbps-install -Syu curl xz python3-gobject gtk+3 webkit2gtk`  \n  * Gentoo: `sudo emerge app-arch/xz-utils net-misc/curl dev-lang/python net-libs/webkit-gtk:4.1`  \n  * NixOS: No packages to install (the necessary packages will be installed by linuxloops for use in nix-shell environment)  \n\n* Download the Linuxloops script:  \n`curl -L https://github.com/sebanc/linuxloops/raw/refs/heads/main/linuxloops -O --create-dirs --output-dir ~/bin`  \n\n* Start linuxloops in GUI mode:  \n`bash ${HOME}/bin/linuxloops`  \n\nDetailed instructions:  \n[Detailed instructions to install from Linux][linux-guide]  \n[Detailed instructions to install from Windows][windows-guide]  \n\n### Support\n\nSupport for Linuxloops is provided in the dedicated section of the Brunch Discord server:  \n[![Discord][discord-shield]][discord-url]  \n\n\n## Overview of supported distributions and features\n\n|**Distribution**|**Versions**|**Secure Boot support**|**Nvidia driver support (open)**|**Linux-surface patches support**|**Notes**|\n|----------------|:------------------------------------------------------------:|:---------------------:|:-----------------------------------:|:-------------------------------:|----------------------------|\n|AlmaLinux|10|✓||||\n|Arch|Stable\u003cbr\u003eTesting|✓ (shim-signed AUR)|✓|✓|[notes][Arch-notes]|\n|Artix|Openrc\u003cbr\u003eRunit\u003cbr\u003eS6\u003cbr\u003eDinit|✓ (shim-signed AUR)|✓||[notes][Artix-notes]|\n|Bazzite|Stable\u003cbr\u003eTesting|✓ (shim-signed AUR)|✓||[notes][Bazzite-notes]|\n|BlissOS|15\u003cbr\u003e16|||||\n|Brunch|Stable\u003cbr\u003eUnstable|✓||✓|[notes][Brunch-notes]|\n|CachyOS|x86-64\u003cbr\u003ex86-64-v3\u003cbr\u003ex86-64-v4|✓ (shim-signed AUR)|✓|✓|[notes][CachyOS-notes]|\n|ChromeOS-Flex|Stable|not with disk images / devmode|||[notes][ChromeOS-Flex-notes]|\n|Debian|Trixie|✓|✓|✓||\n|Devuan|Excalibur|✓|✓|||\n|Elementary|8|✓|✓|✓||\n|Fedora|43|✓|✓||[notes][Fedora-notes]|\n|Fedora-Atomic|43|✓|✓||[notes][Fedora-Atomic-notes]|\n|FoxFlake|Stable\u003cbr\u003eUnstable|✓|✓||[notes][FoxFlake-notes]|\n|Gentoo|23/Openrc\u003cbr\u003e23/Systemd|✓|✓|||\n|GLF-OS|Stable\u003cbr\u003eTesting|✓|✓|||\n|Kali|Rolling|disk images only||✓|[notes][Kali-notes]|\n|KDE|Rolling|✓ (shim-signed AUR)|✓|✓|[notes][KDE-notes]|\n|Linuxmint|Zena|✓|✓|✓||\n|LMDE|Gigi|✓|✓|✓||\n|Manjaro|Stable\u003cbr\u003eTesting|✓ (shim-signed AUR)|✓|✓|[notes][Manjaro-notes]|\n|MX|25|✓|✓|✓||\n|Neon|Stable|✓|✓|✓||\n|NixOS|25.11\u003cbr\u003eUnstable|✓|✓|||\n|OpenSUSE|Leap/16.0\u003cbr\u003eTumbleweed|✓|✓||[notes][OpenSUSE-notes]|\n|Pop|24.04|✓|✓|✓||\n|Proxmox|VE9|✓|✓|||\n|Qubes|4.3.0||||[notes][Qubes-notes]|\n|RockyLinux|10|✓||||\n|SteamOS|Main\u003cbr\u003eStaging|✓ (shim-signed AUR)|✓|✓|[notes][SteamOS-notes]|\n|Tails|Stable|✓|||[notes][Tails-notes]|\n|Ubuntu|24.04\u003cbr\u003e25.10|✓|✓|✓||\n|Void|Current|||||\n|Zorin|18|✓|✓|✓||\n\n\n## About this project\n\nWhy create a linux distribution installer ?  \nLinux 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 drivers (open) or Linux-surface patches.  \n\n\n## How does it work ?\n\nThe 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.  \n\nLinuxloops 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.  \n\nFor security purpose, Linuxloops will not install packages/binaries that are not present in the official distribution repositories. The only exceptions are:  \n- The \"RPM fusion\" repo for Fedora and the \"EPEL\" repo for RedHat based distributions that are enabled by default as they contain necessary packages for standard use.  \n- For Arch based distributions, the \"shim-signed\" AUR package is included in order to support Secure Boot.  \n\n\n## Other install methods\n\n### CLI mode\n\nMake sure that `curl` and `xz` programs are installed.  \n\nDownload the Linuxloops script:  \n`curl -L https://github.com/sebanc/linuxloops/raw/refs/heads/main/linuxloops -O --create-dirs --output-dir ~/bin`  \n\nList of command line flags:  \n```\nUsage: bash ${HOME}/bin/linuxloops -distro \u003cdistribution name\u003e -ver \u003cdistribution version\u003e -env \u003cenvironment name\u003e -dst \u003cdisk name or disk image path\u003e\n-distro, --distribution \u003cdistribution name\u003e\t\t(Distribution to install)\n-ver, --version \u003cversion name\u003e\t\t\t\t(Distribution version to install)\n-env, --environment \u003cenvironment name\u003e\t\t\t(Environment to install)\n-dst, --destination \u003cdisk name or disk image path\u003e\t(e.g. /dev/sda or /ubuntu.img)\n-s, --size \u003ctotal install size\u003e\t\t\t\t(number in GB, minimum 14GB)\n-z, --swapsize \u003cswap size\u003e\t\t\t\t(number in GB)\n-b, --btrfs\t\t\t\t\t\t(Use btrfs for the root filesystem)\n-r, --rootfs-compression\t\t\t\t(Enable standard btrfs compression, implies -b)\n-e, --encrypt\t\t\t\t\t\t(Encrypt the root filesystem)\n-a, --autologin\t\t\t\t\t\t(Enable user autologin)\n    --efi-name\t\t\t\t\t\t(EFI partition name)\n    --efi-mountoptions\t\t\t\t\t(EFI partition specific mountoptions)\n    --boot-name\t\t\t\t\t\t(Boot partition name)\n    --boot-mountoptions\t\t\t\t\t(Boot partition specific mountoptions)\n    --root-name\t\t\t\t\t\t(Root partition name)\n    --root-mountoptions\t\t\t\t\t(Root partition specific mountoptions)\n-A, --add-partition \u003cpartition details\u003e\t\t\t(Add a partition according to the below format:\n\t\t\t\t\t\t\t\u003cmountpoint\u003e*\u003cname\u003e*\u003cfstype\u003e*\u003cmountoptions\u003e*\u003csize(in GB)\u003e*\u003cencryption\u003e\n\t\t\t\t\t\t\tex: /home*Home*ext4*noatime,discard*20*Yes)\n-H, --hostname\t\t\t\t\t\t(Provide a specific hostname)\n-L, --locale \u003clocale\u003e\t\t\t\t\t(specify locale to be used, by default \"en_US\")\n-K, --keymap \u003ckeymap\u003e\t\t\t\t\t(specify keymap to be used, by default \"us\")\n-T, --timezone \u003ctimezone\u003e\t\t\t\t(specify timezone to be used, by default \"UTC\")\n-n, --nvidia\t\t\t\t\t\t(Install nvidia drivers)\n-S, --surface\t\t\t\t\t\t(Add patches for Surface devices from github.com/linux-surface)\n-c, --custom-packages\t\t\t\t\t(list of additional packages to be installed - space separated)\n-C, --custom-script\t\t\t\t\t(bash script that should be run at the end of the install process)\n-k, --kernel-parameters\t\t\t\t\t(specific kernel parameters to be applied - space separated)\n-m, --custom-mirror \u003cmirror details\u003e\t\t\t(Add a custom mirror according to the below format:\n\t\t\t\t\t\t\t\u003crepository\u003e*\u003cmirror\u003e\n\t\t\t\t\t\t\tex: Arch*https://mirrors.kernel.org/archlinux)\n-p, --user-password-for-encryption\t\t\t(Use user account password for encryption)\n-g, --grub-hide\t\t\t\t\t\t(Hide the GRUB Bootloader)\n-G, --generate-declarative-config \u003cconfig_file_path\u003e\t(Generate a declarative configuration file)\n-d, --apply-declarative-config \u003cconfig_file_path\u003e\t(Use a declarative configuration file)\n-l, --list\t\t\t\t\t\t(List available distributions and environments)\n-lb, --list-btrfs\t\t\t\t\t(Confirms if btrfs is supported for chosen distribution/version)\n-ld, --list-distributions\t\t\t\t(List available distributions)\n-le, --list-environments\t\t\t\t(List available environments for chosen distribution/version)\n-ll, --list-locales\t\t\t\t\t(List available locales)\n-lk, --list-keymaps\t\t\t\t\t(List available keymaps)\n-ln, --list-nvidia\t\t\t\t\t(Confirms if nvidia open driver is supported for chosen distribution/version)\n-ls, --list-surface\t\t\t\t\t(Confirms if Surface devices patches are supported for chosen distribution/version)\n-lt, --list-timezones\t\t\t\t\t(List available timezones)\n-lv, --list-versions\t\t\t\t\t(List available versions for chosen distribution)\n-h, --help\t\t\t\t\t\t(Display this menu)\n```\n\nThe main parameters are: the distribution, the version, the environment and the destination. Use the below command to list available distributions, versions and environments:  \n`bash ${HOME}/bin/linuxloops -l`  \n\nAs an example:  \n`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.  \n`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.  \n\n### Declarative mode\n\nMake sure that `curl` and `xz` programs are installed.  \n\nDownload the Linuxloops script:  \n`curl -L https://github.com/sebanc/linuxloops/raw/refs/heads/main/linuxloops -O --create-dirs --output-dir ~/bin`  \n\nHave a look at the declarative configuration examples available here:  \n[Declarative configuration examples][Declarative configuration examples]  \n\nThe main parameters are: the distribution, the version and the environment. Use the below command to list available distributions and environments:  \n`bash ${HOME}/bin/linuxloops -l`  \n\nCreate your own declarative configuration and run the below command to start the install:  \n`bash ${HOME}/bin/linuxloops -d \u003cpath_to_your_declarative_configuration\u003e`  \n\n### Detailed instructions\n[Detailed instructions to install from Linux][linux-guide]  \n[Detailed instructions to install from Windows][windows-guide]  \n[Using the Linuxloops Live image][live-image]  \n[Use a disk image in a virtual machine][vm-guide]  \n[Data recovery from an image][recovery-guide]  \n[Recommended setups][recommended-setups]  \n[Secure Boot][secure-boot]  \n\n### Support\n\nSupport for Linuxloops is provided in the dedicated section of the Brunch Discord server:  \n[![Discord][discord-shield]][discord-url]  \n\n## Special Thanks\n\n- The [linuxcontainers][linuxcontainers link] project for maintaining Linux container rootfs archives.  \n- The [Grub2Win][Grub2Win link] project for allowing the GRUB bootloader to be installed on devices running Windows.  \n- The [Linux-Surface crew][linux-surface link] for greatly improving Linux support on Surface devices.  \n\n\n\u003c!-- Reference Links --\u003e\n\u003c!-- Badges --\u003e\n[license-shield]: https://img.shields.io/github/license/sebanc/linuxloops?label=License\u0026logo=Github\u0026style=flat-square\n[license-url]: ./LICENSE\n[issues-shield]: https://img.shields.io/github/issues/sebanc/linuxloops?label=Issues\u0026logo=Github\u0026style=flat-square\n[issues-url]: https://github.com/sebanc/linuxloops/issues\n[discord-shield]: https://img.shields.io/badge/Discord-Join-7289da?style=flat-square\u0026logo=discord\u0026logoColor=%23FFFFFF\n[discord-url]: https://discord.gg/x2EgK2M\n\n\u003c!-- Internal Links --\u003e\n[Arch-notes]: ./Readme/Distro-notes.md#Arch\n[Artix-notes]: ./Readme/Distro-notes.md#Artix\n[Bazzite-notes]: ./Readme/Distro-notes.md#Bazzite\n[BlendOS-notes]: ./Readme/Distro-notes.md#BlendOS\n[Brunch-notes]: ./Readme/Distro-notes.md#Brunch\n[CachyOS-notes]: ./Readme/Distro-notes.md#CachyOS\n[ChromeOS-Flex-notes]: ./Readme/Distro-notes.md#ChromeOS-Flex\n[Fedora-notes]: ./Readme/Distro-notes.md#Fedora\n[Fedora-Atomic-notes]: ./Readme/Distro-notes.md#Fedora-Atomic\n[FoxFlake-notes]: ./Readme/Distro-notes.md#FoxFlake\n[Kali-notes]: ./Readme/Distro-notes.md#Kali\n[KDE-notes]: ./Readme/Distro-notes.md#KDE\n[Manjaro-notes]: ./Readme/Distro-notes.md#Manjaro\n[OpenSUSE-notes]: ./Readme/Distro-notes.md#OpenSUSE\n[Parrot-notes]: ./Readme/Distro-notes.md#Parrot\n[Qubes-notes]: ./Readme/Distro-notes.md#Qubes\n[SteamOS-notes]: ./Readme/Distro-notes.md#SteamOS\n[Tails-notes]: ./Readme/Distro-notes.md#Tails\n\n[linux-guide]: ./Readme/Install-with-linux.md\n[windows-guide]: ./Readme/Install-with-windows.md\n[live-image]: ./Readme/Live-image.md\n[vm-guide]: ./Readme/Virtual-machines.md\n[recovery-guide]: ./Readme/Data-recovery.md\n[recommended-setups]: ./Readme/Recommended-setups.md\n[secure-boot]: ./Readme/Secure-boot.md\n[Declarative configuration examples]: ./Declarative_configuration_examples\n\n\u003c!-- Outbound Links --\u003e\n[DiskImager link]: https://diskimager.org\n[Grub2Win link]: https://sourceforge.net/projects/grub2win\n[linuxcontainers link]: https://linuxcontainers.org\n[linux-surface link]: https://github.com/linux-surface/linux-surface\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebanc%2Flinuxloops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebanc%2Flinuxloops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebanc%2Flinuxloops/lists"}