diff --git a/flake.lock b/flake.lock index b0f0b7c..8f1f5ec 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1676209454, - "narHash": "sha256-alj9mBkV9U6tTPDK026671D2pesLSYZZc9j5dBZJ9f0=", + "lastModified": 1676426280, + "narHash": "sha256-7DltKPrvCP0A9Iemv2ts1vnBYn5xQKScK/sb1VALlao=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8c619a1f3cedd16ea172146e30645e703d21bfc1", + "rev": "6d33e5e14fd12f99ba621683ae90cebadda753ca", "type": "github" }, "original": { diff --git a/overlay.nix b/overlay.nix index a95fc51..9b29914 100644 --- a/overlay.nix +++ b/overlay.nix @@ -13,4 +13,5 @@ in inherit (custom) phantomjs; inherit (custom) q; inherit (custom) website-docs-nifoc-pw; + inherit (custom) wezterm-unstable; } diff --git a/packages.nix b/packages.nix index 26a2692..9e3d763 100644 --- a/packages.nix +++ b/packages.nix @@ -10,4 +10,5 @@ phantomjs = import ./packages/phantomjs.nix { inherit system lib pkgs; }; q = import ./packages/q.nix { inherit system lib pkgs; }; website-docs-nifoc-pw = import ./packages/website-docs-nifoc-pw.nix { inherit system lib pkgs; }; + wezterm-unstable = import ./packages/wezterm-unstable.nix { inherit system lib pkgs; }; } diff --git a/packages/wezterm-unstable.nix b/packages/wezterm-unstable.nix new file mode 100644 index 0000000..efd653c --- /dev/null +++ b/packages/wezterm-unstable.nix @@ -0,0 +1,86 @@ +{ system, lib, pkgs }: + +# Quick and dirty copy of the nixpkgs file: https://github.com/NixOS/nixpkgs/blob/777bc8162088e120fa14638265697fa4394fbe79/pkgs/applications/terminal-emulators/wezterm/default.nix + +pkgs.rustPlatform.buildRustPackage rec { + pname = "wezterm"; + version = "unstable-2023-02-12"; + + src = pkgs.fetchFromGitHub { + owner = "wez"; + repo = pname; + rev = "a5c2b1f3adb06054bf522cb3d350697938d6f8e9"; + fetchSubmodules = true; + sha256 = "sha256-jQK8mSQGBztzSFYNGeL5TP2xUY6Xd4FaLkVvBahpzRY="; + }; + + postPatch = '' + echo ${version} > .tag + # tests are failing with: Unable to exchange encryption keys + rm -r wezterm-ssh/tests + ''; + + cargoSha256 = "sha256-lO9EMhRV6uf85N24vZo/CNcHzl70VFt9CP69enGQnpY="; + + nativeBuildInputs = with pkgs; [ + installShellFiles + ncurses # tic for terminfo + pkg-config + python3 + ] ++ lib.optional stdenv.isDarwin perl; + + buildInputs = with pkgs; [ + fontconfig + zlib + ] ++ lib.optionals stdenv.isDarwin (with pkgs.darwin.apple_sdk.frameworks; [ + Cocoa + CoreGraphics + Foundation + libiconv + UserNotifications + ]); + + buildFeatures = [ "distro-defaults" ]; + + postInstall = '' + mkdir -p $out/nix-support + echo "${passthru.terminfo}" >> $out/nix-support/propagated-user-env-packages + install -Dm644 assets/icon/terminal.png $out/share/icons/hicolor/128x128/apps/org.wezfurlong.wezterm.png + install -Dm644 assets/wezterm.desktop $out/share/applications/org.wezfurlong.wezterm.desktop + install -Dm644 assets/wezterm.appdata.xml $out/share/metainfo/org.wezfurlong.wezterm.appdata.xml + install -Dm644 assets/shell-integration/wezterm.sh -t $out/etc/profile.d + installShellCompletion --cmd wezterm \ + --bash assets/shell-completion/bash \ + --fish assets/shell-completion/fish \ + --zsh assets/shell-completion/zsh + install -Dm644 assets/wezterm-nautilus.py -t $out/share/nautilus-python/extensions + ''; + + preFixup = lib.optionalString pkgs.stdenv.isDarwin '' + mkdir -p "$out/Applications" + OUT_APP="$out/Applications/WezTerm.app" + cp -r assets/macos/WezTerm.app "$OUT_APP" + rm $OUT_APP/*.dylib + cp -r assets/shell-integration/* "$OUT_APP" + ln -s $out/bin/{wezterm,wezterm-mux-server,wezterm-gui,strip-ansi-escapes} "$OUT_APP" + ''; + + passthru = { + terminfo = pkgs.runCommand "wezterm-terminfo" + { + nativeBuildInputs = with pkgs; [ + ncurses + ]; + } '' + mkdir -p $out/share/terminfo $out/nix-support + tic -x -o $out/share/terminfo ${src}/termwiz/data/wezterm.terminfo + ''; + }; + + meta = with lib; { + description = "A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust"; + homepage = "https://wezfurlong.org/wezterm"; + license = licenses.mit; + platforms = [ "x86_64-darwin" "aarch64-darwin" ]; + }; +}