zaphyra's git: tgcNUR

fork of https://git.transgirl.cafe/zaphoid/tgc-nix-user-repository

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
{
  emacs,
  fetchFromGitea,
  lib,
  stdenvNoCC,
  ...
}:
let
  src = fetchFromGitea {
    domain = "git.linfan.moe";
    owner = "emily";
    repo = "emacs";
    rev = "62de7d4e19be88000d1b71fe0d48496693ed80f3";
    hash = "sha256-dEcOzATSRC3W5fMPtrAK9sALB74FxK8OF890xO9MH6Y=";
  };
in
builtins.listToAttrs (
  map
    (name: {
      inherit name;
      value = stdenvNoCC.mkDerivation {
        pname = "emimacs";
        version = "mistress";

        meta = with lib; {
          description = "emis emacs configuration with dynamic dependencies and all wohoo";
          homepage = "https://git.linfan.moe/emily/emacs";
          license = licenses.gpl3Plus;
          platforms = platforms.unix;
        };

        buildInputs = [
          (emacs.pkgs.withPackages (
            epkgs:
            builtins.map
              (
                name:
                if (builtins.hasAttr name epkgs.melpaPackages) then epkgs.melpaPackages.${name} else epkgs.${name}
              )
              (
                builtins.fromJSON (
                  builtins.readFile (
                    stdenvNoCC.mkDerivation {
                      name = "emimacs-dependencies.json";

                      inherit src;

                      phases = [
                        "unpackPhase"
                        "buildPhase"
                        "installPhase"
                      ];

                      buildInputs = [ emacs ];

                      buildPhase = ''
                        export EMIMACS_HOST=${name}
                        emacs --batch --script $src/init.el > dependencies.json
                      '';

                      installPhase = ''
                        cp dependencies.json $out
                      '';
                    }
                  )
                )
              )
          ))
        ];

        inherit src;

        installPhase = ''
          mkdir -p $out
          cp $src/early-init.el $out/early-init.el
          cp $src/init.el $out/init.el
          cp $src/LICENSE $out/LICENSE
          cp -r $src/config $out/config
        '';

      };
    })
    [
      "eminix"
      "emidesk"
    ]
)