1{
  2  description = "Poisson solver for 1D quantum mechanics";
  3
  4  inputs = {
  5    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  6    flake-utils.url = "github:numtide/flake-utils";
  7  };
  8
  9  outputs = {
 10    self,
 11    nixpkgs,
 12    flake-utils,
 13  }:
 14    flake-utils.lib.eachDefaultSystem (system: let
 15      pkgs = import nixpkgs {
 16        inherit system;
 17      };
 18
 19      xyosc = pkgs.buildGoModule rec {
 20        pname = "poisson";
 21        version = "0.0.1";
 22
 23        src = ./.; # Use local source
 24
 25        subPackages = ["."];
 26
 27        vendorHash = null; # Replace with hash after running once (or use `nix develop` to vendor)
 28
 29        buildInputs = with pkgs; [
 30          gcc
 31          go
 32          glfw
 33          pkg-config
 34          xorg.libX11.dev
 35          xorg.libXrandr.dev
 36          xorg.libXcursor.dev
 37          xorg.libXinerama.dev
 38          xorg.libXi.dev
 39          xorg.libXxf86vm.dev
 40          libglvnd
 41          libxkbcommon
 42          libpulseaudio
 43          alsa-lib
 44          libjack2
 45        ];
 46
 47        nativeBuildInputs = with pkgs; [pkg-config makeWrapper];
 48
 49        meta = with pkgs.lib; {
 50          description = "A simple XY-oscilloscope written in Go.";
 51          homepage = "https://github.com/make-42/xyosc";
 52          license = licenses.gpl3;
 53          platforms = platforms.linux;
 54        };
 55
 56        postInstall = ''
 57          wrapProgram "$out/bin/xyosc" \
 58            --prefix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath [
 59            pkgs.glfw
 60            pkgs.pkg-config
 61            pkgs.xorg.libX11.dev
 62            pkgs.xorg.libXrandr.dev
 63            pkgs.xorg.libXcursor.dev
 64            pkgs.xorg.libXinerama.dev
 65            pkgs.xorg.libXi.dev
 66            pkgs.xorg.libXxf86vm.dev
 67            pkgs.libxkbcommon
 68            pkgs.libglvnd
 69            pkgs.libpulseaudio
 70            pkgs.alsa-lib
 71            pkgs.libjack2
 72          ]}
 73          install -Dm644 $src/icons/assets/icon.svg $out/share/icons/hicolor/scalable/apps/xyosc.svg
 74          install -Dm644 $src/xyosc.desktop $out/share/applications/xyosc.desktop
 75        '';
 76      };
 77    in {
 78      packages.default = xyosc;
 79
 80      apps.default = flake-utils.lib.mkApp {
 81        drv = xyosc;
 82      };
 83
 84      devShells.default = pkgs.mkShell {
 85        nativeBuildInputs = with pkgs; [
 86          go
 87          pkg-config
 88          makeWrapper
 89        ];
 90        shellHook = ''
 91          export LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath [
 92            pkgs.glfw
 93            pkgs.pkg-config
 94            pkgs.xorg.libX11.dev
 95            pkgs.xorg.libXrandr.dev
 96            pkgs.xorg.libXcursor.dev
 97            pkgs.xorg.libXinerama.dev
 98            pkgs.xorg.libXi.dev
 99            pkgs.xorg.libXxf86vm.dev
100            pkgs.libxkbcommon
101            pkgs.libglvnd
102            pkgs.libpulseaudio
103            pkgs.alsa-lib
104            pkgs.libjack2
105          ]}:$LD_LIBRARY_PATH
106        '';
107        buildInputs = with pkgs; [
108          glfw
109          xorg.libX11.dev
110          xorg.libXrandr.dev
111          xorg.libXcursor.dev
112          xorg.libXinerama.dev
113          xorg.libXi.dev
114          xorg.libXxf86vm.dev
115          libglvnd
116          libxkbcommon
117          libpulseaudio
118          alsa-lib
119          libjack2
120        ];
121      };
122    });
123}