momo/main [pioneer]: Add erpnext #238
83
flake.lock
83
flake.lock
|
@ -89,6 +89,31 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"devshell_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"erpnext",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"erpnext",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1685972731,
|
||||||
|
"narHash": "sha256-VpwVUthxs3AFgvWxGTHu+KVDnS/zT3xkCtmjX2PjNQs=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "devshell",
|
||||||
|
"rev": "6b2554d28d46bfa6e24b941e999a145760dad0e1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "devshell",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"digga": {
|
"digga": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"darwin": [
|
"darwin": [
|
||||||
|
@ -129,6 +154,30 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"erpnext": {
|
||||||
|
"inputs": {
|
||||||
|
"agenix": [
|
||||||
|
"agenix"
|
||||||
|
],
|
||||||
|
"devshell": "devshell_2",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1689622186,
|
||||||
|
"narHash": "sha256-6GaWBmm3B4bSNlO5h2q7C3YfXfMp8wgowClAg79JfYc=",
|
||||||
|
"ref": "main",
|
||||||
|
"rev": "28a47059b7b723f2709a4f81384015ae4e8f8562",
|
||||||
|
"revCount": 28,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.pub.solar/axeman/erpnext-nix"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"ref": "main",
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.pub.solar/axeman/erpnext-nix"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -199,7 +248,7 @@
|
||||||
},
|
},
|
||||||
"flake-utils_3": {
|
"flake-utils_3": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems"
|
"systems": "systems_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1687171271,
|
"lastModified": 1687171271,
|
||||||
|
@ -283,6 +332,22 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1689534811,
|
||||||
|
"narHash": "sha256-jnSUdzD/414d94plCyNlvTJJtiTogTep6t7ZgIKIHiE=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "6cee3b5893090b0f5f0a06b4cf42ca4e60e5d222",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1672791794,
|
"lastModified": 1672791794,
|
||||||
|
@ -329,6 +394,7 @@
|
||||||
"darwin": "darwin",
|
"darwin": "darwin",
|
||||||
"deploy": "deploy",
|
"deploy": "deploy",
|
||||||
"digga": "digga",
|
"digga": "digga",
|
||||||
|
"erpnext": "erpnext",
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
"home": "home",
|
"home": "home",
|
||||||
"latest": "latest",
|
"latest": "latest",
|
||||||
|
@ -352,6 +418,21 @@
|
||||||
"type": "github"
|
"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"
|
||||||
|
}
|
||||||
|
},
|
||||||
"utils": {
|
"utils": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1667395993,
|
"lastModified": 1667395993,
|
||||||
|
|
18
flake.nix
18
flake.nix
|
@ -38,6 +38,9 @@
|
||||||
nvfetcher.url = "github:berberman/nvfetcher";
|
nvfetcher.url = "github:berberman/nvfetcher";
|
||||||
nvfetcher.inputs.nixpkgs.follows = "nixos";
|
nvfetcher.inputs.nixpkgs.follows = "nixos";
|
||||||
nvfetcher.inputs.flake-compat.follows = "flake-compat";
|
nvfetcher.inputs.flake-compat.follows = "flake-compat";
|
||||||
|
|
||||||
|
erpnext.url = "git+https://git.pub.solar/axeman/erpnext-nix?ref=main";
|
||||||
|
erpnext.inputs.agenix.follows = "agenix";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
|
@ -49,6 +52,7 @@
|
||||||
agenix,
|
agenix,
|
||||||
deploy,
|
deploy,
|
||||||
nvfetcher,
|
nvfetcher,
|
||||||
|
erpnext,
|
||||||
...
|
...
|
||||||
} @ inputs:
|
} @ inputs:
|
||||||
digga.lib.mkFlake
|
digga.lib.mkFlake
|
||||||
|
@ -73,7 +77,12 @@
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
latest = {};
|
latest = {
|
||||||
|
overlays = [
|
||||||
|
erpnext.overlays.default
|
||||||
|
erpnext.overlays.pythonOverlay
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
lib = import ./lib {lib = digga.lib // nixos.lib;};
|
lib = import ./lib {lib = digga.lib // nixos.lib;};
|
||||||
|
@ -124,6 +133,11 @@
|
||||||
#})
|
#})
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
pioneer-momo-koeln = {
|
||||||
|
modules = [
|
||||||
|
erpnext.nixosModules.erpnext
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
importables = rec {
|
importables = rec {
|
||||||
profiles =
|
profiles =
|
||||||
|
@ -132,7 +146,7 @@
|
||||||
users = digga.lib.rakeLeaves ./users;
|
users = digga.lib.rakeLeaves ./users;
|
||||||
};
|
};
|
||||||
suites = with profiles; rec {
|
suites = with profiles; rec {
|
||||||
base = [base-user users.root users.barkeeper];
|
base = [base-user cachix users.root users.barkeeper];
|
||||||
|
|
||||||
pioneer-momo-koeln = base;
|
pioneer-momo-koeln = base;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
|
latestModulesPath,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
|
@ -10,6 +11,12 @@
|
||||||
|
|
||||||
./caddy.nix
|
./caddy.nix
|
||||||
./keycloak.nix
|
./keycloak.nix
|
||||||
|
./erpnext.nix
|
||||||
|
|
||||||
|
"${latestModulesPath}/services/web-servers/caddy/default.nix"
|
||||||
|
];
|
||||||
|
disabledModules = [
|
||||||
|
"services/web-servers/caddy/default.nix"
|
||||||
];
|
];
|
||||||
|
|
||||||
pub-solar.core.lite = true;
|
pub-solar.core.lite = true;
|
||||||
|
|
38
hosts/pioneer-momo-koeln/erpnext.nix
Normal file
38
hosts/pioneer-momo-koeln/erpnext.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
self,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
age.secrets.erpnext-admin-password = {
|
||||||
|
file = "${self}/secrets/admin-password.age";
|
||||||
|
mode = "700";
|
||||||
|
owner = "erpnext";
|
||||||
|
};
|
||||||
|
age.secrets.erpnext-db-root-password = {
|
||||||
|
file = "${self}/secrets/database-root-password.age";
|
||||||
|
mode = "700";
|
||||||
|
owner = "erpnext";
|
||||||
|
};
|
||||||
|
age.secrets.erpnext-db-user-password = {
|
||||||
|
file = "${self}/secrets/database-user-password.age";
|
||||||
|
mode = "700";
|
||||||
|
owner = "erpnext";
|
||||||
|
};
|
||||||
|
|
||||||
|
# erpnext
|
||||||
|
services.erpnext = {
|
||||||
|
enable = true;
|
||||||
|
domain = "erp.momo.koeln";
|
||||||
|
|
||||||
|
# Secrets
|
||||||
|
adminPasswordFile = config.age.secrets.erpnext-admin-password.path;
|
||||||
|
database.rootPasswordFile = config.age.secrets.erpnext-db-root-password.path;
|
||||||
|
database.userPasswordFile = config.age.secrets.erpnext-db-user-password.path;
|
||||||
|
|
||||||
|
# Required to enable caddy
|
||||||
|
caddy = {};
|
||||||
|
};
|
||||||
|
}
|
|
@ -7,7 +7,6 @@
|
||||||
# Use the GRUB 2 boot loader.
|
# Use the GRUB 2 boot loader.
|
||||||
boot.loader.systemd-boot.enable = false;
|
boot.loader.systemd-boot.enable = false;
|
||||||
boot.loader.grub.enable = true;
|
boot.loader.grub.enable = true;
|
||||||
boot.loader.grub.version = 2;
|
|
||||||
# boot.loader.grub.efiSupport = true;
|
# boot.loader.grub.efiSupport = true;
|
||||||
# boot.loader.grub.efiInstallAsRemovable = true;
|
# boot.loader.grub.efiInstallAsRemovable = true;
|
||||||
# boot.loader.efi.efiSysMountPoint = "/boot/efi";
|
# boot.loader.efi.efiSysMountPoint = "/boot/efi";
|
||||||
|
|
|
@ -4,6 +4,9 @@ channels: final: prev: {
|
||||||
inherit
|
inherit
|
||||||
(channels.latest)
|
(channels.latest)
|
||||||
nixd
|
nixd
|
||||||
|
erpnext-app
|
||||||
|
frappe-app
|
||||||
|
frappe-erpnext-assets
|
||||||
;
|
;
|
||||||
|
|
||||||
haskellPackages =
|
haskellPackages =
|
||||||
|
@ -21,4 +24,10 @@ channels: final: prev: {
|
||||||
});
|
});
|
||||||
|
|
||||||
vimPlugins = prev.vimPlugins // {inherit (channels.latest.vimPlugins) nvim-lspconfig;};
|
vimPlugins = prev.vimPlugins // {inherit (channels.latest.vimPlugins) nvim-lspconfig;};
|
||||||
|
|
||||||
|
python3 = prev.python3.override {
|
||||||
|
packageOverrides = pyfinal: pyprev: {
|
||||||
|
inherit (channels.latest.python3.pkgs) bench erpnext frappe;
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
12
profiles/cachix/default.nix
Normal file
12
profiles/cachix/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
folder = ./.;
|
||||||
|
toImport = name: value: folder + ("/" + name);
|
||||||
|
filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key && key != "default.nix";
|
||||||
|
imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder));
|
||||||
|
in {
|
||||||
|
inherit imports;
|
||||||
|
}
|
10
profiles/cachix/pub-solar.nix
Normal file
10
profiles/cachix/pub-solar.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
nix.settings = {
|
||||||
|
substituters = [
|
||||||
|
"https://pub-solar.cachix.org"
|
||||||
|
];
|
||||||
|
trusted-public-keys = [
|
||||||
|
"pub-solar.cachix.org-1:ZicXIxKgdxMtgSJECWR8iihZxHRvu8ObL4n2cuBmtos="
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
BIN
secrets/erpnext-admin-password.age
Normal file
BIN
secrets/erpnext-admin-password.age
Normal file
Binary file not shown.
31
secrets/erpnext-db-root-password.age
Normal file
31
secrets/erpnext-db-root-password.age
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 uYcDNw R6BTv8G6nl8CNTmjRcMm/WhL4uKh8UdteVz7jVbXJzk
|
||||||
|
fVKaNaK6BZzstSp45ONpM9/pgKADQvlnNGF/k4QUFbM
|
||||||
|
-> ssh-rsa kFDS0A
|
||||||
|
nB5/Huns9tUmb5t0Giua6sd8ACjpbMNB06gcR9CQ13vktOfSXf9ii0qjME8nycmi
|
||||||
|
fZstK5O0E+nSJoF7wX/fVM/5FIzLjZmQQvPbixgOWsr7+egDBWVscbpbxN1sf5bi
|
||||||
|
WsRzSWzDhkrgNBEyg7M5VR2RcXf2FSNjss2d0DlKwIw6HU2F9vbR/COE28kREkPM
|
||||||
|
E3JsyOZ5qkgRgkdfyD8kuYkCKF/hnkW49bJWPnCIgR/Mc3RueGljQh+Tmc5fuk3I
|
||||||
|
I47xXsbkc4AAHkXVzw/HUsQUTemnWh90aMVFITkGF2ia4I2PV90lcJ7Y4rEi32pN
|
||||||
|
JYek8I+io1CpOwNN+WEMxMGZwv1xJdDGloC8aBTZzqGnbIjDAYlQ0QqRcfes9eNb
|
||||||
|
qUkW80wbPCPZOygAbnE9Ud0d+lsOyoKbsDMuLEM6hCL8XFAvkfHfmgseOvdoQBNk
|
||||||
|
+HMmf/SkZM6eMcdO3YWNShcQM6h/WCr7zOBs9JoUO7wnSsSy4T8ZXzjrvoiBzHCB
|
||||||
|
iiOZSHhvcX2ncflwCsP8yf2+eUp26qJRKM65ZKAhV6H3P4hC848RTusj+DRe76vE
|
||||||
|
Fr36Xol2jXw8aoNZXNobgemE+uRmpDeDdNfrI7nRDzjOPuBY1vs/CeW692w8/YjZ
|
||||||
|
3ExQswGdkBKbCyJL5O/hGd019+/0wETlE5Hlrovy/O4
|
||||||
|
-> ssh-ed25519 hPyiJw tDYF74+DRNWfAzHcCSFojlSYg4AgdthDM00UwG8LXSA
|
||||||
|
/fp2jPNxzYhCKXD5g/eqC31buMBFiel3jC+RfKit66M
|
||||||
|
-> ssh-ed25519 YFSOsg +tDnXLwW+oVgDsjI15yshcI2KaKhADgVR1oWIqYEVzY
|
||||||
|
R4pMIeQ78orCj7l5E8LD4ZSEtBhwtqcuSb6byOSuhTI
|
||||||
|
-> ssh-ed25519 iHV63A qwPRT9Sqcwfmp7KGSFXEj3RTWWiwD17wrEfwYx127TA
|
||||||
|
Od9cP3jhO0e2VI0St8m9d6P7TYib7ZNabdq808lhYsg
|
||||||
|
-> ssh-ed25519 1bbksA s8FuQCn8yQtRtwwZ0oVrTnptC31ad4eG4Hm6K/HGPgU
|
||||||
|
odI7d6qX2Om17wmsm/VdEqLGbdk6gUzprQ3i/zDxa+k
|
||||||
|
-> ssh-ed25519 BVsyTA fZB0tnkvNfiv8yY173NmhzHHlDQkScNtFE9GpE4lJAo
|
||||||
|
AYZyonEaAATvgz3OgSI4WNu2hJdDkNmhq5+0NU4+IJg
|
||||||
|
-> N-grease z=0OX_v` ,=~E
|
||||||
|
j78YWSSwlj6xEyJT5DZra8S037G4RNR3sf9hxZL5EMYlmMeaolb5B8oJN7tN5WbH
|
||||||
|
zPRZ9HIsRsA/+/76z4D8lqVJjZIfK7Hb7OoZb8EgyB0kJBycpd86IEUcfj65hEKU
|
||||||
|
|
||||||
|
--- 3k/CdnvpyhoxyB15yBikQjtyOiAUmGEkzxsGRObsBqg
|
||||||
|
`Æõªt`TÀ[‹Ö<>ÏÅÇzW–‚ùã³ó ãø>ÄAئãÆùã<>‹®^Psè<73>¡Nœ± iþ¯<C3BE>#`º,
|
31
secrets/erpnext-db-user-password.age
Normal file
31
secrets/erpnext-db-user-password.age
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 uYcDNw 5YJH2FYCKHSwNXFVrfzRTB37pmd4mL8y/I4pieU84RQ
|
||||||
|
JQKHK97WkTC9QO1GNZv/q3VZUgcisrKc1twqtLPkKOo
|
||||||
|
-> ssh-rsa kFDS0A
|
||||||
|
e0nMtUJhAAk5d36AIyS2p7N+RbO7J6oSyxPap4dIoReCEjGJej7qMuYTm7nD3DK/
|
||||||
|
8XpTflPskKMXHXNkjyQ/H9FcTFwaHBmSoRJLo0lVFfCROzyXiTpKowdqeRRp9ss7
|
||||||
|
9Fj0vc9tdKfHDm3h4UyBnOAL9sZ3/49VNbnARI5luUoikVtKeIGR7hwU9AvMCcIh
|
||||||
|
YXiqhQRGUZx1w+vIaiD/lr0Qwf2bVIH+w9Gg5C53ROlNDuV8plHRFKJZJAnnUn5k
|
||||||
|
4YrcCjiIL3VtwLKK/O14wOwcdSOt3Q0GnMAJMqriVHGxZqeZDAlQaacEDcLRN3wx
|
||||||
|
GCzMbGRY8JEVrrHDr/wOcbjhrKd1nX1LnKVD8yVwxFtToLFmg7Vk50B1l62sXsFa
|
||||||
|
1Dpb5t4gh3zu0GAfgALEQ88LxEk+31n59noSjgMCwSKCuU5uUx1hrEx+sDifOzYV
|
||||||
|
zlNNzkuPqzvxlmpU5q8OOiJHJ0hY7RcL9i2dO57nl1dg8r9MkhRw3d7z/zLcAmjG
|
||||||
|
rtgDib8tvnKz+azLA77J+SiijJaVM9dQQf0aWchcid3WbXv+LTYHB4SETfborujg
|
||||||
|
tYF48SFHo4c1+FGiz/kBsb9paJNoSikqcsP6rV0HVl9fwkHtMZpPlF5843Eh1XM6
|
||||||
|
BLQMQOuabR5NQSRrDB42WQ2t08Dd7tcNf6A0seHR4GM
|
||||||
|
-> ssh-ed25519 hPyiJw 9RYiF1PRsRWNopGSVJpPe52zUNEl6Yu3q5aqoLxXWRo
|
||||||
|
L2+cuDp6S4IViqkmTR6XF7ey39cWm2xh8wQnh5OxlXQ
|
||||||
|
-> ssh-ed25519 YFSOsg pyU//r9w5oA4WqBjTivOCV0soTgM7URPcp1sB3VYiRk
|
||||||
|
G92ulppLfvGXDe2vYkgVg60s3oKxq2YEx260EzSRL80
|
||||||
|
-> ssh-ed25519 iHV63A h04fyhCuz8JUX4Fl4uD7xDrO3Cbm4fto21BK8EFJ3FY
|
||||||
|
25NrhusX8PTjf8esrERbpMOS+OnwnGgR1oBTFp7Rync
|
||||||
|
-> ssh-ed25519 1bbksA K5FpHSD72LKfwnJcN8qKLGf+3shNVfmo2Pamh7IopEs
|
||||||
|
yDnkTUv6tRirnvdjYXVJoklLDXf6n/VBYCiCM2UaYfU
|
||||||
|
-> ssh-ed25519 BVsyTA +vWsqL/+5gpnn8ygD5RlSlJDbmvKAd7L3sk/jAOKRQc
|
||||||
|
EwuoXHYlTO+gdM7SA/TMmpXw8RGSKoRpYqjmfuYrKrw
|
||||||
|
-> ..6XqV-grease 1 #+:[Jz D v8hZh
|
||||||
|
VaqjfUTgm4UiD8LaSgxeZaLdFM8DVEnBOxG6FMgqUbf2IQUTOk3Odsb0SYfzCax8
|
||||||
|
B4uXP5eXc8FgZAhME7Pv0eJHQ9kcP90BIf+YbbSs0PAWBp0cl9YIhadhMS4vmWA
|
||||||
|
--- kb+aOKZo3hrIIQpxxOc5bz9r0ZAPDtcHVGxdHoAfcnc
|
||||||
|
ÔåöòÇZ2©mŠ´6ïv&¿¦õ÷ÂÞR?çi|¦_<òcqt˜<74>²ýS¾Ñ¯ÏGü02ÁÞÈ’
|
||||||
|
;$‡a<E280A1>‡~Y
|
|
@ -18,4 +18,7 @@ let
|
||||||
];
|
];
|
||||||
in {
|
in {
|
||||||
"keycloak-database-password.age".publicKeys = allKeys;
|
"keycloak-database-password.age".publicKeys = allKeys;
|
||||||
|
"erpnext-admin-password.age".publicKeys = allKeys;
|
||||||
|
"erpnext-db-root-password.age".publicKeys = allKeys;
|
||||||
|
"erpnext-db-user-password.age".publicKeys = allKeys;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue