Light of day
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
{
|
||||
description = "Puppy Tracker — offline-first puppy tracking app with server-side sync.";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
let
|
||||
mkStatic = pkgs:
|
||||
pkgs.stdenvNoCC.mkDerivation {
|
||||
pname = "puppy-tracker-static";
|
||||
version = "0.2.0";
|
||||
src = ./src;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/puppy-tracker
|
||||
cp -r ./* $out/share/puppy-tracker/
|
||||
'';
|
||||
};
|
||||
|
||||
mkServer = pkgs:
|
||||
pkgs.buildGoModule {
|
||||
pname = "puppy-tracker-server";
|
||||
version = "0.2.0";
|
||||
src = ./server;
|
||||
vendorHash = null; # no external dependencies
|
||||
# Pure-Go build for a tiny static binary.
|
||||
env.CGO_ENABLED = "0";
|
||||
ldflags = [ "-s" "-w" ];
|
||||
# The binary built from `module puppy-tracker` is `puppy-tracker`,
|
||||
# rename so the executable name reflects its role.
|
||||
postInstall = ''
|
||||
mv $out/bin/puppy-tracker $out/bin/puppy-tracker-server
|
||||
'';
|
||||
meta.mainProgram = "puppy-tracker-server";
|
||||
};
|
||||
in
|
||||
{
|
||||
nixosModules.default = import ./module.nix self;
|
||||
nixosModules.puppy-tracker = self.nixosModules.default;
|
||||
}
|
||||
//
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
static = mkStatic pkgs;
|
||||
server = mkServer pkgs;
|
||||
in
|
||||
{
|
||||
packages.static = static;
|
||||
packages.server = server;
|
||||
# `default` bundles both so `nix build` produces a runnable directory.
|
||||
packages.default = pkgs.symlinkJoin {
|
||||
name = "puppy-tracker";
|
||||
paths = [ server static ];
|
||||
};
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = [ pkgs.go pkgs.python3 ];
|
||||
shellHook = ''
|
||||
echo "puppy-tracker dev shell"
|
||||
echo " cd server && go run . -static ../src -data /tmp/puppy-events.json"
|
||||
'';
|
||||
};
|
||||
|
||||
# `nix run` → start the server, serving the bundled static files,
|
||||
# storing data in $XDG_DATA_HOME/puppy-tracker/events.json.
|
||||
apps.default = {
|
||||
type = "app";
|
||||
program = toString (pkgs.writeShellScript "puppy-tracker-run" ''
|
||||
data_dir="''${XDG_DATA_HOME:-$HOME/.local/share}/puppy-tracker"
|
||||
mkdir -p "$data_dir"
|
||||
exec ${server}/bin/puppy-tracker-server \
|
||||
-addr "''${PUPPY_ADDR:-:8080}" \
|
||||
-static ${static}/share/puppy-tracker \
|
||||
-data "$data_dir/events.json"
|
||||
'');
|
||||
meta.description = "Run puppy-tracker locally (data in $XDG_DATA_HOME/puppy-tracker)";
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user