feat(wezterm): добавлен общий конфиг для Windows и Linux
- Зачем: - требуется единообразное окружение терминала на обеих ОС. - Что: - добавлен выбор локальной оболочки и меню запуска по платформе. - настроены JetBrains Mono и XWayland для корректной рамки окна в GNOME. - пакет WezTerm включён в установку через stow и описан в README. - Проверка: - wezterm show-keys, bash -n install.sh и stow --simulate --restow wezterm.
This commit is contained in:
1 parent
69507ce96c
commit
ec66938ba3
3 files changed
+51
-38
No files matched your search
@@ -51,6 +51,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
|
|||||||
| `proxy-client` | Переносимый CLI и Bash-команды для явного запуска через прокси |
|
| `proxy-client` | Переносимый CLI и Bash-команды для явного запуска через прокси |
|
||||||
| `tmux` | Два префикса (`Ctrl+b`, `Ctrl+Space`), vi-режим, split по `\|` / `-` |
|
| `tmux` | Два префикса (`Ctrl+b`, `Ctrl+Space`), vi-режим, split по `\|` / `-` |
|
||||||
| `vim` | Минимальный .vimrc без плагинов, 2 пробела, leader = `Space` |
|
| `vim` | Минимальный .vimrc без плагинов, 2 пробела, leader = `Space` |
|
||||||
|
| `wezterm` | Общий для Linux и Windows конфиг: одинаковые оформление и горячие клавиши |
|
||||||
| `zed` | Конфигурация Zed редактора |
|
| `zed` | Конфигурация Zed редактора |
|
||||||
| `vscode` | `server-env-setup` для VS Code Server в WSL: секреты + авто-прокси |
|
| `vscode` | `server-env-setup` для VS Code Server в WSL: секреты + авто-прокси |
|
||||||
|
|
||||||
@@ -61,7 +62,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
|
|||||||
- **PowerShell 7 profile** — live-stub в `~/Documents/PowerShell/` загружает managed profile из `~/.config/powershell/profile.ps1`
|
- **PowerShell 7 profile** — live-stub в `~/Documents/PowerShell/` загружает managed profile из `~/.config/powershell/profile.ps1`
|
||||||
- **Git baseline** — `~/.gitconfig` с managed настройками, `~/.gitconfig.local` для персональных overrides
|
- **Git baseline** — `~/.gitconfig` с managed настройками, `~/.gitconfig.local` для персональных overrides
|
||||||
- **Windows Terminal** — идемпотентный скрипт: PS7 по умолчанию, PS 5.1 как legacy, Azure Cloud Shell скрыт
|
- **Windows Terminal** — идемпотентный скрипт: PS7 по умолчанию, PS 5.1 как legacy, Azure Cloud Shell скрыт
|
||||||
- **WezTerm** — `~/.wezterm.lua` как живая ссылка на `wezterm/.wezterm.lua` в репозитории
|
- **WezTerm** — `~/.wezterm.lua` как живая ссылка на общий конфиг для Windows и Linux
|
||||||
- **UTF-8** — `chcp 65001` + `Console.InputEncoding/OutputEncoding` только для pwsh 7, не для PS 5.1
|
- **UTF-8** — `chcp 65001` + `Console.InputEncoding/OutputEncoding` только для pwsh 7, не для PS 5.1
|
||||||
- **Codex Proxy shortcut** — Start Menu ярлык для запуска Codex GUI с proxy-переменными
|
- **Codex Proxy shortcut** — Start Menu ярлык для запуска Codex GUI с proxy-переменными
|
||||||
- **Claude Proxy** — ярлык меню «Пуск» для запуска Claude Desktop с переменными прокси
|
- **Claude Proxy** — ярлык меню «Пуск» для запуска Claude Desktop с переменными прокси
|
||||||
|
|||||||
+1
-1
@@ -302,7 +302,7 @@ if ! command -v "$STOW_BIN" &>/dev/null; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
PACKAGES=(bash tmux vim zed vscode agents codex gemini proxy-client)
|
PACKAGES=(bash tmux vim wezterm zed vscode agents codex gemini proxy-client)
|
||||||
AVAILABLE_PACKAGES=()
|
AVAILABLE_PACKAGES=()
|
||||||
|
|
||||||
info "Применяю stow пакеты..."
|
info "Применяю stow пакеты..."
|
||||||
|
|||||||
+48
-36
@@ -2,70 +2,82 @@ local wezterm = require 'wezterm'
|
|||||||
local act = wezterm.action
|
local act = wezterm.action
|
||||||
local config = wezterm.config_builder()
|
local config = wezterm.config_builder()
|
||||||
|
|
||||||
--config.key_map_preference = 'Physical'
|
config.enable_kitty_keyboard = false -- Так работает стабильнее.
|
||||||
--config.enable_kitty_keyboard = true
|
|
||||||
config.enable_kitty_keyboard = false -- так работает куда стабильнее
|
|
||||||
--config.enable_csi_u_key_encoding = false
|
|
||||||
--config.allow_win32_input_mode = false
|
|
||||||
|
|
||||||
local local_domain = { DomainName = 'local' }
|
local local_domain = { DomainName = 'local' }
|
||||||
local function wsl(name) return { DomainName = 'WSL:' .. name } end
|
local default_prog
|
||||||
|
local launch_menu
|
||||||
|
local is_windows = wezterm.target_triple:find 'windows'
|
||||||
|
|
||||||
local pwsh = { 'pwsh.exe', '-NoLogo' }
|
if is_windows then
|
||||||
local cmd = { 'cmd.exe' }
|
local function wsl(name) return { DomainName = 'WSL:' .. name } end
|
||||||
|
local pwsh = { 'pwsh.exe', '-NoLogo' }
|
||||||
|
|
||||||
|
default_prog = pwsh
|
||||||
|
launch_menu = {
|
||||||
|
{ label = 'PowerShell', domain = local_domain, args = pwsh },
|
||||||
|
{ label = 'Командная строка', domain = local_domain, args = { 'cmd.exe' } },
|
||||||
|
{ label = 'Ubuntu', domain = wsl 'Ubuntu' },
|
||||||
|
{ label = 'Ubuntu 24.04.1 LTS', domain = wsl 'Ubuntu-24.04' },
|
||||||
|
}
|
||||||
|
else
|
||||||
|
local shell = os.getenv 'SHELL' or '/bin/bash'
|
||||||
|
local shell_name = shell:match '([^/]+)$' or shell
|
||||||
|
shell_name = shell_name:sub(1, 1):upper() .. shell_name:sub(2)
|
||||||
|
|
||||||
|
default_prog = { shell, '-l' }
|
||||||
|
launch_menu = {
|
||||||
|
{ label = shell_name, domain = local_domain, args = default_prog },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
config.default_domain = 'local'
|
config.default_domain = 'local'
|
||||||
config.default_prog = pwsh
|
config.default_prog = default_prog
|
||||||
|
config.launch_menu = launch_menu
|
||||||
|
|
||||||
|
-- В Wayland у WezTerm пока нет надёжной системной рамки окна в GNOME.
|
||||||
|
-- XWayland возвращает обычный заголовок с кнопками и перетаскиванием.
|
||||||
|
if not is_windows then
|
||||||
|
config.enable_wayland = false
|
||||||
|
end
|
||||||
|
|
||||||
config.scrollback_lines = 50000
|
config.scrollback_lines = 50000
|
||||||
|
|
||||||
config.color_scheme = 'Ubuntu'
|
config.color_scheme = 'Ubuntu'
|
||||||
|
|
||||||
-- Ближе всего к Windows Terminal
|
-- Встроен в WezTerm и одинаково доступен на Windows и Linux.
|
||||||
config.font = wezterm.font 'Cascadia Mono'
|
config.font = wezterm.font 'JetBrains Mono'
|
||||||
config.font_size = 11.0
|
config.font_size = 11.0
|
||||||
-- Хороший современный вариант; WezTerm сам поставляется с JetBrains Mono
|
|
||||||
--config.font = wezterm.font 'JetBrains Mono'
|
|
||||||
--config.font_size = 11.0
|
|
||||||
--config.line_height = 1.0
|
|
||||||
--config.cell_width = 1.0
|
|
||||||
|
|
||||||
config.initial_cols = 120
|
config.initial_cols = 120
|
||||||
config.initial_rows = 28
|
config.initial_rows = 28
|
||||||
|
|
||||||
config.window_background_opacity = 1.0
|
config.window_background_opacity = 1.0
|
||||||
|
config.window_decorations = 'TITLE|RESIZE'
|
||||||
config.hide_tab_bar_if_only_one_tab = true
|
config.hide_tab_bar_if_only_one_tab = true
|
||||||
|
|
||||||
config.freetype_load_target = 'HorizontalLcd'
|
config.freetype_load_target = 'HorizontalLcd'
|
||||||
config.freetype_render_target = 'HorizontalLcd'
|
config.freetype_render_target = 'HorizontalLcd'
|
||||||
|
|
||||||
config.launch_menu = {
|
|
||||||
{ label = 'PowerShell', domain = local_domain, args = pwsh },
|
|
||||||
{ label = 'Командная строка', domain = local_domain, args = cmd },
|
|
||||||
{ label = 'Ubuntu', domain = wsl 'Ubuntu' },
|
|
||||||
{ label = 'Ubuntu 24.04.1 LTS', domain = wsl 'Ubuntu-24.04' },
|
|
||||||
}
|
|
||||||
|
|
||||||
config.keys = {
|
config.keys = {
|
||||||
{ key = 'phys:Space', mods = 'CTRL|SHIFT', action = act.ShowLauncherArgs { flags = 'LAUNCH_MENU_ITEMS|DOMAINS' } },
|
{ key = 'phys:Space', mods = 'CTRL|SHIFT', action = act.ShowLauncherArgs { flags = 'LAUNCH_MENU_ITEMS|DOMAINS' } },
|
||||||
{ key = 'phys:V', mods = 'CTRL|SHIFT', action = act.PasteFrom 'Clipboard' },
|
{ key = 'phys:V', mods = 'CTRL|SHIFT', action = act.PasteFrom 'Clipboard' },
|
||||||
{ key = 'phys:T', mods = 'CTRL|SHIFT', action = act.SpawnCommandInNewTab { domain = local_domain, args = pwsh } },
|
{ key = 'phys:T', mods = 'CTRL|SHIFT', action = act.SpawnCommandInNewTab { domain = local_domain, args = default_prog } },
|
||||||
|
|
||||||
{ key = 'phys:R', mods = 'CTRL|SHIFT|ALT', action = act.ResetTerminal },
|
{ key = 'phys:R', mods = 'CTRL|SHIFT|ALT', action = act.ResetTerminal },
|
||||||
|
|
||||||
-- Переключение на вкладку по номеру: Ctrl+Shift+1..9
|
-- Переключение на вкладку по номеру: Ctrl+Shift+1..9.
|
||||||
{ key = 'phys:1', mods = 'CTRL|SHIFT', action = act.ActivateTab(0) },
|
{ key = 'phys:1', mods = 'CTRL|SHIFT', action = act.ActivateTab(0) },
|
||||||
{ key = 'phys:2', mods = 'CTRL|SHIFT', action = act.ActivateTab(1) },
|
{ key = 'phys:2', mods = 'CTRL|SHIFT', action = act.ActivateTab(1) },
|
||||||
{ key = 'phys:3', mods = 'CTRL|SHIFT', action = act.ActivateTab(2) },
|
{ key = 'phys:3', mods = 'CTRL|SHIFT', action = act.ActivateTab(2) },
|
||||||
{ key = 'phys:4', mods = 'CTRL|SHIFT', action = act.ActivateTab(3) },
|
{ key = 'phys:4', mods = 'CTRL|SHIFT', action = act.ActivateTab(3) },
|
||||||
{ key = 'phys:5', mods = 'CTRL|SHIFT', action = act.ActivateTab(4) },
|
{ key = 'phys:5', mods = 'CTRL|SHIFT', action = act.ActivateTab(4) },
|
||||||
{ key = 'phys:6', mods = 'CTRL|SHIFT', action = act.ActivateTab(5) },
|
{ key = 'phys:6', mods = 'CTRL|SHIFT', action = act.ActivateTab(5) },
|
||||||
{ key = 'phys:7', mods = 'CTRL|SHIFT', action = act.ActivateTab(6) },
|
{ key = 'phys:7', mods = 'CTRL|SHIFT', action = act.ActivateTab(6) },
|
||||||
{ key = 'phys:8', mods = 'CTRL|SHIFT', action = act.ActivateTab(7) },
|
{ key = 'phys:8', mods = 'CTRL|SHIFT', action = act.ActivateTab(7) },
|
||||||
{ key = 'phys:9', mods = 'CTRL|SHIFT', action = act.ActivateTab(-1) },
|
{ key = 'phys:9', mods = 'CTRL|SHIFT', action = act.ActivateTab(-1) },
|
||||||
|
|
||||||
{ key = 'phys:H', mods = 'CTRL|SHIFT|ALT', action = act.SplitHorizontal { domain = 'CurrentPaneDomain' } },
|
{ key = 'phys:H', mods = 'CTRL|SHIFT|ALT', action = act.SplitHorizontal { domain = 'CurrentPaneDomain' } },
|
||||||
{ key = 'phys:V', mods = 'CTRL|SHIFT|ALT', action = act.SplitVertical { domain = 'CurrentPaneDomain' } },
|
{ key = 'phys:V', mods = 'CTRL|SHIFT|ALT', action = act.SplitVertical { domain = 'CurrentPaneDomain' } },
|
||||||
}
|
}
|
||||||
|
|
||||||
return config
|
return config
|
||||||
Reference in new issue
Block a user