blob: f48c9cec67835ab2f8968c9345ea0729ba64e1a4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
{ config, pkgs, lib, ... }:
with builtins; with lib;
let
cfg = config.wsl;
defaultConfig = pkgs.writeText "default-configuration.nix" ''
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
# NixOS-WSL specific options are documented on the NixOS-WSL repository:
# https://github.com/nix-community/NixOS-WSL
{ config, lib, pkgs, ... }:
{
imports = [
# include NixOS-WSL modules
<nixos-wsl/modules>
];
wsl.enable = true;
wsl.defaultUser = "nixos";
${cfg.extraTarballConfig}
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It's perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "${config.system.nixos.release}"; # Did you read the comment?
}
'';
in
{
options.wsl.extraTarballConfig = mkOption {
type = types.str;
internal = true;
default = "";
};
# These options make no sense without the wsl-distro module anyway
config = mkIf cfg.enable {
system.build.tarballBuilder = pkgs.writeShellApplication {
name = "nixos-wsl-tarball-builder";
runtimeInputs = [
pkgs.coreutils
pkgs.gnutar
pkgs.nixos-install-tools
config.nix.package
];
text = ''
if ! [ $EUID -eq 0 ]; then
echo "This script must be run as root!"
exit 1
fi
out=''${1:-nixos-wsl.tar.gz}
root=$(mktemp -p "''${TMPDIR:-/tmp}" -d nixos-wsl-tarball.XXXXXXXXXX)
# FIXME: fails in CI for some reason, but we don't really care because it's CI
trap 'rm -rf "$root" || true' INT TERM EXIT
chmod o+rx "$root"
echo "[NixOS-WSL] Installing..."
nixos-install \
--root "$root" \
--no-root-passwd \
--system ${config.system.build.toplevel} \
--substituters ""
echo "[NixOS-WSL] Adding channel..."
nixos-enter --root "$root" --command 'nix-channel --add https://github.com/nix-community/NixOS-WSL/archive/refs/heads/main.tar.gz nixos-wsl'
echo "[NixOS-WSL] Adding default config..."
install -Dm644 ${defaultConfig} "$root/etc/nixos/configuration.nix"
echo "[NixOS-WSL] Compressing..."
tar -C "$root" \
-cz \
--sort=name \
--mtime='@1' \
--owner=0 \
--group=0 \
--numeric-owner \
. \
> "$out"
'';
};
};
}
|