git/grrs/main
flake.nix
96 lines2 KB last change raw · history
{
  description = "A minimal TUI for Gensokyo Radio";

  inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    rust-overlay.url = "github:oxalica/rust-overlay";
    rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs =
    {
      self,
      flake-utils,
      nixpkgs,
      rust-overlay,
    }:
    flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (
      system:
      let
        pkgs = import nixpkgs {
          inherit system;
          overlays = [ rust-overlay.overlays.default ];
        };

        rust = pkgs.rust-bin.stable.latest.default.override {
          extensions = [
            "rust-src"
            "rust-analyzer"
          ];
        };

        grrs = pkgs.rustPlatform.buildRustPackage {
          pname = "myn-grrs";
          version = "0.1.9";
          src = ./.;

          cargoLock.lockFile = ./Cargo.lock;

          nativeBuildInputs = [
            pkgs.makeWrapper
            pkgs.pkg-config
          ];
          buildInputs = [
            pkgs.dbus
            pkgs.openssl
          ];

          postInstall = ''
            wrapProgram $out/bin/grrs \
              --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.mpv ]}
          '';

          meta = {
            description = "A minimal TUI for Gensokyo Radio";
            homepage = "https://git.myn.sh/grrs";
            license = pkgs.lib.licenses.unlicense;
            mainProgram = "grrs";
            platforms = pkgs.lib.platforms.linux;
          };
        };

        runApp = {
          type = "app";
          program = "${grrs}/bin/grrs";
          meta = {
            description = "A minimal TUI for Gensokyo Radio";
            mainProgram = "grrs";
          };
        };
      in
      {
        packages = {
          default = grrs;
          inherit grrs;
        };

        apps = {
          default = runApp;
          grrs = runApp;
        };

        devShells.default = pkgs.mkShell {
          packages = [
            rust
            pkgs.pkg-config
            pkgs.openssl
            pkgs.mpv
            pkgs.dbus
          ];
          RUST_SRC_PATH = "${rust}/lib/rustlib/src/rust/library";
        };
      }
    );
}