{ description = "NixOS WSL"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; flake-utils.url = "github:numtide/flake-utils"; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; outputs = inputs@{ self, nixpkgs, flake-utils, ... }: with nixpkgs.lib; { nixosModules.wsl = { imports = [ ./modules ({ ... }: { wsl.version.rev = mkIf (self ? rev) self.rev; }) ]; }; nixosModules.default = self.nixosModules.wsl; nixosConfigurations = { modern = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ self.nixosModules.default { wsl.enable = true; } ]; }; legacy = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ self.nixosModules.default { wsl.enable = true; wsl.nativeSystemd = false; } ]; }; test = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ self.nixosModules.default ({ config, ... }: { wsl.enable = true; wsl.nativeSystemd = false; system.activationScripts.create-test-entrypoint.text = '' mkdir -p /bin ln -sfn ${config.users.users.root.shell} /bin/syschdemd ''; }) ]; }; }; } // flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system: let pkgs = import nixpkgs { inherit system; }; in { checks = let args = { inherit inputs; }; in { nixpkgs-fmt = pkgs.callPackage ./checks/nixpkgs-fmt.nix args; shfmt = pkgs.callPackage ./checks/shfmt.nix args; rustfmt = pkgs.callPackage ./checks/rustfmt.nix args; side-effects = pkgs.callPackage ./checks/side-effects.nix args; username = pkgs.callPackage ./checks/username.nix args; test-native-utils = self.packages.${system}.utils; }; packages = { utils = pkgs.callPackage ./utils { }; staticUtils = pkgs.pkgsStatic.callPackage ./utils { }; }; devShells.default = pkgs.mkShell { RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; nativeBuildInputs = with pkgs; [ nixpkgs-fmt shfmt rustc cargo rustfmt clippy ]; }; } ); }