Комментарии 6
Хочется окружения «с одной кнопки» на любом стеке
идейно с этим согласен на 100%. И направление мне кажется правельным DevContainers + Nix. Но Такой вопрос насколько просто настроить чтобы IDE подхватывала LSP, linter, formater, etc. из контейнера? у меня в своё время были с этим проблеммы в vscode. без DevContainers нужно только правильное расшерение установить (его тоже можно в конфиге прописать) и zed vscode сам установит все ети штуки, и всреднем даже без проблемм
Главная идея DevContainers как раз в том, чтобы корректно работали интеграции с LSP, дебаггерами, форматтерами и прочим.
Главная сложность — это что "снаружи" (вне контейнера) у вас одна файловая система, и путь до файла, скажем, `$HOME/myrepo/file.js`, в то время как внутри контейнера это `/app/file.js`. Чтобы, когда Ваша IDE / редактор отправляют запрос в LSP, нужный файл был действительно найден, они должны жить в одной файловой системе.
Поэтому нужно запускать и саму IDE / редактор внутри контейнера. Все современные популярные IDE / редакторы клиент-серверные (среди них точно VS Code, Zed, JetBrains, и даже Vim/Neovim). Вся суть DevContainers в том, чтобы установить "серверную часть" IDE внутрь контейнера, и тогда LSP, дебаггеры и прочие интеграции будут прекрасно работать.
Установить VS Code Server можно и ручками в контейнер, просто это придётся делать, а DevContainers это делают за тебя.
Всё вышеперечисленное делается одной кнопкой — это и есть роль стандарта DevContainers — быть адаптером между IDE и контейнером.
Спасибо за статью, интересно было про Nix больше узнать.
У меня проекты Java/Kotlin, TypeScript, Python. Нигде проблем с глобальными инструментами нет. Так что DevContainers обычно не нужны: иногда что-то низкоуровневое в зависимостях (типа x86 GPU библиотеки), тогда использую, но без Nix. Видимо, это больше для низкоуровневых экосистем (Go/Rust).
Видимо, это больше для низкоуровневых экосистем (Go/Rust).
Высокоуровневость тут значения не имеет, любому проекту в целом не помешает воспроизводимость. Думаю, все были бы счастливы, если бы любой проект просто запускался бы с одной кнопки в любой IDE / редакторе. Я использую Nix для любой разработки: недавно, например, форкнул клиент Telegram и вайбкодил кое-что для личных нужд на Swift, постоянно использую для Go, JS и Python. Иногда запускаю локально один проект на Rust (хотя я его особо не знаю, но мне иногда надо запустить его локально). Ещё одно преимущество конфигов Nix в том, что их можно генерировать с помощью LLM — и легко проверить на адекватность (сразу видно если там ставится что-то не то, чего не понять, если ИИ-агент выполняет `apt get` и что-то устанавливает, особенно, не дай бог, если это происходит на моём компьютере).
Однако Java/Kotlin — это скорее всего Android, и в Android мире многое завязано на экосистему Android Studio, мало кто использует что-то другое, потому что в AS лучше дебаггеры, эмулятор и всё такое. А эмулятор, к сожалению, из контейнера не запустишь, поэтому будут сложности. Всё остальное можно, но в контексте Android просто не очень нужно, потому что можно нажать одну кнопку в AS и всё тоже заработает "с одной кнопки".
В стеках, где у людей зачастую разные предпочтения по редакторам, чтобы не навязывать одну конкретную IDE (ну не все хотят использовать JetBrains, или VS Code, или Neovim — это всё вкусовщина), нужен некоторый адаптер, который свяжет IDE с контейнером так, чтобы это работало "с одной кнопки". В этом и заключается суть стандарта DevContainers — еще один уровень абстракции сверху, исключительно для удобства, и он совершенно необязателен для тех, кому он не нужен.
Спасибо, что поделились методом. Я только изучаю программирование, но с ходу столкнулся с проблемами совместимости разных инструментов и библиотек. Какой тутор нормальный ни возьми - он 3х или 4х летней давности - без танцев с бубном не пройти. Обязательно придётся решать проблемы с настройками проекта, а оно мне вообще не упало. Проект уж устарел и сам автор уже говорит, что по другому б сделал. Но и не денешься никуда (Основы-то надо как-то изучить, а тутор по новому стеку ещё найти надо и заплатить, а тут бесплатно).
Вообще, выглядит как мастхев.
Вот доп видео по теме:
https://youtu.be/5XY3K8DH55M?si=v2xMKsgQQUiVh1u7Если у Вас уже поднакопилось флейков, но не знаете куда их залить или отправлять пулриквест в NUR лень то приглашаю попробовать мой сервис https://pieceofflakenixrepository.org/publication

Воспроизводимое изолированное окружение с Nix и DevContainers