commit fa2d43d85d86f822f49897d1f5e37333d84c53fc Author: Charlotte 🦝 Delenk Date: Fri Apr 1 14:11:16 2022 +0100 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..c4f53f5 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Cursed Idea + +What if I made The Sims 2 a nix derivation + +Requires the original ISOs and product keys to be stored in the nix-store diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..a70de08 --- /dev/null +++ b/flake.nix @@ -0,0 +1,16 @@ +{ + inputs = { + nixpkgs.url = github:NixOS/nixpkgs; + flake-utils.url = "github:numtide/flake-utils"; + }; + outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: + let + pkgs = import nixpkgs { + inherit system; + }; + in + rec { + packages = pkgs.callPackage./pkgs/merged.nix { }; + hydraJobs = packages; + }); +} diff --git a/pkgs/disks.nix b/pkgs/disks.nix new file mode 100644 index 0000000..e65c7f1 --- /dev/null +++ b/pkgs/disks.nix @@ -0,0 +1,32 @@ +# Raw ISO +{ emptyDirectory, p7zip, stdenvNoCC, ... }: +let + build_iso = args: stdenvNoCC.mkDerivation ({ + buildPhase = '' + echo "You need to manually add the iso to the nix store" + exit 1 + ''; + outputHashAlgo = "sha256"; + outputHashMode = "flat"; + } // args); +in +rec { + isos = { + sims2-cd1 = build_iso { + name = "Sims2_1.iso"; + outputHash = "19l3xblr5ay3ym2iwfyaksfnxisbhk9cgz876j4hs0hr1876bpp5"; + }; + sims2-cd2 = build_iso { + name = "Sims2_2.iso"; + outputHash = "1d4bn02fmanh3y42lbdg6212wdzkdyfwv9fzb3v06szy263ig567"; + }; + sims2-cd3 = build_iso { + name = "Sims2_3.iso"; + outputHash = "0612rzmjzwmqkr2rdrc9pvbiwqbcv2220dlnwaxjcf4fiw3s070a"; + }; + sims2-cd4 = build_iso { + name = "Sims2_4.iso"; + outputHash = "0g6pjwrfb8v7fc2bnflv35iz68scgylx4yd1pq8lj09560bh3iq0"; + }; + }; +} diff --git a/pkgs/extracted.nix b/pkgs/extracted.nix new file mode 100644 index 0000000..8846a63 --- /dev/null +++ b/pkgs/extracted.nix @@ -0,0 +1,38 @@ +# Disk extraction +{ emptyDirectory, p7zip, libarchive, stdenvNoCC, callPackage }: +let + isos = (callPackage ./disks.nix { }).isos; + extract_iso = iso: stdenvNoCC.mkDerivation { + name = "${iso.name}-extracted"; + nativeBuildInputs = [ + p7zip + ]; + buildPhase = "true"; + src = emptyDirectory; + installPhase = '' + mkdir $out + cd $out + 7z x ${iso} + ''; + }; + extract_compressed_zip = iso_ex: stdenvNoCC.mkDerivation { + name = "${iso_ex.name}-extracted"; + nativeBuildInputs = [ + libarchive + ]; + buildPhase = "true"; + src = iso_ex; + installPhase = '' + mkdir $out + cd $out + bsdtar -xvvf $src/compressed.zip + if [ -f $src/en-us_compressed.zip ]; then + bsdtar -xvvf $src/en-us_compressed.zip + fi + ''; + }; +in +rec { + extracted_iso = builtins.mapAttrs (_: extract_iso) isos; + extracted_all = builtins.mapAttrs (_: extract_compressed_zip) extracted_iso; +} diff --git a/pkgs/merged.nix b/pkgs/merged.nix new file mode 100644 index 0000000..e07539c --- /dev/null +++ b/pkgs/merged.nix @@ -0,0 +1,19 @@ +{ callPackage, symlinkJoin }: +let + extracted = callPackage ./extracted.nix { }; +in +{ + sims2 = symlinkJoin { + name = "The Sims 2"; + paths = [ + extracted.extracted_all.sims2-cd1 + extracted.extracted_iso.sims2-cd1 + extracted.extracted_all.sims2-cd2 + extracted.extracted_iso.sims2-cd2 + extracted.extracted_all.sims2-cd3 + extracted.extracted_iso.sims2-cd3 + extracted.extracted_all.sims2-cd4 + extracted.extracted_iso.sims2-cd4 + ]; + }; +} diff --git a/pkgs/wineprefix.nix b/pkgs/wineprefix.nix new file mode 100644 index 0000000..1df9c78 --- /dev/null +++ b/pkgs/wineprefix.nix @@ -0,0 +1,12 @@ +{ emptyDirectory, stdenvNoCC, wineWowPackages }: +stdenvNoCC.mkDerivation { + name = "wine-prefix-base"; + src = emptyDirectory; + buildPhase = "true"; + nativeBuildInputs = [ wineWowPackages.staging ]; + installPhase = '' + mkdir -p $out + export WINEPREFIX=$out/pfx + wineboot -i + ''; +}