1 { env, makeWrapper, stdenv, writeText, fetchurl, buildBowerComponents, fetchedGit, fetchedGithub, which, python36, pkgs, automake, autoconf, nodejs, nodePackages, git, cacert }:
4 basicsearch = stdenv.mkDerivation (fetchedGithub ./mediagoblin-plugin-basicsearch.json // rec {
5 phases = "unpackPhase installPhase";
12 packageOverrides = self: super: {
13 celery = super.celery.overridePythonAttrs(old: rec {
14 version = "3.1.26.post2";
15 src = self.fetchPypi {
18 sha256 = "5493e172ae817b81ba7d09443ada114886765a8ce02f16a56e6fac68d953a9b2";
23 billiard = super.billiard.overridePythonAttrs(old: rec {
25 src = self.fetchPypi {
28 sha256 = "02wxsc6bhqvzh8j6w758kvgqbnj14l796mvmrcms8fgfamd2lak9";
31 amqp = super.amqp.overridePythonAttrs(old: rec {
33 src = self.fetchPypi {
36 sha256 = "2dea4d16d073c902c3b89d9b96620fb6729ac0f7a923bbc777cb4ad827c0c61a";
39 kombu = super.kombu.overridePythonAttrs(old: rec {
41 src = self.fetchPypi {
44 sha256 = "e064a00c66b4d1058cd2b0523fb8d98c82c18450244177b6c0f7913016642650";
46 propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.anyjson ];
49 sqlalchemy = super.sqlalchemy.overridePythonAttrs(old: rec {
51 src = self.fetchPypi {
54 sha256 = "8b0ec71af9291191ba83a91c03d157b19ab3e7119e27da97932a4773a3f664a9";
57 tempita_5_3_dev = super.buildPythonPackage (fetchedGithub ./tempita.json // rec {
58 buildInputs = with self; [ nose ];
61 sqlalchemy_migrate = super.sqlalchemy_migrate.overridePythonAttrs(old: rec {
62 propagatedBuildInputs = with self; [ pbr tempita_5_3_dev decorator sqlalchemy six sqlparse ];
64 pasteScript = super.pasteScript.overridePythonAttrs(old: rec {
66 name = "PasteScript-${version}";
68 url = "mirror://pypi/P/PasteScript/${name}.tar.gz";
69 sha256 = "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0";
71 propagatedBuildInputs = with self; [ six paste PasteDeploy ];
75 python36.override { inherit packageOverrides; };
76 pythonEnv = python-pkgs: with python-pkgs; [
77 waitress alembic dateutil wtforms pybcrypt
78 pytest pytest_xdist werkzeug celery
79 kombu jinja2 Babel webtest configobj markdown
80 sqlalchemy itsdangerous pytz sphinx six
81 oauthlib unidecode jsonschema PasteDeploy
82 requests PyLD exifread
83 typing pasteScript lxml
95 python = overridePython.withPackages pythonEnv;
96 gmg = writeText "gmg" ''
97 #!${python}/bin/python
98 __requires__ = 'mediagoblin'
100 from pkg_resources import load_entry_point
102 if __name__ == '__main__':
104 load_entry_point('mediagoblin', 'console_scripts', 'gmg')()
109 socketsDir = "/run/mediagoblin";
110 varDir = "/var/lib/mediagoblin";
111 bowerComponents = buildBowerComponents {
112 name = "mediagoblin-bower-components";
113 generated = ./bower-packages.nix;
114 src = (fetchedGit ./mediagoblin.json).src;
116 mediagoblin = stdenv.mkDerivation (fetchedGit ./mediagoblin.json // rec {
119 aclocal -I m4 --install
122 export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt
123 export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
126 configureFlags = [ "--with-python3" "--without-virtualenv" ];
128 cp -a ${bowerComponents}/bower_components/* extlib
133 sed -i "s/registry.has_key(current_theme_name)/current_theme_name in registry/" mediagoblin/tools/theme.py
134 sed -i -e "s@\[DEFAULT\]@[DEFAULT]\nhere = $out@" mediagoblin/config_spec.ini
135 cp ${./ldap_fix.py} mediagoblin/plugins/ldap/tools.py
136 ln -s ${plugins.basicsearch}/basicsearch mediagoblin/plugins/basicsearch
137 find . -name '*.pyc' -delete
138 find . -type f -exec sed -i "s|$PWD|$out|g" {} \;
139 python setup.py build
142 cp ${gmg} $out/bin/gmg
143 chmod a+x $out/bin/gmg
145 buildInputs = [ makeWrapper git cacert automake autoconf which nodePackages.bower nodejs python ];
146 propagatedBuildInputs = [ python ];
148 paste_local = writeText "paste_local.ini" ''
153 pipeline = mediagoblin
156 use = egg:mediagoblin#app
157 config = %(here)s/mediagoblin_local.ini %(here)s/mediagoblin.ini
158 /mgoblin_static = %(here)s/mediagoblin/static
174 class = StreamHandler
180 format = %(levelname)-7.7s [%(name)s] %(message)s
183 use = egg:mediagoblin#errors
187 use = egg:waitress#main
188 unix_socket = ${socketsDir}/mediagoblin.sock
189 unix_socket_perms = 777
193 mediagoblin_local = writeText "mediagoblin_local.ini" ''
195 data_basedir = "${varDir}"
198 direct_remote_path = /mgoblin_static/
199 email_sender_address = "mediagoblin@tools.immae.eu"
201 #sql_engine = sqlite:///%(data_basedir)s/mediagoblin.db
202 sql_engine = ${env.psql_url}
204 email_debug_mode = false
205 allow_registration = false
206 allow_reporting = true
210 user_privilege_scheme = "uploader,commenter,reporter"
212 # We need to redefine them here since we override data_basedir
213 # cf /usr/share/webapps/mediagoblin/mediagoblin/config_spec.ini
214 workbench_path = %(data_basedir)s/media/workbench
215 crypto_path = %(data_basedir)s/crypto
216 theme_install_dir = %(data_basedir)s/themes/
217 theme_linked_assets_dir = %(data_basedir)s/theme_static/
218 plugin_linked_assets_dir = %(data_basedir)s/plugin_static/
221 base_dir = %(data_basedir)s/media/queue
223 [storage:publicstore]
224 base_dir = %(data_basedir)s/media/public
225 base_url = /mgoblin_media/
228 CELERY_RESULT_DBURI = ${env.redis_url}
229 BROKER_URL = ${env.redis_url}
230 CELERYD_CONCURRENCY = 1
233 [[mediagoblin.plugins.geolocation]]
234 [[mediagoblin.plugins.ldap]]
236 LDAP_SERVER_URI = 'ldaps://ldap.immae.eu:636'
237 LDAP_SEARCH_BASE = 'dc=immae,dc=eu'
238 LDAP_BIND_DN = 'cn=mediagoblin,ou=services,dc=immae,dc=eu'
239 LDAP_BIND_PW = '${env.ldap.password}'
240 LDAP_SEARCH_FILTER = '(&(memberOf=cn=users,cn=mediagoblin,ou=services,dc=immae,dc=eu)(uid={username}))'
241 EMAIL_SEARCH_FIELD = 'mail'
242 [[mediagoblin.plugins.basicsearch]]
243 [[mediagoblin.plugins.piwigo]]
244 [[mediagoblin.plugins.processing_info]]
245 [[mediagoblin.media_types.image]]
246 [[mediagoblin.media_types.video]]
250 stdenv.mkDerivation {
251 name = "mediagoblin_immae";
253 buildInputs= [ makeWrapper ];
254 propagatedBuildInputs = [ gst-libav gst-plugins-good gst-plugins-bad gst-plugins-ugly gstreamer ];
265 plugin_paths = builtins.concatStringsSep ":" (map (x: "${x}/lib") libpaths);
266 typelib_paths = "${gstreamer}/lib/girepository-1.0:${gst-plugins-base}/lib/girepository-1.0";
267 in writeText "build_mediagoblin_immae" ''
269 cp -a $mediagoblin $out
272 sed -i -e "/from gi.repository import GstPbutils/s/^/gi.require_version('GstPbutils', '1.0')\n/" mediagoblin/media_types/video/transcoders.py
273 wrapProgram bin/gmg --prefix PYTHONPATH : "$out:$PYTHONPATH" \
274 --prefix GST_PLUGIN_SYSTEM_PATH : ${plugin_paths} \
275 --prefix GI_TYPELIB_PATH : ${typelib_paths}
276 makeWrapper ${python}/bin/paster bin/paster --prefix PYTHONPATH : "$out:$PYTHONPATH" \
277 --prefix GST_PLUGIN_SYSTEM_PATH : ${plugin_paths} \
278 --prefix GI_TYPELIB_PATH : ${typelib_paths}
279 makeWrapper ${python}/bin/celery bin/celery --prefix PYTHONPATH : "$out:$PYTHONPATH" \
280 --prefix GST_PLUGIN_SYSTEM_PATH : ${plugin_paths} \
281 --prefix GI_TYPELIB_PATH : ${typelib_paths}
282 find . -type f -exec sed -i "s|$mediagoblin|$out|g" {} \;
283 ln -s ${paste_local} ./paste_local.ini
284 ln -s ${mediagoblin_local} ./mediagoblin_local.ini
285 ln -sf ${varDir} ./user_dev