ttaenc: init at 3.4.1 (#238757)
[NixPkgs.git] / pkgs / applications / terminal-emulators / kitty / default.nix
blob1d7bb4d71dd4d03fd2d5b0ce4e3c22c35a2bddd3
1 { lib, stdenv, fetchFromGitHub, python3Packages, libunistring
2 , harfbuzz, fontconfig, pkg-config, ncurses, imagemagick
3 , libstartup_notification, libGL, libX11, libXrandr, libXinerama, libXcursor
4 , libxkbcommon, libXi, libXext, wayland-protocols, wayland, xxHash
5 , nerd-fonts
6 , lcms2
7 , librsync
8 , openssl
9 , installShellFiles
10 , dbus
11 , sudo
12 , Libsystem
13 , Cocoa
14 , Kernel
15 , UniformTypeIdentifiers
16 , UserNotifications
17 , libcanberra
18 , libicns
19 , wayland-scanner
20 , libpng
21 , python3
22 , zlib
23 , simde
24 , bashInteractive
25 , zsh
26 , fish
27 , nixosTests
28 , go_1_23
29 , buildGo123Module
30 , nix-update-script
31 , makeBinaryWrapper
32 , autoSignDarwinBinariesHook
35 with python3Packages;
36 buildPythonApplication rec {
37   pname = "kitty";
38   version = "0.37.0";
39   format = "other";
41   src = fetchFromGitHub {
42     owner = "kovidgoyal";
43     repo = "kitty";
44     rev = "refs/tags/v${version}";
45     hash = "sha256-xxM5nqEr7avtJUlcsrA/KXOTxSajIg7kDQM6Q4V+6WM=";
46   };
48   goModules = (buildGo123Module {
49     pname = "kitty-go-modules";
50     inherit src version;
51     vendorHash = "sha256-d5jRhOm53HDGnsU5Lg5tVGU/9z8RGqORzS53hOyIKBk=";
52   }).goModules;
54   buildInputs = [
55     harfbuzz
56     ncurses
57     simde
58     lcms2
59     librsync
60     matplotlib
61     openssl.dev
62     xxHash
63   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
64     Cocoa
65     Kernel
66     UniformTypeIdentifiers
67     UserNotifications
68     libpng
69     python3
70     zlib
71   ] ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) [
72     Libsystem
73   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
74     fontconfig libunistring libcanberra libX11
75     libXrandr libXinerama libXcursor libxkbcommon libXi libXext
76     wayland-protocols wayland dbus libGL
77   ];
79   nativeBuildInputs = [
80     installShellFiles
81     ncurses
82     pkg-config
83     sphinx
84     furo
85     sphinx-copybutton
86     sphinxext-opengraph
87     sphinx-inline-tabs
88     go_1_23
89     fontconfig
90     makeBinaryWrapper
91   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
92     imagemagick
93     libicns  # For the png2icns tool.
94     autoSignDarwinBinariesHook
95   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
96     wayland-scanner
97   ];
99   depsBuildBuild = [ pkg-config ];
101   outputs = [ "out" "terminfo" "shell_integration" "kitten" ];
103   patches = [
104     # Gets `test_ssh_env_vars` to pass when `bzip2` is in the output of `env`.
105     ./fix-test_ssh_env_vars.patch
107     # Needed on darwin
109     # Gets `test_ssh_shell_integration` to pass for `zsh` when `compinit` complains about
110     # permissions.
111     ./zsh-compinit.patch
113     # Skip `test_ssh_bootstrap_with_different_launchers` when launcher is `zsh` since it causes:
114     # OSError: master_fd is in error condition
115     ./disable-test_ssh_bootstrap_with_different_launchers.patch
116   ];
118   hardeningDisable = [
119     # causes redefinition of _FORTIFY_SOURCE
120     "fortify3"
121   ];
123   CGO_ENABLED = 0;
124   GOFLAGS = "-trimpath";
126   configurePhase = ''
127     export GOCACHE=$TMPDIR/go-cache
128     export GOPATH="$TMPDIR/go"
129     export GOPROXY=off
130     cp -r --reflink=auto $goModules vendor
131   '';
133   buildPhase = let
134     commonOptions = ''
135       --update-check-interval=0 \
136       --shell-integration=enabled\ no-rc
137     '';
138     darwinOptions = ''
139       --disable-link-time-optimization \
140       ${commonOptions}
141     '';
142   in ''
143     runHook preBuild
145     # Add the font by hand because fontconfig does not finds it in darwin
146     mkdir ./fonts/
147     cp "${nerd-fonts.symbols-only}/share/fonts/truetype/NerdFonts/Symbols/SymbolsNerdFontMono-Regular.ttf" ./fonts/
149     ${ lib.optionalString (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) "export MACOSX_DEPLOYMENT_TARGET=11" }
150     ${if stdenv.hostPlatform.isDarwin then ''
151       ${python.pythonOnBuildForHost.interpreter} setup.py build ${darwinOptions}
152       make docs
153       ${python.pythonOnBuildForHost.interpreter} setup.py kitty.app ${darwinOptions}
154     '' else ''
155       ${python.pythonOnBuildForHost.interpreter} setup.py linux-package \
156       --egl-library='${lib.getLib libGL}/lib/libEGL.so.1' \
157       --startup-notification-library='${libstartup_notification}/lib/libstartup-notification-1.so' \
158       --canberra-library='${libcanberra}/lib/libcanberra.so' \
159       --fontconfig-library='${fontconfig.lib}/lib/libfontconfig.so' \
160       ${commonOptions}
161       ${python.pythonOnBuildForHost.interpreter} setup.py build-launcher
162     ''}
163     runHook postBuild
164   '';
166   nativeCheckInputs = [
167     pillow
169     # Shells needed for shell integration tests
170     bashInteractive
171     zsh
172     fish
173   ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
174     # integration tests need sudo
175     sudo
176   ];
178   # skip failing tests due to darwin sandbox
179   preCheck = lib.optionalString stdenv.hostPlatform.isDarwin ''
180     # can be re-enabled with the next kitty release, see https://github.com/kovidgoyal/kitty/pull/7939
181     substituteInPlace kitty_tests/file_transmission.py \
182       --replace test_transfer_send dont_test_transfer_send
183     # theme collection test starts an http server
184     rm tools/themes/collection_test.go
185     # passwd_test tries to exec /usr/bin/dscl
186     rm tools/utils/passwd_test.go
187   '';
189   checkPhase = ''
190       runHook preCheck
192       # Fontconfig error: Cannot load default config file: No such file: (null)
193       export FONTCONFIG_FILE=${fontconfig.out}/etc/fonts/fonts.conf
195       # Required for `test_ssh_shell_integration` to pass.
196       export TERM=kitty
198       make test
199       runHook postCheck
200     '';
202   installPhase = ''
203     runHook preInstall
204     mkdir -p "$out"
205     mkdir -p "$kitten/bin"
206     ${if stdenv.hostPlatform.isDarwin then ''
207     mkdir "$out/bin"
208     ln -s ../Applications/kitty.app/Contents/MacOS/kitty "$out/bin/kitty"
209     ln -s ../Applications/kitty.app/Contents/MacOS/kitten "$out/bin/kitten"
210     cp ./kitty.app/Contents/MacOS/kitten "$kitten/bin/kitten"
211     mkdir "$out/Applications"
212     cp -r kitty.app "$out/Applications/kitty.app"
214     installManPage 'docs/_build/man/kitty.1'
215     '' else ''
216     cp -r linux-package/{bin,share,lib} "$out"
217     cp linux-package/bin/kitten "$kitten/bin/kitten"
218     ''}
220     # dereference the `kitty` symlink to make sure the actual executable
221     # is wrapped on macOS as well (and not just the symlink)
222     wrapProgram $(realpath "$out/bin/kitty") --prefix PATH : "$out/bin:${lib.makeBinPath [ imagemagick ncurses.dev ]}"
224     installShellCompletion --cmd kitty \
225       --bash <("$out/bin/kitty" +complete setup bash) \
226       --fish <("$out/bin/kitty" +complete setup fish2) \
227       --zsh  <("$out/bin/kitty" +complete setup zsh)
229     terminfo_src=${if stdenv.hostPlatform.isDarwin then
230       ''"$out/Applications/kitty.app/Contents/Resources/terminfo"''
231       else
232       "$out/share/terminfo"}
234     mkdir -p $terminfo/share
235     mv "$terminfo_src" $terminfo/share/terminfo
237     mkdir -p "$out/nix-support"
238     echo "$terminfo" >> $out/nix-support/propagated-user-env-packages
240     cp -r 'shell-integration' "$shell_integration"
242     runHook postInstall
243   '';
245   passthru = {
246     tests = lib.optionalAttrs stdenv.hostPlatform.isLinux {
247       default = nixosTests.terminal-emulators.kitty;
248     };
249     updateScript = nix-update-script {};
250   };
252   meta = with lib; {
253     homepage = "https://github.com/kovidgoyal/kitty";
254     description = "Modern, hackable, featureful, OpenGL based terminal emulator";
255     license = licenses.gpl3Only;
256     changelog = [
257       "https://sw.kovidgoyal.net/kitty/changelog/"
258       "https://github.com/kovidgoyal/kitty/blob/v${version}/docs/changelog.rst"
259     ];
260     platforms = platforms.darwin ++ platforms.linux;
261     mainProgram = "kitty";
262     maintainers = with maintainers; [ tex rvolosatovs Luflosi kashw2 ];
263   };