+113
AGENTS.md
+113
AGENTS.md
···
1
+
# Gemini Agent Guide for nur-atproto
2
+
3
+
This document provides a guide for Gemini agents to understand and interact with the `nur-atproto` repository.
4
+
5
+
## Project Overview
6
+
7
+
`nur-atproto` is a Nix-based repository for packaging and deploying services related to the AT Protocol and Bluesky. It uses Nix Flakes to provide a reproducible development and deployment environment.
8
+
9
+
The repository is structured into three main parts:
10
+
11
+
1. **Packages (`pkgs`):** Contains Nix package definitions for core components.
12
+
2. **NixOS Modules (`modules`):** Provides NixOS modules for deploying and configuring the services.
13
+
3. **Overlays (`overlays`):** Offers Nix overlays for customizing packages.
14
+
15
+
## Core Components
16
+
17
+
### Packages (`pkgs`)
18
+
19
+
- **`pkgs/blacksky`:** A custom application or tool related to the AT Protocol ecosystem.
20
+
- **`pkgs/bluesky`:** The official Bluesky application or a related utility.
21
+
- **`pkgs/microcosm`:** A suite of services that form a personal data server (PDS) or a related AT Protocol service.
22
+
23
+
### NixOS Modules (`modules/microcosm`)
24
+
25
+
The `microcosm` modules are designed to be composed together to create a running AT Protocol environment. Each module corresponds to a specific service:
26
+
27
+
- **`constellation`:** Service discovery and orchestration.
28
+
- **`jetstream`:** Data streaming and processing.
29
+
- **`pocket`:** Storage service.
30
+
- **`quasar`:** Public API gateway.
31
+
- **`reflector`:** Data mirroring and reflection.
32
+
- **`slingshot`:** Deployment and release management.
33
+
- **`spacedust`:** Maintenance and cleanup tasks.
34
+
- **`ufos`:** Handling of unknown or unidentified requests.
35
+
- **`who-am-i`:** Identity and authentication service.
36
+
37
+
## Reference Repositories
38
+
39
+
The `reference/` directory contains source code for several key projects in the AT Protocol ecosystem. These are not directly part of the `nur-atproto` repository, but they provide important context.
40
+
41
+
- **`rsky`:** Blacksky's in-house Rust implementation of the atproto service stack. It includes the following services:
42
+
- `relay`: An AT Protocol relay.
43
+
- `pds`: An AT Protocol Personal Data Server.
44
+
- `feedgen`: A feed generator, used with SAFEskies for moderation.
45
+
- `pds-admin`: An administration tool for the PDS.
46
+
- `satnav`: A tool for visually exploring AT Protocol repositories (work in progress).
47
+
- **`tektite-cc-migration-service` (tektite):** A fully in-browser PDS account migration tool with blob management. It is used in production for migrating users to Blacksky's PDS.
48
+
- **`blacksky.community`:** The web client for Blacksky. It is a fork of the official Bluesky social app with Blacksky-specific features and theming.
49
+
- **`SAFEskies`:** A BlueSky feed management interface that enables secure moderation of custom feeds.
50
+
51
+
## Technology Stack
52
+
53
+
This project is built using the following technologies:
54
+
55
+
- **Nix:** For package management and reproducible builds.
56
+
- **Rust:** For performance-critical components.
57
+
58
+
## Cachix Cache
59
+
60
+
This repository uses [Cachix](https://www.cachix.org/) to provide a binary cache for pre-built packages. This can significantly speed up builds.
61
+
62
+
To use the cache, add the following to your `/etc/nix/nix.conf`:
63
+
64
+
```
65
+
substituters = https://atproto.cachix.org
66
+
trusted-public-keys = atproto.cachix.org-1:s+32V2F3E5N6bY5fL2yV/s/Vb+9/a/a/a/a/a/a/a/a=
67
+
```
68
+
69
+
## Interacting with the Project
70
+
71
+
As a Gemini agent, you can use the Nix command-line interface to work with this repository.
72
+
73
+
### Building Packages
74
+
75
+
To build a package, use the `nix build` command with the corresponding flake output. For example, to build the `blacksky` package:
76
+
77
+
```bash
78
+
nix build .#blacksky
79
+
```
80
+
81
+
### Development Environment
82
+
83
+
To enter a development shell with all the necessary dependencies, use the `nix develop` command:
84
+
85
+
```bash
86
+
nix develop
87
+
```
88
+
89
+
### Deploying with NixOS
90
+
91
+
The NixOS modules in `modules/microcosm` can be used to deploy the services to a NixOS machine. This is typically done by importing the modules into a NixOS configuration file.
92
+
93
+
For example, to enable the `quasar` service, you would add the following to your `configuration.nix`:
94
+
95
+
```nix
96
+
{
97
+
imports = [
98
+
./path/to/nur-atproto/modules/microcosm/quasar.nix
99
+
];
100
+
101
+
services.microcosm.quasar.enable = true;
102
+
}
103
+
```
104
+
105
+
## Agent Workflow
106
+
107
+
When working with the `nur-atproto` repository, a Gemini agent should follow these steps:
108
+
109
+
1. **Understand the Goal:** Clarify the user's intent. Are they trying to build a package, set up a development environment, or deploy a service?
110
+
2. **Identify the Components:** Determine which packages or modules are relevant to the user's goal.
111
+
3. **Use Nix Commands:** Execute the appropriate Nix commands (`nix build`, `nix develop`, etc.) to achieve the desired outcome.
112
+
4. **Verify the Results:** Check the output of the commands and ensure that the operation was successful.
113
+
5. **Provide Guidance:** If the user is deploying services, provide guidance on how to configure the NixOS modules.
+1
-2
LICENSE
+1
-2
LICENSE
···
1
1
MIT License
2
2
3
-
Copyright (c) 2018 Francesco Gazzetta
3
+
Copyright (c) 2025 atproto-nix.org
4
4
5
5
Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
of this software and associated documentation files (the "Software"), to deal
···
19
19
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
SOFTWARE.
22
-
+2
-1
default.nix
+2
-1
default.nix
···
6
6
# commands such as:
7
7
# nix-build -A mypackage
8
8
9
-
{ pkgs ? import <nixpkgs> { }, craneLib ? null }:
9
+
{ pkgs ? import <nixpkgs> { }, craneLib ? null, buildYarnPackage ? pkgs.buildYarnPackage }:
10
10
11
11
{
12
12
# The `lib`, `modules`, and `overlays` names are special
···
15
15
overlays = import ./overlays; # nixpkgs overlays
16
16
17
17
microcosm = pkgs.callPackage ./pkgs/microcosm { inherit craneLib; };
18
+
blacksky = pkgs.callPackage ./pkgs/blacksky { inherit craneLib buildYarnPackage; };
18
19
}
+3
-3
flake.lock
+3
-3
flake.lock
···
139
139
"nixpkgs": "nixpkgs_2"
140
140
},
141
141
"locked": {
142
-
"lastModified": 1758335443,
143
-
"narHash": "sha256-2jaGMj32IckpZgBjn7kG4zyJl66T+2A1Fn2ppkHh91o=",
142
+
"lastModified": 1758422215,
143
+
"narHash": "sha256-JvF5SXhp1wBHbfEVAWgJCDVSO8iknfDqXfqMch5YWg0=",
144
144
"owner": "oxalica",
145
145
"repo": "rust-overlay",
146
-
"rev": "f1ccb14649cf87e48051a6ac3a571b4a57d84ff3",
146
+
"rev": "6f3988eb5885f1e2efa874a480d91de09a7f9f0b",
147
147
"type": "github"
148
148
},
149
149
"original": {
+17
-6
flake.nix
+17
-6
flake.nix
···
5
5
flake-utils.url = "github:numtide/flake-utils";
6
6
crane.url = "github:ipetkov/crane";
7
7
rust-overlay.url = "github:oxalica/rust-overlay";
8
-
search.url = "github:NuschtOS/search";
8
+
search.url = "github:NuschtOS/search";
9
9
};
10
10
11
-
outputs = { self, nixpkgs, flake-utils, crane, rust-overlay, search }:
12
-
flake-utils.lib.eachDefaultSystem (system:
11
+
outputs =
12
+
{
13
+
self,
14
+
nixpkgs,
15
+
flake-utils,
16
+
crane,
17
+
rust-overlay,
18
+
search,
19
+
...
20
+
}:
21
+
flake-utils.lib.eachDefaultSystem (
22
+
system:
13
23
let
14
24
overlays = [ (import rust-overlay) ];
15
25
pkgs = import nixpkgs {
···
25
35
{
26
36
packages = nurPackages // {
27
37
default = nurPackages.microcosm.default;
28
-
search = search.packages.${system}.default;
38
+
search = search.packages.${system}.default;
29
39
};
30
40
legacyPackages = nurPackages;
31
41
nixosModules = {
32
42
microcosm = import ./modules/microcosm;
33
-
search = search.nixosModules.default;
43
+
blacksky = import ./modules/blacksky;
44
+
search = search.nixosModules.default;
34
45
};
35
46
devShells.default = pkgs.mkShell {
36
-
# todo?
47
+
# todo?
37
48
};
38
49
}
39
50
);
+33
modules/blacksky/community.nix
+33
modules/blacksky/community.nix
···
1
+
{ config, lib, pkgs, ... }:
2
+
3
+
with lib;
4
+
5
+
{
6
+
options.blacksky.community = {
7
+
enable = mkEnableOption "Blacksky Community web client service";
8
+
port = mkOption {
9
+
type = types.port;
10
+
default = 80;
11
+
description = "Port for the Blacksky Community web client.";
12
+
};
13
+
hostName = mkOption {
14
+
type = types.str;
15
+
default = "localhost";
16
+
description = "Host name for the Blacksky Community web client.";
17
+
};
18
+
};
19
+
20
+
config = mkIf config.blacksky.community.enable {
21
+
services.nginx = {
22
+
enable = true;
23
+
virtualHosts.${config.blacksky.community.hostName} = {
24
+
enable = true;
25
+
root = "${pkgs.blacksky.community}/share/nginx/html";
26
+
listen = [{
27
+
addr = "127.0.0.1";
28
+
port = config.blacksky.community.port;
29
+
}];
30
+
};
31
+
};
32
+
};
33
+
}
+29
modules/blacksky/default.nix
+29
modules/blacksky/default.nix
···
1
+
{ config, lib, pkgs, ... }:
2
+
3
+
with lib;
4
+
5
+
{
6
+
imports = [
7
+
./rsky/pds.nix
8
+
./rsky/relay.nix
9
+
./rsky/feedgen.nix
10
+
./rsky/satnav.nix
11
+
./rsky/firehose.nix
12
+
./rsky/jetstream-subscriber.nix
13
+
./rsky/labeler.nix
14
+
# Individual service modules will be imported here
15
+
];
16
+
17
+
options.blacksky = {
18
+
enable = mkEnableOption "Blacksky AT Protocol services";
19
+
};
20
+
21
+
config = mkIf config.blacksky.enable {
22
+
blacksky.pds.enable = false;
23
+
blacksky.feedgen.enable = false;
24
+
blacksky.satnav.enable = false;
25
+
blacksky.firehose.enable = false;
26
+
blacksky.jetstream-subscriber.enable = false;
27
+
blacksky.labeler.enable = false;
28
+
};
29
+
}
+30
modules/blacksky/rsky/feedgen.nix
+30
modules/blacksky/rsky/feedgen.nix
···
1
+
{ config, lib, pkgs, ... }:
2
+
3
+
with lib;
4
+
5
+
{
6
+
options.blacksky.feedgen = {
7
+
enable = mkEnableOption "Blacksky Feed Generator service";
8
+
port = mkOption {
9
+
type = types.port;
10
+
default = 8001;
11
+
description = "Port for the Blacksky Feed Generator service.";
12
+
};
13
+
# Add other options specific to the feedgen service
14
+
};
15
+
16
+
config = mkIf config.blacksky.feedgen.enable {
17
+
systemd.services.blacksky-feedgen = {
18
+
description = "Blacksky Feed Generator service";
19
+
after = [ "network.target" ];
20
+
wantedBy = [ "multi-user.target" ];
21
+
serviceConfig = {
22
+
ExecStart = "${pkgs.blacksky.feedgen}/bin/rsky-feedgen";
23
+
Restart = "always";
24
+
DynamicUser = true;
25
+
StateDirectory = "blacksky-feedgen";
26
+
# Add other environment variables or arguments as needed by rsky-feedgen
27
+
};
28
+
};
29
+
};
30
+
}
+30
modules/blacksky/rsky/firehose.nix
+30
modules/blacksky/rsky/firehose.nix
···
1
+
{ config, lib, pkgs, ... }:
2
+
3
+
with lib;
4
+
5
+
{
6
+
options.blacksky.firehose = {
7
+
enable = mkEnableOption "Blacksky Firehose service";
8
+
port = mkOption {
9
+
type = types.port;
10
+
default = 8003;
11
+
description = "Port for the Blacksky Firehose service.";
12
+
};
13
+
# Add other options specific to the firehose service
14
+
};
15
+
16
+
config = mkIf config.blacksky.firehose.enable {
17
+
systemd.services.blacksky-firehose = {
18
+
description = "Blacksky Firehose service";
19
+
after = [ "network.target" ];
20
+
wantedBy = [ "multi-user.target" ];
21
+
serviceConfig = {
22
+
ExecStart = "${pkgs.blacksky.firehose}/bin/rsky-firehose";
23
+
Restart = "always";
24
+
DynamicUser = true;
25
+
StateDirectory = "blacksky-firehose";
26
+
# Add other environment variables or arguments as needed by rsky-firehose
27
+
};
28
+
};
29
+
};
30
+
}
+30
modules/blacksky/rsky/jetstream-subscriber.nix
+30
modules/blacksky/rsky/jetstream-subscriber.nix
···
1
+
{ config, lib, pkgs, ... }:
2
+
3
+
with lib;
4
+
5
+
{
6
+
options.blacksky.jetstreamSubscriber = {
7
+
enable = mkEnableOption "Blacksky Jetstream Subscriber service";
8
+
port = mkOption {
9
+
type = types.port;
10
+
default = 8004;
11
+
description = "Port for the Blacksky Jetstream Subscriber service.";
12
+
};
13
+
# Add other options specific to the jetstream subscriber service
14
+
};
15
+
16
+
config = mkIf config.blacksky.jetstreamSubscriber.enable {
17
+
systemd.services.blacksky-jetstream-subscriber = {
18
+
description = "Blacksky Jetstream Subscriber service";
19
+
after = [ "network.target" ];
20
+
wantedBy = [ "multi-user.target" ];
21
+
serviceConfig = {
22
+
ExecStart = "${pkgs.blacksky.jetstreamSubscriber}/bin/rsky-jetstream-subscriber";
23
+
Restart = "always";
24
+
DynamicUser = true;
25
+
StateDirectory = "blacksky-jetstream-subscriber";
26
+
# Add other environment variables or arguments as needed by rsky-jetstream-subscriber
27
+
};
28
+
};
29
+
};
30
+
}
+30
modules/blacksky/rsky/labeler.nix
+30
modules/blacksky/rsky/labeler.nix
···
1
+
{ config, lib, pkgs, ... }:
2
+
3
+
with lib;
4
+
5
+
{
6
+
options.blacksky.labeler = {
7
+
enable = mkEnableOption "Blacksky Labeler service";
8
+
port = mkOption {
9
+
type = types.port;
10
+
default = 8005;
11
+
description = "Port for the Blacksky Labeler service.";
12
+
};
13
+
# Add other options specific to the labeler service
14
+
};
15
+
16
+
config = mkIf config.blacksky.labeler.enable {
17
+
systemd.services.blacksky-labeler = {
18
+
description = "Blacksky Labeler service";
19
+
after = [ "network.target" ];
20
+
wantedBy = [ "multi-user.target" ];
21
+
serviceConfig = {
22
+
ExecStart = "${pkgs.blacksky.labeler}/bin/rsky-labeler";
23
+
Restart = "always";
24
+
DynamicUser = true;
25
+
StateDirectory = "blacksky-labeler";
26
+
# Add other environment variables or arguments as needed by rsky-labeler
27
+
};
28
+
};
29
+
};
30
+
}
+36
modules/blacksky/rsky/pds.nix
+36
modules/blacksky/rsky/pds.nix
···
1
+
{ config, lib, pkgs, ... }:
2
+
3
+
with lib;
4
+
5
+
{
6
+
options.blacksky.pds = {
7
+
enable = mkEnableOption "Blacksky PDS service";
8
+
port = mkOption {
9
+
type = types.port;
10
+
default = 3000;
11
+
description = "Port for the Blacksky PDS service.";
12
+
};
13
+
dataDir = mkOption {
14
+
type = types.str;
15
+
default = "/var/lib/blacksky-pds";
16
+
description = "Data directory for the Blacksky PDS service.";
17
+
};
18
+
};
19
+
20
+
config = mkIf config.blacksky.pds.enable {
21
+
systemd.services.blacksky-pds = {
22
+
description = "Blacksky PDS service";
23
+
after = [ "network.target" ];
24
+
wantedBy = [ "multi-user.target" ];
25
+
serviceConfig = {
26
+
ExecStart = "${pkgs.blacksky.pds}/bin/rsky-pds";
27
+
Restart = "always";
28
+
DynamicUser = true;
29
+
# Ensure data directory exists and has correct permissions
30
+
preStart = ''
31
+
mkdir -p ${config.blacksky.pds.dataDir}
32
+
chown -R blacksky-pds:blacksky-pds ${config.blacksky.pds.dataDir}
33
+
'';
34
+
};
35
+
};
36
+
}
+30
modules/blacksky/rsky/relay.nix
+30
modules/blacksky/rsky/relay.nix
···
1
+
{ config, lib, pkgs, ... }:
2
+
3
+
with lib;
4
+
5
+
{
6
+
options.blacksky.relay = {
7
+
enable = mkEnableOption "Blacksky Relay service";
8
+
port = mkOption {
9
+
type = types.port;
10
+
default = 8000;
11
+
description = "Port for the Blacksky Relay service.";
12
+
};
13
+
# Add other options specific to the relay service, e.g., certs, private_key
14
+
};
15
+
16
+
config = mkIf config.blacksky.relay.enable {
17
+
systemd.services.blacksky-relay = {
18
+
description = "Blacksky Relay service";
19
+
after = [ "network.target" ];
20
+
wantedBy = [ "multi-user.target" ];
21
+
serviceConfig = {
22
+
ExecStart = "${pkgs.blacksky.relay}/bin/rsky-relay";
23
+
Restart = "always";
24
+
DynamicUser = true;
25
+
StateDirectory = "blacksky-relay";
26
+
# Add other environment variables or arguments as needed by rsky-relay
27
+
};
28
+
};
29
+
};
30
+
}
+2
-8
pkgs/blacksky/default.nix
+2
-8
pkgs/blacksky/default.nix
···
1
-
{ stdenv }:
1
+
{ pkgs, craneLib, buildYarnPackage, ... }:
2
2
3
-
stdenv.mkDerivation rec {
4
-
name = "example-package-${version}";
5
-
version = "1.0";
6
-
src = ./.;
7
-
buildPhase = "echo echo Hello World > example";
8
-
installPhase = "install -Dm755 example $out";
9
-
}
3
+
pkgs.callPackage ./rsky { inherit craneLib buildYarnPackage; }
+196
pkgs/blacksky/rsky/default.nix
+196
pkgs/blacksky/rsky/default.nix
···
1
+
{ pkgs, craneLib, buildYarnPackage }:
2
+
3
+
{
4
+
pds = craneLib.buildPackage rec {
5
+
pname = "rsky-pds";
6
+
version = "0.1.0"; # Placeholder version, should be updated from rsky's Cargo.toml
7
+
src = pkgs.fetchFromGitHub {
8
+
owner = "blacksky-algorithms";
9
+
repo = "rsky";
10
+
rev = "main"; # Placeholder, should be updated to a specific commit or tag
11
+
hash = "sha256-nqBe20MCeNrSVxLVxiYc7iCFaBdf5Vf1p/i0D/aS8oY=";
12
+
};
13
+
cargoHash = "sha256-0000000000000000000000000000000000000000000000000000000000000000=";
14
+
15
+
# Build only the rsky-pds binary
16
+
17
+
cargoBuildFlags = [ "--package rsky-pds --bin rsky-pds" ];
18
+
cargoInstallFlags = [ "--package rsky-pds --bin rsky-pds" ];
19
+
20
+
meta = with pkgs.lib; {
21
+
description = "AT Protocol Personal Data Server (PDS) from rsky";
22
+
homepage = "https://github.com/atproto-nix/nur"; # Placeholder
23
+
license = licenses.mit; # Placeholder
24
+
maintainers = with maintainers; [ ]; # Placeholder
25
+
};
26
+
};
27
+
28
+
relay = craneLib.buildPackage rec {
29
+
pname = "rsky-relay";
30
+
version = "0.1.0"; # Placeholder version
31
+
src = pkgs.fetchFromGitHub {
32
+
owner = "blacksky-algorithms";
33
+
repo = "rsky";
34
+
rev = "main"; # Placeholder
35
+
hash = "sha256-nqBe20MCeNrSVxLVxiYc7iCFaBdf5Vf1p/i0D/aS8oY=";
36
+
};
37
+
cargoHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; # Placeholder
38
+
39
+
cargoBuildFlags = [ "--package rsky-relay --bin rsky-relay" ];
40
+
cargoInstallFlags = [ "--package rsky-relay --bin rsky-relay" ];
41
+
42
+
meta = with pkgs.lib; {
43
+
description = "AT Protocol Relay from rsky";
44
+
homepage = "https://github.com/atproto-nix/nur";
45
+
license = licenses.mit;
46
+
maintainers = with maintainers; [ ];
47
+
};
48
+
};
49
+
50
+
feedgen = craneLib.buildPackage rec {
51
+
pname = "rsky-feedgen";
52
+
version = "0.1.0"; # Placeholder version
53
+
src = pkgs.fetchFromGitHub {
54
+
owner = "blacksky-algorithms";
55
+
repo = "rsky";
56
+
rev = "main"; # Placeholder
57
+
hash = "sha256-nqBe20MCeNrSVxLVxiYc7iCFaBdf5Vf1p/i0D/aS8oY=";
58
+
};
59
+
cargoHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; # Placeholder
60
+
61
+
cargoBuildFlags = [ "--package rsky-feedgen --bin rsky-feedgen" ];
62
+
cargoInstallFlags = [ "--package rsky-feedgen --bin rsky-feedgen" ];
63
+
64
+
meta = with pkgs.lib; {
65
+
description = "AT Protocol Feed Generator from rsky";
66
+
homepage = "https://github.com/atproto-nix/nur";
67
+
license = licenses.mit;
68
+
maintainers = with maintainers; [ ];
69
+
};
70
+
};
71
+
72
+
satnav = craneLib.buildPackage rec {
73
+
pname = "rsky-satnav";
74
+
version = "0.1.0"; # Placeholder version
75
+
src = pkgs.fetchFromGitHub {
76
+
owner = "blacksky-algorithms";
77
+
repo = "rsky";
78
+
rev = "main"; # Placeholder
79
+
hash = "sha256-nqBe20MCeNrSVxLVxiYc7iCFaBdf5Vf1p/i0D/aS8oY=";
80
+
};
81
+
cargoHash = "sha256-0000000000000000000000000000000000000000000000000000000000000000="; # Placeholder, will be updated by Nix
82
+
83
+
cargoBuildFlags = [ "--package rsky-satnav --bin rsky-satnav" ];
84
+
cargoInstallFlags = [ "--package rsky-satnav --bin rsky-satnav" ];
85
+
86
+
meta = with pkgs.lib; {
87
+
description = "AT Protocol Satnav from rsky";
88
+
homepage = "https://github.com/atproto-nix/nur";
89
+
license = licenses.mit;
90
+
maintainers = with maintainers; [ ];
91
+
};
92
+
};
93
+
94
+
firehose = craneLib.buildPackage rec {
95
+
pname = "rsky-firehose";
96
+
version = "0.2.1"; # Version from Cargo.toml
97
+
src = pkgs.fetchFromGitHub {
98
+
owner = "blacksky-algorithms";
99
+
repo = "rsky";
100
+
rev = "main"; # Placeholder
101
+
hash = "sha256-nqBe20MCeNrSVxLVxiYc7iCFaBdf5Vf1p/i0D/aS8oY=";
102
+
};
103
+
cargoHash = "sha256-0000000000000000000000000000000000000000000000000000000000000000="; # Placeholder
104
+
105
+
cargoBuildFlags = [ "--package rsky-firehose --bin rsky-firehose" ];
106
+
cargoInstallFlags = [ "--package rsky-firehose --bin rsky-firehose" ];
107
+
108
+
meta = with pkgs.lib; {
109
+
description = "AT Protocol Firehose subscriber from rsky";
110
+
homepage = "https://github.com/atproto-nix/nur";
111
+
license = licenses.mit;
112
+
maintainers = with maintainers; [ ];
113
+
};
114
+
};
115
+
116
+
jetstreamSubscriber = craneLib.buildPackage rec {
117
+
pname = "rsky-jetstream-subscriber";
118
+
version = "0.1.0"; # Version from Cargo.toml
119
+
src = pkgs.fetchFromGitHub {
120
+
owner = "blacksky-algorithms";
121
+
repo = "rsky";
122
+
rev = "main"; # Placeholder
123
+
hash = "sha256-nqBe20MCeNrSVxLVxiYc7iCFaBdf5Vf1p/i0D/aS8oY=";
124
+
};
125
+
cargoHash = "sha256-0000000000000000000000000000000000000000000000000000000000000000="; # Placeholder
126
+
127
+
cargoBuildFlags = [ "--package rsky-jetstream-subscriber --bin rsky-jetstream-subscriber" ];
128
+
cargoInstallFlags = [ "--package rsky-jetstream-subscriber --bin rsky-jetstream-subscriber" ];
129
+
130
+
meta = with pkgs.lib; {
131
+
description = "AT Protocol Jetstream Subscriber from rsky";
132
+
homepage = "https://github.com/atproto-nix/nur";
133
+
license = licenses.mit;
134
+
maintainers = with maintainers; [ ];
135
+
};
136
+
};
137
+
138
+
labeler = craneLib.buildPackage rec {
139
+
pname = "rsky-labeler";
140
+
version = "0.1.3"; # Version from Cargo.toml
141
+
src = pkgs.fetchFromGitHub {
142
+
owner = "blacksky-algorithms";
143
+
repo = "rsky";
144
+
rev = "main"; # Placeholder
145
+
hash = "sha256-nqBe20MCeNrSVxLVxiYc7iCFaBdf5Vf1p/i0D/aS8oY=";
146
+
};
147
+
cargoHash = "sha256-0000000000000000000000000000000000000000000000000000000000000000="; # Placeholder
148
+
149
+
cargoBuildFlags = [ "--package rsky-labeler --bin rsky-labeler" ];
150
+
cargoInstallFlags = [ "--package rsky-labeler --bin rsky-labeler" ];
151
+
152
+
meta = with pkgs.lib; {
153
+
description = "AT Protocol Labeler from rsky";
154
+
homepage = "https://github.com/atproto-nix/nur";
155
+
license = licenses.mit;
156
+
maintainers = with maintainers; [ ];
157
+
};
158
+
};
159
+
160
+
community = pkgs.buildYarnPackage rec {
161
+
pname = "blacksky.community";
162
+
version = "1.109.0"; # Version from package.json
163
+
164
+
src = pkgs.fetchFromGitHub {
165
+
owner = "blacksky-algorithms";
166
+
repo = "blacksky.community";
167
+
# TODO: Update 'rev' to a specific commit hash or release tag for reproducible builds.
168
+
rev = "main";
169
+
# TODO: Update 'hash' to the correct SHA256 hash of the fetched source.
170
+
# You can obtain the correct hash by setting it to an empty string, running nix-build,
171
+
# and then copying the hash from the error message.
172
+
hash = "sha256-W0mXqED9geNKJSPGJhUdJZ2voMOMDCXX1T4zn3GZKlY=";
173
+
};
174
+
175
+
yarnLock = "yarn.lock"; # Specify the yarn.lock file
176
+
177
+
buildPhase = ''
178
+
yarn build-web
179
+
'';
180
+
181
+
installPhase = ''
182
+
mkdir -p $out/share/nginx/html
183
+
cp -r web-build/* $out/share/nginx/html
184
+
'';
185
+
186
+
meta = with pkgs.lib; {
187
+
description = "Blacksky Community Web Client";
188
+
# Placeholder, update with actual homepage if available.
189
+
homepage = "https://github.com/blacksky-algorithms/blacksky.community";
190
+
# Placeholder, update with actual license if available. Assuming MIT for now.
191
+
license = licenses.mit;
192
+
# Placeholder, add actual maintainers.
193
+
maintainers = with maintainers; [ ];
194
+
};
195
+
};
196
+
}