Получите версию GUI Spacemacs/Emacs для распознавания среды nix-shell

Я делаю свою разработку в оболочке Nix (создаю файл default.nix в своем корневом каталоге проекта и запускаю nix-shell ., чтобы предоставить мне оболочку с доступом к зависимостям проекта).

Spacemacs - это мой главный редактор, но когда я пытаюсь запустить версию GUI через emacs &, у меня нет доступа к программам в моей nix-оболочке (например, если я был в проекте Ruby on Rails и Ruby был объявлен как зависимость в моем default.nix, у меня не было бы выделения синтаксиса в Spacemacs, потому что GUI-версия Emacs не видит зависимости от Nix-оболочки). Если я запустил :!which ruby, он даже не может найти команду which.

Сейчас я запускаю spacemacs через emacs -nw и просто использую его с консоли, но мне бы очень хотелось иметь возможность использовать редактор графического интерфейса и получать все доступные цвета, а не ограничиваться теми, которые выглядят красиво в режиме 256 цветов. Для меня также быстрее переключаться между терминалом и редактором, чем между панелями tmux или терминальными разделителями, чтобы добраться до моего редактора CLI.

with import <nixpkgs> {}; {
  cannyFreeRadicalEnv = stdenv.mkDerivation rec {
    name = "rails-project-env";
    version = "0.1";
    src = ./.;
    buildInputs = [
        stdenv
        ruby_2_2_2
        bundler
        zlib
        postgresql94
        sqlite
        zsh
        git
        nodejs-0_12
    ];
  };
}

Ответ 1

Я смог исправить эту проблему, запустив emacs в режиме демона. https://www.emacswiki.org/emacs/EmacsAsDaemon

в каталоге с параметром default.nix: nix-shell . emacs --daemon emacsclient -c -a emacs

Ответ 2

Вы можете запустить свой графический интерфейс Emacs как

setsid nix-shell . --command "emacs" &> /dev/null

Также см. обсуждение nix-shell интеграция до flycheck и ghc-mode.


Совет: вы можете использовать псевдоним для этого в ваших .zshrc или .bashrc

run-nix-emacs () {
  setsid nix-shell . --command "emacs" &> /dev/null
}

alias ne='run-nix-emacs'

Ответ 3

Я рекомендую этот nix-shell.el. Мой форк этого предоставляет несколько примеров конфигурации. Хотя интеграция direnv с Emacs работает, она очень медленная. Не то, чтобы это быстрее, но это происходит, когда вы выполняете Mx nix-shell-activ и вы контролируете время задержки. Это становится импортом, если, например, у вас есть shell.nix в вашем каталоге org для исходных блоков org в многоязычной среде и вы не всегда хотите задержку direnv при открытии файла org. Mario nix-shell.el должен быть более широко известен. Вот где я это обнаружил.