Create a 130GB Nix ️store in GitHub runners ❄️ Multi-partition BTRFS RAID-0 for /nix 💪 Brutally purges unnecessary software 🪓 Dynamically grows the Nix store 📈
See the codeTransform 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...
Standard GitHub Actions runners are stuffed with "bloatware" you'll never use in a Nix workflow:
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:
/nix volume (~65GB) by claiming free space from /mnt/nix volume up to ~130GB
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! ⚡
rm by an order of magnitudeThe 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)
/mnt/nix immediately, even before the purge beginsBackground Expansion (30-180 seconds): (depending on Hatchet Protocol)
/nix volumeThe /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:
#nix-is-lifeBy 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:
root-safe-haven is 2048MB (2GB)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.
This action creates /nix/build for Nix derivation builds to use the reclaimed space. Add build-dir to your Nix configuration:
- uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
build-dir = /nix/build
Or with DeterminateSystems:
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
build-dir = /nix/build
This directs Nix to perform builds on the large BTRFS volume rather than the system's default temporary directory.
If your build runs out of space despite using Nothing but Nix, it's likely because the background purging hasn't completed before your build consumes the available space. This commonly affects:
Solution: Use witness-carnage: true to force synchronous purging. This ensures all space is reclaimed before your build starts:
- uses: wimpysworld/nothing-but-nix@main
with:
hatchet-protocol: 'rampage'
witness-carnage: true
This adds 30-180 seconds to your workflow setup, but guarantees maximum space is available when your build begins.
Now go and build something amazing with all that glorious Nix store space! ❄️
Create a 130GB Nix ️store in GitHub runners ❄️ Multi-partition BTRFS RAID-0 for /nix 💪 Brutally purges unnecessary software 🪓 Dynamically grows the Nix store 📈
See the codeTransform 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...
Standard GitHub Actions runners are stuffed with "bloatware" you'll never use in a Nix workflow:
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:
/nix volume (~65GB) by claiming free space from /mnt/nix volume up to ~130GB
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! ⚡
rm by an order of magnitudeThe 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)
/mnt/nix immediately, even before the purge beginsBackground Expansion (30-180 seconds): (depending on Hatchet Protocol)
/nix volumeThe /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:
#nix-is-lifeBy 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:
root-safe-haven is 2048MB (2GB)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.
This action creates /nix/build for Nix derivation builds to use the reclaimed space. Add build-dir to your Nix configuration:
- uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
build-dir = /nix/build
Or with DeterminateSystems:
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
build-dir = /nix/build
This directs Nix to perform builds on the large BTRFS volume rather than the system's default temporary directory.
If your build runs out of space despite using Nothing but Nix, it's likely because the background purging hasn't completed before your build consumes the available space. This commonly affects:
Solution: Use witness-carnage: true to force synchronous purging. This ensures all space is reclaimed before your build starts:
- uses: wimpysworld/nothing-but-nix@main
with:
hatchet-protocol: 'rampage'
witness-carnage: true
This adds 30-180 seconds to your workflow setup, but guarantees maximum space is available when your build begins.
Now go and build something amazing with all that glorious Nix store space! ❄️