From b69db1ed1322b5c0aa381210a53d9a70778b8eb5 Mon Sep 17 00:00:00 2001 From: Philipp Schuster Date: Mon, 9 Sep 2024 09:07:07 +0200 Subject: [PATCH 1/4] niv: update --- nix/sources.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nix/sources.json b/nix/sources.json index 632c1fc44..02da6e43e 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -5,10 +5,10 @@ "homepage": null, "owner": "NixOS", "repo": "nixpkgs", - "rev": "12bf09802d77264e441f48e25459c10c93eada2e", - "sha256": "077p0zni9hh5gx2hmi6fy1k5xy1hbz9bdd8i4x8flvygp95bs1mj", + "rev": "68e7dce0a6532e876980764167ad158174402c6f", + "sha256": "024vd8hqdakvhyzxw6zpm6awkxm9bx0xg5hmrpsfl16nnrwy3z34", "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/12bf09802d77264e441f48e25459c10c93eada2e.tar.gz", + "url": "https://github.com/NixOS/nixpkgs/archive/68e7dce0a6532e876980764167ad158174402c6f.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "rust-overlay": { @@ -17,10 +17,10 @@ "homepage": "", "owner": "oxalica", "repo": "rust-overlay", - "rev": "c02e7d32607e4e16c80152a40ee141c4877b00cb", - "sha256": "035wx6sbm19mwrnc5cfycqpm1vykfwrcxrabafah9xwdbxsnrjzp", + "rev": "2ef910a6276a2f34513d18f2f826a8dea72c3b3f", + "sha256": "0pjgvqi1l0y2chzjs9lh6qvx962k71ny8c1c2rn6h4afxfpl52dv", "type": "tarball", - "url": "https://github.com/oxalica/rust-overlay/archive/c02e7d32607e4e16c80152a40ee141c4877b00cb.tar.gz", + "url": "https://github.com/oxalica/rust-overlay/archive/2ef910a6276a2f34513d18f2f826a8dea72c3b3f.tar.gz", "url_template": "https://github.com///archive/.tar.gz" } } From af7b3063fbf8bca93156a307c100703e530e637a Mon Sep 17 00:00:00 2001 From: Philipp Schuster Date: Mon, 9 Sep 2024 09:07:31 +0200 Subject: [PATCH 2/4] nix: use nixfmt instead of nixpkgs-fmt nixpkgs-fmt is deprecated --- shell.nix | 3 ++- xtask/src/main.rs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/shell.nix b/shell.nix index 72d5f9328..f5766dbbd 100644 --- a/shell.nix +++ b/shell.nix @@ -11,7 +11,8 @@ pkgs.mkShell { nativeBuildInputs = with pkgs; [ # nix related stuff (such as dependency management) niv - nixpkgs-fmt + # TODO use "nixfmt" once it is stable - likely in nixpkgs @ NixOS 24.11 + nixfmt-rfc-style # Integration test dependencies swtpm diff --git a/xtask/src/main.rs b/xtask/src/main.rs index b9133d81e..f735486cd 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -261,9 +261,9 @@ fn run_fmt_project(fmt_opt: &FmtOpt) -> Result<()> { } // fmt nix - if has_cmd("nixpkgs-fmt") { + if has_cmd("nixfmt") { eprintln!("Formatting: nix"); - let mut command = Command::new("nixpkgs-fmt"); + let mut command = Command::new("nixfmt"); if fmt_opt.check { command.arg("--check"); } From e6300e95919c71e61c831f94248f6886eb0c362f Mon Sep 17 00:00:00 2001 From: Philipp Schuster Date: Mon, 9 Sep 2024 09:08:17 +0200 Subject: [PATCH 3/4] ci: use nixpkgs-unstable channel instead of a pinned one No need to pin this to a specific release, it just creates more confusion. --- .github/workflows/developer_productivity.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/developer_productivity.yml b/.github/workflows/developer_productivity.yml index 944727247..1f9d98713 100644 --- a/.github/workflows/developer_productivity.yml +++ b/.github/workflows/developer_productivity.yml @@ -37,7 +37,7 @@ jobs: with: # This channel is only required to invoke "nix-shell". # Everything inside that nix-shell will use a pinned version of nixpkgs. - nix_path: nixpkgs=channel:nixos-23.05 + nix_path: nixpkgs=channel:nixpkgs-unstable # Dedicated step to separate all the # "copying path '/nix/store/...' from 'https://cache.nixos.org'." # messages from the actual build output. This job takes ~60secs. From 73fc03406a042b5fc22bb88ea8c45133f66750b7 Mon Sep 17 00:00:00 2001 From: Philipp Schuster Date: Mon, 9 Sep 2024 09:08:41 +0200 Subject: [PATCH 4/4] nix: run nixfmt Formatted nix files by running `cargo xtask fmt` --- nix/nixpkgs.nix | 1 - nix/rust-toolchain.nix | 2 +- nix/sources.nix | 229 +++++++++++++++++++++++++---------------- shell.nix | 2 +- 4 files changed, 143 insertions(+), 91 deletions(-) diff --git a/nix/nixpkgs.nix b/nix/nixpkgs.nix index 68090c5b8..aced2d386 100644 --- a/nix/nixpkgs.nix +++ b/nix/nixpkgs.nix @@ -3,4 +3,3 @@ let rust-overlay = import sources.rust-overlay; in import sources.nixpkgs { overlays = [ rust-overlay ]; } - diff --git a/nix/rust-toolchain.nix b/nix/rust-toolchain.nix index b3acb0c32..d73681544 100644 --- a/nix/rust-toolchain.nix +++ b/nix/rust-toolchain.nix @@ -3,7 +3,7 @@ { # Comes from rust-overlay - rust-bin + rust-bin, }: # Includes rustc, cargo, rustfmt, etc diff --git a/nix/sources.nix b/nix/sources.nix index 23ab29b03..757b3125f 100644 --- a/nix/sources.nix +++ b/nix/sources.nix @@ -6,133 +6,177 @@ let # The fetchers. fetch_ fetches specs of type . # - fetch_file = pkgs: name: spec: + fetch_file = + pkgs: name: spec: let name' = sanitizeName name + "-src"; in if spec.builtin or true then - builtins_fetchurl { inherit (spec) url sha256; name = name'; } + builtins_fetchurl { + inherit (spec) url sha256; + name = name'; + } else - pkgs.fetchurl { inherit (spec) url sha256; name = name'; }; + pkgs.fetchurl { + inherit (spec) url sha256; + name = name'; + }; - fetch_tarball = pkgs: name: spec: + fetch_tarball = + pkgs: name: spec: let name' = sanitizeName name + "-src"; in if spec.builtin or true then - builtins_fetchTarball { name = name'; inherit (spec) url sha256; } + builtins_fetchTarball { + name = name'; + inherit (spec) url sha256; + } else - pkgs.fetchzip { name = name'; inherit (spec) url sha256; }; + pkgs.fetchzip { + name = name'; + inherit (spec) url sha256; + }; - fetch_git = name: spec: + fetch_git = + name: spec: let ref = - if spec ? ref then spec.ref else - if spec ? branch then "refs/heads/${spec.branch}" else - if spec ? tag then "refs/tags/${spec.tag}" else - abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!"; + if spec ? ref then + spec.ref + else if spec ? branch then + "refs/heads/${spec.branch}" + else if spec ? tag then + "refs/tags/${spec.tag}" + else + abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!"; submodules = if spec ? submodules then spec.submodules else false; submoduleArg = let nixSupportsSubmodules = builtins.compareVersions builtins.nixVersion "2.4" >= 0; emptyArgWithWarning = - if submodules == true - then - builtins.trace - ( - "The niv input \"${name}\" uses submodules " - + "but your nix's (${builtins.nixVersion}) builtins.fetchGit " - + "does not support them" - ) - { } - else { }; + if submodules == true then + builtins.trace ( + "The niv input \"${name}\" uses submodules " + + "but your nix's (${builtins.nixVersion}) builtins.fetchGit " + + "does not support them" + ) { } + else + { }; in - if nixSupportsSubmodules - then { inherit submodules; } - else emptyArgWithWarning; + if nixSupportsSubmodules then { inherit submodules; } else emptyArgWithWarning; in - builtins.fetchGit - ({ url = spec.repo; inherit (spec) rev; inherit ref; } // submoduleArg); + builtins.fetchGit ( + { + url = spec.repo; + inherit (spec) rev; + inherit ref; + } + // submoduleArg + ); fetch_local = spec: spec.path; - fetch_builtin-tarball = name: throw - ''[${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`. - $ niv modify ${name} -a type=tarball -a builtin=true''; + fetch_builtin-tarball = + name: + throw '' + [${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`. + $ niv modify ${name} -a type=tarball -a builtin=true''; - fetch_builtin-url = name: throw - ''[${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`. - $ niv modify ${name} -a type=file -a builtin=true''; + fetch_builtin-url = + name: + throw '' + [${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`. + $ niv modify ${name} -a type=file -a builtin=true''; # # Various helpers # # https://github.com/NixOS/nixpkgs/pull/83241/files#diff-c6f540a4f3bfa4b0e8b6bafd4cd54e8bR695 - sanitizeName = name: - ( - concatMapStrings (s: if builtins.isList s then "-" else s) - ( - builtins.split "[^[:alnum:]+._?=-]+" - ((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name) - ) - ); + sanitizeName = + name: + (concatMapStrings (s: if builtins.isList s then "-" else s) ( + builtins.split "[^[:alnum:]+._?=-]+" ((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name) + )); # The set of packages used when specs are fetched using non-builtins. - mkPkgs = sources: system: + mkPkgs = + sources: system: let - sourcesNixpkgs = - import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) { inherit system; }; + sourcesNixpkgs = import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) { + inherit system; + }; hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; hasThisAsNixpkgsPath = == ./.; in - if builtins.hasAttr "nixpkgs" sources - then sourcesNixpkgs - else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then + if builtins.hasAttr "nixpkgs" sources then + sourcesNixpkgs + else if hasNixpkgsPath && !hasThisAsNixpkgsPath then import { } else - abort - '' - Please specify either (through -I or NIX_PATH=nixpkgs=...) or - add a package called "nixpkgs" to your sources.json. - ''; + abort '' + Please specify either (through -I or NIX_PATH=nixpkgs=...) or + add a package called "nixpkgs" to your sources.json. + ''; # The actual fetching function. - fetch = pkgs: name: spec: + fetch = + pkgs: name: spec: - if ! builtins.hasAttr "type" spec then + if !builtins.hasAttr "type" spec then abort "ERROR: niv spec ${name} does not have a 'type' attribute" - else if spec.type == "file" then fetch_file pkgs name spec - else if spec.type == "tarball" then fetch_tarball pkgs name spec - else if spec.type == "git" then fetch_git name spec - else if spec.type == "local" then fetch_local spec - else if spec.type == "builtin-tarball" then fetch_builtin-tarball name - else if spec.type == "builtin-url" then fetch_builtin-url name + else if spec.type == "file" then + fetch_file pkgs name spec + else if spec.type == "tarball" then + fetch_tarball pkgs name spec + else if spec.type == "git" then + fetch_git name spec + else if spec.type == "local" then + fetch_local spec + else if spec.type == "builtin-tarball" then + fetch_builtin-tarball name + else if spec.type == "builtin-url" then + fetch_builtin-url name else abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}"; # If the environment variable NIV_OVERRIDE_${name} is set, then use # the path directly as opposed to the fetched source. - replace = name: drv: + replace = + name: drv: let saneName = stringAsChars (c: if isNull (builtins.match "[a-zA-Z0-9]" c) then "_" else c) name; ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}"; in - if ersatz == "" then drv else - # this turns the string into an actual Nix path (for both absolute and - # relative paths) - if builtins.substring 0 1 ersatz == "/" then /. + ersatz else /. + builtins.getEnv "PWD" + "/${ersatz}"; + if ersatz == "" then + drv + else + # this turns the string into an actual Nix path (for both absolute and + # relative paths) + if builtins.substring 0 1 ersatz == "/" then + /. + ersatz + else + /. + builtins.getEnv "PWD" + "/${ersatz}"; # Ports of functions for older nix versions # a Nix version of mapAttrs if the built-in doesn't exist - mapAttrs = builtins.mapAttrs or ( - f: set: with builtins; - listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set)) - ); + mapAttrs = + builtins.mapAttrs or ( + f: set: + with builtins; + listToAttrs ( + map (attr: { + name = attr; + value = f attr set.${attr}; + }) (attrNames set) + ) + ); # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295 - range = first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1); + range = + first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1); # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257 stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1)); @@ -146,7 +190,12 @@ let optionalAttrs = cond: as: if cond then as else { }; # fetchTarball version that is compatible between all the versions of Nix - builtins_fetchTarball = { url, name ? null, sha256 }@attrs: + builtins_fetchTarball = + { + url, + name ? null, + sha256, + }@attrs: let inherit (builtins) lessThan nixVersion fetchTarball; in @@ -156,7 +205,12 @@ let fetchTarball attrs; # fetchurl version that is compatible between all the versions of Nix - builtins_fetchurl = { url, name ? null, sha256 }@attrs: + builtins_fetchurl = + { + url, + name ? null, + sha256, + }@attrs: let inherit (builtins) lessThan nixVersion fetchurl; in @@ -166,26 +220,25 @@ let fetchurl attrs; # Create the final "sources" from the config - mkSources = config: - mapAttrs - ( - name: spec: - if builtins.hasAttr "outPath" spec - then - abort - "The values in sources.json should not have an 'outPath' attribute" - else - spec // { outPath = replace name (fetch config.pkgs name spec); } - ) - config.sources; + mkSources = + config: + mapAttrs ( + name: spec: + if builtins.hasAttr "outPath" spec then + abort "The values in sources.json should not have an 'outPath' attribute" + else + spec // { outPath = replace name (fetch config.pkgs name spec); } + ) config.sources; # The "config" used by the fetchers mkConfig = - { sourcesFile ? if builtins.pathExists ./sources.json then ./sources.json else null - , sources ? if isNull sourcesFile then { } else builtins.fromJSON (builtins.readFile sourcesFile) - , system ? builtins.currentSystem - , pkgs ? mkPkgs sources system - }: rec { + { + sourcesFile ? if builtins.pathExists ./sources.json then ./sources.json else null, + sources ? if isNull sourcesFile then { } else builtins.fromJSON (builtins.readFile sourcesFile), + system ? builtins.currentSystem, + pkgs ? mkPkgs sources system, + }: + rec { # The sources, i.e. the attribute set of spec name to spec inherit sources; diff --git a/shell.nix b/shell.nix index f5766dbbd..6453a0140 100644 --- a/shell.nix +++ b/shell.nix @@ -5,7 +5,7 @@ let sources = import ./nix/sources.nix; pkgs = import ./nix/nixpkgs.nix; - rustToolchain = pkgs.callPackage ./nix/rust-toolchain.nix {}; + rustToolchain = pkgs.callPackage ./nix/rust-toolchain.nix { }; in pkgs.mkShell { nativeBuildInputs = with pkgs; [