let pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz") { }; dicts = rec { mkDict = let prefix = "https://raw.githubusercontent.com/wooorm/dictionaries/61016e00e276f9bf5e52cbc6c02a45f2e49b2c7e/dictionaries"; in { lang, dicSHA256, affSHA256 }: let dic = builtins.fetchurl { url = "${prefix}/${lang}/index.dic"; sha256 = dicSHA256; }; aff = builtins.fetchurl { url = "${prefix}/${lang}/index.aff"; sha256 = affSHA256; }; in pkgs.stdenv.mkDerivation { name = "songbooks-dict-${lang}"; builder = builtins.toFile "builder.sh" '' source $stdenv/setup install -dm755 $out/share/hunspell install -m644 ${dic} $out/share/hunspell/${lang}.dic install -m644 ${aff} $out/share/hunspell/${lang}.aff runHook postInstall ''; }; en = mkDict { lang = "en"; dicSHA256 = "1k4660ccwwpwac0rc7b8ih3vd24kxgvljkrakv2l1f72yfpw3bp2"; affSHA256 = "0yvc2fhc03y0y1gwjyb20ifcrxnzm3ama1fri9r5gna092fz3qca"; }; pt = mkDict { lang = "pt"; dicSHA256 = "1z0kfxv8m361xhp4zwdlsn2ib8q3rnljj0b2s4482alyxpd00h9x"; affSHA256 = "1ssj1g7qwh0lv3ajzvchwsfr7cgzrlqms28m1j3gm1y2avi50qhw"; }; fr = mkDict { lang = "fr"; dicSHA256 = "10p6jlk9j117mjd1z3dp3vfszcvxqha11kfvksqhvrq4ld9xwzbn"; affSHA256 = "0d6k608h7gm1za3vdq1fhlwqzz2zxg1z0bx1bfvi0spg4a2mn09p"; }; }; myHunspell = (pkgs.hunspellWithDicts (with dicts; [ en pt fr ])); in rec { utils = import ./utils.nix { pkgs = pkgs; src = pkgs.nix-gitignore.gitignoreSource [ ] ./.; baseName = "website"; }; jekyllEnv = pkgs.bundlerEnv { name = "jekyll-env"; gemfile = ./Gemfile; lockfile = ./Gemfile.lock; gemset = ./gemset.nix; }; subtasks = rec { hunspellCheck = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-hunspell"; buildInputs = baseAttrs.buildInputs ++ [ myHunspell ]; buildPhase = '' patchShebangs . ./spelling/check-spelling.sh "${subtasks.docs}" touch $out ''; }); assertContent = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-assert-content"; buildInputs = baseAttrs.buildInputs ++ [ pkgs.jq ]; buildPhase = '' patchShebangs . ./scripts/assert-content.sh "${subtasks.docs}/site.json" touch $out ''; }); docs = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-docs"; buildInputs = [ jekyllEnv ]; buildPhase = '' patchShebangs . jekyll build -d $out ''; }); }; test = utils.test [ utils.formatNix (utils.shellcheck null) (utils.fixme [ "utils.nix" "TODOs.org" "_pastebins/" "_posts/" "_tils/" "drafts/" "templates/" ]) subtasks.hunspellCheck subtasks.assertContent subtasks.docs ]; shell = pkgs.mkShell rec { name = "website-shell"; buildInputs = [ jekyllEnv myHunspell ]; }; publishScript = utils.overwritingPublishScript { docsDerivation = subtasks.docs; overwrite = true; }; fastPublishScript = utils.overwritingPublishScript { docsDerivation = subtasks.docs; overwrite = false; }; }