{ description = "LaTeX Documents for Systemsicherheit"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; }; outputs = { self, nixpkgs }: let assignments = [ "Assignment 4 - Protokollsicherheit (Praxis)" "Assignment 5 - Software Security - Teil 1" "Assignment 6 - Software Security - Teil 2" ]; forAllSystems = function: nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (system: function { inherit system; pkgs = import nixpkgs { inherit system; overlays = [ self.overlay ]; }; }); forAllAssignments = function: nixpkgs.lib.genAttrs assignments (assignment: function assignment); texPackages = pkgs: pkgs.texlive.combine { inherit (pkgs.texlive) scheme-full latex-bin latexmk; }; lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101"; version = builtins.substring 0 8 lastModifiedDate; in rec { packages = forAllSystems({system, pkgs}: forAllAssignments(assignment: let tex = texPackages pkgs; document = pkgs.stdenvNoCC.mkDerivation rec { name = assignment; src = self; buildInputs = [ pkgs.coreutils tex ]; phases = [ "unpackPhase" "buildPhase" "installPhase" ]; buildPhase = '' export PATH="${pkgs.lib.makeBinPath buildInputs}"; mkdir -p .cache/texmf-var cd "./${assignment}" env TEXMFHOME=.cache TEXMFVAR=.cache/texmf-var \ latexmk -interaction=nonstopmode -pdf -lualatex \ "./abgabe.tex" ''; installPhase = '' mkdir -p $out cp *.pdf $out/ ''; }; in document) // { default = packages.${system}.${pkgs.lib.last assignments}; "Assignment 7" = pkgs.signatureProxy; }); devShells = forAllSystems({pkgs, ...}: let tex = texPackages pkgs; in { default = pkgs.mkShell { packages = [ pkgs.coreutils tex ]; }; }); overlay = final: prev: with final; { signatureProxy = stdenv.mkDerivation { pname = "SignatureProxy"; inherit version; src = ./7-SGX_Hands-on; buildScript = '' make ''; installScript = '' mkdir -p $out/bin cp app $out/bin cp enclave.so $out/bin ''; nativeBuildInputs = with pkgs; [ clang glibc sgx-sdk gmp.dev openssl.dev pkg-config ]; env = { SGX_SDK = pkgs.sgx-sdk; SGX_MODE = "SIM"; }; }; }; }; }