{
  description = "Lumenescent Dreams Tools";

  inputs = {
    nixpkgs.url = "nixpkgs/nixos-24.11";
    unstable.url = "nixpkgs/nixos-unstable";
    typeshare.url = "github:1Password/typeshare";
    crane.url = "github:ipetkov/crane";
  };

  outputs = { self, nixpkgs, unstable, typeshare, crane, ... }:
    let 
      version = builtins.string 0 8 self.lastModifiedDate;
      supportedSystems = [ "x86_64-linux" ];
    in
    {
      devShell."x86_64-linux" =
        let
          pkgs = import nixpkgs { system = "x86_64-linux"; };
          pkgs-unstable = import unstable { system = "x86_64-linux"; };
        in
        pkgs.mkShell {
          name = "ld-tools-devshell";
          buildInputs = [
            pkgs.cargo-nextest
            pkgs.cargo-watch
            pkgs.clang
            pkgs.crate2nix
            pkgs.glib
            pkgs.gst_all_1.gst-plugins-bad
            pkgs.gst_all_1.gst-plugins-base
            pkgs.gst_all_1.gst-plugins-good
            pkgs.gst_all_1.gst-plugins-ugly
            pkgs.gst_all_1.gstreamer
            pkgs.gtk4
            pkgs.libadwaita
            pkgs.librsvg
            pkgs.nodejs
            pkgs.openssl
            pkgs.pipewire
            pkgs.pkg-config
            pkgs.rustup
            pkgs.sqlite
            pkgs.cargo-nextest
            pkgs.wasm-pack
            pkgs.sqlx-cli
            pkgs.udev
            pkgs.wasm-pack
            pkgs.go-task
            typeshare.packages."x86_64-linux".default
            pkgs.nodePackages_latest.typescript-language-server
          ];
          LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib";
          ENV = "dev";
        };

      packages."x86_64-linux" =
        let
          pkgs = import nixpkgs { system = "x86_64-linux"; };
          craneLib = crane.mkLib pkgs;
          src = craneLib.cleanCargoSource ./.;

          gtkNativeInputs = [
            pkgs.pkg-config
            pkgs.gtk4
            pkgs.libadwaita
            pkgs.wrapGAppsHook4
          ];

          cargoOverrides = pkgs: pkgs.buildRustCrate.override {
            defaultCrateOverrides = pkgs.defaultCrateOverrides // {
              gobject-sys = attrs: { nativeBuildInputs = gtkNativeInputs; };
              gio-sys = attrs: { nativeBuildInputs = gtkNativeInputs; };
              gdk-pixbuf-sys = attrs: { nativeBuildInputs = gtkNativeInputs; };
              libadwaita-sys = attrs: { nativeBuildInputs = gtkNativeInputs; };

              dashboard = attrs: { nativeBuildInputs = gtkNativeInputs; };
              fitnesstrax = import ./fitnesstrax/app/override.nix { gtkNativeInputs = gtkNativeInputs; };
              otg-gtk = import ./otg/gtk/override.nix { gtkNativeInputs = gtkNativeInputs; };
            };
          };

          cargo_nix = pkgs.callPackage ./Cargo.nix {
            nixpkgs = nixpkgs;
            buildRustCrateForPkgs = cargoOverrides;
          };

        in rec {
          cyber-slides = cargo_nix.workspaceMembers.cyber-slides.build;
          cyberpunk-splash = cargo_nix.workspaceMembers.cyberpunk-splash.build;
          dashboard = cargo_nix.workspaceMembers.dashboard.build;
          # file-service = cargo_nix.workspaceMembers.file-service.build;
          fitnesstrax = cargo_nix.workspaceMembers.fitnesstrax.build;
          l10n-db = craneLib.buildPackage {
            pname = "l10n-db";
            cargoExtraArgs = "-p l10n-db";
            src = ./.;
          };
          otg-gtk = cargo_nix.workspaceMembers.otg-gtk.build;

          all = pkgs.symlinkJoin {
            name = "all";
            paths = [
                cyber-slides
                cyberpunk-splash
                dashboard
                # file-service
                fitnesstrax
                l10n-db
                otg-gtk
            ];
          };

          default = all;
        };
    };
}