summary refs log blame commit diff
path: root/pkgs/servers/dict/dictd-db-collector.nix
blob: a0ad507c46644012cebe3bc1aa9b17453a713ba9 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11


                                                           
  






                                                       


   
















































                                                                                    
 







                                                                       





                     
                         
 
                    

                       
{ stdenv, lib, dict }:
({ dictlist, allowList ? [ "127.0.0.1" ], denyList ? [ ] }:

/*
  dictlist is a list of form
  [ { filename = /path/to/files/basename;
  name = "name"; } ]
  basename.dict.dz and basename.index should be
  dict files. Or look below for other options.
  allowList is a list of IP/domain *-wildcarded strings
  denyList is the same..
*/

let
  link_arguments = map
    (x: '' "${x.filename}" '')
    dictlist;
  databases = lib.concatStrings (map
    (x:
      "${x.name}  ${x.filename}\n")
    dictlist);
  allow = lib.concatStrings (map (x: "allow ${x}\n") allowList);
  deny = lib.concatStrings (map (x: "deny ${x}\n") denyList);
  accessSection = "
  access {
    ${allow}
    ${deny}
  }
";
  installPhase = ''
      mkdir -p $out/share/dictd
    cd $out/share/dictd
    echo "${databases}" >databases.names
    echo "${accessSection}" > dictd.conf
    for j in ${toString link_arguments}; do
      name="$(egrep '  '"$j"\$ databases.names)"
      name=''${name%  $j}
      if test -d "$j"; then
        if test -d "$j"/share/dictd ; then
          echo "Got store path $j"
          j="$j"/share/dictd
        fi
        echo "Directory reference: $j"
        i=$(ls "$j""/"*.index)
        i="''${i%.index}";
      else
        i="$j";
      fi
      echo "Basename is $i"
      locale=$(cat "$(dirname "$i")"/locale)
      base="$(basename "$i")"
      echo "Locale is $locale"
      export LC_ALL=$locale
      export LANG=$locale
      if test -e "$i".dict.dz; then
        ln -s "$i".dict.dz
      else
        cp "$i".dict .
        dictzip "$base".dict
      fi
      ln -s "$i".index .
      dictfmt_index2word --locale $locale < "$base".index > "$base".word || true
      dictfmt_index2suffix --locale $locale < "$base".index > "$base".suffix || true

      echo "database $name {" >> dictd.conf
      echo "  data $out/share/dictd/$base.dict.dz" >> dictd.conf
      echo "  index $out/share/dictd/$base.index" >> dictd.conf
      echo "  index_word $out/share/dictd/$base.word" >> dictd.conf
      echo "  index_suffix $out/share/dictd/$base.suffix" >> dictd.conf
      echo "}" >> dictd.conf
    done
  '';

in

stdenv.mkDerivation {
  name = "dictd-dbs";

  buildInputs = [ dict ];

  dontUnpack = true;
  inherit installPhase;
})