{ config, lib, ... }: with lib; let cfg = config.home.i3_sway; shared_config = recursiveUpdate { modifier = "Mod4"; terminal = "kitty"; defaultWorkspace = "workspace number 1"; } cfg.extraSharedConfig; in { options.home.i3_sway = { extraSharedConfig = mkOption {}; extraI3Config = mkOption {}; extraSwayConfig = mkOption {}; }; config = { xsession.windowManager.i3 = let base_i3_config = recursiveUpdate shared_config {}; in { enable = true; config = recursiveUpdate base_i3_config cfg.extraI3Config; }; wayland.windowManager.sway = let base_sway_config = recursiveUpdate shared_config { input = { "type:keyboard" = { xkb_options = "caps:escape"; }; }; }; in { enable = true; config = recursiveUpdate base_sway_config cfg.extraSwayConfig; }; }; }