Transform your GitHub Actions runner into a Nix ❄️ powerhouse by ruthlessly slashing pre-installed bloat.
GitHub Actions runners come with meager disk space for Nix - a mere ~20GB. Nothing but Nix brutally purges unnecessary software, giving you 65GB to 130GB for your Nix store! 💪
Add this action before installing Nix in your workflow:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: wimpysworld/nothing-but-nix@main
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
- name: Run Nix
run: |
nix --version
# Your Nix-powered steps here...- Only supports official Ubuntu GitHub Actions runners
- Must run before Nix is installed
Standard GitHub Actions runners are stuffed with "bloatware" you'll never use in a Nix workflow:
- 🌍 Web browsers. Lots of them. Gotta have 'em all!
- 🐳 Docker images consuming gigabytes of precious disk space
- 💻 Unnecessary language runtimes (.NET, Ruby, PHP, Java...)
- 📦 Package managers gathering digital dust
- 📚 Documentation no one will ever read
This bloat leaves only ~20GB for your Nix store - barely enough for serious Nix builds! 😞
Nothing but Nix takes a scorched-earth approach to GitHub Actions runners and mercilessly reclaims disk space using a two-phase attack:
- Initial Slash: Instantly creates a large
/nixvolume (~65GB) by claiming free space from/mnt - Background Rampage: While your workflow continues, we ruthlessly eliminate unnecessary software to expand your
/nixvolume up to ~130GB- Web browsers? Nope ⛔
- Docker images? Gone 🗑️
- Language runtimes? Obliterated 💥
- Package managers? Annihilated 💣
- Documentation? Vaporized ️👻
The file system purge is powered by rmz (from the Fast Unix Commands (FUC) project) - a high-performance alternative to rm that makes space reclamation blazing fast! ⚡
- Outperforms standard
rmby an order of magnitude - Parallel-processes deletions for maximum efficiency
- Reclaims disk space in seconds rather than minutes! ️⏱️
The end result? A GitHub Actions runner with 65GB to 130GB of Nix-ready space! 😁
Unlike other solutions, Nothing but Nix grows your /nix volume dynamically:
-
Initial Volume Creation (1-10 seconds): (depending on Hatchet Protocol)
- Creates a loop device from free space on
/mnt - Sets up a BTRFS filesystem in RAID0 configuration
- Mounts with compression and performance tuning
- Provides a 65GB
/niximmediately, even before the purge begins
- Creates a loop device from free space on
-
Background Expansion (30-180 seconds): (depending on Hatchet Protocol)
- Executes purging operations
- Monitors for newly freed space as bloat is eliminated
- Dynamically adds an expansion disk to the
/nixvolume - Rebalances the filesystem to incorporate new space
The /nix volume automatically grows during workflow execution 🎩🪄
Control the level of annihilation 💥 with the hatchet-protocol input:
- uses: wimpysworld/nothing-but-nix@main
with:
hatchet-protocol: 'cleave' # Options: holster, carve, cleave (default), rampage| Protocol | /nix |
Description | Purge apt | Purge docker | Purge snap | Purged file systems |
|---|---|---|---|---|---|---|
| Holster | ~65GB | Keep the hatchet sheathed, use space from /mnt |
No | No | No | None |
| Carve | ~85GB | Craft and combine free space from / and /mnt |
No | No | No | None |
| Cleave | ~115GB | Make powerful, decisive cuts to large packages | Minimal | Yes | Yes | /opt and /usr/local |
| Rampage | ~130GB | Relentless, brutal elimination of all bloat | Aggressive | Yes | Yes | Muahahaha! 🔥🌎 |
Choose wisely:
- Holster when you need the runner's tools to remain fully functional
- Carve to preserve functional runner tooling but claim all free space for Nix
- Cleave (default) for a good balance of space and functionality
- Rampage when you need maximum Nix space and don't care what breaks
#nix-is-life
By default, the purging process executes silently in the background while your workflow continues. But if you want to watch the slaughter in real-time:
- uses: wimpysworld/nothing-but-nix@main
with:
️hatchet-protocol: 'cleave'
witness-carnage: true # Default: falseControl how much space to spare from the Nix store land grab with custom safe haven sizes:
- uses: wimpysworld/nothing-but-nix@main
with:
️hatchet-protocol: 'cleave'
root-safe-haven: '3072' # Reserve 3GB on the / filesystem
mnt-safe-haven: '2048' # Reserve 2GB on the /mnt filesystemThese safe havens define how much space (in MB) will be mercifully spared during space reclamation:
- Default
root-safe-havenis 2048MB (2GB) - Default
mnt-safe-havenis 1024MB (1GB)
Increase these values if you need more breathing room on your filesystems, or decrease them to show no mercy! 😈
Some Nix installers or configurations expect the /nix directory to be writable by the current user. By default, /nix is owned by root. If you need user ownership (e.g., for certain Nix installer scripts that don't use sudo for all operations within /nix), you can enable the nix-permission-edict:
- uses: wimpysworld/nothing-but-nix@main
with:
nix-permission-edict: true # Default: falseWhen nix-permission-edict is set to true, the action will run sudo chown -R "$(id --user)":"$(id --group)" /nix after mounting /nix.
Now go and build something amazing with all that glorious Nix store space! ❄️