dura 0.2.0

Dura backs up your work automatically via Git commits.
Documentation
{
  description = "Dura build and development environment";

  # Provides abstraction to boiler-code when specifying multi-platform outputs.
  inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    rust-overlay.url = "github:oxalica/rust-overlay";
  };

  outputs = { self, nixpkgs, flake-utils, rust-overlay, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        shortRev = if (self ? shortRev) then self.shortRev else "dev-${self.lastModifiedDate}";

        pkgs = import nixpkgs {
          inherit system;
          overlays = [ rust-overlay.overlay ];
        };

        dura = pkgs.rustPlatform.buildRustPackage {
          pname = "dura";
          version = "${shortRev}";
          description = "A background process that saves uncommited changes on git";

          src = self;

          cargoLock = {
            lockFile = self + "/Cargo.lock";
          };

          buildInputs = [
            pkgs.openssl
          ];

          nativeBuildInputs = [
            pkgs.rust-bin.stable.latest.minimal
            pkgs.pkg-config
          ];

          DURA_VERSION_SUFFIX = "${shortRev}";
        };

        packages = flake-utils.lib.flattenTree {
          inherit dura;
        };

        apps = {
          dura = flake-utils.lib.mkApp { drv = packages.dura; };
        };
      in
      rec {
        defaultPackage = packages.dura;
        defaultApp = apps.dura;
        devShell = pkgs.mkShell {
          DURA_VERSION_SUFFIX = dura.version;
          RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";

          buildInputs = [
            pkgs.openssl
            pkgs.pkgconfig
            (pkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" ]; })
          ];
        };

      });
}