]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Add chatons infos
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Mon, 22 Aug 2022 07:58:06 +0000 (09:58 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Sun, 9 Apr 2023 15:16:26 +0000 (17:16 +0200)
56 files changed:
flakes/diaspora/default.nix
flakes/etherpad-lite/default.nix
flakes/mastodon/default.nix
flakes/mediagoblin/default.nix
flakes/paste/paste/paste.py
lib/private/default.nix
modules/private/buildbot/default.nix
modules/private/chatons.nix [new file with mode: 0644]
modules/private/coturn.nix
modules/private/databases/mariadb_replication.nix
modules/private/databases/postgresql_replication.nix
modules/private/default.nix
modules/private/dns.nix
modules/private/ftp.nix
modules/private/gemini/default.nix
modules/private/gitolite/default.nix
modules/private/irc.nix
modules/private/mail/dovecot.nix
modules/private/mail/postfix.nix
modules/private/mail/sympa.nix
modules/private/monitoring/default.nix
modules/private/pub/default.nix
modules/private/system/backup-2.nix
modules/private/system/eldiron.nix
modules/private/system/monitoring-1.nix
modules/private/tasks/default.nix
modules/private/vpn/default.nix
modules/private/websites/default.nix
modules/private/websites/immae/chatons/immae-eu.properties [deleted file]
modules/private/websites/immae/chatons/service-etherpad.properties [deleted file]
modules/private/websites/immae/production.nix
modules/private/websites/tools/cloud/default.nix
modules/private/websites/tools/commento/default.nix
modules/private/websites/tools/cryptpad/default.nix
modules/private/websites/tools/dav/default.nix
modules/private/websites/tools/diaspora/default.nix
modules/private/websites/tools/ether/default.nix
modules/private/websites/tools/games/codenames/default.nix
modules/private/websites/tools/games/terraforming-mars/default.nix
modules/private/websites/tools/git/default.nix
modules/private/websites/tools/im/default.nix
modules/private/websites/tools/kanboard/farm.nix
modules/private/websites/tools/mail/default.nix
modules/private/websites/tools/mastodon/default.nix
modules/private/websites/tools/mgoblin/default.nix
modules/private/websites/tools/peertube/default.nix
modules/private/websites/tools/tools/default.nix
modules/private/websites/tools/tools/dokuwiki.nix
modules/private/websites/tools/tools/phpbb.nix
modules/private/websites/tools/tools/shaarli.nix
modules/private/websites/tools/tools/ttrss.nix
modules/private/websites/tools/tools/wallabag.nix
modules/private/websites/tools/tools/yourls.nix
modules/private/websites/tools/visio/default.nix
pkgs/webapps/mantisbt_2/default.nix
pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix

index 619c55078dfb69045ac1174f07d8126a117450c6..f4038ad671c04c86dcb31fad50b52a92f9959736 100644 (file)
@@ -45,6 +45,7 @@ let
   '';
   diaspora = stdenv.mkDerivation {
     name = "diaspora";
+    version = src.version;
     inherit diaspora_src;
     builder = writeText "build_diaspora" ''
       source $stdenv/setup
index 21bce2875254023f54aae98e7c87c19f2cc68da7..d1af7f7ed8c136ea259025e8440bcdc57e22d6e0 100644 (file)
@@ -15,8 +15,8 @@ let
   # nix files are built using node2nix -i node-packages.json
   allModules = lib.attrsets.genAttrs moduleNames
     (name: (callPackage (./modules + "/${name}/node-packages.nix") { inherit nodeEnv; }).${name});
-  toPassthru = pkg: {
-    inherit varDir allModules nodejs;
+  toPassthru = pkg: moduleNames: {
+    inherit varDir allModules nodejs moduleNames;
     withModules = withModules pkg;
   };
   withModules = pkg: toModules:
@@ -29,9 +29,10 @@ let
           ln -s ${varDir}/ep_initialized/${n.packageName} $out/node_modules/${n.packageName}/.ep_initialized
         fi
       '';
+      modulesNames = map (n: n.packageName) modules;
       newEtherpad = pkg.overrideAttrs(old: {
         installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallModule modules);
-        passthru = toPassthru newEtherpad;
+        passthru = toPassthru newEtherpad moduleNames;
       });
     in newEtherpad;
   # built using node2nix -l package-lock.json
@@ -54,6 +55,7 @@ let
   package = stdenv.mkDerivation rec {
     name = "etherpad-lite-${src.version}";
     src = node-environment;
+    version = src.version;
     installPhase = ''
       mkdir -p $out
       mkdir $out/node_modules
@@ -61,6 +63,6 @@ let
       chmod u+w $out/src/static/js/
       ln -s ../src $out/node_modules/ep_etherpad-lite
       '';
-    passthru = toPassthru package;
+    passthru = toPassthru package [];
   };
 in package
index 80bae39b4d84f06b48f5267f7351852868ad40c6..5d32c23234b89e0103ebe662114ae397b7155974 100644 (file)
@@ -72,6 +72,7 @@ let
 in
 stdenv.mkDerivation {
   name = "mastodon";
+  version = src.version;
   inherit mastodon_with_yarn;
   builder = writeText "build_mastodon" ''
       source $stdenv/setup
index f50d1c33f57b76a0d3bf112dae0d7344faeebeb9..47cc6280a2a0a4e13b3a42519f2653827227d22e 100644 (file)
@@ -143,8 +143,8 @@ let
   pluginNames = [ "basicsearch" ];
   allPlugins = lib.attrsets.genAttrs pluginNames
     (name: callPackage (./plugins + "/${name}") {});
-  toPassthru = pkg: {
-    inherit allPlugins;
+  toPassthru = pkg: plugins: {
+    inherit allPlugins plugins;
     withPlugins = withPlugins pkg;
   };
   withPlugins = pkg: toPlugins:
@@ -153,7 +153,7 @@ let
       toBuildPlugin = n: "ln -s ${n} mediagoblin/plugins/${n.pluginName}";
       newMediagoblin = pkg.overrideAttrs(old: {
         postBuild = old.postBuild + "\n" + builtins.concatStringsSep "\n" (map toBuildPlugin plugins);
-        passthru = toPassthru newMediagoblin;
+        passthru = toPassthru newMediagoblin plugins;
       });
     in newMediagoblin;
   package = stdenv.mkDerivation rec {
@@ -208,6 +208,6 @@ let
       '';
     buildInputs = [ makeWrapper automake autoconf which nodePackages.bower nodejs python ];
     propagatedBuildInputs = with gst_all_1; [ python gst-libav gst-plugins-good gst-plugins-bad gst-plugins-ugly gstreamer ];
-    passthru = toPassthru package;
+    passthru = toPassthru package [];
   };
 in package
index 86666b8697d1b4a8ab969842bcc608e75190fb5d..3172de5fe9e9931283db9fe5952aac4a0282aff0 100644 (file)
@@ -10,9 +10,32 @@ import mimetypes
 
 magic = magic.Magic(mime=True)
 
+mit_license = """
+Copyright (c) 2022 Immae
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+"""
+
 config = {
         "directory": os.environ["PASTE_DIRECTORY"],
         "self_paste_id": "abcd123",
+        "license_paste_id": "license",
         "max_content_length": 16 * 1000 * 1000
         }
 
@@ -33,6 +56,8 @@ def read_paste(paste_id):
         if mime.startswith("text/x-script."):
             mime="text/plain"
         return (content, mime)
+    elif paste_id == config["license_paste_id"]:
+        return (mit_license, "text/plain")
     else:
         abort(404)
 
@@ -69,9 +94,11 @@ $ curl -X POST --data-binary @{self} {host}
 -> GET {paste}/download
    force download of file
 </pre>
-<a href="{paste}/py">Get the source</a>
+<a href="{paste}/py">Get the source</a><br />
+Software licensed under the terms of the <a href="{host}/license">MIT license</a>
 '''.format(host=url_for('post_paste', _external=True, _scheme="https"),
                  paste=url_for('get_paste', _external=True, _scheme="https", paste_id=config["self_paste_id"]),
+                 license=url_for('get_paste', _external=True, _scheme="https", paste_id=config["license_paste_id"]),
                  self=os.path.basename(__file__)
                  ), mimetype="text/html")
 
index c7d753a30e8ffb7542ef905d0b23abc167c71a38..86dd8408146025ad1bbc326fb5ce35feb4ae6076 100644 (file)
@@ -1,4 +1,4 @@
-{}:
+{ pkgs }:
 {
   # This adds header colors to the builds, but it rebuilds the whole
   # world from scratch, so only use it to debug!
index 3ee1f8be3b46d1de9dfba9008b3ec811878071db..d9e5966edc82d525eb15ae9285fd0e6836ad5ffe 100644 (file)
@@ -16,6 +16,29 @@ in
   };
 
   config = lib.mkIf config.myServices.buildbot.enable {
+    myServices.chatonsProperties.hostings.buildbot = {
+      file.datetime = "2022-08-21T10:37:00";
+      hosting = {
+        name = "Buildbot";
+        description = "Python-based continuous integration testing framework";
+        type = "INSTANCE";
+        website = "https://git.immae.eu";
+        logo = "https://www.buildbot.net/img/icon.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+        guide.user = "https://www.immae.eu/docs/forge-logicielle.html";
+      };
+      software = {
+        name = "Buildbot";
+        website = "https://www.buildbot.net/";
+        license.url = "https://github.com/buildbot/buildbot/blob/master/LICENSE";
+        license.name = "GNU General Public License v2.0";
+        version = pkgs.buildbot.version;
+        source.url = "https://github.com/buildbot/buildbot";
+      };
+    };
     nixpkgs.overlays = [
       (self: super: {
         follow-systemd-unit = self.writeScriptBin "follow-systemd-unit" ''
diff --git a/modules/private/chatons.nix b/modules/private/chatons.nix
new file mode 100644 (file)
index 0000000..7f5ae0e
--- /dev/null
@@ -0,0 +1,156 @@
+{ config, lib, pkgs, nodes, ... }:
+let
+  concatValue = value: if lib.isList value then builtins.concatStringsSep "," value else builtins.toString value;
+  toProperties = properties: builtins.concatStringsSep "\n" (
+    lib.collect
+      (p: !(lib.isAttrs p))
+      (lib.mapAttrsRecursive
+        (path: value: builtins.concatStringsSep "." (builtins.filter (f: f != "") path) + " = " + (concatValue value))
+        properties));
+  before = name: {
+    "${name}" = {
+      status.level = "OK";
+      status.description = "OK";
+      install.type = "PACKAGE";
+      registration.load = "OPEN";
+    };
+    host = {
+      name = "Hetzner";
+      server.type = "PHYSICAL";
+      provider.type = "HOSTEDSERVER";
+      server.distribution = "NixOS";
+      country.name = "Allemagne";
+      country.code = "DE";
+    };
+  };
+  after = name: {
+    file = {
+      class = name;
+      protocol = "ChatonsInfos-0.5";
+      generator = "Nix derivation";
+    };
+    "${name}" = {
+      legal.url = "https://www.immae.eu/mentions.html";
+      guide.technical = "https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/";
+      contact.url = "https://www.immae.eu/contacts_fr.html";
+      contact.email = config.myEnv.tools.contact;
+      startdate = "01/01/2019";
+    };
+  };
+  organization = {
+    file = {
+      class = "organization";
+      protocol = "ChatonsInfos-0.5";
+      datetime = "2021-01-11T22:23:00";
+      generator = "Nix derivation";
+    };
+    organization = {
+      country.name = "France";
+      country.code = "FR";
+      name = "ImmaeEu";
+      description = "ImmaeEu est un CHATONS des Alpes-Maritimes";
+      website = "https://www.immae.eu";
+      logo = "https://assets.immae.eu/logo.jpg";
+      socialnetworks = {
+        diaspora = "https://diaspora.immae.eu/people/1a185f29cc76cb35";
+        facebook = "https://www.facebook.com/ismael.bouya";
+        mastodon = "https://mastodon.immae.eu/@immae";
+        peertube = "https://peertube.immae.eu/accounts/immae/";
+        twitter = "https://twitter.com/_immae";
+      };
+      chatrooms = {
+        xmpp = "ismael@immae.fr";
+        irc = "immae@freenode";
+        matrix = "#support:immae.eu";
+      };
+      contact.url = "https://www.immae.eu/contacts_fr.html";
+      contact.email = config.myEnv.tools.contact;
+      legal.url = "https://www.immae.eu/mentions.html";
+      guide.technical = "https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/";
+      guide.user = "https://www.immae.eu/docs";
+      status.level = "ACTIVE";
+      status.description = "En activité";
+      startdate = "01/01/2019";
+      type = "COMPANY";
+      owner = {
+        logo = "https://assets.immae.eu/logo.jpg";
+        name = "Ismaël Bouya";
+        website = "https://www.immae.eu";
+      };
+      memberof.chatons = {
+        startdate = "01/07/2019";
+        status.level = "ACTIVE";
+        status.description = "Participe au collectif";
+      };
+    };
+  };
+  toOrganizationProperties = name: pkgs.writeText name (toProperties organization + "\n" + (
+    builtins.concatStringsSep "\n" (lib.mapAttrsToList
+      (n: v: "subs.${n} = https://www.immae.eu/.well-known/chatonsinfos/service-${n}.properties") mergedServices
+    )) + "\n" + (
+    builtins.concatStringsSep "\n" (lib.mapAttrsToList
+      (n: v: "subs.hosting-${n} = https://www.immae.eu/.well-known/chatonsinfos/hosting-${n}.properties") mergedHostings
+    )));
+  toHostingProperties = name: content: pkgs.writeText name (toProperties (lib.recursiveUpdate (before "hosting") (lib.recursiveUpdate content (after "hosting"))));
+  toServiceProperties = name: content: pkgs.writeText name (toProperties (lib.recursiveUpdate (before "service") (lib.recursiveUpdate content (after "service"))));
+
+  cfg = config.myServices.chatonsProperties;
+  mergedServices = lib.foldr (v: o: lib.recursiveUpdate o v) {} (lib.mapAttrsToList (k: v: v.config.myServices.chatonsProperties.services) nodes);
+  mergedHostings = lib.foldr (v: o: lib.recursiveUpdate o v) {} (lib.mapAttrsToList (k: v: v.config.myServices.chatonsProperties.hostings) nodes);
+in {
+  options.myServices.chatonsProperties.enable = lib.mkEnableOption "Enable chatons properties";
+  options.myServices.chatonsProperties.organization = lib.mkOption {
+    type = lib.types.attrsOf lib.types.unspecified;
+    default = {};
+    description = ''
+      nested attrs of strings or arrays of strings
+    '';
+  };
+  options.myServices.chatonsProperties.services = lib.mkOption {
+    type = lib.types.attrsOf lib.types.unspecified;
+    default = {};
+    description = ''
+      nested attrs of strings or arrays of strings
+    '';
+  };
+  options.myServices.chatonsProperties.hostings = lib.mkOption {
+    type = lib.types.attrsOf lib.types.unspecified;
+    default = {};
+    description = ''
+      nested attrs of strings or arrays of strings
+    '';
+  };
+  config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.hostings.infogerance = {
+      file.datetime = "2022-08-27T18:50:00";
+      hosting = {
+        name = "Infogérance";
+        description = "Administration de serveurs";
+        website = "https://www.immae.eu/";
+        logo = "https://assets.immae.eu/logo.jpg";
+        type = "HOSTEDSERVER";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+    };
+    services.websites.env.production.vhostConfs.immae_production.extraConfig = let
+      chatons = pkgs.runCommand "chatons" {} ''
+        mkdir -p $out
+        cp ${toOrganizationProperties "immae-eu"} $out/immae-eu.properties
+        ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (n: c: "cp ${toHostingProperties n c} $out/hosting-${n}.properties") mergedHostings)}
+        ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (n: c: "cp ${toServiceProperties n c} $out/service-${n}.properties") mergedServices)}
+      '';
+    in [
+      ''
+        Alias /.well-known/chatonsinfos ${chatons}
+        <Directory ${chatons}>
+          Options Indexes FollowSymLinks MultiViews Includes
+          AllowOverride None
+          Require all granted
+        </Directory>
+      ''
+    ];
+  };
+}
index 41e836b27b2ee2cea0caca4e88ad38d04c0a316a..d8b02c5dd6a5fd8b950394622b2689e3b424b5f3 100644 (file)
@@ -1,6 +1,26 @@
-{ config, name, lib, ... }:
+{ config, name, lib, pkgs, ... }:
 {
   config = lib.mkIf (name == "eldiron") {
+    myServices.chatonsProperties.services.coturn = {
+      file.datetime = "2022-08-27T19:00:00";
+      service = {
+        name = "Coturn";
+        description = "coturn TURN server";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "FULL";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "coturn";
+        website = "https://github.com/coturn/coturn";
+        license.url = "https://github.com/coturn/coturn/blob/master/LICENSE";
+        license.name = "3-Clause BSD License";
+        version = pkgs.coturn.version;
+        source.url = "https://github.com/coturn/coturn";
+      };
+    };
     networking.firewall.allowedTCPPorts = [
       config.services.coturn.alt-listening-port
       config.services.coturn.alt-tls-listening-port
index 68e6f7fdd809590e503d35d7e4793539b9d695a2..efe55a333413c1b2a476dd5029737c893f7d266f 100644 (file)
@@ -73,6 +73,26 @@ in
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.hostings.mysql-replication = {
+      file.datetime = "2022-08-27T15:00:00";
+      hosting = {
+        name = "Mysql replication";
+        description = "Replication of mysql database";
+        website = "db-1.immae.eu";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "MariaDB";
+        website = "https://mariadb.org/";
+        license.url = "https://github.com/MariaDB/server/blob/10.11/COPYING";
+        license.name = "GNU General Public License v2.0";
+        version = pkgs.mariadb.version;
+        source.url = "https://github.com/MariaDB/server";
+      };
+    };
     users.users.mysql = {
       description = "MySQL server user";
       group = "mysql";
index 135bbed0d90bfbc9cd239727ab3ddbfc5a88e649..67eb33fc04849aa76cc5c8cbe618785ebc7179b5 100644 (file)
@@ -50,6 +50,26 @@ in
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.hostings.postgresql-replication = {
+      file.datetime = "2022-08-27T15:00:00";
+      hosting = {
+        name = "PostgreSQL replication";
+        description = "Replication of PostgreSQL database";
+        website = "db-1.immae.eu";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "PostgreSQL";
+        website = "https://www.postgresql.org/";
+        license.url = "https://www.postgresql.org/about/licence/";
+        license.name = "The PostgreSQL Licence";
+        version = pkgs.postgresql.version;
+        source.url = "https://git.postgresql.org/gitweb/?p=postgresql.git;a=summary";
+      };
+    };
     users.users.postgres = {
       name = "postgres";
       uid = config.ids.uids.postgres;
index d2a11d0c0f0c9c24e0df72b1af82613272775ddd..09ed090e3365a796d70d2977a62852f4d66e9639 100644 (file)
@@ -15,6 +15,7 @@ set = {
   mariadbReplication = ./databases/mariadb_replication.nix;
   redisReplication = ./databases/redis_replication.nix;
   openldapReplication = ./databases/openldap_replication.nix;
+  chatonsProperties = ./chatons.nix;
 
   websites = ./websites;
   gemini = ./gemini;
index 81cf25ec2085e768323cde1d6a7fbb755727e316..8fc40454b78b3bd4df6196c4071ded05d923485e 100644 (file)
       (_: v: "${n} IN MX ${v.mx.priority} ${v.mx.subdomain}.${conf.name}.")
       mxes);
   in lib.mkIf config.myServices.dns.enable {
+    myServices.chatonsProperties.hostings.dns-secondaire = {
+      file.datetime = "2022-08-22T02:00:00";
+      hosting = {
+        name = "DNS secondaire";
+        description = "DNS secondaire";
+        website = "ns1.immae.eu";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "bind9";
+        website = pkgs.bind.meta.homepage;
+        license.url = pkgs.bind.meta.license.url;
+        license.name = pkgs.bind.meta.license.fullName;
+        version = pkgs.bind.version;
+        source.url = "https://www.isc.org/download/";
+      };
+    };
     networking.firewall.allowedUDPPorts = [ 53 ];
     networking.firewall.allowedTCPPorts = [ 53 ];
     users.users.named.extraGroups = [ "keys" ];
index 63eda99a52af11530565b4011331b8c58169b316..d6742e22c289fd5089c7ebd207911d810586e403 100644 (file)
@@ -30,6 +30,74 @@ in
   };
 
   config = lib.mkIf config.myServices.ftp.enable {
+    myServices.chatonsProperties.services.espace-de-stockage = {
+      file.datetime = "2022-08-22T01:00:00";
+      service = {
+        name = "Espace de stockage";
+        description = "Compte FTP/SFTP";
+        logo = if pure-ftpd-enabled
+          then "https://www.pureftpd.org/project/pure-ftpd/images/favicon.png"
+          else if proftpd-enabled
+          then "http://proftpd.org/proftpd.png"
+          else "";
+        website = "ftp.immae.eu";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = if pure-ftpd-enabled then {
+        name = "Pure-ftpd";
+        website = "https://www.pureftpd.org/project/pure-ftpd/";
+        license.url = "https://github.com/jedisct1/pure-ftpd/blob/master/COPYING";
+        license.name = "MIT Licence";
+        version = package.version;
+        source.url = "https://github.com/jedisct1/pure-ftpd/";
+        modules = "openssh";
+      } else if proftpd-enabled then {
+        name = "ProFTPD";
+        website = "http://proftpd.org/";
+        license.url = "https://github.com/proftpd/proftpd/blob/master/COPYING";
+        license.name = "GNU General Public License v2.0";
+        version = pkgs.proftpd.version;
+        source.url = "https://github.com/proftpd/proftpd/";
+        modules = "openssh";
+      } else {};
+    };
+    #myServices.chatonsProperties.services.ftp = {
+    #  file.datetime = "2022-08-22T01:00:00";
+    #  service = {
+    #    name = "Comptes FTP";
+    #    description = "Compte FTP/SFTP";
+    #    logo = if pure-ftpd-enabled
+    #      then "https://www.pureftpd.org/project/pure-ftpd/images/favicon.png"
+    #      else if proftpd-enabled
+    #      then "http://proftpd.org/proftpd.png"
+    #      else "";
+    #    website = "ftp.immae.eu";
+    #    status.level = "OK";
+    #    status.description = "OK";
+    #    registration."" = ["MEMBER" "CLIENT"];
+    #    registration.load = "OPEN";
+    #    install.type = "PACKAGE";
+    #  };
+    #  software = if pure-ftpd-enabled then {
+    #    name = "Pure-ftpd";
+    #    website = "https://www.pureftpd.org/project/pure-ftpd/";
+    #    license.url = "https://github.com/jedisct1/pure-ftpd/blob/master/COPYING";
+    #    license.name = "MIT Licence";
+    #    version = package.version;
+    #    source.url = "https://github.com/jedisct1/pure-ftpd/";
+    #  } else if proftpd-enabled then {
+    #    name = "ProFTPD";
+    #    website = "http://proftpd.org/";
+    #    license.url = "https://github.com/proftpd/proftpd/blob/master/COPYING";
+    #    license.name = "GNU General Public License v2.0";
+    #    version = pkgs.proftpd.version;
+    #    source.url = "https://github.com/proftpd/proftpd/";
+    #  } else {};
+    #};
     security.acme.certs."ftp" = config.myServices.certificates.certConfig // {
       domain = "eldiron.immae.eu";
       # FIXME: make it global
index ffe8a121bfa2ff348f45df3b0924dcd1c0bee03a..600afbc9cab5342f0bd80a97dedba72c471ada2a 100644 (file)
@@ -14,6 +14,30 @@ in
 {
   options.myServices.gemini.enable = lib.mkEnableOption "enable Gemini capsule";
   config = lib.mkIf config.myServices.gemini.enable {
+    security.acme.certs.immae.postRun = ''
+      systemctl restart gemini.service
+    '';
+    myServices.chatonsProperties.hostings.gemini = {
+      file.datetime = "2022-08-27T18:00:00";
+      hosting = {
+        name = "Hébergement Gemini";
+        description = "Hébergement de capsules Gemini";
+        type = "INSTANCE";
+        website = "gemini://immae.eu";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "twins";
+        website = "https://code.rocketnine.space/tslocum/twins";
+        license.url = "https://code.rocketnine.space/tslocum/twins/src/branch/master/LICENSE";
+        license.name = "MIT License";
+        version = pkgs.twins.version;
+        source.url = "https://code.rocketnine.space/tslocum/twins";
+      };
+    };
     networking.firewall.allowedTCPPorts = [ 1965 ];
     systemd.services.gemini = {
       description = "Gemini capsule server";
index e34d4fa86d2f1f6a3f7a58511e2726ef1218dc25..d1325f839477f7378c07884937b310cbca4c1b5e 100644 (file)
@@ -11,6 +11,29 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.gitolite = {
+      file.datetime = "2022-08-21T10:01:00";
+      service = {
+        name = "Gitolite";
+        description = "Gitolite allows you to setup git hosting on a central server, with fine-grained access control and many more powerful features.";
+        website = "https://git.immae.eu";
+        logo = "https://git.immae.eu/cgit-css/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+        guide.user = "https://www.immae.eu/docs/forge-logicielle.html";
+      };
+      software = {
+        name = "Gitolite";
+        website = "https://gitolite.com/gitolite/";
+        license.url = "https://github.com/sitaramc/gitolite/blob/master/COPYING";
+        license.name = "GNU General Public License v2.0";
+        version = pkgs.gitolite.version;
+        source.url = "https://github.com/sitaramc/gitolite";
+      };
+    };
     myServices.ssh.modules = [{
       snippet = builtins.readFile ./ldap_gitolite.sh;
       dependencies = [ pkgs.gitolite ];
index bc0bfb4d4ba704eaa44194a03dae3f1dca3b61c5..427e74ea319c672a813b083f7b4d61b6410c9560 100644 (file)
@@ -17,6 +17,30 @@ in
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.bitlbee = {
+      file.datetime = "2022-08-27T19:00:00";
+      service = {
+        name = "Bitlbee";
+        description = "An IRC to other chat networks gateway";
+        logo = "https://www.bitlbee.org/style/logo.png";
+        website = "irc.immae.eu";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "FULL";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "BitlBee";
+        website = "https://www.bitlbee.org/";
+        license.url = "https://github.com/bitlbee/bitlbee/blob/master/COPYING";
+        license.name = "GNU General Public License v2.0";
+        version = pkgs.bitlbee.version;
+        source.url = "https://github.com/bitlbee/bitlbee";
+        modules = map (a: a.pname) config.services.bitlbee.plugins
+          ++ map (a: a.pname) config.services.bitlbee.libpurple_plugins;
+      };
+    };
     security.acme.certs."irc" = config.myServices.ircCerts // {
       domain = "irc.immae.eu";
       postRun = ''
index ae06f2f0f2b22f191a740c06d47f528f6017f7d4..3c3ae3d4cc08466a32549fd1dc3edc8fdc867c76 100644 (file)
@@ -13,6 +13,29 @@ let
 in
 {
   config = lib.mkIf config.myServices.mail.enable {
+    myServices.chatonsProperties.services.email = {
+      file.datetime = "2022-08-22T01:00:00";
+      service = {
+        name = "E-mail account";
+        description = "Compte e-mail avec configuration imap et smtp/pop3";
+        logo = "https://www.dovecot.org/wp-content/uploads/2021/09/favicon.ico";
+        website = "https://mail.immae.eu/";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Dovecot";
+        website = "https://www.dovecot.org/";
+        license.url = "https://github.com/dovecot/core/blob/main/COPYING";
+        license.name = "MIT and LGPLv2.1 Licenses";
+        version = pkgs.dovecot.version;
+        source.url = "https://github.com/dovecot/core";
+        modules = ["roundcube" "rainloop"] ++ map (a: a.pname) config.services.dovecot2.modules;
+      };
+    };
     systemd.services.dovecot2.serviceConfig.Slice = "mail.slice";
     secrets.keys."dovecot/ldap" = {
       user = config.services.dovecot2.user;
index 21f12ffabe99d6a31ee1643f4d7b3e9ba7e0a991..89fd096ecfa4d7e947e88c4843063117dc96213c 100644 (file)
@@ -1,6 +1,27 @@
 { lib, pkgs, config, nodes, ... }:
 {
   config = lib.mkIf config.myServices.mail.enable {
+    myServices.chatonsProperties.hostings.mx-backup = {
+      file.datetime = "2022-08-22T01:00:00";
+      hosting = {
+        name = "MX Backup";
+        description = "Serveur e-mail secondaire";
+        logo = "https://www.postfix.org/favicon.ico";
+        website = "https://mail.immae.eu/";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Postfix";
+        website = "http://www.postfix.org/";
+        license.url = "http://postfix.mirrors.ovh.net/postfix-release/LICENSE";
+        license.name = "Eclipse Public license (EPL 2.0) and IBM Public License (IPL 1.0)";
+        version = pkgs.postfix.version;
+        source.url = "http://www.postfix.org/download.html";
+      };
+    };
     secrets.keys = {
       "postfix/mysql_alias_maps" = {
         user = config.services.postfix.user;
index 420f706d67101b1a7b7848e328aa01be041edd94..75bc15ebc2c2deaac3c13c8271feabb0a3d815ee 100644 (file)
@@ -5,6 +5,28 @@ let
 in
 {
   config = lib.mkIf config.myServices.mail.enable {
+    myServices.chatonsProperties.services.sympa = {
+      file.datetime = "2022-08-22T00:50:00";
+      service = {
+        name = "Sympa";
+        description = "Mailing lists service";
+        website = "https://mail.immae.eu/sympa";
+        logo = "https://mail.immae.eu/static-sympa/icons/favicon_sympa.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Sympa";
+        website = "https://www.sympa.org/";
+        license.url = "https://github.com/sympa-community/sympa/blob/sympa-6.2/COPYING";
+        license.name = "GNU General Public License v2.0";
+        version = pkgs.sympa.version;
+        source.url = "https://github.com/sympa-community/sympa/";
+      };
+    };
     myServices.databases.postgresql.authorizedHosts = {
       backup-2 = [
         {
index 2e0773a2e05aa0900deedb717eebbfcfea77a33e..f48e20661e4d19a7070d73990bddbdab6a3bfdb9 100644 (file)
@@ -145,6 +145,28 @@ in
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.hostings.monitoring = lib.mkIf cfg.master {
+      file.datetime = "2022-08-27T16:00:00";
+      hosting = {
+        name = "Monitoring";
+        description = "Website and server health monitoring";
+        website = "https://status.immae.eu";
+        logo = "https://www.naemon.io/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "naemon";
+        website = "https://www.naemon.io/";
+        license.url = "https://github.com/naemon/naemon-core/blob/master/COPYING";
+        license.name = "GNU General Public License v2.0";
+        version = config.services.naemon.package.version;
+        source.url = "https://github.com/naemon/naemon-core";
+        modules = "livestatus,status-engine";
+      };
+    };
     services.nginx = lib.mkIf config.myServices.status.enable {
       virtualHosts."status.immae.eu".locations = objectsFiles // {
         "=/common/immae.cfg" = {
index 6a7855ed0f2c448ed0f7861dae19969f0b617b1a..bfe8c2af0f09e695922e018471d50e180990d587 100644 (file)
   };
 
   config = lib.mkIf config.myServices.pub.enable {
+    myServices.chatonsProperties.services.vm-like = {
+      file.datetime = "2022-08-22T01:00:00";
+      service = {
+        name = "Comptes shell";
+        description = "Compte shell cloisonné";
+        logo = "https://www.openssh.com/favicon.ico";
+        website = "pub.immae.eu";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Openssh";
+        website = "https://www.openssh.com/";
+        license.url = "https://github.com/openssh/openssh-portable/blob/master/LICENCE";
+        license.name = "BSD Licence";
+        version = pkgs.openssh.version;
+        source.url = "https://github.com/openssh/openssh-portable";
+      };
+    };
     myServices.ssh.modules = [{
       snippet = builtins.readFile ./ldap_pub.sh;
       dependencies = [ pkgs.coreutils ];
index 05b61e5e332ad58e104484b294db9fab758a151c..83caf68b278390db31dcb3acb07fb9db8b2d55dd 100644 (file)
     enable = true;
   };
 
+  myServices.chatonsProperties.hostings.rsync-backup = {
+    file.datetime = "2022-08-27T16:00:00";
+    hosting = {
+      name = "Rsync backups";
+      description = "Remote initiated rsync backups";
+      website = "backup-2.v.immae.eu";
+      status.level = "OK";
+      status.description = "OK";
+      registration.load = "OPEN";
+      install.type = "PACKAGE";
+    };
+    software = {
+      name = "rsync";
+      website = "https://rsync.samba.org/";
+      license.url = "https://rsync.samba.org/GPL.html";
+      license.name = "GNU General Public License version 3";
+      version = pkgs.rsync.version;
+      source.url = "https://github.com/WayneD/rsync";
+    };
+  };
+
   services.rsyncBackup = {
     mountpoint = "/backup2";
     profiles = config.myEnv.rsync_backup.profiles;
index f3bed7480499339edaef8a10af7bb31527440c1c..6ae3875a1f7753fbc50829cb926f312d45c2b0b0 100644 (file)
   services.netdata.config.health."enabled" = "no";
   services.netdata.config.web.mode = "none";
   users.users."${config.services.netdata.user}".extraGroups = [ "keys" ];
-  environment.etc."netdata/stream.conf".source = config.secrets.fullPaths."netdata-stream.conf";
+  services.netdata.configDir."stream.conf" = config.secrets.fullPaths."netdata-stream.conf";
   secrets.keys = {
     "netdata-stream.conf" = {
       user = config.services.netdata.user;
index 192aa93d7217c9c1afdea5e13aaa178858f5bb11..c45835f1616bb124ab2e9f5c14216a1e59164884 100644 (file)
   ];
 
   services.netdata.enable = true;
+  services.netdata.configDir."stream.conf" = config.secrets.fullPaths."netdata-stream.conf";
   services.netdata.config.web."allow dashboard from" = "localhost";
   services.netdata.config.web."allow badges from" = "*";
   services.netdata.config.web."allow streaming from" = "*";
   services.netdata.config.web."allow netdata.conf from" = "fd*";
   services.netdata.config.web."allow management from" = "fd*";
   networking.firewall.allowedTCPPorts = [ 19999 ];
-  environment.etc."netdata/stream.conf".source = config.secrets.fullPaths."netdata-stream.conf";
 
   secrets.keys = {
     "netdata-stream.conf" = {
index 7eb86882028c52f73153040dedc5317339139130..087885d837efa8f0522f75348612f7e500475bea 100644 (file)
@@ -86,6 +86,28 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.taskwarrior = {
+      file.datetime = "2022-08-22T00:00:00";
+      service = {
+        name = "Taskwarrior";
+        description = "Taskwarrior is Free and Open Source Software that manages your TODO list from the command line. Web interface and synchronization server";
+        website = "https://task.immae.eu/";
+        logo = "https://taskwarrior.org/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Taskwarrior";
+        website = "https://taskwarrior.org/";
+        license.url = "https://github.com/GothenburgBitFactory/taskwarrior/blob/develop/LICENSE";
+        license.name = "MIT License";
+        version = pkgs.webapps.taskwarrior-web.version;
+        source.url = "https://taskwarrior.org/download/";
+      };
+    };
     secrets.keys = {
       "webapps/tools-taskwarrior-web" = {
         user = "wwwrun";
index d4b197d2e9fc3bb33ebd4697788941bb3660c0c6..adee67c096ef27f4ff9834688fcc70a5414b9fb4 100644 (file)
@@ -8,6 +8,27 @@ in
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.hostings.vpn = {
+      file.datetime = "2022-08-27T18:00:00";
+      hosting = {
+        name = "VPN";
+        description = "VPN";
+        website = "https://vpn.immae.eu";
+        logo = "https://tinc-vpn.org/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "FULL";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "tinc";
+        website = "https://tinc-vpn.org/";
+        license.url = "https://www.gnu.org/licenses/old-licenses/gpl-2.0.html";
+        license.name = "GNU General Public License v2.0";
+        version = pkgs.tinc.version;
+        source.url = "https://tinc-vpn.org/git/browse?p=tinc";
+      };
+    };
     secrets.keys = {
       "tinc/key.priv" = {
         user = "root";
index 5920fbe75a9ea29099e6bc1602ee6698f98681bf..f22608362c4891eecd0c70e357744d7bd0e92d10 100644 (file)
@@ -102,6 +102,27 @@ in
   options.myServices.websites.enable = lib.mkEnableOption "enable websites";
 
   config = lib.mkIf config.myServices.websites.enable {
+    myServices.chatonsProperties.hostings.web = {
+      file.datetime = "2022-08-22T01:30:00";
+      hosting = {
+        name = "Hébergement Web";
+        description = "Service d'hébergement web avec php/mysql/postgresql";
+        website = "https://www.immae.eu";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Apache Httpd";
+        website = "https://httpd.apache.org/";
+        license.url = "https://www.apache.org/licenses/";
+        license.name = "Apache License Version 2";
+        version = pkgs.apacheHttpd.version;
+        source.url = "https://httpd.apache.org/download.cgi";
+        modules = "openssh,pure-ftpd";
+      };
+    };
     users.users.wwwrun.extraGroups = [ "keys" ];
     networking.firewall.allowedTCPPorts = [ 80 443 ];
 
diff --git a/modules/private/websites/immae/chatons/immae-eu.properties b/modules/private/websites/immae/chatons/immae-eu.properties
deleted file mode 100644 (file)
index 32b2d47..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# https://framagit.org/chatons/chatonsinfos/-/blob/master/MODELES/organization.properties
-
-# [File]
-file.class = organization
-file.protocol = ChatonsInfos-0.1
-file.datetime = 2021-01-11T22:23:00
-file.generator = Immae avec ses doigts
-
-# [Organisation]
-organization.country.name = France
-organization.country.code = FR
-organization.name = ImmaeEu
-organization.description = ImmaeEu est un CHATONS des Alpes Maritimes
-organization.website = https://www.immae.eu
-organization.logo = https://assets.immae.eu/logo.jpg
-organization.socialnetworks.diaspora = https://diaspora.immae.eu/people/1a185f29cc76cb35
-organization.socialnetworks.facebook = https://www.facebook.com/ismael.bouya
-organization.socialnetworks.mastodon = https://mastodon.immae.eu/@immae
-organization.socialnetworks.peertube = https://peertube.immae.eu/accounts/immae/
-organization.socialnetworks.twitter = https://twitter.com/_immae
-organization.chatrooms.xmpp = ismael@immae.fr
-organization.chatrooms.irc = immae@freenode
-organization.chatrooms.matrix = @immae:matrix.org
-organization.owner.name = Ismaël Bouya
-organization.owner.website = https://www.immae.eu
-organization.owner.logo = https://assets.immae.eu/logo.jpg
-organization.contact.url = https://www.immae.eu/contacts_fr.html
-organization.contact.email = contact@mail.immae.eu
-organization.legal.url = https://www.immae.eu/mentions.html
-organization.guide.technical = https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/
-organization.status.level = ACTIVE
-organization.status.description = En activité
-organization.startdate = 01/01/2019
-
-organization.memberof.chatons.startdate = 01/07/2019
-organization.memberof.chatons.status.level = ACTIVE
-organization.memberof.chatons.status.description = Participe au collectif
-
-# [Subs]
-# Un lien vers un fichier properties complémentaire (type URL, optionnel, ex. https://www.chapril.org/.well-known/chapril.properties).
-subs.etherpad = https://www.immae.eu/.well-known/chatonsinfos/service-etherpad.properties
-
-
-# [Metrics]
-#metrics.http.total.2020 =
-
diff --git a/modules/private/websites/immae/chatons/service-etherpad.properties b/modules/private/websites/immae/chatons/service-etherpad.properties
deleted file mode 100644 (file)
index cfcab1d..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-# service.properties
-
-# [File]
-# Classe du fichier (valeur parmi Federation/Organization/Service/Device, obligatoire).
-file.class = service
-
-# Version de l'ontologie utilisée utilisé (type STRING, recommandé).
-file.protocol = ChatonsInfos-0.1
-
-# Date et horaire de génération du fichier (type DATETIME, recommandé).
-file.datetime = 2021-01-04T00:01:00
-
-# Nom du générateur du fichier (type STRING, recommandé). Exemple : Florian avec ses doigts
-file.generator = Immae avec ses doigts
-
-
-# [Service]
-# Nom du service (type STRING, obligatoire). Exemple : Pad Exemple
-service.name = Etherpard
-
-# Description du service (type STRING, recommandé).
-service.description = Éditeur de texte collaboratif en temps réel. on peut y écrire simultanément.
-
-# Lien du site web du service (type URL, recommandé). Exemple : https://pad.exemple.ext
-service.website = https://ether.immae.eu
-
-# Lien du logo du service (type URL, recommandé, ex. https://www.chapril.org/.well-known/statoolinfos/chapril-logo-mini.png.
-service.logo = https://ether.immae.eu/favicon.ico
-
-# Lien de la page web des mentions légales du service (type URL, recommandé). Exemple : https://pad.exemple.ext/cgu.html
-service.legal.url = https://www.immae.eu/mentions.html
-
-# Lien de la documentation web du service (type URL, recommandé).
-service.guide.technical = https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/
-
-# Lien des aides web pour le service (type URL, recommandé).
-service.guide.user =  
-
-# Lien de la page de support du service (type URL, recommandé). Exemple : https://exemple.ext/contact.html
-service.contact.url = https://www.immae.eu/contacts_fr.html
-
-# Courriel du support du service (type EMAIL, recommandé). Exemple : contact@exemple.ext
-service.contact.email = contact@mail.immae.eu
-
-# Date d'ouverture du service (type DATE, recommandé). Exemple : 20/03/2020
-service.startdate = 01/01/2019
-
-# Date de fermeture du service (type DATE, optionnel).
-service.enddate = 
-
-# Statut du service (un parmi {OK,WARNING,ALERT,ERROR,OVER,VOID}, obligatoire).
-service.status.level = OK
-
-# Description du statut du service (type STRING, optionnel, exemple : mise à jour en cours)
-service.status.description = OK
-
-# Inscriptions requises pour utiliser le service (parmi None;Free;Member;Client, obligatoire). 
-service.registration = None
-
-# [Software]
-# Nom du logiciel (type STRING, obligatoire).
-software.name = Etherpad
-
-# Lien du site web du logiciel (type URL, recommandé).
-software.website = https://etherpad.org/
-
-# Lien web vers la licence du logiciel (type URL, obligatoire).
-software.license.url = https://github.com/ether/etherpad-lite/blob/develop/LICENSE
-
-# Nom de la licence du logiciel (type STRING, obligatoire).
-software.license.name = Apache License Version 2.0
-
-# Version du logiciel (type STRING, recommandé).
-software.version = 1.8.3
-
-# Lien web vers les sources du logiciel (type URL, recommandé).
-software.source.url = https://github.com/ether/etherpad-lite
-
-# Liste de modules optionnels installés (type VALUES, optionnel, ex. Nextcloud-Calendar,Nextcloud-Talk).
-software.modules = ep_align,ep_bookmark,ep_colors,ep_comments_page,ep_cursortrace,ep_delete_empty_pads,ep_embedmedia,ep_font_size,ep_headings2,ep_immae_buttons,ep_ldapauth,ep_line_height,ep_markdown,ep_mypads,ep_page_view,ep_previewimages,ep_ruler,ep_scrollto,ep_set_title_on_pad,ep_subscript_and_superscript,ep_timesliderdiff
-
-
-# [Host]
-# Nom de l'hébergeur de la machine qui fait tourner le service, dans le cas d'un auto-hébergement c'est vous ! (type STRING, obligatoire). Exemple : OVH.
-host.name = Hetzner
-
-# Description de l'hébergeur (type STRING, optionnel).
-host.description = 
-
-# Type de serveur (un parmi NANO, PHYSICAL, VIRTUAL, SHARED, CLOUD, obligatoire, ex. PHYSICAL).
-#   NANO : nano-ordinateur (Raspberry Pi, Olimex…)
-#   PHYSICAL : machine physique
-#   VIRTUAL : machine virtuelle
-#   SHARED : hébergement mutualisé
-#   CLOUD : infrastructure multi-serveurs
-host.server.type = PHYSICAL
-
-# Type d'hébergement (un parmi HOME, HOSTEDBAY, HOSTEDSERVER, OUTSOURCED, obligatoire, ex. HOSTEDSERVER).
-#   HOME : hébergement à domicile
-#   HOSTEDBAY : serveur personnel hébergé dans une baie d'un fournisseur
-#   HOSTEDSERVER : serveur d'un fournisseur
-#   OUTSOURCED : infrastructure totalement sous-traitée
-host.provider.type = HOSTEDSERVER
-
-# Si vous avez du mal à remplir les champs précédents, ce tableau pourra vous aider :
-#                  NANO    PHYSICAL    VIRTUAL    SHARED    CLOUD
-# HOME              pm        pm          vm      shared    cloud
-# HOSTEDBAY         --        pm          vm      shared    cloud
-# HOSTEDSERVER      --        pm          vm      shared    cloud
-# OUTSOURCED        --        --         vps      shared    cloud
-# Légendes : pm : physical machine ; vm : virtual machine ; vps : virtual private server.
-
-# Pays de l'hébergeur (type STRING, recommandé). Exemple : France
-host.country.name = Allemagne
-
-# Code pays de l'hébergeur (type STRING, recommandé). Exemple : FR
-host.country.code = DE
-
-
-
-# [Subs]
-# Un lien vers un fichier properties complémentaire (type URL, optionnel). Exemple : https://
-subs.foo = 
-
-# [Metrics]
-# Nom du métrique (type STRING, recommandé).
-metrics.http.total.name = Nombre total de requêtes HTTP
-
-# Description du métrique (type STRING, recommandé).
-metrics.http.total.description = Somme des requêtes HTTP ipv4 et ipv6.
-
-# Métrique à valeur anuelle (type NUMERIC, optionnel).
-metrics.http.total.2020 =
-
-# Métrique à valeur mensuelle (type MONTHS, optionnel).
-metrics.http.total.2020.months=
-
-# Métrique à valeur hebdomadaire (type WEEKS, optionnel).
-metrics.http.total.2020.weeks=
-
-# Métrique à valeur quotidienne (type DAYS, optionnel).
-metrics.http.total.2020.days=
-
-
-# Nom du métrique (type STRING, recommandé).
-metrics.visitors.total.name = Nombre total de visiteurs
-
-# Description du métrique (type STRING, recommandé).
-metrics.visitors.total.description = 
-
-# Métrique à valeur anuelle (type NUMERIC, optionnel).
-metrics.visitors.total.2020 =
-
-# Métrique à valeur mensuelle (type MONTHS, optionnel).
-metrics.visitors.total.2020.months=
-
-# Métrique à valeur hebdomadaire (type WEEKS, optionnel).
-metrics.visitors.total.2020.weeks=
-
-# Métrique à valeur quotidienne (type DAYS, optionnel).
-metrics.visitors.total.2020.days=
-
-
-# [Metrics spécifiques au service]
index e0f51e2e8f7a34587a67757a191c55ff10dde31c..95a8a41a8f174b008b531b986ae0483d78f6320b 100644 (file)
@@ -12,6 +12,7 @@ in {
   options.myServices.websites.immae.production.enable = lib.mkEnableOption "enable Immae's website";
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.enable = true;
     services.webstats.sites = [ { name = "www.immae.eu"; } ];
 
     services.websites.env.production.vhostConfs.immae_production = {
@@ -44,13 +45,6 @@ in {
           Require all granted
         </Directory>
 
-        Alias /.well-known/chatonsinfos ${./chatons}
-        <Directory ${./chatons}>
-          Options Indexes FollowSymLinks MultiViews Includes
-          AllowOverride None
-          Require all granted
-        </Directory>
-
         Alias /.well-known/matrix ${./matrix}
         <Directory ${./matrix}>
           Options Indexes FollowSymLinks MultiViews Includes
index a09b629e338d874070118e92396122e775a8d377..929fabbe151ba4181500af8be17c560da49b4a42 100644 (file)
@@ -48,6 +48,44 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.hostings.nextcloud = {
+      file.datetime = "2022-08-21T19:50:00";
+      hosting = {
+        name = "Nextcloud";
+        description = "The self-hosted productivity platform that keeps you in control";
+        website = "https://cloud.immae.eu/";
+        logo = "https://cloud.immae.eu/core/img/favicon.ico";
+        type = "INSTANCE";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+    };
+    myServices.chatonsProperties.services.nextcloud = {
+      file.datetime = "2022-08-21T19:50:00";
+      service = {
+        name = "Nextcloud";
+        description = "The self-hosted productivity platform that keeps you in control";
+        website = "https://cloud.immae.eu/";
+        logo = "https://cloud.immae.eu/core/img/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+        guide.user = "https://www.immae.eu/docs/nextcloud.html";
+      };
+      software = {
+        name = "Nextcloud";
+        website = "https://nextcloud.com/";
+        license.url = "https://github.com/nextcloud/server/blob/master/COPYING";
+        license.name = "GNU Affero General Public License v3.0";
+        version = nextcloud.version;
+        source.url = "https://github.com/nextcloud/server";
+        modules = map (a: a.appName) nextcloud.apps;
+      };
+    };
     services.websites.env.tools.modules = [ "proxy_fcgi" ];
 
     services.websites.env.tools.vhostConfs.cloud = {
index c36255b63e487c66b3c7701411df2aa5b7c92f1a..385b0d645ed884737d765cadf4abb29639262087 100644 (file)
@@ -12,6 +12,28 @@ in
     enable = lib.mkEnableOption "Enable commento website";
   };
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.commento = {
+      file.datetime = "2022-08-21T01:11:00";
+      service = {
+        name = "Commento";
+        description = "Commento is a fast, privacy-focused commenting platform";
+        website = "https://commento.immae.eu";
+        logo = "https://commento.immae.eu/images/logo.svg";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Commento";
+        website = "https://www.commento.io/";
+        license.url = "https://gitlab.com/commento/commento/-/blob/master/LICENSE";
+        license.name = "MIT License";
+        version = pkgs.commento.version;
+        source.url = "https://gitlab.com/commento/commento";
+      };
+    };
     secrets.keys = {
       "commento/env" = {
         permissions = "0400";
index 69b9877952575a2f8da7d0b33c925281fb658445..bea5c44f4cc37c07274eccb554672eae240a97d4 100644 (file)
@@ -32,6 +32,42 @@ in
 {
   options.myServices.websites.tools.cryptpad.enable = lib.mkEnableOption "Enable Cryptpad";
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.hostings.cryptpad = {
+      file.datetime = "2022-08-21T01:20:00";
+      hosting = {
+        name = "Cryptpad";
+        description = "Collaboration suite, encrypted and open-source";
+        website = "https://cryptpad.immae.eu/";
+        logo = "https://cryptpad.immae.eu/customize/favicon/main-favicon.png";
+        type = "INSTANCE";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+    };
+    myServices.chatonsProperties.services.cryptpad = {
+      file.datetime = "2022-08-21T01:20:00";
+      service = {
+        name = "Cryptpad";
+        description = "Collaboration suite, encrypted and open-source";
+        website = "https://cryptpad.immae.eu/";
+        logo = "https://cryptpad.immae.eu/customize/favicon/main-favicon.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["NONE" "FREE" "MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Cryptpad";
+        website = "https://cryptpad.org/";
+        license.url = "https://github.com/xwiki-labs/cryptpad/blob/main/LICENSE";
+        license.name = "GNU Affero General Public License v3.0";
+        version = pkgs.cryptpad.version;
+        source.url = "https://github.com/xwiki-labs/cryptpad";
+      };
+    };
     myServices.tools.cryptpad.farm.hosts.immaeEu = {
       inherit domain port;
       config = configFile;
index b3aa03deb7336c697c028b5bfdfcab704286826a..289a56979304a520554be31bf06a0fc491e56450 100644 (file)
@@ -27,6 +27,75 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services = {
+      davical = {
+        file.datetime = "2022-08-21T01:33:00";
+        service = {
+          name = "Davical";
+          description = "DAViCal is a server for calendar sharing";
+          website = "https://dav.immae.eu";
+          logo = "https://www.davical.org/images/logo.gif";
+          status.level = "OK";
+          status.description = "OK";
+          registration."" = ["MEMBER" "CLIENT"];
+          registration.load = "OPEN";
+          install.type = "PACKAGE";
+        };
+        software = {
+          name = "Davical";
+          website = "https://www.davical.org/";
+          license.url = "https://gitlab.com/davical-project/davical/-/blob/master/COPYING";
+          license.name = "GNU General Public License Version 2";
+          version = pkgs.webapps.davical.version;
+          source.url = "https://gitlab.com/davical-project/davical/";
+          modules = "infcloud";
+        };
+      };
+      #calendar = {
+      #  file.datetime = "2022-08-22T00:00:00";
+      #  service = {
+      #    name = "Calendar";
+      #    description = "Opensource CalDAV web client";
+      #    website = "https://dav.immae.eu/caldavzap/";
+      #    logo = "https://dav.immae.eu/caldavzap/images/infcloud_logo.svg";
+      #    status.level = "OK";
+      #    status.description = "OK";
+      #    registration."" = ["MEMBER" "CLIENT"];
+      #    registration.load = "OPEN";
+      #    install.type = "PACKAGE";
+      #  };
+      #  software = {
+      #    name = "InfCloud";
+      #    website = "https://inf-it.com/open-source/clients/infcloud/";
+      #    license.url = "https://www.gnu.org/licenses/agpl-3.0.en.html";
+      #    license.name = "GNU Affero General Public License (version 3.0)";
+      #    version = pkgs.webapps.infcloud.version;
+      #    source.url = "https://inf-it.com/open-source/clients/infcloud/";
+      #  };
+      #};
+      #contacts = {
+      #  file.datetime = "2022-08-22T00:00:00";
+      #  service = {
+      #    name = "Contacts";
+      #    description = "Opensource Carddav web client";
+      #    website = "https://dav.immae.eu/carddavmate/";
+      #    logo = "https://dav.immae.eu/caldavzap/images/infcloud_logo.svg";
+      #    status.level = "OK";
+      #    status.description = "OK";
+      #    registration."" = ["MEMBER" "CLIENT"];
+      #    registration.load = "OPEN";
+      #    install.type = "PACKAGE";
+      #  };
+      #  software = {
+      #    name = "InfCloud";
+      #    website = "https://inf-it.com/open-source/clients/infcloud/";
+      #    license.url = "https://www.gnu.org/licenses/agpl-3.0.en.html";
+      #    license.name = "GNU Affero General Public License (version 3.0)";
+      #    version = pkgs.webapps.infcloud.version;
+      #    source.url = "https://inf-it.com/open-source/clients/infcloud/";
+      #  };
+      #};
+    };
     system.activationScripts.davical = davical.activationScript;
     secrets.keys = davical.keys;
     services.websites.env.tools.modules = davical.apache.modules;
index 60e32ff6a9c4d325c6b7892ed1e9cc8fd5264c50..cba8ae4b9825f2a6ee001477f1f2357e4ac0d552 100644 (file)
@@ -10,6 +10,28 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.diaspora = {
+      file.datetime = "2022-08-21T01:39:00";
+      service = {
+        name = "Diaspora";
+        description = "The online social world where you are in control";
+        website = "https://diaspora.immae.eu";
+        logo = "https://diaspora.immae.eu/assets/apple-touch-icon-9f7c9cc3923b4817fbb25bfeb0dd5fd34638827fd9c82b5a03f7b68e6e90806f.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Diaspora*";
+        website = "https://diasporafoundation.org/";
+        license.url = "https://github.com/diaspora/diaspora/blob/develop/LICENSE";
+        license.name = "GNU Affero General Public License v3.0";
+        version = dcfg.package.version;
+        source.url = "https://github.com/diaspora/diaspora";
+      };
+    };
     users.users.diaspora.extraGroups = [ "keys" ];
 
     secrets.keys = {
index f1128b535fd79afa4ea44bc3f84d17b746c27b5c..acf9ec614c86b1fbfcb8748f58b89041ca629e35 100644 (file)
@@ -12,6 +12,29 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.etherpad = {
+      file.datetime = "2021-01-04T00:01:00";
+      service = {
+        name = "Etherpad";
+        description = "Éditeur de texte collaboratif en temps réel. on peut y écrire simultanément.";
+        website = "https://ether.immae.eu";
+        logo = "https://ether.immae.eu/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["NONE" "MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Etherpad";
+        website = "https://etherpad.org/";
+        license.url = "https://github.com/ether/etherpad-lite/blob/develop/LICENSE";
+        license.name = "Apache License Version 2.0";
+        version = ecfg.package.version;
+        source.url = "https://github.com/ether/etherpad-lite";
+        modules = ecfg.package.moduleNames;
+      };
+    };
     secrets.keys = {
       "webapps/tools-etherpad-apikey" = {
         permissions = "0400";
index 25eb62de6f13072e2abc7be58692aebdf7a0ad82..513678f541dbeb87d34c74e8d9ec0813bfb14348 100644 (file)
@@ -11,6 +11,28 @@ in
 {
   options.myServices.websites.games.codenames.enable = lib.mkEnableOption "Enable Codenames game";
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.codenames = {
+      file.datetime = "2022-08-27T14:08:00";
+      service = {
+        name = "Codenames Green";
+        description = "Co-op codenames app";
+        website = "https://codenames.games.immae.eu/";
+        logo = "https://codenames.games.immae.eu/images/apple-touch-icon.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["NONE"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Codenames Green";
+        website = "https://www.codenamesgreen.com/";
+        license.url = "https://github.com/jbowens/codenamesgreen/blob/master/package.json";
+        license.name = "MIT";
+        version = greenapid.version;
+        source.url = "https://github.com/jbowens/codenamesgreen";
+      };
+    };
     systemd.services.codenames_api = {
       description = "Api for codenames game";
       wantedBy = [ "multi-user.target" ];
index 0df5363ae42fba9f2470ebb5561c853c3b290c3a..0948a8c2bcbd9216db6b4971b6b69c5c6a117c50 100644 (file)
@@ -6,6 +6,28 @@ in
 {
   options.myServices.websites.games.terraforming-mars.enable = lib.mkEnableOption "Enable Terraforming mars game";
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.terraforming-mars = {
+      file.datetime = "2022-08-27T14:20:00";
+      service = {
+        name = "Terraforming Mars";
+        description = "Terraforming Mars Boardgame";
+        website = "https://terraforming-mars.games.immae.eu/";
+        logo = "https://terraforming-mars.games.immae.eu/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["NONE"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Terraforming Mars";
+        website = "https://github.com/terraforming-mars/terraforming-mars";
+        license.url = "https://github.com/terraforming-mars/terraforming-mars/blob/main/LICENSE";
+        license.name = "GNU General Public License v3.0";
+        version = "unversionned";
+        source.url = "https://github.com/terraforming-mars/terraforming-mars";
+      };
+    };
     systemd.services.terraforming-mars = {
       path = [ pkgs.nodejs pkgs.bashInteractive ];
       description = "Terraforming mars game";
index 8f611ee85fb40157c2a5ac988a8c0a53940a6bf8..8e40b42667d78ef704098aaf56f56cdd5c532a5c 100644 (file)
@@ -16,6 +16,30 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.mantisbt = {
+      file.datetime = "2022-08-21T10:08:00";
+      service = {
+        name = "MantisBT";
+        description = "Mantis Bug Tracker";
+        website = "https://git.immae.eu/mantisbt";
+        logo = "https://git.immae.eu/mantisbt/images/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+        guide.user = "https://www.immae.eu/docs/forge-logicielle.html";
+      };
+      software = {
+        name = "MantisBT";
+        website = "https://mantisbt.org/";
+        license.url = "https://opensource.org/licenses/gpl-license";
+        license.name = "GNU General Public License";
+        version = mantisbt.webRoot.version;
+        source.url = "https://github.com/mantisbt/mantisbt";
+        modules = mantisbt.webRoot.pluginNames;
+      };
+    };
     secrets.keys = mantisbt.keys;
     services.websites.env.tools.modules =
       gitweb.apache.modules ++
index 94dc4f81d242143e8e3561897d67ba21757dc951..372fa323e465ffa3a2529f858888eb4f96335cad 100644 (file)
@@ -8,6 +8,73 @@ in
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.converse = {
+      file.datetime = "2022-08-21T19:20:00";
+      service = {
+        name = "Converse";
+        description = "A free and open-source XMPP chat client in your browser";
+        website = "https://im.immae.fr/converse";
+        logo = "https://conversejs.org/docs/html/_static/favicon.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["NONE" "FREE"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Converse";
+        website = "https://conversejs.org/";
+        license.name = "Mozilla Public License 2.0";
+        license.url = "https://github.com/conversejs/converse.js/blob/master/LICENSE";
+        version = "9.1.1";
+        source.url = "https://github.com/conversejs/converse.js";
+      };
+    };
+    myServices.chatonsProperties.services.weechat-bridge = {
+      file.datetime = "2022-08-21T19:20:00";
+      service = {
+        name = "Weechat bridge";
+        description = "WeeChat web frontend";
+        website = "https://im.immae.fr/glowing-bear";
+        logo = "https://im.immae.fr/glowing-bear/assets/img/glowing_bear_128x128.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["NONE" "FREE"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Glowing bear";
+        website = "https://www.ejabberd.im/";
+        license.name = "GNU General Public License v3.0";
+        license.url = "https://github.com/processone/ejabberd";
+        version = pkgs.glowing-bear.version;
+        source.url = "https://github.com/glowing-bear/glowing-bear";
+      };
+    };
+    myServices.chatonsProperties.services.xmpp = {
+      file.datetime = "2022-08-21T19:20:00";
+      service = {
+        name = "XMPP";
+        description = "Universal messaging standard";
+        website = "https://im.immae.fr/";
+        logo = "https://xmpp.org/favicon-32x32.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "ejabberd";
+        website = "https://www.ejabberd.im/";
+        license.url = "https://github.com/processone/ejabberd/blob/master/COPYING";
+        license.name = "GNU GENERAL PUBLIC LICENSE Version 2";
+        version = pkgs.ejabberd.version;
+        source.url = "https://github.com/processone/ejabberd";
+        modules = "converse";
+      };
+    };
     services.websites.env.tools.vhostConfs.im = {
       certName   = "eldiron";
       addToCerts = true;
index 5e37292fddb6a913facecd2f3accd07add984ceb..a845429bddf61cd538bee35cc07c6342b0a2cf68 100644 (file)
@@ -73,6 +73,42 @@ in
   };
 
   config = lib.mkIf (builtins.length (builtins.attrNames cfg.instances) > 0) {
+    myServices.chatonsProperties.hostings.kanboard = {
+      file.datetime = "2022-08-21T19:40:00";
+      hosting = {
+        name = "Kanboard";
+        description = "Kanban project management software";
+        website = "https://tools.immae.eu/kanboard";
+        logo = "https://tools.immae.eu/kanboard/assets/img/favicon.png";
+        type = "INSTANCE";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+    };
+    myServices.chatonsProperties.services.kanboard = {
+      file.datetime = "2022-08-21T19:40:00";
+      service = {
+        name = "Kanboard";
+        description = "Kanban project management software";
+        website = "https://tools.immae.eu/kanboard";
+        logo = "https://tools.immae.eu/kanboard/assets/img/favicon.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Kanboard";
+        website = "https://kanboard.org/";
+        license.url = "https://github.com/kanboard/kanboard/blob/main/LICENSE";
+        license.name = "MIT License";
+        version = pkgs.kanboard.version;
+        source.url = "https://github.com/kanboard/kanboard";
+      };
+    };
     system.activationScripts.kanboard_farm_vardirs = {
       deps = [ "httpd" ];
       text = ''
index 390f7adb98dd37fcd11f23ededa22ee028b515f7..377410c5c553fa8eff9988c4bade83934af8720f 100644 (file)
@@ -21,6 +21,51 @@ in
   ];
 
   config = lib.mkIf cfg.enable {
+    #myServices.chatonsProperties.services.mail-rainloop = {
+    #  file.datetime = "2022-08-22T00:30:00";
+    #  service = {
+    #    name = "Rainloop";
+    #    description = "Simple, modern & fast web-based email client";
+    #    website = "https://mail.immae.eu/rainloop";
+    #    logo = "https://www.rainloop.net/static/img/logo-16x16.png";
+    #    status.level = "ERROR";
+    #    status.description = "Stopped due to CVE-2022-29360";
+    #    registration."" = ["MEMBER" "CLIENT"];
+    #    registration.load = "OPEN";
+    #    install.type = "PACKAGE";
+    #  };
+    #  software = {
+    #    name = "Rainloop";
+    #    website = "https://www.rainloop.net/";
+    #    license.url = "https://www.rainloop.net/licensing/";
+    #    license.name = "GNU Affero General Public License v3.0";
+    #    version = rainloop.webRoot.version;
+    #    source.url = "https://github.com/RainLoop/rainloop-webmail";
+    #  };
+    #};
+    #myServices.chatonsProperties.services.mail-roundcube = {
+    #  file.datetime = "2022-08-22T00:30:00";
+    #  service = {
+    #    name = "Roundcube";
+    #    description = "The Roundcube Webmail suite";
+    #    website = "https://mail.immae.eu/roundcube";
+    #    logo = "https://mail.immae.eu/roundcube/skins/elastic/images/favicon.ico";
+    #    status.level = "OK";
+    #    status.description = "OK";
+    #    registration."" = ["MEMBER" "CLIENT"];
+    #    registration.load = "OPEN";
+    #    install.type = "PACKAGE";
+    #  };
+    #  software = {
+    #    name = "Roundcube";
+    #    website = "https://roundcube.net/";
+    #    license.url = "https://github.com/roundcube/roundcubemail/blob/master/LICENSE";
+    #    license.name = "GNU General Public License v3.0";
+    #    version = roundcubemail.webRoot.version;
+    #    source.url = "https://github.com/roundcube/roundcubemail";
+    #    modules = map (a: a.pluginName) roundcubemail.webRoot.plugins ++ map (a: a.skinName) roundcubemail.webRoot.skins;
+    #  };
+    #};
     secrets.keys = roundcubemail.keys;
 
     services.websites.env.tools.modules =
index 37da3c38190e0ef13308887de47927af9f9981a1..94d2bc7b222ccc4a1721ee02198856d21f66cdff 100644 (file)
@@ -10,6 +10,28 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.mastodon = {
+      file.datetime = "2022-08-21T19:50:00";
+      service = {
+        name = "Mastodon";
+        description = "Your self-hosted, globally interconnected microblogging community";
+        website = "https://mastodon.immae.eu/";
+        logo = "https://mastodon.immae.eu/apple-touch-icon.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Mastodon";
+        website = "https://joinmastodon.org/";
+        license.url = "https://github.com/tootsuite/mastodon/blob/master/LICENSE";
+        license.name = "GNU General Public License v3.0";
+        version = mcfg.package.version;
+        source.url = "https://github.com/tootsuite/mastodon";
+      };
+    };
     secrets.keys."webapps/tools-mastodon" = {
       user = "mastodon";
       group = "mastodon";
index 1e5f5a0b8e501ca15425c85b2f530e076fb85579..24bb5c45e3774ee4b3c9f19c2b0824a9861afc9a 100644 (file)
@@ -9,6 +9,29 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.mediagoblin = {
+      file.datetime = "2022-08-21T20:00:00";
+      service = {
+        name = "Mediagoblin";
+        description = "MediaGoblin is a free software media publishing platform that anyone can run";
+        website = "https://mgoblin.immae.eu/";
+        logo = "https://mgoblin.immae.eu/mgoblin_static/images/goblin.ico";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Mediagoblin";
+        website = "https://mediagoblin.org/";
+        license.url = "http://www.gnu.org/licenses/agpl.html";
+        license.name = "GNU Affero General Public License";
+        version = mcfg.package.version;
+        source.url = "https://git.savannah.gnu.org/git/mediagoblin.git";
+        modules = map (a: a.pluginName) mcfg.package.plugins;
+      };
+    };
     secrets.keys."webapps/tools-mediagoblin" = {
       user = "mediagoblin";
       group = "mediagoblin";
index c491d92d4d976ea3354fe3ef43e33f462099f6e0..0269e8098de42ca771534b9bdab58c39e64488a5 100644 (file)
@@ -9,6 +9,42 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.hostings.peertube = {
+      file.datetime = "2022-08-21T20:00:00";
+      hosting = {
+        name = "Peertube";
+        description = "Free software to take back control of your videos";
+        website = "https://peertube.immae.eu/";
+        logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png";
+        type = "INSTANCE";
+        status.level = "OK";
+        status.description = "OK";
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+    };
+    myServices.chatonsProperties.services.peertube = {
+      file.datetime = "2022-08-21T20:00:00";
+      service = {
+        name = "Peertube";
+        description = "Free software to take back control of your videos";
+        website = "https://peertube.immae.eu/";
+        logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["MEMBER" "CLIENT"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Peertube";
+        website = "https://joinpeertube.org/";
+        license.url = "https://github.com/Chocobozzz/PeerTube/blob/develop/LICENSE";
+        license.name = "GNU Affero General Public License";
+        version = pcfg.package.version;
+        source.url = "https://github.com/Chocobozzz/PeerTube";
+      };
+    };
     immaeServices.peertube = {
       enable = true;
       configFile = config.secrets.fullPaths."webapps/tools-peertube";
index e640eb690d8ef241def1293b35b94c921567caf6..133ab9f766e1fa89b31181670e6990ce3e2a1dc4 100644 (file)
@@ -82,6 +82,39 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services = {
+      dokuwiki = dokuwiki.chatonsProperties;
+      shaarli = shaarli.chatonsProperties;
+      ttrss = ttrss.chatonsProperties;
+      wallabag = wallabag.chatonsProperties;
+      paste = {
+        file.datetime = "2022-08-22T00:15:00";
+        service = {
+          name = "Paste";
+          description = "A simple paster script with syntax highlight";
+          website = "https://tools.immae.eu/paste/";
+          logo = "https://assets.immae.eu/logo.jpg";
+          status.level = "OK";
+          status.description = "OK";
+          registration."" = ["MEMBER" "CLIENT"];
+          registration.load = "OPEN";
+          install.type = "PACKAGE";
+          guide.user = "https://tools.immae.eu/paste/";
+        };
+        software = {
+          name = "Paste";
+          website = "https://tools.immae.eu/paste/";
+          license.url = "https://tools.immae.eu/paste/license";
+          license.name = "MIT License";
+          version = "Unversioned";
+          source.url = "https://tools.immae.eu/paste/abcd123/py";
+        };
+      };
+    };
+    myServices.chatonsProperties.hostings = {
+      dokuwiki = dokuwiki.chatonsHostingProperties;
+      phpbb = phpbb.chatonsHostingProperties;
+    };
     secrets.keys =
       kanboard.keys
       // ldap.keys
index aee495ac3fb3af170cc12d9bd5acf4d79be19452..724168e1418b656a2b753aa00d5c21b3c6536399 100644 (file)
@@ -16,6 +16,43 @@ rec {
       install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
     '';
   };
+  chatonsHostingProperties = {
+    file.datetime = "2022-08-21T22:50:00";
+    hosting = {
+      name = "Dokuwiki";
+      description = "DokuWiki is a simple to use and highly versatile Open Source wiki software";
+      website = "https://tools.immae.eu/dokuwiki/";
+      logo = "https://tools.immae.eu/dokuwiki/lib/tpl/dokuwiki/images/apple-touch-icon.png";
+      type = "INSTANCE";
+      status.level = "OK";
+      status.description = "OK";
+      registration.load = "OPEN";
+      install.type = "PACKAGE";
+    };
+  };
+  chatonsProperties = {
+    file.datetime = "2022-08-21T22:50:00";
+    service = {
+      name = "Dokuwiki";
+      description = "DokuWiki is a simple to use and highly versatile Open Source wiki software";
+      website = "https://tools.immae.eu/dokuwiki/";
+      logo = "https://tools.immae.eu/dokuwiki/lib/tpl/dokuwiki/images/apple-touch-icon.png";
+      status.level = "OK";
+      status.description = "OK";
+      registration."" = ["MEMBER" "CLIENT"];
+      registration.load = "OPEN";
+      install.type = "PACKAGE";
+    };
+    software = {
+      name = "Dokuwiki";
+      website = "https://www.dokuwiki.org/dokuwiki";
+      license.url = "http://www.gnu.org/licenses/gpl-2.0.html";
+      license.name = "GNU General Public License Version 2";
+      version = webRoot.version;
+      source.url = "https://download.dokuwiki.org/";
+      modules = map (a: a.pluginName) webRoot.plugins;
+    };
+  };
   webRoot = dokuwiki.withPlugins (p: [ p.farmer p.todo ]);
   apache = rec {
     user = "wwwrun";
index 77845c33ce67796f517d73f0fee744be2055cb33..88c7817d135bd0d2a8d3470389cb196b2d0714f4 100644 (file)
@@ -12,6 +12,20 @@ rec {
       install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
     '';
   };
+  chatonsHostingProperties = {
+    file.datetime = "2022-08-21T22:50:00";
+    hosting = {
+      name = "phpBB";
+      description = "Forum software";
+      website = "https://tools.immae.eu/forum";
+      logo = "https://www.phpbb.com/favicon.ico";
+      type = "INSTANCE";
+      status.level = "OK";
+      status.description = "OK";
+      registration.load = "OPEN";
+      install.type = "PACKAGE";
+    };
+  };
   webRoot = phpbb;
   apache = rec {
     user = "wwwrun";
index d128465b8bc33c87872afd73fe3a3c3a5fdee6af..462de51d83ace575c46a9db391165173c2c737ee 100644 (file)
@@ -33,6 +33,29 @@ in rec {
       </Directory>
       '';
   };
+  chatonsProperties = {
+    file.datetime = "2022-08-21T22:50:00";
+    service = {
+      name = "Shaarli";
+      description = "The personal, minimalist, super-fast, database free, bookmarking service - community repo";
+      website = "https://tools.immae.eu/Shaarli/";
+      logo = "https://tools.immae.eu/Shaarli/tpl/default/img/apple-touch-icon.png";
+      status.level = "OK";
+      status.description = "OK";
+      registration."" = ["MEMBER" "CLIENT"];
+      registration.load = "OPEN";
+      install.type = "PACKAGE";
+    };
+    software = {
+      name = "Shaarli";
+      website = "https://shaarli.readthedocs.io/";
+      license.url = "https://github.com/shaarli/Shaarli/blob/master/COPYING";
+      license.name = "GNU General Public License Version 3";
+      version = webRoot.version;
+      source.url = "https://github.com/shaarli/Shaarli";
+      modules = "ldap-connection-patch";
+    };
+  };
   keys."webapps/tools-shaarli" = {
     user = apache.user;
     group = apache.group;
index f1842aa57f85a0185e9f3c23e067eb386eaeecce..c34817fa5052e92611272807a88006f8e30f3123 100644 (file)
@@ -16,6 +16,29 @@ rec {
       install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
     '';
   };
+  chatonsProperties = {
+    file.datetime = "2022-08-21T22:50:00";
+    service = {
+      name = "RSS";
+      description = "Tiny Tiny RSS is a free and open source web-based news feed (RSS/Atom) reader and aggregator";
+      website = "https://tools.immae.eu/ttrss/";
+      logo = "https://tools.immae.eu/ttrss/images/favicon.png";
+      status.level = "OK";
+      status.description = "OK";
+      registration."" = ["MEMBER" "CLIENT"];
+      registration.load = "OPEN";
+      install.type = "PACKAGE";
+    };
+    software = {
+      name = "Tiny Tiny RSS";
+      website = "https://tt-rss.org/";
+      license.url = "https://www.gnu.org/copyleft/gpl.html";
+      license.name = "GNU General Public License Version 3";
+      version = webRoot.version;
+      source.url = "https://git.tt-rss.org/fox/tt-rss.git/";
+      modules = map (p: p.pluginName) webRoot.plugins;
+    };
+  };
   keys."webapps/tools-ttrss" = {
     user = apache.user;
     group = apache.group;
index 0ebdb0ba3aea5bec0eaab98743397209df6d9530..8ec7c29219927091d08a23df34eb80879716f7bb 100644 (file)
@@ -64,6 +64,29 @@ rec {
               arguments: ['/run/wrappers/bin/sendmail -bs']
       '';
   };
+  chatonsProperties = {
+    file.datetime = "2022-08-21T22:50:00";
+    service = {
+      name = "Wallabag";
+      description = "wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely.";
+      website = "https://tools.immae.eu/wallabag/";
+      logo = "https://tools.immae.eu/wallabag/wallassets/themes/_global/img/appicon/apple-touch-icon-120.png";
+      status.level = "OK";
+      status.description = "OK";
+      registration."" = ["MEMBER" "CLIENT"];
+      registration.load = "OPEN";
+      install.type = "PACKAGE";
+    };
+    software = {
+      name = "Wallabag";
+      website = "https://wallabag.org/en";
+      license.url = "https://github.com/wallabag/wallabag/blob/master/COPYING.md";
+      license.name = "MIT License";
+      version = webappDir.version;
+      source.url = "https://github.com/wallabag/wallabag";
+      modules = "ldap-patch";
+    };
+  };
   webappDir = wallabag.override { ldap = true; wallabag_config = config.secrets.fullPaths."webapps/tools-wallabag"; };
   activationScript = ''
     install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
index 3717520298adf5d10772d9198b910fecd2bbc3cf..c59fae34cd0d5febb8449539685757fc3442fb0e 100644 (file)
@@ -39,6 +39,29 @@ rec {
       define( 'LDAPAUTH_USERCACHE_TYPE', 0);
     '';
   };
+  chatonsProperties = {
+    file.datetime = "2022-08-27T18:00:00";
+    service = {
+      name = "Yourls";
+      description = "Your own URL shortener";
+      website = "https://tools.immae.eu/url/admin/";
+      logo = "https://tools.immae.eu/url/images/favicon.gif";
+      status.level = "OK";
+      status.description = "OK";
+      registration."" = ["MEMBER" "CLIENT"];
+      registration.load = "FULL";
+      install.type = "PACKAGE";
+    };
+    software = {
+      name = "YOURLS";
+      website = "http://yourls.org/";
+      license.url = "https://github.com/YOURLS/YOURLS/blob/master/LICENSE";
+      license.name = "MIT License";
+      version = webRoot.version;
+      source.url = "https://github.com/YOURLS/YOURLS";
+      modules = map (a: a.pluginName) webRoot.plugins;
+    };
+  };
   webRoot = (yourls.override { yourls_config = config.secrets.fullPaths."webapps/tools-yourls"; }).withPlugins (p: [p.ldap]);
   apache = rec {
     user = "wwwrun";
index f9b2e59c0e9c071a61918ec1239d3a8f5f4c2170..7636732a3ba23db3b3c5fe3024de28049c311643 100644 (file)
@@ -8,6 +8,27 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
+    myServices.chatonsProperties.services.galene = {
+      file.datetime = "2022-08-21T22:45:00";
+      service = {
+        name = "Galene";
+        description = "The Galène videoconference server";
+        website = "https://visio.immae.eu/";
+        status.level = "OK";
+        status.description = "OK";
+        registration."" = ["NONE"];
+        registration.load = "OPEN";
+        install.type = "PACKAGE";
+      };
+      software = {
+        name = "Galene";
+        website = "https://galene.org/";
+        license.url = "https://github.com/jech/galene/blob/master/LICENCE";
+        license.name = "MIT License";
+        version = pkgs.galene.version;
+        source.url = "https://github.com/jech/galene";
+      };
+    };
     services.galene = {
       enable = true;
       httpPort = port;
index 5aa04d1b4574165bd07be60139a0d00dad2a67c3..466595d04095c06ae69ca57b5283b2f51b4b4492 100644 (file)
@@ -5,6 +5,7 @@ let
     (name: callPackage (./plugins + "/${name}") {});
   toPassthru = pkg: plugins: {
     inherit plugins allPlugins;
+    pluginNames = map (n: n.pluginName) plugins;
     withPlugins = withPlugins pkg;
   };
   withPlugins = pkg: toPlugins:
index dc6c7de0a79e431846f98497aa473867185324a1..1ab00c551c74469731d6a7c150ee3cf573883ccc 100644 (file)
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
     cp -a Source* $out/
     '';
   passthru = {
+    pluginName = "source-integration";
     selector = "Source*";
   };
 }