Skip to content

Instantly share code, notes, and snippets.

@nicball
Created May 24, 2024 11:58
Show Gist options
  • Save nicball/4b5f74722a9a15147a566f87ff6466da to your computer and use it in GitHub Desktop.
Save nicball/4b5f74722a9a15147a566f87ff6466da to your computer and use it in GitHub Desktop.
with import <nixpkgs> {};
let
# class : super -> self -> obj
# fix : class -> obj
fix = c: let self = c {} self; in self;
# mix : class -> class -> class
mix = a: b: super: self: b (a super self) self;
idClass = super: self: super;
constClass = obj: super: self: obj;
makeOverrideWith = name: buildPackage: args:
let
smartBuildPackage = c:
(buildPackage (fix c)) // {
${name} = delta:
let d = super: self: super // delta super self; in
smartBuildPackage (mix c d);
};
base = if builtins.isFunction args then (super: args) else constClass args;
in
smartBuildPackage base;
buildFuckPackage = makeOverrideWith "overrideFuck" (
{ pname
, version
, message
}@args:
stdenv.mkDerivation ({
buildCommand = ''
mkdir -p $out/bin
echo '${message}' > $out/bin/${pname}
'';
} // args)
);
originalPackage = buildFuckPackage (self: {
pname = "some-fuck";
version = "0.1.0";
message = self.pname;
});
overridenPackage = originalPackage.overrideFuck (super: self: {
pname = super.pname + "-fucked";
});
doublyOverridenPackage = overridenPackage.overrideFuck (super: self: {
pname = super.pname + "-again";
});
in
doublyOverridenPackage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment