{ lib, config, ... }: let homeModules = config.flake.modules.homeManager; in { flake.modules.homeManager.terminal-kitty = { pkgs, ... }: let kitty = pkgs.symlinkJoin { name = "kitty-single"; paths = [ pkgs.kitty ]; meta = pkgs.kitty.meta; buildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/kitty --add-flags "-1" rm $out/share/applications/kitty.desktop sed 's/^Exec=kitty/Exec=kitty -1/' ${pkgs.kitty}/share/applications/kitty.desktop > $out/share/applications/kitty.desktop ''; }; in { programs.kitty = { enable = true; package = kitty; settings = { disable_ligatures = "always"; scrollback_lines = 10000; enable_audio_bell = false; confirm_os_window_close = 0; window_padding_width = 3; update_check_interval = 0; }; keybindings."shift+enter" = "send_text all \\x0a"; }; systemd.user.services.kitty-daemon = { Unit = { Description = "Kitty Terminal Daemon"; PartOf = [ "graphical-session.target" ]; After = [ "graphical-session.target" ]; }; Install = { WantedBy = [ "graphical-session.target" ]; }; Service = { ExecStart = "${lib.getExe kitty} --start-as=hidden ${pkgs.coreutils}/bin/tail -f /dev/null"; Restart = "on-failure"; }; }; }; flake.modules.homeManager.primary-terminal-kitty = { config, lib, ... }: { imports = [ homeModules.terminal-kitty ]; desktop.commands.terminal = [ (lib.getExe config.programs.kitty.package) ]; xdg.terminal-exec = { enable = true; settings.default = [ "kitty.desktop" ]; }; }; }