diff --git a/.cargo-husky/hooks/pre-commit b/.cargo-husky/hooks/pre-commit new file mode 100755 index 000000000..6b25f491c --- /dev/null +++ b/.cargo-husky/hooks/pre-commit @@ -0,0 +1,10 @@ +#!/bin/bash +set -e + +cargo +nightly fmt -- --check + +cargo +nightly clippy --workspace --tests --all-targets --all-features -- \ + -D warnings -D deprecated -D clippy::perf -D clippy::complexity -D clippy::dbg_macro + +cargo run -- --print-config-docs > config/defaults.hjson +git add config/defaults.hjson diff --git a/.drone.yml b/.drone.yml index 1602eac0f..cd3f58a7e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -44,6 +44,12 @@ steps: - cargo build - mv target/x86_64-unknown-linux-musl/debug/lemmy_server target/lemmy_server + - name: check defaults.hjson updated + image: ekidd/rust-musl-builder:1.51.0 + commands: + - target/lemmy_server --print-config-docs > config/defaults_current.hjson + - diff config/defaults.hjson config/defaults_current.hjson + - name: run federation tests image: node:alpine environment: diff --git a/Cargo.toml b/Cargo.toml index 153d9072f..aec5fe4d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -69,7 +69,7 @@ doku = "0.10.1" [dev-dependencies.cargo-husky] version = "1.5.0" default-features = false # Disable features which are enabled by default -features = ["precommit-hook", "run-cargo-fmt", "run-cargo-clippy"] +features = ["user-hooks"] [package.metadata.cargo-udeps.ignore] development = ["cargo-husky"] diff --git a/config/defaults.hjson b/config/defaults.hjson new file mode 100644 index 000000000..62e47e539 --- /dev/null +++ b/config/defaults.hjson @@ -0,0 +1,111 @@ +{ + // settings related to the postgresql database + "database": { + // Username to connect to postgres + "user": "lemmy", + // Password to connect to postgres + "password": "password", + // Host where postgres is running + "host": "localhost", + // Port where postgres can be accessed + "port": 5432, + // Name of the postgres database for lemmy + "database": "lemmy", + // Maximum number of active sql connections + "pool_size": 5 + }, + // rate limits for various user actions, by user ip + "rate_limit": { + // Maximum number of messages created in interval + "message": 180, + // Interval length for message limit, in seconds + "message_per_second": 60, + // Maximum number of posts created in interval + "post": 6, + // Interval length for post limit, in seconds + "post_per_second": 600, + // Maximum number of registrations in interval + "register": 3, + // Interval length for registration limit, in seconds + "register_per_second": 3600, + // Maximum number of image uploads in interval + "image": 6, + // Interval length for image uploads, in seconds + "image_per_second": 3600 + }, + // Settings related to activitypub federation + "federation": { + // Whether to enable activitypub federation. + "enabled": false, + // Allows and blocks are described here: + // https://join-lemmy.org/docs/en/federation/administration.html///instance-allowlist-and-blocklist + // + // list of instances with which federation is allowed + "allowed_instances": [ + "instance1.tld", + "instance2.tld", + /* ... */ + ], + // Instances which we never federate anything with (but previously federated objects are unaffected) + "blocked_instances": [ + "string", + /* ... */ + ], + // If true, only federate with instances on the allowlist and block everything else. If false, + // use allowlist only for remote communities, and posts/comments in local communities + // (meaning remote communities will show content from arbitrary instances). + "strict_allowlist": true + }, + "captcha": { + // Whether captcha is required for signup + "enabled": false, + // Can be easy, medium, or hard + "difficulty": "medium" + }, + // Email sending configuration. All options except login/password are mandatory + "email": { + // Hostname and port of the smtp server + "smtp_server": "localhost:25", + // Login name for smtp server + "smtp_login": "string", + // Password to login to the smtp server + "smtp_password": "string", + // Address to send emails from, eg "noreply@your-instance.com" + "smtp_from_address": "noreply@example.com", + // Whether or not smtp connections should use tls + "use_tls": true + }, + // Parameters for automatic configuration of new instance (only used at first start) + "setup": { + // Username for the admin user + "admin_username": "admin", + // Password for the admin user + "admin_password": "my_passwd", + // Name of the site (can be changed later) + "site_name": "My Lemmy Instance", + // Email for the admin user (optional, can be omitted and set later through the website) + "admin_email": "string", + "sidebar": "string", + "description": "string", + "icon": "string", + "banner": "string", + "enable_downvotes": true, + "open_registration": true, + "enable_nsfw": true, + "community_creation_admin_only": true + }, + // the domain name of your instance (mandatory) + "hostname": "unset", + // Address where lemmy should listen for incoming requests + "bind": "0.0.0.0", + // Port where lemmy should listen for incoming requests + "port": 8536, + // Whether the site is available over TLS. Needs to be true for federation to work. + "tls_enabled": true, + // Address where pictrs is available (for image hosting) + "pictrs_url": "http://localhost:8080", + // Regex for slurs which are prohibited. Example: `(\bThis\b)|(\bis\b)|(\bsample\b)` + "additional_slurs": "string", + // Maximum length of local community and user names + "actor_name_max_length": 20 +}