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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
{ lib, stdenv, fetchFromGitHub, python3Packages, libunistring,
harfbuzz, fontconfig, pkg-config, ncurses, imagemagick, xsel,
libstartup_notification, libGL, libX11, libXrandr, libXinerama, libXcursor,
libxkbcommon, libXi, libXext, wayland-protocols, wayland,
lcms2,
installShellFiles,
dbus,
Cocoa,
CoreGraphics,
Foundation,
IOKit,
Kernel,
OpenGL,
libcanberra,
libicns,
libpng,
python3,
zlib,
}:
with python3Packages;
buildPythonApplication rec {
pname = "kitty";
version = "0.20.3";
format = "other";
src = fetchFromGitHub {
owner = "kovidgoyal";
repo = "kitty";
rev = "v${version}";
sha256 = "sha256-rORIrbUqtQZuU6TjjYP7IZHfCPeLnrNy6wInnAwhG48=";
};
buildInputs = [
harfbuzz
ncurses
lcms2
] ++ lib.optionals stdenv.isDarwin [
Cocoa
CoreGraphics
Foundation
IOKit
Kernel
OpenGL
libpng
python3
zlib
] ++ lib.optionals stdenv.isLinux [
fontconfig libunistring libcanberra libX11
libXrandr libXinerama libXcursor libxkbcommon libXi libXext
wayland-protocols wayland dbus
];
nativeBuildInputs = [
pkg-config sphinx ncurses
installShellFiles
] ++ lib.optionals stdenv.isDarwin [
imagemagick
libicns # For the png2icns tool.
];
propagatedBuildInputs = lib.optional stdenv.isLinux libGL;
outputs = [ "out" "terminfo" ];
patches = [
./fix-paths.patch
];
# Causes build failure due to warning
hardeningDisable = lib.optional stdenv.cc.isClang "strictoverflow";
dontConfigure = true;
buildPhase = if stdenv.isDarwin then ''
${python.interpreter} setup.py kitty.app \
--update-check-interval=0 \
--disable-link-time-optimization
make man
'' else ''
${python.interpreter} setup.py linux-package \
--update-check-interval=0 \
--egl-library='${lib.getLib libGL}/lib/libEGL.so.1' \
--startup-notification-library='${libstartup_notification}/lib/libstartup-notification-1.so' \
--canberra-library='${libcanberra}/lib/libcanberra.so'
'';
checkInputs = [ pillow ];
checkPhase =
let buildBinPath =
if stdenv.isDarwin
then "kitty.app/Contents/MacOS"
else "linux-package/bin";
in
''
env PATH="${buildBinPath}:$PATH" ${python.interpreter} test.py
'';
installPhase = ''
runHook preInstall
mkdir -p $out
${if stdenv.isDarwin then ''
mkdir "$out/bin"
ln -s ../Applications/kitty.app/Contents/MacOS/kitty "$out/bin/kitty"
mkdir "$out/Applications"
cp -r kitty.app "$out/Applications/kitty.app"
installManPage 'docs/_build/man/kitty.1'
'' else ''
cp -r linux-package/{bin,share,lib} $out
''}
wrapProgram "$out/bin/kitty" --prefix PATH : "$out/bin:${lib.makeBinPath [ imagemagick xsel ncurses.dev ]}"
runHook postInstall
installShellCompletion --cmd kitty \
--bash <("$out/bin/kitty" + complete setup bash) \
--fish <("$out/bin/kitty" + complete setup fish) \
--zsh <("$out/bin/kitty" + complete setup zsh)
'';
postInstall = ''
terminfo_src=${if stdenv.isDarwin then
''"$out/Applications/kitty.app/Contents/Resources/terminfo"''
else
"$out/share/terminfo"}
mkdir -p $terminfo/share
mv "$terminfo_src" $terminfo/share/terminfo
mkdir -p $out/nix-support
echo "$terminfo" >> $out/nix-support/propagated-user-env-packages
'';
meta = with lib; {
homepage = "https://github.com/kovidgoyal/kitty";
description = "A modern, hackable, featureful, OpenGL based terminal emulator";
license = licenses.gpl3Only;
changelog = "https://sw.kovidgoyal.net/kitty/changelog.html";
platforms = platforms.darwin ++ platforms.linux;
maintainers = with maintainers; [ tex rvolosatovs Luflosi ];
};
}
|