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
/nix
volume (~65GB) by claiming free space from/mnt
- Background Rampage: While your workflow continues, we ruthlessly eliminate unnecessary software to expand your
/nix
volume 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
rm
by 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
/nix
immediately, 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
/nix
volume - 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: false
Control 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 filesystem
These safe havens define how much space (in MB) will be mercifully spared during space reclamation:
- Default
root-safe-haven
is 2048MB (2GB) - Default
mnt-safe-haven
is 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: false
When 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! ❄️