@@ -0,0 +1,50 @@
1+{
2+ description = "sphinx desk";
3+
4+ inputs = {
5+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
6+
7+ # Dependency desks. Keep them on releases for the kelvin in
8+ # desk/sys.kelvin ([%zuse 412]) and bump them together with it.
9+ urbit = {
10+ url = "github:urbit/urbit/412k-3";
11+ flake = false;
12+ };
13+ landscape = {
14+ url = "github:tloncorp/landscape/v1.21.0";
15+ flake = false;
16+ };
17+ };
18+
19+ outputs =
20+ {
21+ self,
22+ nixpkgs,
23+ urbit,
24+ landscape,
25+ }:
26+ let
27+ forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
28+ in
29+ {
30+ packages = forAllSystems (
31+ system:
32+ let
33+ pkgs = nixpkgs.legacyPackages.${system};
34+ in
35+ {
36+ # Same layering as .github/helpers/deploy.sh: base-dev, then
37+ # landscape's desk-dev, then ./desk, later layers winning. -L copies
38+ # symlink targets like rsync -L; --no-preserve=mode keeps copied
39+ # files writable so later layers can overwrite them.
40+ desk = pkgs.runCommandLocal "sphinx-desk" { } ''
41+ mkdir $out
42+ for layer in ${urbit}/pkg/base-dev ${landscape}/desk-dev ${./desk}; do
43+ cp -RL --no-preserve=mode "$layer"/. $out
44+ done
45+ '';
46+ default = self.packages.${system}.desk;
47+ }
48+ );
49+ };
50+}