From 5058fb991978ea66338e3823f724ffb425a11c93 Mon Sep 17 00:00:00 2001 From: Luflosi Date: Thu, 2 Jul 2020 10:53:41 +0200 Subject: [PATCH] Add shell.nix This makes it possible to execute `nix-shell` to create the correct environment to build kitty. Use `nix-shell --pure` to eliminate most of the influence of the outside system, e.g. globally installed packages. This works on NixOS and any Linux or macOS system with the Nix package manager installed. The build inputs are split into `buildInputs`, `nativeBuildInputs`, `propagatedBuildInputs` and `checkInputs` so it closely resembles https://github.com/NixOS/nixpkgs/blob/2bb3a9da24ca60d9f5bed69f679a1ec50dbdf997/pkgs/applications/terminal-emulators/kitty/default.nix. This makes it easy to port changes between the two files. --- docs/build.rst | 11 ++++++++++ shell.nix | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 shell.nix diff --git a/docs/build.rst b/docs/build.rst index 6dc196555..29f438696 100644 --- a/docs/build.rst +++ b/docs/build.rst @@ -78,6 +78,17 @@ you might have to rebuild the app. a self signed certificate, see for example, `here `_. +Build and run from source with Nix +------------------------------------------- + +On NixOS or any other Linux or macOS system with the Nix package manager installed, +execute ``nix-shell`` to create the correct environment to build kitty or use +``nix-shell --pure`` instead to eliminate most of the influence of the outside system, +e.g. globally installed packages. ``nix-shell`` will automatically fetch all required +dependencies and make them available in the newly spawned shell. + +Then proceed with ``make`` or ``make app`` according to the platform specific instructions above. + Note for Linux/macOS packagers ---------------------------------- diff --git a/shell.nix b/shell.nix new file mode 100644 index 000000000..fe02bca02 --- /dev/null +++ b/shell.nix @@ -0,0 +1,55 @@ +{ pkgs ? import { } }: +with pkgs; + +let + inherit (lib) optional optionals; + inherit (xorg) libX11 libXrandr libXinerama libXcursor libXi libXext; + inherit (darwin.apple_sdk.frameworks) Cocoa CoreGraphics Foundation IOKit Kernel OpenGL; + harfbuzzWithCoreText = harfbuzz.override { withCoreText = stdenv.isDarwin; }; +in +mkShell rec { + buildInputs = [ + harfbuzzWithCoreText + ncurses + lcms2 + ] ++ optionals stdenv.isDarwin [ + Cocoa + CoreGraphics + Foundation + IOKit + Kernel + OpenGL + libpng + python3 + zlib + ] ++ optionals stdenv.isLinux [ + fontconfig libunistring libcanberra libX11 + libXrandr libXinerama libXcursor libxkbcommon libXi libXext + wayland-protocols wayland dbus + ] ++ checkInputs; + + nativeBuildInputs = [ + pkgconfig python3Packages.sphinx ncurses + ] ++ optionals stdenv.isDarwin [ + imagemagick + libicns # For the png2icns tool. + installShellFiles + ]; + + propagatedBuildInputs = optional stdenv.isLinux libGL; + + checkInputs = [ + python3Packages.pillow + ]; + + # Causes build failure due to warning when using Clang + hardeningDisable = [ "strictoverflow" ]; + + shellHook = if stdenv.isDarwin then '' + export KITTY_NO_LTO= + '' else '' + export KITTY_EGL_LIBRARY='${stdenv.lib.getLib libGL}/lib/libEGL.so.1' + export KITTY_STARTUP_NOTIFICATION_LIBRARY='${libstartup_notification}/lib/libstartup-notification-1.so' + export KITTY_CANBERRA_LIBRARY='${libcanberra}/lib/libcanberra.so' + ''; +}