- Вопрос или проблема
- Обзор
- Отладка
- Файлы
- Ответ или решение
- Шаг 1: Убедитесь, что плагины установлены правильно
- Шаг 2: Проверьте путь к Tmux
- Шаг 3: Определите зависимости плагинов
- Шаг 4: Обновление конфигурации Nix
- Шаг 5: Перезапустите tmux
- Шаг 6: Проверка выводов и сообщений об ошибках
- Шаг 7: Отладка с помощью окружения
- Заключение
Вопрос или проблема
Обзор
Я пытаюсь настроить tmux с использованием nix и home-manager на macOS.
Однако всякий раз, когда я обновляю конфигурацию tmux, я получаю следующие ошибки:
'/nix/store/6iq9z3wnacxqhja3r93b7lsdl1kvcp11-tmuxplugin-sensible-unstable-2017-09-05/share/tmux-plugins/sensible/sensible.tmux' вернул 127 [0/0]
'/nix/store/6iq9z3wnacxqhja3r93b7lsdl1kvcp11-tmuxplugin-sensible-unstable-2017-09-05/share/tmux-plugins/sensible/sensible.tmux' вернул 127
'/nix/store/8cqfwlqfxp21fwbcvl8dyyahdm4klmxj-tmuxplugin-catppuccin-unstable-2024-05-15/share/tmux-plugins/catppuccin/catppuccin.tmux' вернул 127
'/nix/store/87czlf8i2q2bzk1xikhx20d80g9kpdi9-tmuxplugin-resurrect-unstable-2022-05-01/share/tmux-plugins/resurrect/resurrect.tmux' вернул 127
'/nix/store/aqs7gq94wd4ldbbsnrrm232jifbywwjy-tmuxplugin-continuum-unstable-2022-01-25/share/tmux-plugins/continuum/continuum.tmux' вернул 127
'/nix/store/ixmqzdn5yck23fi1d824a04mvxkb7jk6-tmuxplugin-yank-unstable-2021-06-20/share/tmux-plugins/yank/yank.tmux' вернул 127
Отладка
Я посмотрел на сгенерированный файл tmux.conf
и обнаружил, что в нем есть несколько команд run-shell
, таких как следующая:
# ============================================= #
# Начать с настроек по умолчанию из плагина Sensible #
# --------------------------------------------- #
run-shell /nix/store/6iq9z3wnacxqhja3r93b7lsdl1kvcp11-tmuxplugin-sensible-unstable-2017-09-05/share/tmux-plugins/sensible/sensible.tmux
# ============================================= #
Эти команды run-shell
совпадают с программами, которые возвращают ошибки 127 в журналах tmux.
Согласно этому вопросу на GitHub, ошибки 127 означают, что программа не найдена. Однако, когда я явным образом пытаюсь запустить эти программы или вывести их с помощью cat
, я вижу их.
Это говорит мне о том, что по какой-то причине я могу вручную запускать сгенерированные программы, но tmux не может.
Я нашел этот пост: функции оболочки tmux возвращают ошибку 127. Поэтому я также попытался запустить сгенерированные .tmux
программы, используя /bin/sh
, и смог успешно запустить их там.
Файлы
Вот вся моя конфигурация nix для tmux.
{ pkgs, ... }:
{
programs.tmux = {
enable = true;
terminal = "tmux-256color";
historyLimit = 100000;
shell = "${pkgs.zsh}/bin/zsh";
plugins = with pkgs;
[
tmuxPlugins.sensible
{
plugin = tmuxPlugins.catppuccin;
extraConfig = ''
set-option -sa terminal-features "screen-256color,:RGB"
set -g @catppuccin_flavour 'mocha'
set -g @catppuccin_status_modules_right "session"
set -g @catppuccin_status_modules_left " "
set -g @catppuccin_status_fill "icon"
set -g @catppuccin_window_number_position "right"
set -g @catppuccin_window_left_separator ""
set -g @catppuccin_window_right_separator " "
set -g @catppuccin_window_middle_separator " █"
set -g @catppuccin_window_number_position "right"
set -g @catppuccin_window_default_fill "none"
set -g @catppuccin_window_default_text "#W"
set -g @catppuccin_window_current_fill "number"
set -g @catppuccin_window_current_text "#W"
set -g @catppuccin_pane_active_border_style "fg=#313244"
set -g status-bg "#11111b" # также дублируется внизу файла
'';
}
{
plugin = tmuxPlugins.resurrect;
extraConfig = ''
set -g @resurrect-strategy-nvim 'session'
set -g @resurrect-capture-pane-contents 'on'
'';
}
{
plugin = tmuxPlugins.continuum;
extraConfig = ''
set -g @continuum-restore 'on'
set -g @continuum-boot 'on'
set -g @continuum-boot-options 'alacritty,fullscreen'
set -g @continuum-save-interval '5' # сохранять каждые 5 минут
'';
}
tmuxPlugins.yank
];
extraConfig = ''
#
# Горячие клавиши
#
# установить префикс на control-a
set -g prefix C-a
unbind C-b
bind-key C-a send-prefix
# использовать \ для создания горизонтальных панелей
unbind %
bind '\' split-window -h
# использовать - для разделения окна горизонтально
unbind '"'
bind - split-window -v
# изменять размер панелей
bind -r j resize-pane -D 5
bind -r k resize-pane -U 5
bind -r l resize-pane -R 5
bind -r h resize-pane -L 5
# Умное переключение панелей с учетом разделений Vim.
# См.: https://github.com/christoomey/vim-tmux-navigator
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'"
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'"
if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'"
bind-key -T copy-mode-vi 'C-h' select-pane -L
bind-key -T copy-mode-vi 'C-j' select-pane -D
bind-key -T copy-mode-vi 'C-k' select-pane -U
bind-key -T copy-mode-vi 'C-l' select-pane -R
bind-key -T copy-mode-vi 'C-\' select-pane -l
# установить визуальное оформление
set-option -sa terminal-features "screen-256color,:RGB"
set-option -g status-position top
# легко обновлять конфигурацию tmux
unbind r
bind r source-file ~/.config/tmux/tmux.conf
set -g status-bg "#11111b"
'';
};
}
Ответ или решение
Ошибка с кодом 127 в Tmux, возникающая на MacOS при использовании плагинов, управляемых через Nix и Home-manager, часто связана с тем, что Tmux не может найти или запустить скрипты соответствующих плагинов. Вот несколько шагов, которые помогут вам диагностировать и решить эту проблему.
Шаг 1: Убедитесь, что плагины установлены правильно
По вашему описанию видно, что Tmux не может выполнить файлы .tmux
плагинов, находящиеся по пути /nix/store/...
. Убедитесь, что эти файлы существуют и имеют правильные разрешения. Вы можете использовать команду:
ls -l /nix/store/6iq9z3wnacxqhja3r93b7lsdl1kvcp11-tmuxplugin-sensible-unstable-2017-09-05/share/tmux-plugins/sensible/sensible.tmux
Это покажет размер файла и разрешения доступа. Выбирайте файлы, у которых установлены разрешения на чтение.
Шаг 2: Проверьте путь к Tmux
Tmux может не правильно обрабатывать $PATH
, когда вы запускаете скрипты. Добавьте следующую строку в ваш конфигурационный файл Tmux, чтобы явно указать путь:
set-option -g default-shell /bin/zsh
Убедитесь, что ваша оболочка (в данном случае Zsh) правильно настроена и включена в переменную окружения $PATH
.
Шаг 3: Определите зависимости плагинов
Убедитесь, что все зависимости для получения и выполнения плагинов установлены через Nix. Некоторые плагины могут требовать специфические утилиты или зависимости, которые могут быть не установлены.
Шаг 4: Обновление конфигурации Nix
Возможно, некоторые плагины устарели или имеют ошибки. Убедитесь, что у вас последняя версия ваших пакетов Nix. Запустите следующую команду для обновления:
nix-channel --update && nix-env -u '*'
Шаг 5: Перезапустите tmux
После внесения изменений в конфигурацию, полностью перезапустите Tmux. Для этого выполните:
tmux kill-server
Затем снова запустите Tmux.
Шаг 6: Проверка выводов и сообщений об ошибках
Если ошибка всё ещё возникает, попробуйте проверить вывод с помощью следующей команды:
tmux source-file ~/.config/tmux/tmux.conf
Обратите внимание, если появляются ошибки. Если они все еще связаны с кодом 127, можно попробовать выводить для диагностики:
set -g @plugin_action 'echo "Loading plugin..."'
Это может дать представление о том, какой именно плагин вызывает ошибку.
Шаг 7: Отладка с помощью окружения
Попробуйте запустить Tmux в отладочном режиме, чтобы получить больше информации о происходящем:
tmux -vv new-session
Эта команда создаст файлы логов, которые помогут вам понять, что именно происходит во время запуска Tmux.
Заключение
Если после выполнения всех этих шагов ошибка с кодом 127 сохраняется, возможно, следует обратиться за помощью на форумы или GitHub-репозитории плагинов, предоставив детали вашей конфигурации и возникших ошибок. Надеюсь, эти шаги решат вашу проблему с Tmux и Nix.