Блог

Мой личный блокнот, куда я складываю всё, что изучаю, пробую, ломаю и чиню. Здесь есть полноценные статьи, заметки, небольшие эксперименты и просто куски кода, которые хочется сохранить под рукой. Часть материалов я пишу сам, часть дорабатываю с помощью ИИ. Многие заметки появляются здесь просто потому, что я не хочу второй раз наступать на те же грабли. А если что-то из этого пригодится кому-то ещё — тем лучше.

Blog intro illustration

Показаны все записи

Linux

Исполняемые шпаргалки: which-key для всего рабочего стола Linux на rofi

Шпаргалка на rofi, которая не просто показывает горячие клавиши — она их выполняет. Для оконного менеджера она парсится вживую из конфига i3; для приложений — читает раскладку оттуда, где приложение её прячет (JSON Telegram/Zen, Brave через CDP, mpv через IPC), и запускает. Вдохновлено which-key.nvim.

Полноэкранное меню rofi со списком горячих клавиш i3: каждая строка — сочетание и его действие
AI

Я дал своему портфолио MCP-сервер

Почему и как я построил MCP-сервер поверх своего личного сайта — чтобы AI-ассистенты могли напрямую запрашивать мои проекты, опыт и техническую работу.

Диаграмма: AI-ассистент подключается к портфолио через MCP
Linux

telepad: быстрый переход по чатам Telegram из любого окна, как Ctrl+K в Discord

Меню на Rust + rofi, которое открывает в Telegram любой чат, группу, канал, контакт, тему форума или архивный чат — сразу по нескольким аккаунтам — из любого окна в i3. В Telegram нет быстрого перехода уровня Ctrl+K; это моё решение проблемы.

Меню rofi со списком чатов Telegram по нескольким аккаунтам для быстрого перехода
Linux

brave-rofi-rust: переключение вкладок браузера из любого окна

Меню на Rust + rofi, которое переключает вкладки, закладки и историю браузера из любого окна в i3 — а не только когда браузер в фокусе. Оно управляет Brave по Chrome DevTools Protocol, а поднятие окна отдаёт хуку, так что один хоткей работает везде.

Меню rofi со списком вкладок браузера Brave для переключения
Homelab

x2x: одна клавиатура, два экрана

Как разделить клавиатуру и мышь между двумя X11-дисплеями с помощью x2x — без KVM-переключателя, без удалённого рабочего стола.

Два монитора рядом с курсором, перемещающимся между ними
Homelab

Mesh-сеть для homelab за CGNAT и DPI

Как я оставил homelab доступным с ноутбуков и старого 32-битного Android-телефона, который одновременно должен держать VPN для обхода DPI.

Архитектура mesh-доступа через VPS, DPI-bypass туннель и домашние устройства
Open Source

Мой PR в Bun пережил язык, на котором был написан

Продолжение истории: мой фикс на Zig для bun create закрыл бот — потому что Bun переехал на Rust. Я разобрался, что случилось на самом деле, переписал фикс на Rust, повоевал с тулчейном на NixOS и упёрся в настоящее узкое место Bun — не в код, а в ревью.

Терминальная превьюшка: PR #29089 закрыт как устаревший до перехода на Rust, src/cli.zig переехал в runtime/cli, переоткрыт как Rust-PR #32954
Open Source

Как сломанная команда Nuxt привела к багу в Bun CLI

Я попытался создать Nuxt 3 проект через Bun, нашёл вводящую в заблуждение команду в документации, докопался до бага в аргументах Bun CLI, получил merged PR в Nuxt docs и отправил fix в Bun на Zig с помощью Claude Code.

Terminal-style thumbnail про Bun, который передаёт -- буквально, и npm, который правильно передаёт -t v3
Neovim

telescope-gist: GitHub Gists должны жить в Telescope

Собрал Neovim-плагин для GitHub Gists: список через Telescope, preview с подсветкой по filetype, открытие многофайловых gist как редактируемых буферов, push обратно по :w, создание из visual selection, удаление, копирование URL и быстрый двухслойный кеш.

Neovim Telescope picker со списком GitHub Gists, редактированием и кешем
Homelab

tg-media-bot: кидаешь ссылку — получаешь файл

Self-hosted Telegram-бот, который качает медиа с 1000+ сайтов через yt-dlp и присылает файл обратно — MP3 с тегами, видео для inline-просмотра, загрузки до 2 ГБ, живой прогресс-бар. Плюс военные истории: три бага в коде, который выглядел готовым, загрузка, которую нельзя измерить, и cookies.txt, ломающий тот самый сайт, которому должен был помогать.

Терминал: tg-media-bot скачивает ссылку через yt-dlp и отправляет файл
Homelab

tg-mpv-bot: пульт от моего телевизора теперь — Telegram

Перестроил свой хак Telegram→mpv в самостоятельного open-source бота: библиотека на inline-кнопках, стриминг любой ссылки, файлы из Telegram до 2 ГБ на телевизор — плюс сетевые военные истории (мёртвый IPv6, CDN с привязкой к IP, MP4, заклинивший пайп), которые и сформировали архитектуру.

Терминал: tg-mpv-bot управляет воспроизведением mpv из Telegram
Homelab

Как Docker тихо сожрал 105 ГБ на Btrfs-корне моего ThinkPad

Хомлаб на старом ThinkPad T460 с корнем на Btrfs в 217 ГБ остался без места. Виновник — безлимитные логи Docker из одного контейнера GitLab. Как я это нашёл, починил и захардил систему.

Терминал: docker system df освобождает 105 ГБ на Btrfs-корне
Homelab

Status bar Hermes agent и как не сжигать токены на долгих сессиях

Что на самом деле значит каждый символ в статус-баре Hermes TUI (с поправками по исходникам — да, один из них точно не ETA), как заметить, что агент вот-вот съест месячный лимит nanogpt, и какие настройки реально что-то меняют.

Терминал: статус-бар Hermes agent с контекстом и расходом токенов
Shell

Tmuxinator проекты с fzf

Интерактивный просмотр и запуск проектов tmuxinator из терминала с помощью fzf

Терминал с fzf, выбирающим проект tmuxinator

Нет записей по выбранным фильтрам