Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .config/quickshell/angelos/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,8 @@ polkit работают всегда.
Launchpad, Системные настройки, Загрузки, Корзина и значки большинства программ. Она скачивается
один раз при включённом скине (`scripts/mac-icons.py`, закреплённый релиз, sha256) и видна только
Dock: значки GTK и остальных программ не меняются. Выключается там же; чего в теме нет — из темы
системы.
системы. Свои значки в `~/.local/share/angelos/icons/dock/` важнее обеих тем и видны и при
выключенной (Dock → «Свои значки» открывает папку).
- **Свернуть — как на Mac.** В niri сворачивания нет, его делает оболочка: жёлтый свет в
заголовках angelOS, «Окно → Свернуть», ⌘M (с маковскими клавишами) — окно уходит в Dock справа
снимком со значком программы, клик возвращает его на прежний рабочий стол. Окно прячется на
Expand Down
9 changes: 5 additions & 4 deletions .config/quickshell/angelos/docs/GOLDEN-GATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
|---|---|---|
| Строка меню | `modules/mac/MacMenuBar.qml`, `MacMenus.qml`, `MacMenuHost.qml`, `MacMenuView.qml` | 24 pt сверху на каждом экране, без своего фона (обои видны; фон — по желанию). Слева эмблема angelOS (её меню — «Об этом компьютере», Системные настройки, Обновления, Завершить принудительно, Сон, Перезагрузка, Выключение, Блокировка, Выход), жирное имя программы, её меню. Справа звук, раскладка, Wi-Fi и Bluetooth (если есть), трей, Spotlight, Пункт управления, дата и время. Меню из стекла, ←/→ и наведение переходят между меню, ⌃F2 — с клавиатуры |
| Меню программ | `scripts/appmenu.py`, `services/AppMenu.qml`, `data/appmenu-profiles.json` | Qt (dbusmenu), GTK 3 (appmenu-gtk-module), действия GtkApplication; для остальных — стандартные наборы из клавиш программы. Чего сделать нельзя — нет в меню. Подробно — `GLOBAL-MENU.md` |
| Dock | `modules/mac/MacDock.qml`, `MacDockModel.qml` | Стеклянная плита снизу: закреплённые программы «Пуска» (или свой список), «Программы», недавние после разделителя, свёрнутые окна, Загрузки и Корзина; точка под запущенными; подсказка над значком; меню по правой кнопке (окна программы, действия из её .desktop, «Оставить в Dock», «Открыть», «Завершить»; у Корзины — «Очистить»); увеличение как в macOS (значок под указателем растёт до заданного размера, соседи — по косинусу на ~3 значка в каждую сторону; размеры считаются от Dock в покое, а ряд раскладывается так, что точка под указателем остаётся под ним — Dock расширяется в обе стороны; у края экрана тоже работает) и автоскрытие; значки — тема MacTahoe (`services/DockIcons.qml`, `scripts/mac-icons.py`) |
| Dock | `modules/mac/MacDock.qml`, `MacDockModel.qml` | Стеклянная плита снизу: закреплённые программы «Пуска» (или свой список), «Программы», недавние после разделителя, свёрнутые окна, Загрузки и Корзина; точка под запущенными; подсказка над значком; меню по правой кнопке (окна программы, действия из её .desktop, «Оставить в Dock», «Открыть», «Завершить»; у Корзины — «Очистить»); увеличение как в macOS (значок под указателем растёт до заданного размера, соседи — по косинусу на ~3 значка в каждую сторону; размеры считаются от Dock в покое, а ряд раскладывается так, что точка под указателем остаётся под ним — Dock расширяется в обе стороны; у края экрана тоже работает) и автоскрытие; значки — тема MacTahoe (`services/DockIcons.qml`, `scripts/mac-icons.py`), а свои значки `~/.local/share/angelos/icons/dock/<имя>.svg` или `.png` важнее неё и работают при выключенной теме (имя: значок из .desktop, id программы или последняя часть id; «Программы» – `view-app-grid`, Настройки – `preferences-system`, Загрузки – `folder-download`, Корзина – `user-trash`); папку открывает кнопка Dock → «Свои значки» |
| Spotlight | `modules/mac/MacSpotlight.qml` (стиль «mac» у `StartOverlay`) | Тёмная стеклянная капсула вверху по центру; программы, файлы, действия, буфер обмена; лучший результат выделен, выделение следует за мышью, только когда она движется |
| Пункт управления | `modules/mac/MacControlCenter.qml` | Раскладка macOS: Wi-Fi и Bluetooth рядом с «Сейчас играет», ряды [Запись экрана][Mission Control][Блокировка] и [Тёмный режим][Снимок экрана][Не беспокоить], ползунки «Дисплей» и «Звук». Чего у машины нет (Wi-Fi, Bluetooth, записи), не показывается — его место занимает следующая капсула |
| Центр уведомлений и баннеры | `modules/mac/MacNotificationCenter.qml`, `MacBanner.qml` | Клик по дате; баннеры в правом верхнем углу |
Expand Down Expand Up @@ -164,8 +164,9 @@ Ctrl+C, Ctrl+V; в меню они так и подписаны (⌃C), пото
же, как его `install.sh`, но ничего из архива не запускает и берёт только файлы, папки и ссылки
внутри темы. Кладётся в `~/.local/share/angelos/icons/MacTahoe` — вне пути тем значков, так что
GTK и остальные программы его не видят; читает его только Dock. Уже установленный MacTahoe
(`~/.local/share/icons`, `/usr/share/icons`) берётся как есть. Нет нужного значка или тема
выключена (Тема и цвета → Golden Gate) — значок из темы системы, как раньше.
(`~/.local/share/icons`, `/usr/share/icons`) берётся как есть. Порядок такой: свой значок из
`~/.local/share/angelos/icons/dock/`, затем MacTahoe, затем значок темы системы. Тема выключена
(Тема и цвета → Golden Gate) – свои значки остаются, остальные из темы системы.
- **Курсор** — `macOS` из [ful1e5/apple_cursor](https://github.com/ful1e5/apple_cursor) v2.0.1
(GPL-3.0; нарисован заново в SVG, не файлы Apple; размеры 16…96): каталог `scripts/cursors.py`,
id `macos`, закреплённый архив с sha256 — в нём две темы, берётся папка `macOS`. Готового
Expand Down Expand Up @@ -196,7 +197,7 @@ Ctrl+C, Ctrl+V; в меню они так и подписаны (⌃C), пото
| Меню | у Firefox, Chromium, Electron, терминалов — стандартный набор из их клавиш, без истории и закладок списком; пункты не сереют, когда делать нечего | тулкит: на Wayland они ничего не экспортируют |
| Меню | нет системных служб macOS («Инструменты письма», «Правописание», «Диктовка», «Эмодзи») | их нет в Linux, а мёртвых пунктов нет |
| Стекло | размытие и насыщенность — niri, край и линза — шейдер; настоящего сдвига пикселей под стеклом нет | niri не даёт клиенту пиксели под поверхностью, а сам не преломляет |
| Dock | значки — свободная тема MacTahoe, похожая, но не Apple; программы, которых в ней нет, — из темы системы; стопка Загрузок не раскрывается веером | лицензия; не успел |
| Dock | значки — свободная тема MacTahoe, похожая, но не Apple; программы, которых в ней нет, — из темы системы или свой значок из `icons/dock`; стопка Загрузок не раскрывается веером | лицензия; не успел |
| Dock | свёрнутые окна справа — снимок окна, а не живая миниатюра; сворачивание без «джинна» | niri: сворачивания нет, оно сделано оболочкой (скрытый рабочий стол); снимок — grim (ScreencopyView в Quickshell 0.3.1 роняет оболочку на нескольких мониторах) |
| Окно файлов | раскладка окна — Nautilus (кнопки поиска и меню, строка пути), не Finder; в сайдбаре нет заголовков «Избранное» | тулкит: структуру окна рисует программа, скин меняет цвета, радиусы, сайдбар и кнопки |
| Окно файлов | средний свет светофора серый (у окон с заголовком angelOS — рабочий) | niri выбрасывает запрос GTK «свернуть» и никому о нём не сообщает |
Expand Down
11 changes: 11 additions & 0 deletions .config/quickshell/angelos/modules/settings/catalog/Mac.qml
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,17 @@ CatPage {
}
}
}
CatCustom {
label: I18n.t("Свои значки", "Your own icons")
hint: I18n.t("файл <имя>.svg или .png в этой папке важнее значков macOS и темы: имя значка программы, её id или последняя часть id (org.gnome.Nautilus → nautilus)", "an <name>.svg or .png in this folder comes before the Mac icons and the theme: the app's icon name, its id or the id's last part (org.gnome.Nautilus → nautilus)")
CatBox {
PxButton {
text: I18n.t("Открыть папку", "Open the folder")
icon: "folder"
onClicked: Quickshell.execDetached(["sh", "-c", 'mkdir -p "$1" && exec xdg-open "$1"', "sh", DockIcons.ownDir])
}
}
}
}
// ---- the apps kept in the Dock, in order (the same as dragging them in the Dock) ----
CatGroup {
Expand Down
55 changes: 44 additions & 11 deletions .config/quickshell/angelos/services/DockIcons.qml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@ pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
import Qt.labs.folderlistmodel
import qs.config

// The Golden Gate Dock's icons drawn like macOS: MacTahoe (scripts/mac-icons.py — GPL-3.0, a
// pinned release, downloaded once while the skin is on; or a MacTahoe installed already). Only
// the Dock reads it: GTK and the rest keep their icon theme. Without it (not downloaded yet, no
// network, turned off in Settings) the Dock shows the theme's icons as before.
// Your own icons come before both: ~/.local/share/angelos/icons/dock/<name>.svg or .png, under
// any name the Dock looks for (the .desktop's icon, the app's id, the last part of a reverse-DNS
// id). For an app MacTahoe draws badly (Steam's is cut at the tile's edge), or one it lacks.
// Read live: an icon put there shows at once. With MacTahoe off they still do.
Singleton {
id: root

Expand All @@ -24,19 +29,52 @@ Singleton {
function file(kind, name) {
return name && have[kind + "/" + name] ? "file://" + dir + "/" + kind + "/scalable/" + name + ".svg" : "";
}
// ---- your own icons (see above) ----
readonly property string ownDir: Config.home + "/.local/share/angelos/icons/dock"
// name (without .svg / .png) -> file url; an .svg wins over a .png of the same name
readonly property var own: {
const out = {};
for (let i = 0; i < ownModel.count; i++) {
const f = String(ownModel.get(i, "fileName"));
const m = f.match(/^(.+)\.(svg|png)$/i);
if (m && (!out[m[1]] || m[2].toLowerCase() === "svg"))
out[m[1]] = "file://" + ownDir + "/" + f;
}
return out;
}
FolderListModel {
id: ownModel
folder: "file://" + root.ownDir
nameFilters: ["*.svg", "*.png", "*.SVG", "*.PNG"]
showDirs: false
}
// one of the names: your icon, else MacTahoe's (while it is on)
function pick(kind, names) {
for (const n of names)
if (own[n])
return own[n];
if (!ready || !Config.mac.dockMacIcons)
return "";
for (const n of names) {
const f = file(kind, n);
if (f)
return f;
}
return "";
}
// the icon of a Dock item, "" when MacTahoe has none: its .desktop icon, its id, the last
// part of a reverse-DNS id (org.gnome.Nautilus -> nautilus)
function forItem(it) {
if (!ready || !Config.mac.dockMacIcons || !it)
if (!it)
return "";
if (it.kind === "apps")
return file("apps", "view-app-grid");
return pick("apps", ["view-app-grid"]);
if (it.kind === "settings")
return file("apps", "preferences-system");
return pick("apps", ["preferences-system"]);
if (it.kind === "downloads")
return file("places", "folder-download");
return pick("places", ["folder-download"]);
if (it.kind === "trash")
return file("places", it.icon === "user-trash-full" ? "user-trash-full" : "user-trash");
return pick("places", [it.icon === "user-trash-full" ? "user-trash-full" : "user-trash"]);
const out = [];
const add = n => {
n = String(n || "").replace(/\.desktop$/, "");
Expand All @@ -53,12 +91,7 @@ Singleton {
if (n.indexOf(".") > 0 && tail.length > 2)
add(tail);
}
for (const n of out) {
const f = file("apps", n);
if (f)
return f;
}
return "";
return pick("apps", out);
}

function refresh() {
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ single file of Apple's. Pick it in the installer, in the wizard (*"Coming from a
- **The Dock.** A Liquid Glass slab: pinned apps, *Applications*, recent ones, **minimized windows**, Downloads, Trash.
A dot under running apps, a right-click menu with windows and `.desktop` actions, **magnification** like on a Mac,
auto-hide. Icons from [MacTahoe](https://github.com/vinceliuice/MacTahoe-icon-theme) (GPL-3.0, pinned release,
sha256-checked).
sha256-checked); your own icons in `~/.local/share/angelos/icons/dock/` win over it.
- **Minimize.** niri can't minimize; angelOS can: the window goes to a hidden workspace and **its snapshot lands on the
right of the Dock**. The yellow light, *Window → Minimize*, `⌘M`, or `angelos macMinimize`; back with a click on the
snapshot, the icon, Alt+Tab or the overview.
Expand Down
2 changes: 1 addition & 1 deletion README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ niri: окна — колонки на бесконечной горизонта
- **Dock.** Плита Liquid Glass: закреплённые, *Программы*, недавние, **свёрнутые окна**, «Загрузки», «Корзина».
Точка под запущенными, меню по правой кнопке с окнами и действиями `.desktop`, **увеличение** как на Mac,
автоскрытие. Иконки [MacTahoe](https://github.com/vinceliuice/MacTahoe-icon-theme) (GPL-3.0, закреплённый релиз,
проверка sha256).
проверка sha256); свои значки в `~/.local/share/angelos/icons/dock/` важнее неё.
- **Сворачивание.** niri не умеет сворачивать — angelOS умеет: окно уходит на скрытый стол, **снимок ложится справа в
Dock**. Жёлтый светофор, *Окно → Свернуть*, `⌘M` или `angelos macMinimize`; назад — кликом по снимку, по иконке,
в Alt+Tab или в обзоре.
Expand Down