/ flake.nix
flake.nix
1 { 2 inputs = { 3 nixpkgs.url = "nixpkgs/nixos-unstable"; 4 utils.url = "github:numtide/flake-utils"; 5 nix-filter.url = "github:numtide/nix-filter"; 6 }; 7 outputs = { self, nixpkgs, utils, nix-filter }: 8 let 9 version = "2.1.1"; 10 systemDependent = with utils.lib; 11 eachSystem allSystems (system: 12 let pkgs = nixpkgs.legacyPackages.${system}; 13 in with nix-filter.lib; { 14 devShell = pkgs.mkShell { buildInputs = with pkgs; [ nim2 ]; }; 15 packages.webdocs = let 16 nim-jester = pkgs.stdenv.mkDerivation { 17 name = "nim-jester-0.6.0"; 18 src = pkgs.fetchFromGitHub { 19 owner = "dom96"; 20 repo = "jester"; 21 rev = "v0.6.0"; 22 sha256 = 23 "sha256-F/zWWGipJ4lBE3njceXn5HBFTYEXB4l2rk6+FfqqZTQ="; 24 }; 25 dontBuild = true; 26 installPhase = '' 27 mkdir -p $out/lib 28 cp -r jester.nim jester $out/lib 29 ''; 30 }; 31 nim-httpbeast = pkgs.stdenv.mkDerivation { 32 name = "nim-httpbeast-0.4.1"; 33 src = pkgs.fetchFromGitHub { 34 owner = "dom96"; 35 repo = "httpbeast"; 36 rev = "v0.4.1"; 37 sha256 = 38 "sha256-8ncCj94UeirSevgZP717NiNtecDyH5jHky+QId31IvQ="; 39 }; 40 dontBuild = true; 41 installPhase = '' 42 mkdir -p $out/lib 43 ls -alh 44 cp -r src/* $out/lib 45 ''; 46 }; 47 in pkgs.stdenv.mkDerivation { 48 pname = "nimyaml-docs-server"; 49 inherit version; 50 src = filter { 51 root = ./.; 52 exclude = 53 [ ./flake.nix ./flake.lock ./tools ./bench ./.github ]; 54 }; 55 configurePhase = '' 56 mkdir -p docout/api 57 for srcFile in yaml/*.nim; do 58 echo "generate index for $srcFile" 59 ${pkgs.nim2}/bin/nim doc --index:only --outdir:docout/api/yaml $srcFile 60 done 61 62 ( 63 cd doc 64 for rstFile in *.rst; do 65 ${pkgs.nim2}/bin/nim rst2html -o:../docout/''${rstFile%.rst}.html $rstFile 66 done 67 ${pkgs.nim2}/bin/nim c --nimcache:.cache rstPreproc 68 for txtFile in *.txt; do 69 ./rstPreproc -o:tmp.rst $txtFile 70 fn=$(basename -- "$txtFile") 71 ${pkgs.nim2}/bin/nim rst2html -o:../docout/''${fn%.txt}.html tmp.rst 72 rm tmp.rst 73 done 74 cp docutils.css style.css processing.svg github-mark-white.svg ../docout 75 ) 76 77 ${pkgs.nim2}/bin/nim doc -o:docout/api/yaml.html --docSeeSrcUrl:https://github.com/flyx/NimYAML/blob/${ 78 self.rev or "master" 79 } yaml 80 for srcFile in yaml/*.nim; do 81 bn=''${srcFile#yaml/} 82 ${pkgs.nim2}/bin/nim doc -o:docout/api/yaml/''${bn%.nim}.html --docSeeSrcUrl:https://github.com/flyx/NimYAML/blob/yaml/${ 83 self.rev or "master" 84 } $srcFile 85 done 86 ''; 87 buildPhase = '' 88 cat <<EOF >server/server_cfg.nim 89 proc shareDir*(): string = 90 result = "$out/share" 91 EOF 92 ${pkgs.nim2}/bin/nim c --stackTrace -p:"${nim-jester}/lib" -p:"${nim-httpbeast}/lib" --gc:refc --nimcache:.cache server/server 93 ''; 94 installPhase = '' 95 mkdir -p $out/{bin,share} 96 cp server/server $out/bin/nimyaml-docs-server 97 cp -rt $out/share docout/* 98 ''; 99 }; 100 }); 101 in systemDependent // { 102 nixosModule = { config, lib, pkg, ... }: 103 with lib; 104 let 105 cfg = config.services.nimyaml-webdocs; 106 webdocs = systemDependent.packages.${config.nixpkgs.system}.webdocs; 107 in { 108 options.services.nimyaml-webdocs = { 109 enable = mkEnableOption "NimYAML webdocs server"; 110 address = mkOption { 111 type = types.str; 112 default = "127.0.0.1"; 113 description = "Listen address"; 114 }; 115 port = mkOption { 116 type = types.int; 117 default = 5000; 118 description = "Listen port"; 119 }; 120 }; 121 config = mkIf cfg.enable { 122 systemd.services.nimyaml-webdocs = { 123 wantedBy = [ "multi-user.target" ]; 124 after = [ "network.target" ]; 125 serviceConfig.ExecStart = '' 126 ${webdocs}/bin/nimyaml-docs-server --address="${cfg.address}" --port=${ 127 toString cfg.port 128 }''; 129 }; 130 }; 131 }; 132 }; 133 }