Ko'rinishidan zo'r o'zingizni configuration.nix file ichida shunchaki.
my.stacks.haskell.enable = true;
Sizda butun haskell dev stack bor uje, lsp, ide plugins hammasi.
Bu juda zo'r ko'rinadi toki tanqid qilmaguncha :) Ho'sh qanday tradeoff bo'ldi ?
Masalan my.* nix LSP resolve qilolmaydi. Demak bu custom optionlarni yoki eslab qolish kerak yoki harsafar search qilish kerak nu shunga o'xshagan tanqidan boshlandi hammasi.
Ammo modularga o'girishni dalshe davom etib ko'rdim.
Quyidagi hulosalarni oldim.
1.
options, config, mkIf, mkEnableOption. Bularni o'zi boilerplate. Chunki hamma modulda bularni bazilari yoki hammasi ishtrok etadi.2.
my.X.enable = true qildim ho'sh buni tog'ri config genrate qivotganini qanday trace qilaman ?3. Code to'liq decidable emas chunki bazi narsalar optionsda hal bo'lib ketgan va optionlar asosida mutatsiyalar ko'p.
4. Paketlarni pick qilish qiyin. Masalan ko'rib turganignizdak haskell stackda
pkgs.stack hoogle turibti. Ammo mandagi qaysidir hostga hoogle kerak bo'lmasa nima qilaman ? Undan tashqari bazi joylarda extraPackages option tashlab ketmasam keginchalik uniyam qo'shish kerak, yoki tashlab ketsam umuman ishlatmasligim mumkin.Ho'sh endi qanday yechim keldi ?
Shunchaki hamma o'ziga kerakli paketlarni qo'shib olgani afzal
++ va // bilan hal etish kerak.Masalan common narsalarni esa shunchaki bir modulga yeg'ib qo'ysa yetarli. Shunda mutatsiya ham yo'q custom optionlar ham yo'q.
Qaysidir hostga nimadir boshqacha kerak bo'lsa qo'lda yozib terib olaveradi.