format all nix code by using nix fmt

This commit is contained in:
778a69cd 2024-08-19 12:14:29 +02:00
parent 656bbd46c0
commit 435cbd0d6b
4 changed files with 2338 additions and 1981 deletions

View file

@ -1,12 +1,13 @@
{ lib {
, beam_nox lib,
, fetchFromGitHub beam_nox,
, git fetchFromGitHub,
, cmake git,
, nixosTests cmake,
, src nixosTests,
, src-config src,
, mobilizon-js src-config,
mobilizon-js,
}: }:
let let
@ -25,21 +26,20 @@ mixRelease rec {
# This circumvents a startup error for now # This circumvents a startup error for now
stripDebug = false; stripDebug = false;
nativeBuildInputs = [ git cmake ]; nativeBuildInputs = [
git
cmake
];
# Update deps.nix by running `mix deps.nix` # Update deps.nix by running `mix deps.nix`
mixNixDeps = import ./deps.nix { mixNixDeps = import ./deps.nix {
inherit lib; inherit lib;
beamPackages = beam_nox.packages.erlang; beamPackages = beam_nox.packages.erlang;
overrides = (final: prev: overrides = (
(lib.mapAttrs final: prev:
(_: value: value.override { (lib.mapAttrs (_: value: value.override { appConfigPath = src-config; }) prev)
appConfigPath = src-config; // {
}) fast_html = prev.fast_html.override { nativeBuildInputs = [ cmake ]; };
prev) // {
fast_html = prev.fast_html.override {
nativeBuildInputs = [ cmake ];
};
ex_cldr = prev.ex_cldr.overrideAttrs (old: { ex_cldr = prev.ex_cldr.overrideAttrs (old: {
# We have to use the GitHub sources, as it otherwise tries to download # We have to use the GitHub sources, as it otherwise tries to download
# the locales at build time. # the locales at build time.
@ -47,7 +47,8 @@ mixRelease rec {
owner = "elixir-cldr"; owner = "elixir-cldr";
repo = "cldr"; repo = "cldr";
rev = "v${old.version}"; rev = "v${old.version}";
sha256 = assert old.version == "2.37.5"; sha256 =
assert old.version == "2.37.5";
"sha256-T5Qvuo+xPwpgBsqHNZYnTCA4loToeBn1LKTMsDcCdYs="; "sha256-T5Qvuo+xPwpgBsqHNZYnTCA4loToeBn1LKTMsDcCdYs=";
}; };
postInstall = '' postInstall = ''
@ -55,7 +56,8 @@ mixRelease rec {
''; '';
}); });
}); }
);
}; };
preConfigure = '' preConfigure = ''
@ -63,11 +65,10 @@ mixRelease rec {
''; '';
# Install the compiled js part # Install the compiled js part
preBuild = preBuild = ''
'' cp -a "${mobilizon-js}/_napalm-install/priv/static" ./priv
cp -a "${mobilizon-js}/_napalm-install/priv/static" ./priv chmod 770 -R ./priv
chmod 770 -R ./priv '';
'';
postBuild = '' postBuild = ''
mix phx.digest --no-deps-check mix phx.digest --no-deps-check
@ -89,6 +90,9 @@ mixRelease rec {
description = "Mobilizon is an online tool to help manage your events, your profiles and your groups"; description = "Mobilizon is an online tool to help manage your events, your profiles and your groups";
homepage = "https://joinmobilizon.org/"; homepage = "https://joinmobilizon.org/";
license = licenses.agpl3Plus; license = licenses.agpl3Plus;
maintainers = with maintainers; [ minijackson erictapen ]; maintainers = with maintainers; [
minijackson
erictapen
];
}; };
} }

3797
deps.nix

File diff suppressed because it is too large Load diff

459
flake.nix
View file

@ -8,20 +8,27 @@
napalm.inputs.nixpkgs.follows = "nixpkgs"; napalm.inputs.nixpkgs.follows = "nixpkgs";
}; };
outputs = { self, nixpkgs, nix-filter, napalm }: outputs =
{
self,
nixpkgs,
nix-filter,
napalm,
}:
let let
forAllSystems = f: nixpkgs.lib.genAttrs forAllSystems =
[ "x86_64-linux" "aarch64-linux" ] f:
(system: f system); nixpkgs.lib.genAttrs [
nixpkgsFor = forAllSystems ( "x86_64-linux"
system: "aarch64-linux"
import nixpkgs { inherit system; } ] (system: f system);
); nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; });
filter = nix-filter.lib; filter = nix-filter.lib;
in in
{ {
packages = forAllSystems (system: packages = forAllSystems (
system:
let let
pkgs = nixpkgsFor.${system}; pkgs = nixpkgsFor.${system};
# Directories that are neither needed for building the frontend nor the backend. # Directories that are neither needed for building the frontend nor the backend.
@ -69,7 +76,10 @@
{ {
inherit (pkgs) nodejs; inherit (pkgs) nodejs;
nativeBuildInputs = [ pkgs.imagemagick ]; nativeBuildInputs = [ pkgs.imagemagick ];
npmCommands = [ "npm install" "npm run build" ]; npmCommands = [
"npm install"
"npm run build"
];
# Keep this in sync with the content of ./patches/ # Keep this in sync with the content of ./patches/
customPatchPackages = { customPatchPackages = {
vue-i18n-extract."2.0.7" = pkgs: prev: { vue-i18n-extract."2.0.7" = pkgs: prev: {
@ -81,9 +91,11 @@
}; };
default = self.packages."${system}".mobilizon; default = self.packages."${system}".mobilizon;
}); }
);
devShells = forAllSystems (system: devShells = forAllSystems (
system:
let let
pkgs = nixpkgsFor.${system}; pkgs = nixpkgsFor.${system};
settingsFormat = pkgs.formats.elixirConf { }; settingsFormat = pkgs.formats.elixirConf { };
@ -93,11 +105,19 @@
server = true; server = true;
url.host = "mobilizon.dev"; url.host = "mobilizon.dev";
http = { http = {
ip = settingsFormat.lib.mkTuple [ 0 0 0 0 0 0 0 1 ]; ip = settingsFormat.lib.mkTuple [
0
0
0
0
0
0
0
1
];
port = 4000; port = 4000;
}; };
secret_key_base = secret_key_base = "2q/l1WDx3RQQy7gZ1k001//6nc66moWUEJQyGuMK/z3zPLYW6FYtIgCkUzGP0+X/";
"2q/l1WDx3RQQy7gZ1k001//6nc66moWUEJQyGuMK/z3zPLYW6FYtIgCkUzGP0+X/";
}; };
"Mobilizon.Web.Auth.Guardian" = { "Mobilizon.Web.Auth.Guardian" = {
secret_key = "N8x7/tf0kInLFS2poO22g6OGPiMjSrDEhmk29nFqV35q7hQ0DtBt/cRYCsqBNp2L"; secret_key = "N8x7/tf0kInLFS2poO22g6OGPiMjSrDEhmk29nFqV35q7hQ0DtBt/cRYCsqBNp2L";
@ -121,73 +141,83 @@
}; };
in in
{ {
default = default = pkgs.mkShell {
pkgs.mkShell { MIX_ENV = "dev";
MIX_ENV = "dev"; PGUSER = "mobilizon";
PGUSER = "mobilizon"; PGDATABASE = "mobilizon";
PGDATABASE = "mobilizon"; buildInputs = with pkgs; [
buildInputs = elixir
with pkgs; [ cmake
imagemagick
nodejs
inotify-tools
(pkgs.writeShellApplication {
name = "build";
runtimeInputs = [
elixir elixir
cmake
imagemagick
nodejs nodejs
inotify-tools
(pkgs.writeShellApplication {
name = "build";
runtimeInputs = [ elixir nodejs ];
text = ''
mix deps.get
mix deps.nix
mix deps.compile
mix phx.digest
npm install
npm run build
'';
})
(pkgs.writeShellApplication {
name = "setup";
runtimeInputs = [ elixir postgresql ];
text = ''
cat ${mobilizonConfig} > config/runtime.exs
# We assume the database already exists
sudo -u postgres psql -d mobilizon << SQL
create extension if not exists postgis;
create extension if not exists unaccent;
create extension if not exists pg_trgm;
SQL
mix ecto.migrate
'';
})
(pkgs.writeShellApplication {
name = "start";
runtimeInputs = [ elixir ];
text = ''
mix phx.server
'';
})
(pkgs.writeShellApplication {
name = "clean";
runtimeInputs = [ postgresql ];
text = ''
rm -rf deps/ _build/ node_modules/
sudo -u postgres psql -c "DROP DATABASE mobilizon;"
sudo systemctl restart postgresql.service
'';
})
]; ];
}; text = ''
}); mix deps.get
mix deps.nix
mix deps.compile
mix phx.digest
npm install
npm run build
'';
})
(pkgs.writeShellApplication {
name = "setup";
runtimeInputs = [
elixir
postgresql
];
text = ''
cat ${mobilizonConfig} > config/runtime.exs
# We assume the database already exists
sudo -u postgres psql -d mobilizon << SQL
create extension if not exists postgis;
create extension if not exists unaccent;
create extension if not exists pg_trgm;
SQL
mix ecto.migrate
'';
})
(pkgs.writeShellApplication {
name = "start";
runtimeInputs = [ elixir ];
text = ''
mix phx.server
'';
})
(pkgs.writeShellApplication {
name = "clean";
runtimeInputs = [ postgresql ];
text = ''
rm -rf deps/ _build/ node_modules/
sudo -u postgres psql -c "DROP DATABASE mobilizon;"
sudo systemctl restart postgresql.service
'';
})
];
};
}
);
nixosModules.devSetup = { config, lib, pkgs, ... }: nixosModules.devSetup =
{
config,
lib,
pkgs,
...
}:
let let
cfg = config.mobilizonDevEnvironment; cfg = config.mobilizonDevEnvironment;
in in
{ {
options.mobilizonDevEnvironment = { options.mobilizonDevEnvironment = {
enable = lib.mkEnableOption enable = lib.mkEnableOption (lib.mdDoc "development environment for Mobilizon");
(lib.mdDoc "development environment for Mobilizon");
user = lib.mkOption { user = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Unix user that runs the backend application to connect to the database"; description = "Unix user that runs the backend application to connect to the database";
@ -217,9 +247,7 @@
}; };
overlays.default = final: prev: { overlays.default = final: prev: { inherit (self.packages."${prev.system}") mobilizon; };
inherit (self.packages."${prev.system}") mobilizon;
};
checks = forAllSystems (system: { checks = forAllSystems (system: {
inherit (self.packages.${system}) mobilizon; inherit (self.packages.${system}) mobilizon;
@ -238,120 +266,197 @@
lib = { lib = {
# Patch the logos in the source tree of a mobilizon-frontend package before building. # Patch the logos in the source tree of a mobilizon-frontend package before building.
# Can be used to construct the argument for .overrideAttrs on mobilizon-frontend. # Can be used to construct the argument for .overrideAttrs on mobilizon-frontend.
mobilizonLogosOverride = icons: mobilizonLogosOverride =
icons:
let let
inherit (icons) logo favicon; inherit (icons) logo favicon;
in in
old: { old: {
postPatch = '' postPatch =
cp '${logo}' src/assets/logo.svg ''
cp '${logo}' src/assets/logo.svg
magick convert \
-resize x16 \
-gravity center \
-crop 16x16+0+0 \
-flatten \
-colors 256 \
'${favicon}' \
public/img/icons/favicon-16x16.png
magick convert \
-resize x32 \
-gravity center \
-crop 32x32+0+0 \
-flatten \
-colors 256 \
'${favicon}' \
public/img/icons/favicon-32x32.png
magick convert \
-resize x16 \
-gravity center \
-crop 16x16+0+0 \
-flatten \
-colors 256 \
'${favicon}' \
favicon-16x16.ico
magick convert \
-resize x32 \
-gravity center \
-crop 32x32+0+0 \
-flatten \
-colors 256 \
'${favicon}' \
favicon-32x32.ico
magick convert \
-resize x48 \
-gravity center \
-crop 48x48+0+0 \
-flatten \
-colors 256 \
'${favicon}' \
favicon-48x48.ico
magick convert \
favicon-16x16.ico \
favicon-32x32.ico \
favicon-48x48.ico \
public/favicon.ico
rm favicon-16x16.ico favicon-32x32.ico favicon-48x48.ico
cp '${favicon}' public/img/icons/favicon.svg
cp '${favicon}' public/img/icons/safari-pinned-tab.svg
magick convert \
'${favicon}' \
-gravity center \
-extent 630x350 \
public/img/mobilizon_default_card.png
magick convert \
-background '#e08c96' \
'${logo}' \
-resize 366x108 \
public/img/mobilizon_logo.png
'' + nixpkgs.lib.concatMapStrings
({ resize, filename }: ''
magick convert \ magick convert \
-resize x${resize} \ -resize x16 \
-gravity center \
-crop 16x16+0+0 \
-flatten \
-colors 256 \
'${favicon}' \ '${favicon}' \
public/img/icons/${filename} public/img/icons/favicon-16x16.png
'') magick convert \
[ -resize x32 \
{ resize = "180"; filename = "apple-touch-icon.png"; } -gravity center \
{ resize = "180"; filename = "apple-touch-icon-180x180.png"; } -crop 32x32+0+0 \
{ resize = "152"; filename = "apple-touch-icon-152x152.png"; } -flatten \
{ resize = "120"; filename = "apple-touch-icon-120x120.png"; } -colors 256 \
{ resize = "76"; filename = "apple-touch-icon-76x76.png"; } '${favicon}' \
{ resize = "60"; filename = "apple-touch-icon-60x60.png"; } public/img/icons/favicon-32x32.png
{ resize = "192"; filename = "android-chrome-192x192.png"; }
{ resize = "512"; filename = "android-chrome-512x512.png"; }
{ resize = "192"; filename = "android-chrome-maskable-192x192.png"; } magick convert \
{ resize = "512"; filename = "android-chrome-maskable-512x512.png"; } -resize x16 \
{ resize = "128"; filename = "badge-128x128.png"; } -gravity center \
{ resize = "144"; filename = "icon-144x144.png"; } -crop 16x16+0+0 \
{ resize = "168"; filename = "icon-168x168.png"; } -flatten \
{ resize = "256"; filename = "icon-256x256.png"; } -colors 256 \
{ resize = "48"; filename = "icon-48x48.png"; } '${favicon}' \
{ resize = "72"; filename = "icon-72x72.png"; } favicon-16x16.ico
{ resize = "96"; filename = "icon-96x96.png"; }
{ resize = "144"; filename = "msapplication-icon-144x144.png"; } magick convert \
{ resize = "150"; filename = "mstile-150x150.png"; } -resize x32 \
{ resize = "192"; filename = "android-chrome-192x192.png"; } -gravity center \
{ resize = "512"; filename = "android-chrome-512x512.png"; } -crop 32x32+0+0 \
{ resize = "192"; filename = "android-chrome-maskable-192x192.png"; } -flatten \
{ resize = "512"; filename = "android-chrome-maskable-512x512.png"; } -colors 256 \
]; '${favicon}' \
favicon-32x32.ico
magick convert \
-resize x48 \
-gravity center \
-crop 48x48+0+0 \
-flatten \
-colors 256 \
'${favicon}' \
favicon-48x48.ico
magick convert \
favicon-16x16.ico \
favicon-32x32.ico \
favicon-48x48.ico \
public/favicon.ico
rm favicon-16x16.ico favicon-32x32.ico favicon-48x48.ico
cp '${favicon}' public/img/icons/favicon.svg
cp '${favicon}' public/img/icons/safari-pinned-tab.svg
magick convert \
'${favicon}' \
-gravity center \
-extent 630x350 \
public/img/mobilizon_default_card.png
magick convert \
-background '#e08c96' \
'${logo}' \
-resize 366x108 \
public/img/mobilizon_logo.png
''
+
nixpkgs.lib.concatMapStrings
(
{ resize, filename }:
''
magick convert \
-resize x${resize} \
'${favicon}' \
public/img/icons/${filename}
''
)
[
{
resize = "180";
filename = "apple-touch-icon.png";
}
{
resize = "180";
filename = "apple-touch-icon-180x180.png";
}
{
resize = "152";
filename = "apple-touch-icon-152x152.png";
}
{
resize = "120";
filename = "apple-touch-icon-120x120.png";
}
{
resize = "76";
filename = "apple-touch-icon-76x76.png";
}
{
resize = "60";
filename = "apple-touch-icon-60x60.png";
}
{
resize = "192";
filename = "android-chrome-192x192.png";
}
{
resize = "512";
filename = "android-chrome-512x512.png";
}
{
resize = "192";
filename = "android-chrome-maskable-192x192.png";
}
{
resize = "512";
filename = "android-chrome-maskable-512x512.png";
}
{
resize = "128";
filename = "badge-128x128.png";
}
{
resize = "144";
filename = "icon-144x144.png";
}
{
resize = "168";
filename = "icon-168x168.png";
}
{
resize = "256";
filename = "icon-256x256.png";
}
{
resize = "48";
filename = "icon-48x48.png";
}
{
resize = "72";
filename = "icon-72x72.png";
}
{
resize = "96";
filename = "icon-96x96.png";
}
{
resize = "144";
filename = "msapplication-icon-144x144.png";
}
{
resize = "150";
filename = "mstile-150x150.png";
}
{
resize = "192";
filename = "android-chrome-192x192.png";
}
{
resize = "512";
filename = "android-chrome-512x512.png";
}
{
resize = "192";
filename = "android-chrome-maskable-192x192.png";
}
{
resize = "512";
filename = "android-chrome-maskable-512x512.png";
}
];
}; };
}; };
formatter = forAllSystems (system: nixpkgsFor.${system}.nixfmt-rfc-style);
}; };
} }

View file

@ -7,7 +7,10 @@ in
{ {
name = "mobilizon"; name = "mobilizon";
meta.maintainers = with lib.maintainers; [ minijackson erictapen ]; meta.maintainers = with lib.maintainers; [
minijackson
erictapen
];
nodes.server = nodes.server =
{ pkgs, ... }: { pkgs, ... }: