diff --git a/default.nix b/default.nix index 35a779a..0c9248a 100644 --- a/default.nix +++ b/default.nix @@ -3,8 +3,16 @@ # if evaluating inside the store, import the outputs.nix file let - # Ideally this file should not depend on nixpkgs lib itself, but I like the utilities here - lib = (import "${(import ./inputs.nix {}).nixpkgs}/lib"); + 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; gitignore = builtins.filter (v: # ignore comments and empty lines @@ -24,11 +32,11 @@ let if pattern == "*" then true else if pattern == ".*" then true else if pattern == "*.*" then true - 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 builtins.substring 0 2 pattern == "*." then endsWith path (builtins.substring 0 2 pattern) + else if contains 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 lib.hasInfix pattern path + else contains path pattern ) gitignore; currentFilePath = (builtins.unsafeGetAttrPos "any" { any = "any"; }).file; diff --git a/inputs.nix b/inputs.nix index 1979433..334379b 100644 --- a/inputs.nix +++ b/inputs.nix @@ -15,11 +15,6 @@ 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 104840a..b413842 100644 --- a/lib/overlays/version-info-fixup.nix +++ b/lib/overlays/version-info-fixup.nix @@ -1,8 +1,8 @@ -{ revision }: +{ inputs ? import ../../inputs.nix {} }: selfLib: superLib: { trivial = superLib.trivial // { - versionSuffix = ".git.${builtins.substring 0 12 revision}"; - revisionWithDefault = default: revision; + versionSuffix = ".git.${builtins.substring 0 12 inputs.lock.nixpkgs.revision}"; + revisionWithDefault = default: inputs.lock.nixpkgs.revision or default; }; } diff --git a/lock.nix b/lock.nix index 84cd166..100cf80 100644 --- a/lock.nix +++ b/lock.nix @@ -7,10 +7,6 @@ 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 b39d9f4..4c41240 100644 --- a/nix-os/unstable-packages.nix +++ b/nix-os/unstable-packages.nix @@ -1,14 +1,8 @@ -{ - config, - lib, - pkgs, - self, - ... -}: +{config, pkgs, lib, ...}: let cfg = config.unstable; - unstableOverlay = self.overlays.unstableWithMeta; + unstableOverlay = import ../pkgs/overlays/unstable.nix; in { options.unstable = { diff --git a/outputs.nix b/outputs.nix index dd3f3ca..3355399 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 { revision = inputs.lock.nixpkgs.revision; }); +lib = (import "${inputs.nixpkgs}/lib").extend (import ./lib/overlays/version-info-fixup.nix { inherit inputs; }); 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; }; - unstableWithMeta = import ./pkgs/overlays/unstable-with-meta.nix { unstableSource = inputs.nixpkgs-unstable; revision = inputs.lock.nixpkgs-unstable.revision; }; + unstable = import ./pkgs/overlays/unstable.nix; 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 deleted file mode 100644 index dbfbc2c..0000000 --- a/pkgs/overlays/unstable-with-meta.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - 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 new file mode 100644 index 0000000..73e79b9 --- /dev/null +++ b/pkgs/overlays/unstable.nix @@ -0,0 +1,24 @@ +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 b1f2ecc..14d890e 100644 --- a/pkgs/overlays/version-info-fixup.nix +++ b/pkgs/overlays/version-info-fixup.nix @@ -1,12 +1,5 @@ { inputs ? import ../../inputs.nix {} }: self: super: { - 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; - }); - }; + lib = super.lib.extend (import ../../lib/overlays/version-info-fixup.nix { inherit inputs; }); } diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix index dfdae8b..fd3e12a 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-with-meta.nix { unstableSource = inputs.nixpkgs-unstable; revision = inputs.lock.nixpkgs-unstable.revision; } ) + ( import ../overlays/unstable.nix ) ( import ../overlays/version-info-fixup.nix { inherit inputs; } ) ( import ./by-name-overlay.nix ../by-name ) ];