--- /dev/null
+if ! has nix_direnv_version || ! nix_direnv_version 2.3.0; then
+ source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.3.0/direnvrc" "sha256-Dmd+j63L84wuzgyjITIfSxSD57Tx7v51DMxVZOsiUD8="
+fi
+use flake
+
+source_env_if_exists .envrc.private
stats.json
+.envrc.private
+result
+.direnv/
--- /dev/null
+{ lib, mkYarnPackage, libsass, nodejs, python3, pkg-config, fetchFromGitHub
+, fetchYarnDeps, nixosTests, vips, nodePackages, lemmy-translations
+, lemmy-js-client }:
+
+let
+ pkgConfig = {
+ node-sass = {
+ nativeBuildInputs = [ pkg-config ];
+ buildInputs = [ libsass python3 ];
+ postInstall = ''
+ LIBSASS_EXT=auto yarn --offline run build
+ rm build/config.gypi
+ '';
+ };
+ sharp = {
+ nativeBuildInputs = [ pkg-config nodePackages.semver ];
+ buildInputs = [ vips ];
+ postInstall = ''
+ yarn --offline run install
+ '';
+ };
+ };
+
+ name = "lemmy-ui";
+ version = "0.18.4";
+
+ src = ./.;
+
+in mkYarnPackage {
+
+ inherit src pkgConfig name version;
+
+ extraBuildInputs = [ libsass ];
+
+ packageJSON = ./package.json;
+ offlineCache = fetchYarnDeps {
+ yarnLock = src + "/yarn.lock";
+ sha256 = "sha256-fRJpA9WstNNNOePoqotJKYmlikkcjc34iM0WO8+a/3Q=";
+ };
+
+ yarnPreBuild = ''
+ export npm_config_nodedir=${nodejs}
+ '';
+
+ buildPhase = ''
+ # Yarn writes cache directories etc to $HOME.
+ export HOME=$PWD/yarn_home
+ rm -rf node_modules/lemmy-js-client
+ ln -sf ${lemmy-js-client}/libexec/lemmy-js-client/node_modules/lemmy-js-client node_modules/lemmy-js-client
+
+ ln -sf $PWD/node_modules $PWD/deps/lemmy-ui/
+ echo 'export const VERSION = "${version}";' > $PWD/deps/lemmy-ui/src/shared/version.ts
+
+ ln -sf ${lemmy-translations} deps/lemmy-ui/lemmy-translations
+
+ yarn --offline build:prod
+ '';
+
+ preInstall = ''
+ mkdir $out
+ cp -R ./deps/lemmy-ui/dist $out
+ cp -R ./node_modules $out
+ '';
+
+ distPhase = "true";
+
+ passthru.updateScript = ./update.sh;
+ passthru.tests.lemmy-ui = nixosTests.lemmy;
+
+ meta = with lib; {
+ description = "Building a federated alternative to reddit in rust";
+ homepage = "https://join-lemmy.org/";
+ license = licenses.agpl3Only;
+ maintainers = with maintainers; [ happysalada billewanick ];
+ inherit (nodejs.meta) platforms;
+ };
+}
--- /dev/null
+{
+ "nodes": {
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1689068808,
+ "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_2": {
+ "inputs": {
+ "systems": "systems_2"
+ },
+ "locked": {
+ "lastModified": 1689068808,
+ "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "lemmy-js-client": {
+ "inputs": {
+ "flake-utils": "flake-utils_2",
+ "nixpkgs": "nixpkgs"
+ },
+ "locked": {
+ "lastModified": 1690365721,
+ "narHash": "sha256-cCgcUW2CLWUI7kUacs2O//rXRBlnUsix2M/QggVhFh4=",
+ "path": "/home/j/lemmy-js-client",
+ "type": "path"
+ },
+ "original": {
+ "path": "/home/j/lemmy-js-client",
+ "type": "path"
+ }
+ },
+ "lemmy-translations": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1690314617,
+ "narHash": "sha256-fkv6l6/888XOdxZ8Y0P+Ww/y+8Wh4F8SIStncAmifu8=",
+ "owner": "lemmynet",
+ "repo": "lemmy-translations",
+ "rev": "68d14665d4f854fc20f9117636b5cde7176e91dd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "lemmynet",
+ "repo": "lemmy-translations",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1690179384,
+ "narHash": "sha256-+arbgqFTAtoeKtepW9wCnA0njCOyoiDFyl0Q0SBSOtE=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "b12803b6d90e2e583429bb79b859ca53c348b39a",
+ "type": "github"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "ref": "nixos-unstable",
+ "type": "indirect"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1690031011,
+ "narHash": "sha256-kzK0P4Smt7CL53YCdZCBbt9uBFFhE0iNvCki20etAf4=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "12303c652b881435065a98729eb7278313041e49",
+ "type": "github"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "ref": "nixos-unstable",
+ "type": "indirect"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "lemmy-js-client": "lemmy-js-client",
+ "lemmy-translations": "lemmy-translations",
+ "nixpkgs": "nixpkgs_2"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_2": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
--- /dev/null
+{
+ description = "🐀 Building a federated alternative to reddit in rust";
+
+ inputs = {
+ nixpkgs.url = "nixpkgs/nixos-unstable";
+ flake-utils.url = "github:numtide/flake-utils";
+ lemmy-translations = {
+ url = "github:lemmynet/lemmy-translations";
+ flake = false;
+ };
+ lemmy-js-client.url = "path:/home/j/lemmy-js-client";
+ };
+
+ outputs = { self, nixpkgs, flake-utils, lemmy-translations, lemmy-js-client }:
+
+ flake-utils.lib.eachDefaultSystem (system:
+ let pkgs = nixpkgs.legacyPackages.${system};
+ in {
+ packages = {
+ lemmy-ui = (pkgs.callPackage ./default.nix {
+ inherit lemmy-translations;
+ lemmy-js-client = lemmy-js-client.packages.${system}.default;
+ });
+
+ default = self.packages.x86_64-linux.lemmy-ui;
+ };
+
+ devShells.default =
+ pkgs.mkShell { buildInputs = [ pkgs.nodejs pkgs.yarn ]; };
+ });
+}