diff --git a/home/default.nix b/home/default.nix index ccfe2c8e..df8daa60 100644 --- a/home/default.nix +++ b/home/default.nix @@ -23,11 +23,11 @@ in gui = { imports = with dirImports; [ gui + wezterm firefox konawall ranger xkb - kitty gpg sway mako diff --git a/home/kitty.nix b/home/kitty.nix index 6c98db6e..deb6326d 100644 --- a/home/kitty.nix +++ b/home/kitty.nix @@ -12,7 +12,6 @@ bold_font = "auto"; italic_font = "auto"; bold_italic_font = "auto"; - background_opacity = "0.9"; disable_ligatures = "cursor"; }; }; diff --git a/home/sway.nix b/home/sway.nix index fa248eac..89708c1f 100644 --- a/home/sway.nix +++ b/home/sway.nix @@ -73,7 +73,7 @@ let lockCommand = config.programs.swaylock.script; in config = let pactl = "${config.home.nixosConfig.hardware.pulseaudio.package or pkgs.pulseaudio}/bin/pactl"; - dmenu = "${pkgs.wofi}/bin/wofi -idbt ${pkgs.kitty}/bin/kitty -s ~/.config/wofi/wofi.css -p '' -W 25%"; + dmenu = "${pkgs.wofi}/bin/wofi -idbt ${pkgs.wezterm}/bin/wezterm -s ~/.config/wofi/wofi.css -p '' -W 25%"; in { @@ -104,8 +104,8 @@ let lockCommand = config.programs.swaylock.script; in style = "Regular"; size = config.kw.theme.font.size; }; - terminal = "${pkgs.kitty}/bin/kitty"; - menu = "${pkgs.j4-dmenu-desktop}/bin/j4-dmenu-desktop --no-generic --dmenu=\"${dmenu}\" --term='${pkgs.kitty}/bin/kitty'"; + terminal = "${pkgs.wezterm}/bin/wezterm"; + menu = "${pkgs.j4-dmenu-desktop}/bin/j4-dmenu-desktop --no-generic --dmenu=\"${dmenu}\" --term='${pkgs.wezterm}/bin/wezterm'"; modifier = "Mod4"; assigns = { "12:F2" = [{ class = "screenstub"; }]; }; diff --git a/home/wezterm.nix b/home/wezterm.nix new file mode 100644 index 00000000..2047c522 --- /dev/null +++ b/home/wezterm.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: + +{ + home.packages = with pkgs; [ + wezterm + ]; + + xdg.configFile."wezterm/wezterm.lua".text = '' + local wezterm = require 'wezterm' + return { + enable_tab_bar = false, + font = wezterm.font "${config.kw.theme.font.termName}", + font_size = ${toString config.kw.theme.font.size}, + } + ''; +} diff --git a/overlays/local/wezterm/default.nix b/overlays/local/wezterm/default.nix new file mode 100644 index 00000000..3a4ce5a9 --- /dev/null +++ b/overlays/local/wezterm/default.nix @@ -0,0 +1,125 @@ +{ stdenv +, rustPlatform +, lib +, fetchFromGitHub +, ncurses +, perl +, pkg-config +, python3 +, fontconfig +, openssl +, libGL +, libX11 +, libxcb +, libxkbcommon +, xcbutil +, xcbutilimage +, xcbutilkeysyms +, xcbutilwm +, wayland +, zlib +, CoreGraphics +, Cocoa +, Foundation +, libiconv +, nixosTests +, runCommand +}: + +rustPlatform.buildRustPackage rec { + pname = "wezterm"; + version = "20220624-141144-bd1b7c5d"; + + src = fetchFromGitHub { + owner = "wez"; + repo = pname; + rev = "cb89f2c36e08e74512ee7b8e1aff3bf461f774c2"; + fetchSubmodules = true; + sha256 = "sha256-Pmd5I2p2BDhJ3Mm7uGZjWYladZN2x8MMtquP4+TVtJ0="; + }; + + postPatch = '' + echo ${version} > .tag + + # tests are failing with: Unable to exchange encryption keys + rm -r wezterm-ssh/tests + ''; + + cargoSha256 = "sha256-0jhJzz3lrQf+7vv373J1HfzzVw+eottdto/ephnz4HM="; + + nativeBuildInputs = [ + pkg-config + python3 + ncurses # tic for terminfo + ] ++ lib.optional stdenv.isDarwin perl; + + buildInputs = [ + fontconfig + zlib + ] ++ lib.optionals stdenv.isLinux [ + libX11 + libxcb + libxkbcommon + openssl + wayland + xcbutil + xcbutilimage + xcbutilkeysyms + xcbutilwm # contains xcb-ewmh among others + ] ++ lib.optionals stdenv.isDarwin [ + Cocoa + CoreGraphics + Foundation + libiconv + ]; + + postInstall = '' + mkdir -p $out/nix-support + echo "${passthru.terminfo}" >> $out/nix-support/propagated-user-env-packages + + # desktop icon + 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 + + # helper scripts + install -Dm644 assets/shell-integration/wezterm.sh -t $out/etc/profile.d + ''; + + preFixup = lib.optionalString stdenv.isLinux '' + patchelf --add-needed "${libGL}/lib/libEGL.so.1" $out/bin/wezterm-gui + '' + lib.optionalString 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 = { + tests = { + all-terminfo = nixosTests.allTerminfo; + terminal-emulators = nixosTests.terminal-emulators.wezterm; + }; + terminfo = runCommand "wezterm-terminfo" + { + nativeBuildInputs = [ + 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; + maintainers = with maintainers; [ SuperSandro2000 ]; + platforms = platforms.unix; + # Fails on missing UserNotifications framework while linking + broken = stdenv.isDarwin; + }; +}