From 046ebaf5b7dccc5ff5c4f5774a12f9d52325f7ae Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Fri, 5 Apr 2024 01:56:40 +0200 Subject: [PATCH] Add terminal emulators --- home/programs/terminal/default.nix | 1 + home/programs/terminal/emulators/default.nix | 12 +++ home/programs/terminal/emulators/foot.nix | 65 ++++++++++++++++ home/programs/terminal/emulators/kitty.nix | 78 ++++++++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 home/programs/terminal/emulators/default.nix create mode 100644 home/programs/terminal/emulators/foot.nix create mode 100644 home/programs/terminal/emulators/kitty.nix diff --git a/home/programs/terminal/default.nix b/home/programs/terminal/default.nix index 42bd721..b142bdf 100644 --- a/home/programs/terminal/default.nix +++ b/home/programs/terminal/default.nix @@ -4,5 +4,6 @@ _: { ./tools ./editors ./file-managers + ./emulators ]; } diff --git a/home/programs/terminal/emulators/default.nix b/home/programs/terminal/emulators/default.nix new file mode 100644 index 0000000..6be43fd --- /dev/null +++ b/home/programs/terminal/emulators/default.nix @@ -0,0 +1,12 @@ +# Note: Pretty much all of these configurations were copied from +# https://git.notashelf.dev/NotAShelf/nyx, there may be some small +# adjustments made to them but the majority of the credit goes to +# notashelf. +_: { + imports = [ + ./foot.nix + ./kitty.nix + ]; +} + + diff --git a/home/programs/terminal/emulators/foot.nix b/home/programs/terminal/emulators/foot.nix new file mode 100644 index 0000000..8df4430 --- /dev/null +++ b/home/programs/terminal/emulators/foot.nix @@ -0,0 +1,65 @@ +{ + osConfig, + lib, + config, + pkgs, + inputs', + ... +}: { + home.packages = with pkgs; [ + libsixel # for displaying images + ]; + programs.foot = { + enable = true; + server.enable = true; + settings = { + main = { + # window settings + app-id = "foot"; + title = "foot"; + locked-title = "no"; + term = "xterm-256color"; + pad = "16x16 center"; + shell = "zsh"; + + # notifications + notify = "notify-send -a \${app-id} -i \${app-id} \${title} \${body}"; + selection-target = "clipboard"; + + # font and font rendering + dpi-aware = false; # this looks more readable on a laptop, but it's unreasonably large + font = "Iosevka Nerd Font:size=14"; + font-bold = "Iosevka Nerd Font:size=14"; + vertical-letter-offset = "-0.90"; + }; + + scrollback = { + lines = 10000; + multiplier = 3; + }; + + tweak = { + font-monospace-warn = "no"; # reduces startup time + sixel = "yes"; + }; + + cursor = { + style = "beam"; + beam-thickness = 2; + }; + + mouse = { + hide-when-typing = "yes"; + }; + + url = { + launch = "xdg-open \${url}"; + label-letters = "sadfjklewcmpgh"; + osc8-underline = "url-mode"; + protocols = "http, https, ftp, ftps, file"; + uri-characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+=\"'()[]"; + }; + }; + }; +} + diff --git a/home/programs/terminal/emulators/kitty.nix b/home/programs/terminal/emulators/kitty.nix new file mode 100644 index 0000000..e7c32fc --- /dev/null +++ b/home/programs/terminal/emulators/kitty.nix @@ -0,0 +1,78 @@ +{ + osConfig, + lib, + ... +}: let + inherit (lib) mkIf; + inherit (osConfig) modules; + inherit (modules.style.colorScheme) colors; +in { + programs.kitty = { + enable = true; + settings = { + # General + background_opacity = "0.85"; + font_family = "monospace"; + font_size = 14; + disable_ligatures = "never"; + cursor_shape = "underline"; + cursor_blink_interval = "0.5"; + cursor_stop_blinking_after = "15.0"; + scrollback_lines = 10000; + click_interval = "0.5"; + select_by_word_characters = ":@-./_~?&=%+#"; + remember_window_size = false; + allow_remote_control = true; + initial_window_width = 640; + initial_window_height = 400; + repaint_delay = 15; + input_delay = 3; + visual_bell_duration = "0.0"; + url_style = "double"; + open_url_with = "default"; + confirm_os_window_close = 0; + enable_audio_bell = false; + window_padding_width = 15; + window_margin_width = 10; + }; + keybindings = { + "ctrl+c" = "copy_or_interrupt"; + "ctrl+alt+c" = "copy_to_clipboard"; + "ctrl+alt+v" = "paste_from_clipboard"; + "ctrl+shift+v" = "paste_from_clipboard"; + + "ctrl+shift+up" = "increase_font_size"; + "ctrl+shift+down" = "decrease_font_size"; + "ctrl+shift+backspace" = "restore_font_size"; + + "ctrl+shift+enter" = "new_window"; + "ctrl+shift+n" = "new_os_window"; + "ctrl+shift+w" = "close_window"; + "ctrl+shift+]" = "next_window"; + "ctrl+shift+[" = "previous_window"; + "ctrl+shift+f" = "move_window_forward"; + "ctrl+shift+b" = "move_window_backward"; + "ctrl+shift+`" = "move_window_to_top"; + "ctrl+shift+1" = "first_window"; + "ctrl+shift+2" = "second_window"; + "ctrl+shift+3" = "third_window"; + "ctrl+shift+4" = "fourth_window"; + "ctrl+shift+5" = "fifth_window"; + "ctrl+shift+6" = "sixth_window"; + "ctrl+shift+7" = "seventh_window"; + "ctrl+shift+8" = "eighth_window"; + "ctrl+shift+9" = "ninth_window"; + "ctrl+shift+0" = "tenth_window"; + + "ctrl+shift+right" = "next_tab"; + "ctrl+shift+left" = "previous_tab"; + "ctrl+shift+t" = "new_tab"; + "ctrl+shift+q" = "close_tab"; + "ctrl+shift+l" = "next_layout"; + "ctrl+shift+." = "move_tab_forward"; + "ctrl+shift+," = "move_tab_backward"; + "ctrl+shift+alt+t" = "set_tab_title"; + }; + }; +} +