anchor.diff:  
     buildInputs = [
       cairo
  +    gettext
     ];
   
     propagatedBuildInputs = with python3Packages; [
  +    psutil
  +    dbus-python
  +    pygobject3
  +    packaging
  +    wheel
  +    setuptools
       requests
  -    pygobject3
  -    dbus-python
  -    packaging
  -    psutil
  -    setuptools
       unidecode
  +    click
     ];
   
     dontWrapGApps = true;
  
positive.code:     substituteInPlace src/grapejuice_common/assets/desktop/roblox-studio.desktop \
        --replace \$GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice" \
        --replace \$STUDIO_ICON "grapejuice-roblox-studio"
    '';
  
    postInstall = ''
  
negative.code:     cp -r src/grapejuice_common/assets/desktop/* $out/share/applications/
      cp -r src/grapejuice_common/assets/icons $out/share/
      cp src/grapejuice_common/assets/mime_xml/*.xml $out/share/mime/packages/
  
      # compile locales (*.po -> *.mo)
      # from https://gitlab.com/brinkervii/grapejuice/-/blob/master/src/grapejuice_common/util/mo_util.py
      LOCALE_DIR="$out/share/locale"
      PO_DIR="src/grapejuice_common/assets/po"
      LINGUAS_FILE="src/grapejuice_common/assets/po/LINGUAS"
  
      for lang in $(<"$LINGUAS_FILE") # extract langs from LINGUAS_FILE
      do
        po_file="$PO_DIR/$lang.po"
        mo_file_dir="$LOCALE_DIR/$lang/LC_MESSAGES"
  
        mkdir -p $mo_file_dir
  
        mo_file="$mo_file_dir/grapejuice.mo"
        msgfmt $po_file -o $mo_file # msgfmt from gettext
      done
    '';
  
    # No tests
  