From 7b0e0ca35e07a3043f2427e96d5f10478fdc5597 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 12 May 2021 22:11:17 +0200 Subject: [PATCH] nixos-install-tools: init The essential commands from the NixOS installer as a package With this package, you get the commands like nixos-generate-config and nixos-install that you would otherwise only find on a NixOS system, such as an installer image. This way, you can install NixOS using a machine that only has Nix. It also includes the manpages, which are important because the commands rely on those for providing --help. --- .../installing-from-other-distro.xml | 8 +-- .../tools/nix/nixos-install-tools/default.nix | 67 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 3 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 pkgs/tools/nix/nixos-install-tools/default.nix diff --git a/nixos/doc/manual/installation/installing-from-other-distro.xml b/nixos/doc/manual/installation/installing-from-other-distro.xml index 43f69b923d1..63d1d52b01b 100644 --- a/nixos/doc/manual/installation/installing-from-other-distro.xml +++ b/nixos/doc/manual/installation/installing-from-other-distro.xml @@ -84,12 +84,12 @@ nixpkgs https://nixos.org/channels/nixpkgs-unstable You'll need nixos-generate-config and - nixos-install and we'll throw in some man pages and - nixos-enter just in case you want to chroot into your - NixOS partition. They are installed by default on NixOS, but you don't have + nixos-install, but this also makes some man pages + and nixos-enter available, just in case you want to chroot into your + NixOS partition. NixOS installs these by default, but you don't have NixOS yet.. -$ nix-env -f '<nixpkgs/nixos>' --arg configuration {} -iA config.system.build.{nixos-generate-config,nixos-install,nixos-enter,manual.manpages} + $ nix-env -f '<nixpkgs>' -iA nixos-install-tools diff --git a/pkgs/tools/nix/nixos-install-tools/default.nix b/pkgs/tools/nix/nixos-install-tools/default.nix new file mode 100644 index 00000000000..a129fb34521 --- /dev/null +++ b/pkgs/tools/nix/nixos-install-tools/default.nix @@ -0,0 +1,67 @@ +{ + buildEnv, + lib, + man, + nixos, + # TODO: replace indirect self-reference by proper self-reference + # https://github.com/NixOS/nixpkgs/pull/119942 + nixos-install-tools, + runCommand, +}: +let + inherit (nixos {}) config; + version = config.system.nixos.version; +in +(buildEnv { + name = "nixos-install-tools-${version}"; + paths = lib.attrValues { + # See nixos/modules/installer/tools/tools.nix + inherit (config.system.build) + nixos-install nixos-generate-config nixos-enter; + + # Required for --help. + inherit (config.system.build.manual) manpages; + }; + + extraOutputsToInstall = ["man"]; + + meta = { + description = "The essential commands from the NixOS installer as a package"; + longDescription = '' + With this package, you get the commands like nixos-generate-config and + nixos-install that you would otherwise only find on a NixOS system, such + as an installer image. + + This way, you can install NixOS using a machine that only has Nix. + ''; + license = lib.licenses.mit; + homepage = "https://nixos.org"; + platforms = lib.platforms.linux; + }; + + passthru.tests = { + nixos-install-help = runCommand "test-nixos-install-help" { + nativeBuildInputs = [ + man + nixos-install-tools + ]; + meta.description = '' + Make sure that --help works. It's somewhat non-trivial because it + requires man. + ''; + } '' + nixos-install --help | grep -F 'NixOS Reference Pages' + nixos-install --help | grep -F 'configuration.nix' + nixos-generate-config --help | grep -F 'NixOS Reference Pages' + nixos-generate-config --help | grep -F 'hardware-configuration.nix' + + # FIXME: Tries to call unshare, which it must not do for --help + # nixos-enter --help | grep -F 'NixOS Reference Pages' + + touch $out + ''; + }; +}).overrideAttrs (o: { + inherit version; + pname = "nixos-install-tools"; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index da6c96bb2a1..34e142bed82 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -30271,6 +30271,8 @@ in (import ../../nixos/lib/make-options-doc/default.nix) ({ inherit pkgs lib; } // attrs); + nixos-install-tools = callPackage ../tools/nix/nixos-install-tools { }; + nixui = callPackage ../tools/package-management/nixui { node_webkit = nwjs_0_12; }; nixdoc = callPackage ../tools/nix/nixdoc {};