steamscope.sh: Универсальный лаунчер для Steam на Linux

🎮 Зачем это нужно Запуск игр через Steam на Linux - это часто «танцы с бубном»: разные движки требуют разных флагов, под AMD и NVIDIA нужны разные переменные окружения, а инструменты вроде Gamescope и MangoHud нужно вручную встраивать в команду запуска. Решение: steamscope.sh - скрипт-обёртка, который: ✅ Автоматически определяет видеокарту (AMD/NVIDIA) и применяет нужные оптимизации ✅ Поддерживает флаги под движки: Source, Unreal, Unity ✅ Интегрирует Gamescope, Gamemode, MangoHud, FSR одной командой ✅ Работает как %command% в настройках запуска Steam ✅ Не ломает стандартный запуск - всё опционально 💡 Скрипт не заменяет Proton или Steam - он делает их работу предсказуемой и настраиваемой. ...

07 апр. 2026 · 5 минут · 976 слов · Potato Energy Team, ponfertato

Heltec V4: Своя сеть без интернета. Часть 1: Зачем это нужно?

Представь: ты в походе, на даче, в районе с плохой связью - или просто хочешь общаться без операторов, облаков и слежки. Решение: децентрализованная сеть на базе LoRa - радиосвязь с низким энергопотреблением и дальностью до нескольких километров. 💡 Это не замена интернету. Это «интернет для экстренных случаев, приватности и экспериментов». Для кого эта серия: ✅ Для друзей и родственников, которые хотят понять «а зачем мне это» ✅ Для новичков в радио/электронике (не нужно паять!) ✅ Для тех, кто ценит приватность и независимость от инфраструктуры 📡 Что такое LoRa и mesh-сети (простыми словами) LoRa (Long Range) Параметр Значение Дальность 1–10 км в городе, до 50+ км на прямой видимости Потребление ~100 мА при передаче, ~10 мА в ожидании Скорость 0.3–50 кбит/с (только текст, координаты, небольшие данные) Частота 433 МГц (РФ), 868 МГц (ЕС), 915 МГц (США) Простая аналогия: ...

07 апр. 2026 · 5 минут · 968 слов · Potato Energy Team, ponfertato

HyperOS: Удаление Chrome из второго пространства

Проблема После перехода на HyperOS (POCO, Xiaomi) ссылки из приложений (Telegram, WhatsApp и др.) открываются не в основном аккаунте Chrome, а в клонированном - даже если в настройках системы выбран основной браузер. Симптомы: Клик по ссылке → открывается Chrome второго пространства В настройках «Приложения по умолчанию» выбран основной Chrome Сброс настроек не помогает Причина: HyperOS приоритизирует клонированные приложения при обработке интентов, игнорируя выбор пользователя. 💡 Проблема воспроизводится на MIUI 14 / HyperOS 1.0+ с включённой функцией «Клонирование приложений» / «Второе пространство». ...

20 мар. 2026 · 3 минуты · 573 слова · Potato Energy Team, ponfertato

Obtainium: Обновления приложений из первоисточников

Obtainium - менеджер обновлений для Android, который скачивает приложения напрямую из репозиториев разработчиков (GitHub, GitLab, Codeberg, F-Droid), минуя сторонние каталоги. Зачем нужен: Получать обновления быстрее, чем в Google Play / F-Droid Избегать трекеров и рекламы из сторонних магазинов Контролировать, какие версии устанавливаются (stable, beta, pre-release) Автоматизировать обновления без ручного подтверждения 💡 Obtainium не хранит приложения - только указывает, где их скачать. Вы всегда знаете источник. 📦 Установка Скачать F-Droid (рекомендуется) GitHub Releases Настройка при первом запуске Открыть Obtainium → разрешить «Установка из неизвестных источников» (только для Obtainium) Настройки → Метод установки → выбрать Shizuku (если настроен) или Системный установщик Настройки → Проверка обновлений → задать интервал (рекомендуется: 6–24 часа) Опционально: ...

20 мар. 2026 · 4 минуты · 697 слов · Potato Energy Team, ponfertato

Shizuku: Системные возможности Android без root

Shizuku - сервис, который даёт приложениям доступ к системным API Android без root-прав. Работает через ADB (Android Debug Bridge), используя привилегии shell. Зачем нужен: Устанавливать приложения без подтверждения (Obtainium, SAI) Замораживать/размораживать приложения (Ice Box, Hail) Управлять разрешениями (AppOps, Permission Pilot) Менять настройки системы (DarQ, Naptime) Удалять системные приложения (Canta, AppManager) 💡 Shizuku не даёт полный root - только ограниченный доступ к системным функциям. Безопаснее, чем рут, но мощнее, чем обычное приложение. ...

20 мар. 2026 · 4 минуты · 696 слов · Potato Energy Team, ponfertato

Docker WSL: Очистка и оптимизация дисков

Docker Desktop на Windows использует WSL2 с динамическими VHDX-файлами. Они растут, когда добавляются образы/контейнеры, но не сжимаются автоматически при удалении. Результат: диск C: заполняется, хотя docker system df показывает свободное место. 💡 Решение: ручная оптимизация VHDX через PowerShell + утилита Docker. 📦 Скрипт очистки Создание файла # Файл: $HOME\Scripts\docker-clear-wsl.ps1 $script = @' $LOCAL = "$env:LOCALAPPDATA\Docker\wsl" $VHD1 = Join-Path $LOCAL "disk\docker_data.vhdx" $VHD2 = Join-Path $LOCAL "main\ext4.vhdx" # 1. Очистка Docker docker system prune -f # 2. Возврат места через официальный инструмент docker run --rm --privileged --pid=host docker/desktop-reclaim-space docker rmi docker/desktop-reclaim-space -f # 3. Остановка Docker Desktop Get-Process -Name "Docker Desktop","com.docker.backend","com.docker.build" ` -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue # 4. Выключение WSL wsl --shutdown # 5. Оптимизация VHDX-файлов (сжатие) if (Test-Path $VHD1) { Optimize-VHD -Path $VHD1 -Mode Full } if (Test-Path $VHD2) { Optimize-VHD -Path $VHD2 -Mode Full } # 6. Запуск Docker Desktop Start-Sleep -Seconds 2 Start-Process -FilePath "$env:ProgramFiles\Docker\Docker\Docker Desktop.exe" ` -ErrorAction SilentlyContinue '@ $script | Out-File -FilePath "$HOME\Scripts\docker-clear-wsl.ps1" -Encoding UTF8 Запуск # От имени Администратора (требуется для Optimize-VHD) powershell.exe -ExecutionPolicy Bypass -File "$HOME\Scripts\docker-clear-wsl.ps1" 🔍 Как это работает Шаг Команда Что делает 1 docker system prune -f Удаляет остановленные контейнеры, неиспользуемые образы, кэш 2 docker/desktop-reclaim-space Официальный инструмент Docker для возврата места в WSL2 3 Stop-Process Корректно останавливает Docker Desktop (иначе VHDX заблокирован) 4 wsl --shutdown Полностью выключает WSL, освобождая файлы для оптимизации 5 Optimize-VHD -Mode Full Сжимает VHDX-файлы, возвращая место на хосте 6 Start-Process Запускает Docker Desktop обратно Почему именно так: ...

17 мар. 2026 · 3 минуты · 614 слов · Potato Energy Team, ponfertato

GitHub CLI: Массовое удаление старых задач

В долгосрочных проектах накапливаются устаревшие задачи: баги для старых версий, фичи, которые уже не актуальны, тестовые тикеты. Ручное удаление - долго и скучно. Этот скрипт автоматически находит и удаляет (или помечает) старые задачи по заданным меткам. 💡 Скрипт использует dry-run по умолчанию - сначала покажет, что будет удалено, без реального удаления. 📦 Скрипт: delete-issues.sh Полный код #!/bin/bash # Удаление старых GitHub Issues по меткам и дате # Использование: ./delete-issues.sh [--execute] set -euo pipefail # === НАСТРОЙКИ === REPO="owner/repo" # Репозиторий в формате owner/repo LABELS='label1,label2,label3' # Метки для фильтрации (через запятую) CUTOFF="2025-12-31T23:59:59Z" # Удалять задачи, созданные ДО этой даты DRY_RUN=true # true = только показать, false = реально удалить # Парсинг аргументов if [[ "${1:-}" == "--execute" ]]; then DRY_RUN=false echo "⚠️ Режим: РЕАЛЬНОЕ УДАЛЕНИЕ" else echo "ℹ️ Режим: DRY RUN (ничего не будет удалено)" fi echo "🔍 Поиск задач в $REPO с метками: $LABELS, созданных до $CUTOFF" echo "---" # Получение и фильтрация задач gh issue list --repo "$REPO" --state all --limit 1000 \ --json number,title,createdAt,labels,url | \ jq -r --arg labels "$LABELS" --arg cutoff "$CUTOFF" ' ($labels | split(",")) as $label_array | .[] | select(.createdAt < $cutoff) | select(.labels | map(.name) | any(. as $l | $label_array | index($l))) | "\(.number)|\(.title)|\(.url)" ' | \ while IFS='|' read -r number title url; do if [[ "$DRY_RUN" == "true" ]]; then echo "[DRY RUN] ##$number - $title" echo " $url" else echo "🗑 Удаление ##$number - $title" gh issue delete "$REPO" "$number" --yes sleep 1 # Небольшая пауза, чтобы не превысить rate limit fi done echo "---" echo "✅ Готово" Установка зависимостей # GitHub CLI # Windows (winget): winget install GitHub.cli # Linux (Ubuntu/Debian): sudo apt install gh # macOS (Homebrew): brew install gh # Авторизация gh auth login # jq (JSON-процессор) # Windows (winget): winget install jq.jq # Linux: sudo apt install jq # macOS: brew install jq Запуск # Сделать скрипт исполняемым chmod +x delete-issues.sh # DRY RUN (безопасный режим - только показать) ./delete-issues.sh # РЕАЛЬНОЕ УДАЛЕНИЕ (добавить флаг --execute) ./delete-issues.sh --execute 🔍 Как это работает Пошаговый разбор Шаг Команда Что делает 1 gh issue list --json ... Получает задачи в формате JSON с полями: номер, заголовок, дата, метки, ссылка 2 jq -r ... Фильтрует: дата < cutoff И есть хотя бы одна из указанных меток 3 while read ... Обрабатывает каждую найденную задачу 4 gh issue delete Удаляет задачу (только если DRY_RUN=false) Логика jq-фильтра ($labels | split(",")) as $label_array | # Разбиваем строку меток в массив .[] | # Для каждой задачи select(.createdAt < $cutoff) | # Только если создана до cutoff select( .labels | map(.name) | # Получаем список имён меток any(. as $l | $label_array | index($l)) # Есть ли совпадение с нашими метками ) | "\(.number)|\(.title)|\(.url)" # Форматируем вывод Почему так: ...

17 мар. 2026 · 5 минут · 889 слов · Potato Energy Team, ponfertato