# The usual development shell of GNOME-related projects. It isn't really
# complete, it is more of a list of common applications for these types of
# projects.
#
# These include toolkits for C, Rust, and GNOME JavaScript.
{ mkShell, cmake, meson, ninja, gtk4, libadwaita, gjs, pkg-config

, blueprint-compiler, desktop-file-utils, librsvg, gdk-pixbuf, gst_all_1
, gettext, glib, appstream-glib, json-glib, gobject-introspection
, glib-networking, glib-testing, libsoup_3

, nodePackages

# Rust
, cargo, rustc }:

mkShell {
  packages = [
    meson # Their build system of choice.
    ninja # Their other build system of choice.
    cmake # Their other meta-build system of choice.
    pkg-config # That librarian in the background.
    gtk4 # The star of the show.
    libadwaita # The co-star of the show.

    # Common development inputs.
    desktop-file-utils
    librsvg
    gdk-pixbuf
    gst_all_1.gst-devtools
    gst_all_1.gst-libav
    gst_all_1.gst-plugins-bad
    gst_all_1.gst-plugins-base
    gst_all_1.gst-plugins-good
    gst_all_1.gst-plugins-ugly
    gst_all_1.gstreamer
    gettext
    glib
    appstream-glib
    json-glib
    gobject-introspection
    glib-networking
    glib-testing
    libsoup_3

    # When Rust and GTK go together...
    cargo
    rustc

    # Creating desktop applications with JavaScript without Electron!
    nodePackages.typescript
    gjs

    # The new Blueprint language.
    blueprint-compiler
  ];

  inputsFrom = [ gjs gtk4 gobject-introspection ];
}
