The Jerusalem PostIDF, Shin Bet arrest 10 suspects connected to attack on US journalist, EU diplomats in West BankPunchMorning recap: Wike meets Fubara, FG disputes World Bank debt figures, other top storiesCNN Türk19 EKİM HAVA DURUMU İSTANBUL SON DAKİKA! Bugün hava nasıl olacak, İstanbul’da şiddetli yağış olacak mı?InquirerChurch, youth groups push action vs political dynastiesBollywood HungamaTiger Shroff Shooting Incident: Mumbai Police register FIR against 3 unknown accused, form 15 teams to trace shootersESPNPackers use third-down conversions, takeaways to frustrate struggling CowboysESPN DeportesWatson y Browns escapan con la victoria divisional한겨레12년 만의 남북 탁구 대결, 이번에도 박홍규가 웃었다RapplerLazaro summons China ambassador Jing, says it’s not his place to taunt PH officialsZDF heuteEntdecken Sie das ZDF-Nachrichtenstudioالنهارماذا بعد ميزان المنازلة الأخيرة بين السّلطة و"حزب الله"؟The South AfricanDa Cruz calls for unity after Kaizer Chiefs’ loss in Zambia
The Daily Newsstand · Free, Always
Monday, October 19, 2026

Одного Dock мне было мало: как я написал свой док для macOS с магнитами и виджетами

Translate

У меня два монитора и десятки программ, и один системный Dock с этим не справлялся. Хотелось мессенджеры — слева на втором мониторе, рабочие инструменты — внизу основного, а свободное место на диске и погоду видеть, ничего не открывая. Готовые замены либо платные, либо умели что-то одно. Так появился PejavaDock — бесплатный нативный док на Swift без сторонних зависимостей. Ниже — что он умеет и как устроен внутри.

Что получилось

  • Сколько угодно доков у любого края любого монитора. Док помнит свой монитор и возвращается на него, когда монитор снова подключают.

  • Магнит: док прилипает к углу или к соседнему доку, доки на одном краю расталкивают друг друга, а с Shift ставятся свободно.

  • Док может занять всё свободное место на краю; то, что не влезло, уходит под кнопку «Ещё».

  • Виджеты в конце дока: место на диске, часы, погода и свои на HTML.

  • Группы как в iOS: до четырёх программ делят один значок, и каждая четверть запускает своё.

  • Веб-ссылки со значками сайтов, открытие сайта отдельным окном (Chrome, Edge, Brave), режим без фона, отдельные значки для окон одной программы — например, для рабочего и домашнего профилей Chrome.

  • Всё привычное: увеличение, стопки папок, Корзина, свёрнутые окна, автоскрытие, импорт из системного Dock.

  • Синхронизация доков между Mac через аккаунт GitHub или Google.

Как устроен док

Каждый док — это панель без рамки на уровне окна Dock, растянутая вдоль всего края экрана. Значки рисуются слоями Core Animation, а таймер на 60 кадров считает увеличение по косинусоиде вокруг указателя. Вне подложки окно игнорирует мышь, чтобы не перехватывать чужие щелчки. Фон — Liquid Glass на macOS 26 (NSGlassEffectView) или матовое стекло с настраиваемым радиусом размытия.

Магнит и расталкивание

Самая интересная часть — раскладка доков на одном краю. Каждый док хранит не координаты, а намерение: «центр в 40 % длины края», «прижат к правому углу» или «стоит сразу после дока X». На каждом кадре небольшой решатель переводит намерения в отрезки: сначала ставит доки туда, куда они хотят, затем проходом вперёд расталкивает наложения с зазором 3 pt, а проходом назад возвращает в границы экрана тех, кого вытолкнули за край. Поэтому док, прижатый к правому углу, растёт влево, когда в него добавляют значки, и отталкивает соседей, а примагниченные доки едут вслед за тем, к кому прилипли. Режим «всё свободное место» — тот же решатель: остальные доки упаковываются к краям, а гибкий получает промежуток.

Системный Dock не выключить

macOS не даёт сторонней программе убрать системный Dock. PejavaDock включает ему автоскрытие с задержкой 1000 секунд и возвращает прежние настройки при выходе. Чтобы настройки вернулись и после аварийного завершения, запускается отдельный shell-процесс, который следит за PID и всё восстанавливает, если программа упала. Второе честное ограничение: сторонний док не может зарезервировать место на экране, поэтому есть опция, которая через Accessibility сдвигает развёрнутые окна, чтобы они не заходили под док.

Виджеты на HTML

Встроенные виджеты (диск и часы) рисуются сразу в картинку через Core Graphics. Сторонний виджет — это папка с manifest.json и HTML-страницами, которая показывается в прозрачном WKWebView. Ориентация, размер, тёмная тема, язык и настройки приходят в строке запроса, а форма настроек строится по манифесту. Первый такой виджет — погода с open-meteo.com: геокодинг города и прогноз на 7 дней без ключа. Устанавливается он кнопкой на сайте через ссылку pejavadock://, после подтверждения в программе.

Синхронизация и сервер за 0 долларов

Вся серверная часть — один Cloudflare Worker на бесплатном тарифе: сайт на Astro как статика, база D1 для аккаунтов и статистики, R2 для сборок. Вход идёт через системный браузер по OAuth с PKCE: программа слушает одноразовый порт на 127.0.0.1 и получает туда код, а токен хранится в связке ключей. Изменения с двух Mac сливаются трёхсторонним слиянием по каждому доку относительно последнего синхронизированного снимка, так что ничего не перезаписывается молча.

Установить

PejavaDock бесплатен, весит около 3 МБ, работает на macOS 14 и новее на Apple Silicon и Intel, подписан и проверен Apple, есть на 12 языках, включая русский. Скачать можно на dock.pejava.com или через Homebrew: brew install --cask voy22/tap/pejava-dock. Ошибки и идеи — в github.com/voy22/pejava-dock или в комментариях: самое ценное сейчас — узнать, чего вам не хватает в доке.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.