let niv-sources = import ./nix/sources.nix; pkgs = import niv-sources.nixpkgs { }; src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; utils-i18n = pkgs.callPackage ./nix/utils-i18n.nix { }; pkgs-next = pkgs.callPackage ./nix/nixpkgs-next.nix { }; jekyllEnv = pkgs.bundlerEnv { name = "jekyll-env"; gemfile = ./Gemfile; lockfile = ./Gemfile.lock; gemset = ./nix/gemset.nix; }; mktorrent-newer = pkgs.mktorrent.overrideAttrs (oldAttrs: { src = pkgs.fetchFromGitHub { owner = "Rudde"; repo = "mktorrent"; rev = "ea1fbf29d19f34a93f7d984c1ac29d6d08f1f508"; sha256 = "1cjq96qridpvqhphj3ljnhysnqkdck415wxaqy768r0rvzqq1ja4"; }; }); buildInputs = with pkgs; [ jekyllEnv pkgs-next.mdpo mktorrent-newer ffmpeg flac mediainfo mkvtoolnix-cli inkscape perl graphviz nixfmt git gitAndTools.git-annex shellcheck jq niv (hunspellWithDicts (with utils-i18n.dicts; [ en pt fr eo ])) ]; drv = name: buildPhase: pkgs.stdenv.mkDerivation { inherit src buildInputs buildPhase; name = "website-${name}"; phases = [ "unpackPhase" "buildPhase" ]; }; in rec { site = drv "site" '' export JEKYLL_ENV=production jekyll build -d $out --trace ''; test = drv "test" '' export JEKYLL_ENV=production ./tests.sh touch $out ''; shell = pkgs.mkShell { inherit buildInputs; name = "website-shell"; shellHook = '' echo 'Starting a live server with:' echo ' jekyll serve --future --livereload --trace' echo 'Server with feature flags:' echo ' jekyll serve --future --livereload --trace -c $(cfg podcast screencast direct-video music)' export JEKYLL_ENV=production cfg() { T="$(mktemp --suffix .yml)" cp _config.yml "$T" printf '\nflags:' >> "$T" for flag in "$@"; do printf '\n %s: true' "$flag" >> "$T" done echo "$T" } ''; }; publishScript = pkgs.writeShellScriptBin "publish.sh" '' set -eux SERVER_URL='root@euandre.org' REMOTE_PATH='/home/user-data/www/default/' OUT_DOCS='${site}' ${pkgs.openssh}/bin/ssh "$SERVER_URL" rm -rf "$REMOTE_PATH/*" ${pkgs.rsync}/bin/rsync -avzP \ --rsh="ssh -o StrictHostKeyChecking=no" \ "$OUT_DOCS/" \ "$SERVER_URL:$REMOTE_PATH" \ --delete ''; }