No description
  • Nix 52.4%
  • Haskell 47.6%
Find a file
Alex David c141cf8cc6 Prevent CI from failing if secret is not available
Sourcehut will not populate secrets when running CI for patches, but it
would be better if CI runs and passes, even if CI can't push the
artifacts.
2026-02-06 14:56:11 -08:00
lib Forward shellPath on shell derivations 2026-01-28 13:46:12 -08:00
tests Forward shellPath on shell derivations 2026-01-28 13:46:12 -08:00
website Use filesets to improve caching 2026-01-28 13:21:10 -08:00
.build.yml Prevent CI from failing if secret is not available 2026-02-06 14:56:11 -08:00
default.nix Allow consuming jail.nix without flakes 2025-08-15 08:06:02 -07:00
flake.nix Restructure source 2025-08-07 15:54:50 -07:00
LICENSE Add initial spike 2025-04-27 12:07:03 -07:00
README.md Update readme 2025-10-19 11:51:46 -07:00

jail.nix builds.sr.ht status

Docs | Source | Issues | Patches | Matrix

A helper to make it easy and ergonomic to wrap your derivations in bubblewrap.

Getting Started

Documentation to install and get started can be found here.

Example

# flake.nix
{
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
  inputs.jail-nix.url = "sourcehut:~alexdavid/jail.nix";

  outputs = { nixpkgs, jail-nix, ... }: let
    pkgs = import nixpkgs { system = "x86_64-linux"; };
    jail = jail-nix.lib.init pkgs;

    untrusted-package = pkgs.writeScriptBin "untrusted" ''
      ls -la $HOME
    '';
  in {
    packages.x86_64-linux.jailed = jail "my-jail" untrusted-package (with jail.combinators; [
      # See combinators section below for more functions that can go here

      # Give program access to the network
      network

      # Allow program to create windows
      gui

      # Give program access to the GPU
      gpu

      # Give program read-only access to /var/log/journal
      (readonly "/var/log/journal")

      # Mount ~/foo to /bar in the jail as read-write
      # (noescape due to `~` — all arguments are shell escaped by default)
      (rw-bind (noescape "~/foo") "/bar")
    ]);
  };
}

Combinators

By default, only the bare minimum permissions are exposed. By passing combinators into the jail you can modify the jail to expose more permissions.

Click here for a full list of combinators and their documentation.

Help / Comments / Suggestions

I am working on docs with examples of combinators for various common software projects, but this isn't finished yet. In the meantime, if you need help jailing software, run into issues, or have suggestions, feel free to join #jail.nix:woh.place on matrix, or open an issue.