macOS menü çubuğunda duran kişisel durum panosu.
Kotanı, namaz vaktini, odağını, takvimini, sağlığını ve ödemelerini tek pencerede topla. Dock'ta ikon bırakmaz.
English · Türkçe
macOS 14+ · MIT Lisansı
- Öne çıkanlar
- Hızlı başlangıç
- Menü çubuğu
- Modüller
- Araçlar
- Bildirimler
- Gizlilik: uygulama ne okur?
- Güncelleme ve yayın
- Kod imzası
- Geliştirme
- Hakkında
- Tek pencere, yedi sekme: Bugün, Odak, Kotalar, İbadet, Takvim, Sağlık, Ödemeler.
- Modüler: Kapattığın modülün veri kaynağı ve bildirimleri de durur.
- Kotalar: Claude, Codex ve Grok kullanımını menü çubuğundan izle.
- Namaz vakitleri ve takibi: Sıradaki vakit, günlük sayı ve kesintisiz seri.
- Otomatik odak ölçümü: Tarayıcı adresi okunmaz, izin istemez.
- İki yardımcı araç:
yt-dlptabanlı İndirici ve Portlar. - Türkçe ve İngilizce arayüz; dil anında değişir.
- Sandbox'sız, yerel çalışır; veriler Mac'inde kalır.
Hazır kurulum Releases üzerindeki Hal-1.0.0.dmg dosyasıdır.
- DMG'yi aç, Hal'i Applications klasörüne sürükle.
- İlk açılış: Sistem Ayarları → Gizlilik ve Güvenlik → Yine de Aç.
macOS 14+ · Apple Silicon ve Intel. Paket ad-hoc imzalıdır, notarize değildir.
Depodan derlemek geliştirme yoludur:
./build.sh
open Hal.app./build.sh --dmg aynı derlemeyi dist/Hal-1.0.0.dmg olarak paketler ve yanına SHA-256 yazar. Projedeki Hal.app geliştirme sertifikasıyla imzalı kalır. Hal.app, .build ve dist/ depoya girmez.
Adlandırma: Görünen ad Hâl'dir. Dosya adı, bundle kimliği ve veri klasörü Türkçe karaktersiz Hal kullanır:
| Ne | Değer |
|---|---|
| Uygulama | Hal.app |
| Bundle kimliği | dev.sungur.Hal |
| Veri klasörü | ~/Library/Application Support/Hal |
Marka: Sağa açılan bir gösterge halkası ve içindeki konum noktası. Kaynak: Resources/Icons/hal.svg. Menü çubuğundaki çizim: Sources/BrandIcons.swift.
İlk açılışta Mac'in dili kullanılır: sistem dili Türkçe ise Türkçe, değilse İngilizce. Ayarlar › Genel › Dil'den Sistem, Türkçe veya English seçilebilir; seçim hemen uygulanır, yeniden açmak gerekmez.
- Tarih ve gün adları seçilen dile uyar. Saat 24 saat biçimindedir.
- Dosyaya ve ağa giden tarih anahtarları POSIX biçimindedir.
- Sparkle'ın güncelleme pencereleri İngilizce kalır.
- Marka adları (Claude, Codex, Grok, Hâl, Always Wake) çevrilmez.
İlk açılışta yalnızca Hâl ikonu durur. Kota ve namaz ikonları Ayarlar › Görünüm'den tek tek açılır.
- Açma: Tıklayınca detay penceresi açılır; üzerine gelmek açmaz.
- Hedef: Varsayılan hedef Bugün panosudur. Ayarlar › Görünüm › Tıklama'dan "Tıklanan öğenin detayı" seçilirse ikon kendi sayfasını açar. Genel Hâl ikonu her durumda panoya gider. Pano kapalıysa her ikon temsil ettiği sayfaya düşer.
- Gezinme: Pencere açıkken başka bir ikona tıklamak onu oraya taşır. Son bakılan sekme hatırlanır; yenileme seçimi değiştirmez.
- Sabitleme: Başlıktaki raptiye pencereyi sabitler, dışarı tıklayınca kapanmaz.
Esckapatır. - Sağ tık menüsü: Yenile, ayarlar, araçlar, modlar, çıkış. İkinci ekran kopyası isteğe bağlıdır.
- Tek ikonda toplama: "Kotaları tek ikonda topla" açıksa kota ikonları tek özette birleşir ve en çok yeri kalan kotayı gösterir. Namaz saati ayrı ikon olarak kalır.
- Durum işaretleri: Oturum yoksa
–, okuma hatasında!görünür. Yüzde yoksa sayı üretilmez.
Yedi sekme vardır. Bugün kapatılamaz; diğerleri Ayarlar › Görünüm'den kapatılabilir. Kapanan modül yalnızca gizlenmez, veri kaynağı ve bildirimleri de durur. Sekmeler yatay kayar. Dörtten fazla modül açıkken başlık yalnızca seçili sekmede görünür.
Açık modüllerin panoya verdiği satırları toplar: derin çalışma, en boş kota, dolu veya okunamayan kotalar, sıradaki vakit, kılınan namaz ve seri, su ve protein. Satır; ikon, başlık, değer ve gerekirse tek satır açıklamadan oluşur. İlerleme çubuğu yoktur, oran değerin kendisindedir (çubuklar modül sayfalarındadır). Satıra tıklayınca ilgili sekmeye gidilir.
- Hangi satırların görüneceği Ayarlar › Görünüm › Bugün panosunda göster altından seçilir. Satırı gizlemek modülü kapatmaz; sekme, ölçüm ve bildirimler yerinde kalır. Gizlenen satır akşam gün özetinde de yer almaz.
- Liste, o an ekranda olanlarla sınırlı değildir. Bir kez görülen satır
hal.summaryCatalogkaydında kalır; modül kapanınca satırları listeden düşer. Başlığı gün içinde değişen satırlar sabit adla durur ("Sıradaki vakit", "Sonraki olay"). - Hafta: Son yedi günün odak, antrenman, namaz ve beslenme özetini gösterir. Yeni veri toplamaz.
- Gün Sonu: Son dört günün namaz, ilaç ve antrenman işaretlerini tek listede toplar. Bilgisayara geçilmeyen gün buradan tamamlanır. Dünden açık işaret varsa pano satırı da oraya götürür. Bugünün eksiği akşam görünür. Pencere bilerek kısa tutulur; seriyi sonsuza dek geriye doldurmak ölçümü bozar.
- Günlük kayıtlar
~/Library/Application Support/Hal/daily.jsoniçindedir. Yapı gün → metrik sözlüğüdür ve 400 günlük geçmiş tutulur.
Öndeki uygulamanın adı focusApps listesindeyse ve Mac iki dakikadır boşta değilse süre kendiliğinden sayılır. Dilimler 30 saniyedir. Günlük hedef, o an sayılan uygulama, son yedi gün, haftalık toplam ve en iyi gün gösterilir. Tarayıcı adresi okunmaz; ölçüm izin istemez.
Claude, Codex ve Grok. Anahtarlar ilk kurulumda kapalıdır; CLI makinede olsa bile kotayı sen açarsın.
| Kaynak | Oturum | |
|---|---|---|
| Claude | api.anthropic.com/api/oauth/usage |
Anahtar Zinciri, "Claude Code-credentials" |
| Codex | chatgpt.com/backend-api/wham/usage |
~/.codex/auth.json |
| Grok | grok CLI fatura yanıtı | ~/.grok/auth.json |
- Grok: Haftalık sınır ve Grok Build bu faturadan okunur. Süre dolmak üzereyse aynı dosyadaki yenileme belirteciyle uzatılır ve dosyaya geri yazılır. Ön ödemeli bakiye ve yönetim anahtarı bu sayıya karışmaz.
- Oturum yoksa: Claude veya Grok için pencereden Terminalde giriş açılır. Sohbet, oturum dizini ve tarayıcı çerezi okunmaz; Chrome Safe Storage sorulmaz.
- Özel kaynak: Ayarlar'dan elle, komutla veya URL ile özel kota kaynağı eklenebilir.
- Yüzde yoksa uydurulmaz.
Vakitler ve namaz takibi. Konum, hesap yöntemi ve namaz takibi anahtarı Ayarlar › İbadet altında, aynı başlıktadır.
- Şehir listeden seçilir. Konum izni kendiliğinden istenmez. Koordinat seçilmeden vakit istenmez;
0,0konum sayılmaz. - Vakitler
api.aladhan.comüzerinden gelir. Türkiye'de Diyanet ikindi için erken (Şafii) hesabı kullanır; Hanefi yaklaşık bir saat sonradır. - Namaz sekmesinde vakit işaretlenir. Pano gün içi sayıyı ve kesintisiz gün serisini gösterir. Seri, bugün henüz tamamlanmadıysa dünden geriye sayar.
- Menü çubuğu ikonu, açıksa, sıradaki vaktin saatini gösterir. Güneş de sıradaki vakit olabilir.
Bugünün kalan olayları ve panoda sonraki olay. İzin yalnızca Ayarlar'daki veya sayfadaki düğmeyle istenir. İzin yokken EventKit'e gidilmez ve sayfa boş kalır.
Dört bölüm: Genel, Antrenman, İlaç ve Takviye, Beslenme.
- Su ve protein isteğe bağlıdır. Hızlı giriş hem Bugün satırında hem kendi sayfasındadır.
- Antrenman: Haftanın her gününe bir plan etiketi, tek dokunuşla "yapıldı", haftalık ilerleme ve kesintisiz seri. Boş veya "Dinlenme" günleri antrenman sayılmaz, seriyi de kırmaz. Set, tekrar ve ağırlık kaydı yoktur.
- İlaç ve takviye: Her öğeye birden çok doz saati verilir; her saat ayrı kayıttır. Saati geçmiş ve işaretlenmemiş doz "geçti" diye vurgulanır. Bildirim doz saatinde gider, alınmış doza gitmez.
Abonelik, fatura ve taksit. Yenileme tarihi bir kez girilir; sonraki tarihler kayıt değiştirilmeden hesaplanır, uygulama günlerce kapalı kalsa da tarih doğru kalır. Yıllık ödemeler aylık toplama on ikiye bölünerek girer. Yenilemeden seçilen gün sayısı kadar önce, sabah 09:00'da bildirim gider. Tek seferlik harcama takibi yoktur.
Pano modülü değildirler. Ayarlar › Araçlar'dan ve menü çubuğu ikonuna sağ tıklayınca açılırlar.
yt-dlp sarmalayıcısı. Bağlantıyı yapıştır, MP3 veya MP4 seç, klasör seç (seçilmezse masaüstü kullanılır). İlerleme canlı okunur ve iptal edilebilir. Hata, yt-dlp'nin kendi mesajıdır. yt-dlp veya ffmpeg yoksa kurulum komutu gösterilir; kurulum yapılmaz.
Otomatik güncelleme: Günde bir kez, ilk indirmeden önce yt-dlp güncellenir. İndirme çıkarıcı hatasıyla düşerse (Unable to extract, nsig extraction failed, HTTP Error 403) bir kez zorla güncellenip yeniden denenir. "Video unavailable" gibi hatalarda güncelleme denenmez. Yöntem kuruluma göredir:
| Kurulum | Komut |
|---|---|
| Tek dosya derleme | yt-dlp -U |
| Homebrew | brew upgrade |
| Python betiği | pipx upgrade veya pip install -U |
Dinleyen TCP portlarını ve tutan programı listeler (lsof).
- "Yalnızca benim süreçlerim" varsayılan açıktır.
- "Geliştirici" kapsülü varsayılan kapalıdır; açılınca yalnızca geliştirici sunucuları kalır.
- Durdurma (
kill): süreç seninse önce sorar veSIGTERMgönderir. Süreç dinlemeye devam ederse sonraki onaySIGKILL'dir. - Sistem ve başka kullanıcının süreçleri "sistem" diye durur, düğme yoktur.
Ayarlar › Bildirimler. İzin, bir bildirim açıkken istenir. Her olay bir kez bildirilir.
- Vakit: vakit girince veya 5, 10, 15, 30 dakika önce
- Kota sıfırlanınca
- Kota eşiği aşılınca
- Gün sonu hatırlatması: varsayılan 12:00, kapatılabilir; tıklayınca Gün Sonu açılır
- Gün özeti: seçilen saatte panoyu bildirir
- İlaç dozu ve abonelik yenilemesi: ilgili kayıt varken
Diğer bildirimler kapalı gelir. Modüller ModuleAlerts.swift içinde Alert üretir; zamanlama ve tekrar engelleme NotificationService içindedir.
- Temizlik modu: Ekranı kalkanla kapatır; bu kısım izinsiz de çalışır. Sistem kısayollarının da kilitlenmesi için Erişilebilirlik ve Giriş İzleme gerekir. İzin Ayarlar'daki düğmeyle istenir; her açılışta Sistem Ayarları'na yönlendirmez.
- Always Wake: Açıkken Mac boşta uyku ve ekran uykusuna geçmez. Kapak kapanırsa sistem yine uyuyabilir.
- Açılışta başlat: Yalnızca Ayarlar'daki anahtar değişince güncellenir.
Uygulama sandbox'lı değildir. Okuduğu her şey burada:
| Ne | Nereden / ne zaman | Not |
|---|---|---|
| Claude kotası | Anahtar Zinciri, "Claude Code-credentials" | Sohbet okunmaz |
| Codex kotası | ~/.codex/auth.json |
Oturum dizini ve sohbet gövdesi okunmaz |
| Grok kotası | ~/.grok/auth.json |
Belirteç yenilenince aynı dosyaya yazılır. Çerez ve console.x.ai yönetim anahtarı istenmez |
| Namaz vakitleri | Şehir seçilince api.aladhan.com |
Koordinat seçilmeden istek yapılmaz |
| Takvim | Düğmeye basılınca EventKit | İzin yokken erişilmez |
| Temizlik kısayol kilidi | Erişilebilirlik ve Giriş İzleme | Yalnızca Ayarlar'daki düğmeyle |
| Günlük kayıtlar | ~/Library/Application Support/Hal/ |
Eski secrets.json kota yolunun parçası değildir |
İndirilen kopya yeni sürümü kendisi sorar; kurulum kendiliğinden yapılmaz. Denetleme günde bir kez yapılır; Ayarlar › Hakkında › Güncellemeleri denetle ile de istenir.
- Kanal:
https://raw.githubusercontent.com/tahsingibi/hal/main/appcast.xml. Uygulama repodaki bu dosyaya bakar. Zip, GitHub Release’e konur; indirme adresiappcast.xmliçindekienclosuresatırındadır. Kanal boşken uygulama güncel der. - Sparkle: Paket Sparkle 2.10.0 ile gelir.
build.sharşivi indirir ve SHA-256 ile doğrular. - Anahtarlar: Açık anahtar
SUPublicEDKeyiçindedir. Gizli anahtar login anahtarlığındadır (hesap adıHal) ve repoya girmez. Anahtar silinirse bu sürümden sonrakilere güncelleme imzalanamaz. - Bu sürüm: GitHub Release üzerindeki DMG. Kanal boşken uygulama güncel der.
- Sonraki uygulama içi güncelleme:
scripts/publish-update.shyalnızca Developer ID Application sertifikası varken zip üretir. Zip GitHub Release'e konur, adresiappcast.xmliçindekienclosuresatırına yazılır. Noter içinNOTARY_KEYCHAIN_PROFILEgerekir.CFBundleVersionkatı biçimde artar. - Sürekliliği korumak: Bundle kimliği değişmez;
~/Library/Application Support/Halve tercihler yerinde kalır.
Not: Uygulama içi güncellemeyi taşıyan ilk zip, Sparkle'ı içeren sürüm olmalıdır.
CFBundleVersionher yayında katı biçimde artar.
build.sh, anahtar zincirindeki ilk Apple Development veya Developer ID sertifikasıyla imzalar. Kimlik HAL_SIGN_IDENTITY ile değiştirilebilir.
- Sertifika yoksa ad-hoc imzalanır. Ad-hoc imzada her derleme yeni bir kod kimliği üretir; Anahtar Zinciri ve Erişilebilirlik izinleri her seferinde sıfırlanır. Sabit bir geliştirici sertifikasıyla izin bir kez verilir.
./build.sh --dmguygulamayıdistaltına kopyalar, bu kopyayı ad-hoc imzalar vedist/Hal-<sürüm>.dmgyazar. ProjedekiHal.appgeliştirme sertifikasıyla kalır.- İmza kimliği ilk kez değişince macOS bir defalığına Anahtar Zinciri erişimi sorar; Her Zaman İzin Ver seçilir. Erişilebilirlik listesindeki eski kayıt da geçersizleşir; kayıt silinip yeniden eklenir.
Sekmeler ve menü çubuğu ikonları Sources/Modules.swift içindeki ModuleKind kaydından türer. today kapatılamaz. İndirici ve Portlar bu kaydın dışındadır.
Yeni modül eklemek için:
ModuleKindiçine bircase,titlevesymbolAppStore.pages(for:)içinde sayfalarAppStore.summaryLines(for:)içinde pano satırlarıDetailPopoverViewiçinde sayfanın görünümü- Veri kaynağı ve gerekirse
ModuleAlerts.swiftiçindeAlert
Notlar:
- Seçim
DetailTargetile taşınır ve"usage/claude"biçiminde saklanır. Eski kayıtlar ("prayer", düz kota kimliği) hâlâ çözülür. Her modülün son bakılan sayfası ayrı hatırlanır. - Ayarlar penceresi kenar çubuğu kullanır: Uygulama (Genel, Görünüm, Bildirimler), Modüller, Araçlar (İndirici, Portlar) ve Hakkında.
- Detay penceresinin yüksekliği seçili sayfanın doğal boyundan gelir ve ekrana göre en fazla 440 pt ile sınırlanır. Sınırı aşan sayfa kendi içinde kayar.
- Paketin geliştirme bölgesi
trolarak işaretlidir; bu, çalışma anındaki dili kilitlemez.
Yazan: Tahsin Sungur · sungur.dev · @tahsingibi
Lisans: MIT