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"
]
)