Something went wrong. Try again.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179{ description = "👻";
inputs = { # We want to stay as up to date as possible but need to be careful that the # glibc versions used by our dependencies from Nix are compatible with the # system glibc that the user is building for. # # We are currently on nixpkgs-unstable to get Zig 0.15 for our package.nix and # Gnome 49/Gtk 4.20. # nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
# Used for shell.nix flake-compat = { url = "github:edolstra/flake-compat"; flake = false; };
systems = { url = "github:nix-systems/default"; flake = false; };
zig = { url = "github:mitchellh/zig-overlay"; inputs = { nixpkgs.follows = "nixpkgs"; flake-compat.follows = "flake-compat"; systems.follows = "systems"; }; };
zon2nix = { url = "github:jcollie/zon2nix?ref=main"; inputs = { nixpkgs.follows = "nixpkgs"; }; };
home-manager = { url = "github:nix-community/home-manager"; inputs = { nixpkgs.follows = "nixpkgs"; }; }; };
outputs = { self, nixpkgs, zig, zon2nix, home-manager, ... }: let inherit (nixpkgs) lib legacyPackages;
# Our supported systems are the same supported systems as the Zig binaries. platforms = lib.attrNames zig.packages;
# It's not always possible to build Ghostty with Nix for each system, # one such example being macOS due to missing Swift 6 and xcodebuild # support in the Nix ecosystem. Therefore for things like package outputs # we need to limit the attributes we expose. buildablePlatforms = lib.filter (p: !(lib.systems.elaborate p).isDarwin) platforms;
forAllPlatforms = f: lib.genAttrs platforms (s: f legacyPackages.${s}); forBuildablePlatforms = f: lib.genAttrs buildablePlatforms (s: f legacyPackages.${s});
mkPkgArgs = optimize: { inherit optimize; revision = self.shortRev or self.dirtyShortRev or "dirty"; }; in { devShells = forAllPlatforms (pkgs: { default = pkgs.callPackage ./nix/devShell.nix { zig = if pkgs.stdenv.hostPlatform.isDarwin then zig.packages.${pkgs.stdenv.hostPlatform.system}.brew."0.15.2" else zig.packages.${pkgs.stdenv.hostPlatform.system}."0.15.2"; wraptest = pkgs.callPackage ./nix/pkgs/wraptest.nix {}; zon2nix = zon2nix;
python3 = pkgs.python3.override { self = pkgs.python3; packageOverrides = pyfinal: pyprev: { blessed = pyfinal.callPackage ./nix/pkgs/blessed.nix {}; ucs-detect = pyfinal.callPackage ./nix/pkgs/ucs-detect.nix {}; wcwidth = pyfinal.callPackage ./nix/pkgs/wcwidth.nix {}; }; }; }; });
packages = builtins.foldl' lib.recursiveUpdate {} [ ( forAllPlatforms (pkgs: rec { # Deps are needed for environmental setup on macOS deps = pkgs.callPackage ./build.zig.zon.nix {};
libghostty-vt-debug = pkgs.callPackage ./nix/libghostty-vt.nix (mkPkgArgs "Debug"); libghostty-vt-releasesafe = pkgs.callPackage ./nix/libghostty-vt.nix (mkPkgArgs "ReleaseSafe"); libghostty-vt-releasefast = pkgs.callPackage ./nix/libghostty-vt.nix (mkPkgArgs "ReleaseFast"); libghostty-vt-debug-no-simd = pkgs.callPackage ./nix/libghostty-vt.nix ((mkPkgArgs "Debug") // {simd = false;}); libghostty-vt-releasesafe-no-simd = pkgs.callPackage ./nix/libghostty-vt.nix ((mkPkgArgs "ReleaseSafe") // {simd = false;}); libghostty-vt-releasefast-no-simd = pkgs.callPackage ./nix/libghostty-vt.nix ((mkPkgArgs "ReleaseFast") // {simd = false;});
libghostty-vt = libghostty-vt-releasefast; }) ) ( forBuildablePlatforms (pkgs: rec { ghostty-debug = pkgs.callPackage ./nix/package.nix (mkPkgArgs "Debug"); ghostty-releasesafe = pkgs.callPackage ./nix/package.nix (mkPkgArgs "ReleaseSafe"); ghostty-releasefast = pkgs.callPackage ./nix/package.nix (mkPkgArgs "ReleaseFast");
ghostty = ghostty-releasefast; default = ghostty; }) ) ];
formatter = forAllPlatforms (pkgs: pkgs.alejandra);
apps = forBuildablePlatforms (pkgs: let runVM = module: let vm = import ./nix/vm/create.nix { inherit (pkgs.stdenv.hostPlatform) system; inherit module nixpkgs; overlay = self.overlays.debug; }; program = pkgs.writeShellScript "run-ghostty-vm" '' SHARED_DIR=$(pwd) export SHARED_DIR
${pkgs.lib.getExe vm.config.system.build.vm} "$@" ''; in { type = "app"; program = "${program}"; meta.description = "start a vm from ${toString module}"; }; in { wayland-cinnamon = runVM ./nix/vm/wayland-cinnamon.nix; wayland-gnome = runVM ./nix/vm/wayland-gnome.nix; wayland-plasma6 = runVM ./nix/vm/wayland-plasma6.nix; x11-cinnamon = runVM ./nix/vm/x11-cinnamon.nix; x11-plasma6 = runVM ./nix/vm/x11-plasma6.nix; x11-xfce = runVM ./nix/vm/x11-xfce.nix; });
checks = forAllPlatforms (pkgs: import ./nix/tests.nix { inherit home-manager nixpkgs self; inherit (pkgs.stdenv.hostPlatform) system; });
overlays = { default = self.overlays.releasefast; releasefast = final: prev: { ghostty = final.callPackage ./nix/package.nix (mkPkgArgs "ReleaseFast"); }; debug = final: prev: { ghostty = final.callPackage ./nix/package.nix (mkPkgArgs "Debug"); }; }; };
nixConfig = { extra-substituters = ["https://ghostty.cachix.org"]; extra-trusted-public-keys = ["ghostty.cachix.org-1:QB389yTa6gTyneehvqG58y0WnHjQOqgnA+wBnpWWxns="]; };}