diff options
-rwxr-xr-x | mach | 12 | ||||
-rw-r--r-- | python/servo/bootstrap.py | 6 |
2 files changed, 17 insertions, 1 deletions
@@ -106,4 +106,14 @@ if __name__ == '__main__': orig_command_line = forking.get_command_line forking.get_command_line = my_get_command_line - main(sys.argv) + if os.path.exists('/etc/NIXOS') and not 'IN_NIX_SHELL' in os.environ: # we're on a nixOS system, need to run mach in nix-shell + import subprocess + from shlex import quote + mach_dir = os.path.abspath(os.path.dirname(__file__)) + try: + # sys argv already contains the ./mach part, so we just need to pass it as-is + subprocess.Popen(['nix-shell', mach_dir + '/etc/shell.nix', '--run', ' '.join(map(quote, sys.argv))]).wait() + except KeyboardInterrupt: + sys.exit(0) + else: + main(sys.argv) diff --git a/python/servo/bootstrap.py b/python/servo/bootstrap.py index 9c94d7cfae9..21fcd967693 100644 --- a/python/servo/bootstrap.py +++ b/python/servo/bootstrap.py @@ -383,6 +383,7 @@ def get_linux_distribution(): 'debian gnu/linux', 'fedora', 'void', + 'nixos', ]: raise Exception('mach bootstrap does not support %s, please file a bug' % distrib) @@ -398,6 +399,11 @@ def bootstrap(context, force=False, specific=None): elif "linux-gnu" in host_triple(): distrib, version = get_linux_distribution() + if distrib.lower() == 'nixos': + print('NixOS does not need bootstrap') + print('just run ./mach build') + return + context.distro = distrib context.distro_version = version bootstrapper = LINUX_SPECIFIC_BOOTSTRAPPERS.get(specific, linux) |