{
  osConfig,
  pkgs,
  lib,
  ...
}: let
  inherit (lib) mkIf;
  inherit (osConfig) modules;
  inherit (modules.style.colorScheme) colors;

  dev = modules.device;
  acceptedTypes = ["laptop" "desktop" "hybrid"];
in {
  config = mkIf (builtins.elem dev.type acceptedTypes) {
    programs.wezterm = {
      enable = true;
      package = pkgs.wezterm;
      colorSchemes = import ./colorSchemes.nix {inherit colors;};
      extraConfig = ''
        local wez = require("wezterm")
        local act = wezterm.action
        local baseConfig = {
         -- general
         check_for_updates = false, -- nix has updates covered, I don't care about updates
         exit_behavior = "CloseOnCleanExit",
         enable_scroll_bar = false,
         audible_bell = "Disabled", -- annoying
         warn_about_missing_glyphs =  false,

         -- anims
          animation_fps = 1,

         -- term window settings
         adjust_window_size_when_changing_font_size = false,
         window_background_opacity = 0.85,
         window_padding = { left = 12, right = 12, top = 12, bottom = 12, },
         window_close_confirmation = "NeverPrompt",
         inactive_pane_hsb = {
          saturation = 1.0,
          brightness = 0.8
         },

         -- cursor
         default_cursor_style = "SteadyBar",
         cursor_blink_rate = 700,
         cursor_blink_ease_in = 'Constant',
         cursor_blink_ease_out = 'Constant',

         -- tab bar
         enable_tab_bar = true, -- no observable performance impact
         use_fancy_tab_bar = false,
         hide_tab_bar_if_only_one_tab = true,
         show_tab_index_in_tab_bar = false,

         -- font config
         font_size = 14.0,
         font = wezterm.font_with_fallback {
          { family = "Iosevka Nerd Font", weight = "Regular" },
          { family = "Symbols Nerd Font", weight = "Regular" }
         },

         -- perf
         front_end = "WebGpu",
         enable_wayland = true,
         scrollback_lines = 10000,

         -- colors
         -- the followSystem theme is defined in colorSchemes.nix
         -- as per my base16 theming options
         color_scheme = "followSystem",
        }

        return baseConfig
      '';
    };
  };
}
