diff --git a/default.nix b/default.nix index 0c9248a..35a779a 100644 --- a/default.nix +++ b/default.nix @@ -3,16 +3,8 @@ # if evaluating inside the store, import the outputs.nix file let - contains = str: substr: let - str_length = builtins.stringLength str; - substr_length = builtins.stringLength substr; - listOfPossibleSubstrings = builtins.genList (i: builtins.substring i substr_length str) (str_length - substr_length + 1); - in if substr_length > str_length then false else builtins.any (x: x == substr) listOfPossibleSubstrings; - - endsWith = str: substr: let - str_length = builtins.stringLength str; - substr_length = builtins.stringLength substr; - in if substr_length > str_length then false else builtins.substring (str_length - substr_length) str_length str == substr; + # Ideally this file should not depend on nixpkgs lib itself, but I like the utilities here + lib = (import "${(import ./inputs.nix {}).nixpkgs}/lib"); gitignore = builtins.filter (v: # ignore comments and empty lines @@ -32,11 +24,11 @@ let if pattern == "*" then true else if pattern == ".*" then true else if pattern == "*.*" then true - else if builtins.substring 0 2 pattern == "*." then endsWith path (builtins.substring 0 2 pattern) - else if contains pattern "*" then abort unsupportedPatternMessage + else if builtins.substring 0 2 pattern == "*." then lib.hasSuffix (builtins.substring 0 2 pattern) path + else if lib.hasInfix "*" pattern then abort unsupportedPatternMessage else if patternLength > 2 && builtins.substring 0 2 pattern == "./" then abort unsupportedPatternMessage else if patternLength > 1 && builtins.substring 0 1 pattern == "/" then abort unsupportedPatternMessage - else contains path pattern + else lib.hasInfix pattern path ) gitignore; currentFilePath = (builtins.unsafeGetAttrPos "any" { any = "any"; }).file; diff --git a/inputs.nix b/inputs.nix index 334379b..1979433 100644 --- a/inputs.nix +++ b/inputs.nix @@ -15,6 +15,11 @@ let self = { url = "https://github.com/NixOS/nixpkgs/archive/${lock.nixpkgs.revision}.tar.gz"; sha256 = "${lock.nixpkgs.sha256}"; }; + nixpkgs-unstable = builtins.fetchTarball { + name = "nixpkgs-unstable"; + url = "https://github.com/NixOS/nixpkgs/archive/${lock.nixpkgs-unstable.revision}.tar.gz"; + sha256 = "${lock.nixpkgs-unstable.sha256}"; + }; cosmic-modules = builtins.fetchTarball { name = "cosmic-modules"; url = "https://github.com/lilyinstarlight/nixos-cosmic/archive/${lock.cosmic-modules.revision}.tar.gz"; diff --git a/lib/overlays/version-info-fixup.nix b/lib/overlays/version-info-fixup.nix index b413842..104840a 100644 --- a/lib/overlays/version-info-fixup.nix +++ b/lib/overlays/version-info-fixup.nix @@ -1,8 +1,8 @@ -{ inputs ? import ../../inputs.nix {} }: +{ revision }: selfLib: superLib: { trivial = superLib.trivial // { - versionSuffix = ".git.${builtins.substring 0 12 inputs.lock.nixpkgs.revision}"; - revisionWithDefault = default: inputs.lock.nixpkgs.revision or default; + versionSuffix = ".git.${builtins.substring 0 12 revision}"; + revisionWithDefault = default: revision; }; } diff --git a/lock.nix b/lock.nix index 100cf80..84cd166 100644 --- a/lock.nix +++ b/lock.nix @@ -7,6 +7,10 @@ revision = "3f0a8ac25fb674611b98089ca3a5dd6480175751"; sha256 = "10i7fllqjzq171afzhdf2d9r1pk9irvmq5n55h92rc47vlaabvr4"; }; + nixpkgs-unstable = { + revision = "130595eba61081acde9001f43de3248d8888ac4a"; + sha256 = "0sw7zg4gal3wpz51ch1v36pdan9z73d4f3yrggh8h2clxs8jdgsx"; + }; cosmic-modules = { revision = "a934c861065b6b1aca9a859c45631336e0e8560c"; sha256 = "1p0hs2z1h9fl25qvrlprf63cj1v0m7hr2y051mykjvdxikvn5a47"; diff --git a/nix-os/unstable-packages.nix b/nix-os/unstable-packages.nix index 4c41240..b39d9f4 100644 --- a/nix-os/unstable-packages.nix +++ b/nix-os/unstable-packages.nix @@ -1,8 +1,14 @@ -{config, pkgs, lib, ...}: +{ + config, + lib, + pkgs, + self, + ... +}: let cfg = config.unstable; - unstableOverlay = import ../pkgs/overlays/unstable.nix; + unstableOverlay = self.overlays.unstableWithMeta; in { options.unstable = { diff --git a/outputs.nix b/outputs.nix index 3355399..dd3f3ca 100644 --- a/outputs.nix +++ b/outputs.nix @@ -5,7 +5,7 @@ let -lib = (import "${inputs.nixpkgs}/lib").extend (import ./lib/overlays/version-info-fixup.nix { inherit inputs; }); +lib = (import "${inputs.nixpkgs}/lib").extend (import ./lib/overlays/version-info-fixup.nix { revision = inputs.lock.nixpkgs.revision; }); self = { inherit inputs lib self; @@ -15,7 +15,7 @@ self = { overlays = { cosmicPackages = import ./pkgs/overlays/cosmic-packages.nix { inherit inputs; }; selfExpr = import ./pkgs/overlays/selfExpr.nix { nixpkgsPath = inputs.nixpkgs; }; - unstable = import ./pkgs/overlays/unstable.nix; + unstableWithMeta = import ./pkgs/overlays/unstable-with-meta.nix { unstableSource = inputs.nixpkgs-unstable; revision = inputs.lock.nixpkgs-unstable.revision; }; versionInfoFixup = import ./pkgs/overlays/version-info-fixup.nix { inherit inputs; }; }; nixosConfigurations = let @@ -26,7 +26,7 @@ self = { ( # regular .nix files (type == "regular" && lib.hasSuffix ".nix" name) || # directories that contain a default.nix file - (type == "directory" && builtins.pathExists "${./hosts}/${name}/default.nix") + (type == "directory" && builtins.pathExists "${./.}/hosts/${name}/default.nix") ) # filter out files that start with . && !lib.hasPrefix "." name diff --git a/pkgs/overlays/unstable-with-meta.nix b/pkgs/overlays/unstable-with-meta.nix new file mode 100644 index 0000000..dbfbc2c --- /dev/null +++ b/pkgs/overlays/unstable-with-meta.nix @@ -0,0 +1,16 @@ +{ + unstableSource, + revision, +}: self: super: + +let + version = builtins.readFile "${unstableSource}/lib/.version" + ".git." + builtins.substring 0 12 revision; + useUnstable = self.config.useUnstable or true; + +in +import ./unstable-from-source.nix { + inherit unstableSource; +} self super // { + unstableVersion = self.lib.optionalString useUnstable version; + unstableRevision = self.lib.optionalString useUnstable revision; +} diff --git a/pkgs/overlays/unstable.nix b/pkgs/overlays/unstable.nix deleted file mode 100644 index 73e79b9..0000000 --- a/pkgs/overlays/unstable.nix +++ /dev/null @@ -1,24 +0,0 @@ -self: super: - -let - nixos = self.config.nixos or true; - useUnstable = self.config.useUnstable or true; - - unstablePkgsExprs = if nixos - then builtins.fetchTarball "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" - else builtins.fetchTarball "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; - - # Compiled nixpkgs expression eg expressions from a nix channel - nixpkgsVersion = builtins.concatStringsSep "." [ - (builtins.readFile "${unstablePkgsExprs}/.version") - (builtins.readFile "${unstablePkgsExprs}/.version-suffix") - ]; - - nixpkgsRevision = (builtins.readFile "${unstablePkgsExprs}/.git-revision"); -in -import ./unstable-from-source.nix { - unstableSource = unstablePkgsExprs; -} self super // { - unstableVersion = self.lib.optionalString useUnstable nixpkgsVersion; - unstableRevision = self.lib.optionalString useUnstable nixpkgsRevision; -} diff --git a/pkgs/overlays/version-info-fixup.nix b/pkgs/overlays/version-info-fixup.nix index 14d890e..b1f2ecc 100644 --- a/pkgs/overlays/version-info-fixup.nix +++ b/pkgs/overlays/version-info-fixup.nix @@ -1,5 +1,12 @@ { inputs ? import ../../inputs.nix {} }: self: super: { - lib = super.lib.extend (import ../../lib/overlays/version-info-fixup.nix { inherit inputs; }); + lib = super.lib.extend (import ../../lib/overlays/version-info-fixup.nix { revision = inputs.lock.nixpkgs.revision; }); +} // +super.lib.optionalAttrs (super ? unstable && super ? unstableRevision) { + unstable = super.unstable // { + lib = super.unstable.lib.extend (import ../../lib/overlays/version-info-fixup.nix { + revision = super.unstableRevision; + }); + }; } diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix index fd3e12a..dfdae8b 100644 --- a/pkgs/top-level/default.nix +++ b/pkgs/top-level/default.nix @@ -14,7 +14,7 @@ let overlays = (args.overlays or []) ++ [ # ../.. should be nix store path that represents self in outputs.nix that is gc-rooted by this point ( import ../overlays/selfExpr.nix { nixpkgsPath = "${builtins.toString ../..}/pkgs/top-level/impure.nix"; } ) - ( import ../overlays/unstable.nix ) + ( import ../overlays/unstable-with-meta.nix { unstableSource = inputs.nixpkgs-unstable; revision = inputs.lock.nixpkgs-unstable.revision; } ) ( import ../overlays/version-info-fixup.nix { inherit inputs; } ) ( import ./by-name-overlay.nix ../by-name ) ];