grain.social is a photo sharing platform built on atproto. grain.social
atproto photography appview
50
fork

Configure Feed

Select the types of activity you want to include in your feed.

at ba7e272750c444d01409b0a48953fb8f2321169d 150 lines 4.5 kB view raw
1{ 2 description = "Darkroom service for Grain"; 3 4 inputs = { 5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 6 crane.url = "github:ipetkov/crane"; 7 fenix = { 8 url = "github:nix-community/fenix"; 9 inputs.nixpkgs.follows = "nixpkgs"; 10 inputs.rust-analyzer-src.follows = ""; 11 }; 12 }; 13 14 outputs = { self, nixpkgs, crane, fenix }: 15 let 16 systems = [ "x86_64-linux" ]; 17 forAllSystems = nixpkgs.lib.genAttrs systems; 18 19 mkPackagesForSystem = system: 20 let 21 pkgs = import nixpkgs { 22 inherit system; 23 config = { allowUnfree = true; }; 24 }; 25 26 # Configure crane with stable Rust toolchain 27 craneLib = (crane.mkLib pkgs).overrideToolchain 28 fenix.packages.${system}.stable.toolchain; 29 30 # Project source for crane 31 src = pkgs.lib.cleanSourceWith { 32 src = ./.; 33 filter = path: type: 34 (craneLib.filterCargoSources path type) || 35 # Include templates and static directories for include_str! macros 36 (pkgs.lib.hasInfix "/templates/" path) || 37 (pkgs.lib.hasInfix "/static/" path) || 38 (pkgs.lib.hasSuffix "/templates" path) || 39 (pkgs.lib.hasSuffix "/static" path); 40 }; 41 42 commonArgs = { 43 inherit src; 44 version = "0.1.0"; 45 strictDeps = true; 46 pname = "darkroom"; 47 name = "darkroom"; 48 buildInputs = with pkgs; [ 49 openssl 50 pkg-config 51 ]; 52 nativeBuildInputs = with pkgs; [ 53 pkg-config 54 openssl.dev 55 ]; 56 57 # Environment variables for OpenSSL 58 OPENSSL_NO_VENDOR = 1; 59 PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig"; 60 }; 61 62 cargoArtifacts = craneLib.buildDepsOnly commonArgs; 63 64 darkroom = craneLib.buildPackage (commonArgs // { 65 inherit cargoArtifacts; 66 doCheck = false; 67 CARGO_PROFILE = "release"; 68 }); 69 70 # Docker image for deployment 71 darkroomImg = let 72 fontDirs = [ 73 "${pkgs.corefonts}/share/fonts" 74 "${pkgs.dejavu_fonts}/share/fonts" 75 "${pkgs.liberation_ttf}/share/fonts" 76 "${pkgs.noto-fonts}/share/fonts" 77 "${pkgs.noto-fonts-color-emoji}/share/fonts" 78 ]; 79 fontsConf = pkgs.makeFontsConf { fontDirectories = fontDirs; }; 80 in pkgs.dockerTools.buildImage { 81 name = "darkroom"; 82 tag = "latest"; 83 contents = [ 84 darkroom 85 pkgs.chromium 86 pkgs.chromedriver 87 pkgs.cacert 88 pkgs.corefonts 89 pkgs.dejavu_fonts 90 pkgs.liberation_ttf 91 pkgs.noto-fonts 92 pkgs.noto-fonts-color-emoji 93 ]; 94 95 runAsRoot = '' 96 #!${pkgs.runtimeShell} 97 mkdir -p /tmp /app/chrome-profile 98 chmod 1777 /tmp 99 chmod 755 /app/chrome-profile 100 ''; 101 102 config = { 103 Cmd = [ "/bin/darkroom" ]; 104 Env = [ 105 "RUST_BACKTRACE=1" 106 "RUST_LOG=debug" 107 "CHROME_PATH=${pkgs.chromium}/bin/chromium" 108 "CHROMEDRIVER_PATH=${pkgs.chromedriver}/bin/chromedriver" 109 "BASE_URL=http://grain-darkroom.internal:8080" 110 "GRAIN_BASE_URL=https://grain.social" 111 "PORT=8080" 112 "FONTCONFIG_FILE=${fontsConf}" 113 ]; 114 ExposedPorts = { 115 "8080/tcp" = {}; 116 }; 117 }; 118 }; 119 in 120 { 121 inherit darkroom darkroomImg; 122 default = darkroom; 123 }; 124 in 125 { 126 packages = forAllSystems mkPackagesForSystem; 127 128 devShells = forAllSystems (system: 129 let 130 pkgs = import nixpkgs { inherit system; }; 131 craneLib = (crane.mkLib pkgs).overrideToolchain 132 fenix.packages.${system}.stable.toolchain; 133 in 134 { 135 default = craneLib.devShell { 136 packages = with pkgs; [ 137 nixpkgs-fmt 138 nil 139 dive 140 flyctl 141 chromium 142 ]; 143 144 # Set up environment for development 145 RUST_LOG = "debug"; 146 CHROME_PATH = "${pkgs.chromium}/bin/chromium"; 147 }; 148 }); 149 }; 150}