mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-06 07:38:21 +00:00
152 lines
4.7 KiB
Nix
152 lines
4.7 KiB
Nix
{
|
|
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;
|
|
};
|
|
|
|
zig = {
|
|
url = "github:mitchellh/zig-overlay";
|
|
inputs = {
|
|
nixpkgs.follows = "nixpkgs";
|
|
flake-compat.follows = "flake-compat";
|
|
};
|
|
};
|
|
|
|
zon2nix = {
|
|
url = "github:jcollie/zon2nix?rev=c28e93f3ba133d4c1b1d65224e2eebede61fd071";
|
|
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 = 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 =
|
|
forAllPlatforms (pkgs: {
|
|
# Deps are needed for environmental setup on macOS
|
|
deps = pkgs.callPackage ./build.zig.zon.nix {};
|
|
})
|
|
// 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="];
|
|
};
|
|
}
|