home.social

#config — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #config, aggregated by home.social.

  1. I have the mismash second subnet all hooked up and working electrically, opnsense, deb server and a laptop machine - i will try pxe booting various images and also install polarproxy - although it should be at the edge that is fine, I really want to try the yacy proxy so it spiders all the sites you go to, in combo with squid proxy or ip2/tor proxy or proxychains - then it gets more interesting - just to have options on how you process traffic #forward and reverse proxies #config files

  2. I have the mismash second subnet all hooked up and working electrically, opnsense, deb server and a laptop machine - i will try pxe booting various images and also install polarproxy - although it should be at the edge that is fine, I really want to try the yacy proxy so it spiders all the sites you go to, in combo with squid proxy or ip2/tor proxy or proxychains - then it gets more interesting - just to have options on how you process traffic #forward and reverse proxies #config files

  3. I have the mismash second subnet all hooked up and working electrically, opnsense, deb server and a laptop machine - i will try pxe booting various images and also install polarproxy - although it should be at the edge that is fine, I really want to try the yacy proxy so it spiders all the sites you go to, in combo with squid proxy or ip2/tor proxy or proxychains - then it gets more interesting - just to have options on how you process traffic #forward and reverse proxies #config files

  4. I have the mismash second subnet all hooked up and working electrically, opnsense, deb server and a laptop machine - i will try pxe booting various images and also install polarproxy - although it should be at the edge that is fine, I really want to try the yacy proxy so it spiders all the sites you go to, in combo with squid proxy or ip2/tor proxy or proxychains - then it gets more interesting - just to have options on how you process traffic #forward and reverse proxies #config files

  5. @gitea I noticed a warning like "present but it won't take effect because it has been moved to admin panel". Does this mean you started to migrate config options that can only be set via UI without any way to configure it via automation tools anymore? #gitea #config

  6. We can create TUIs from JSON schemas now 🤝

    🧩 **schemaui** — Turn JSON Schema into interactive TUI

    💯 Edit configs with real-time validation, sections, overlays & multi-format I/O

    🦀 Written in Rust & built with @ratatui_rs

    ⭐ GitHub: github.com/YuniqueUnic/schemaui

    #rustlang #ratatui #tui #cli #json #schema #devtools #config #terminal

  7. We can create TUIs from JSON schemas now 🤝

    🧩 **schemaui** — Turn JSON Schema into interactive TUI

    💯 Edit configs with real-time validation, sections, overlays & multi-format I/O

    🦀 Written in Rust & built with @ratatui_rs

    ⭐ GitHub: github.com/YuniqueUnic/schemaui

  8. We can create TUIs from JSON schemas now 🤝

    🧩 **schemaui** — Turn JSON Schema into interactive TUI

    💯 Edit configs with real-time validation, sections, overlays & multi-format I/O

    🦀 Written in Rust & built with @ratatui_rs

    ⭐ GitHub: github.com/YuniqueUnic/schemaui

    #rustlang #ratatui #tui #cli #json #schema #devtools #config #terminal

  9. We can create TUIs from JSON schemas now 🤝

    🧩 **schemaui** — Turn JSON Schema into interactive TUI

    💯 Edit configs with real-time validation, sections, overlays & multi-format I/O

    🦀 Written in Rust & built with @ratatui_rs

    ⭐ GitHub: github.com/YuniqueUnic/schemaui

    #rustlang #ratatui #tui #cli #json #schema #devtools #config #terminal

  10. We can create TUIs from JSON schemas now 🤝

    🧩 **schemaui** — Turn JSON Schema into interactive TUI

    💯 Edit configs with real-time validation, sections, overlays & multi-format I/O

    🦀 Written in Rust & built with @ratatui_rs

    ⭐ GitHub: github.com/YuniqueUnic/schemaui

    #rustlang #ratatui #tui #cli #json #schema #devtools #config #terminal

  11. Anatomy of the .claude/ Folder - by Avi Chawla

    "A complete guide to CLAUDE.md, custom commands, skills, agents, and permissions, and how to set them up properly."

    Link: blog.dailydoseofds.com/p/anato

    #linkdump #agent #claude #config

  12. Anatomy of the .claude/ Folder - by Avi Chawla

    "A complete guide to CLAUDE.md, custom commands, skills, agents, and permissions, and how to set them up properly."

    Link: blog.dailydoseofds.com/p/anato

    #linkdump #agent #claude #config

  13. #SoftwareDeveloper - Do not put state information in the #config files. Some people use #configurationmanagment software to manage application setting across multiple machines. The fact you decide to store the windows position / size inside the config file(s) often breaks many configuration software or makes it a bear to manage it.

  14. I also managed to fix my dovecot config on my server this morning, and Watchtower is now able to send email notifications again.

    #selfhosting #dovecot #linux #watchtower #config #homeserver #server

  15. Released version 1.0.1 of my #Native #Image #Config transformer plugin for the #Maven #Shade plugin that also deals with types defined in reachability-metadata-schema-v1.2.0.json format:

    codeberg.org/michael-simons/na

    Useful if you need to shade some stuff in your projects that comes with #GraalVM config settings.

  16. Released version 1.0.1 of my #Native #Image #Config transformer plugin for the #Maven #Shade plugin that also deals with types defined in reachability-metadata-schema-v1.2.0.json format:

    codeberg.org/michael-simons/na

    Useful if you need to shade some stuff in your projects that comes with #GraalVM config settings.

  17. Released version 1.0.1 of my #Native #Image #Config transformer plugin for the #Maven #Shade plugin that also deals with types defined in reachability-metadata-schema-v1.2.0.json format:

    codeberg.org/michael-simons/na

    Useful if you need to shade some stuff in your projects that comes with #GraalVM config settings.

  18. Released version 1.0.1 of my #Native #Image #Config transformer plugin for the #Maven #Shade plugin that also deals with types defined in reachability-metadata-schema-v1.2.0.json format:

    codeberg.org/michael-simons/na

    Useful if you need to shade some stuff in your projects that comes with #GraalVM config settings.

  19. Released version 1.0.1 of my #Native #Image #Config transformer plugin for the #Maven #Shade plugin that also deals with types defined in reachability-metadata-schema-v1.2.0.json format:

    codeberg.org/michael-simons/na

    Useful if you need to shade some stuff in your projects that comes with #GraalVM config settings.

  20. I installed two terminals that I see a lot of on the web: Kitty and Ghostty, today I wrote a small little config file to get started with Kitty. As one of my favorite colors is orange and fonts Lucida Console (as it's readable) I began with assigning those basic things to my Kitty config file.

    I need to get comfortable with config files again, as eventually it will be an essential part of my life. I do plan on going to a Systemd free NixOS, FreeBSD, or a few other options that have cropped up.

    As my laundry is nearly done (comforter is in the dryer for a long dry cycle) this is a perfect little diversion to delay my boredom.

    The website for further customization is:

    sw.kovidgoyal.net/kitty/#confi

    #KittyTerminal #config #Linux

  21. I installed two terminals that I see a lot of on the web: Kitty and Ghostty, today I wrote a small little config file to get started with Kitty. As one of my favorite colors is orange and fonts Lucida Console (as it's readable) I began with assigning those basic things to my Kitty config file.

    I need to get comfortable with config files again, as eventually it will be an essential part of my life. I do plan on going to a Systemd free NixOS, FreeBSD, or a few other options that have cropped up.

    As my laundry is nearly done (comforter is in the dryer for a long dry cycle) this is a perfect little diversion to delay my boredom.

    The website for further customization is:

    sw.kovidgoyal.net/kitty/#confi

    #KittyTerminal #config #Linux

  22. I installed two terminals that I see a lot of on the web: Kitty and Ghostty, today I wrote a small little config file to get started with Kitty. As one of my favorite colors is orange and fonts Lucida Console (as it's readable) I began with assigning those basic things to my Kitty config file.

    I need to get comfortable with config files again, as eventually it will be an essential part of my life. I do plan on going to a Systemd free NixOS, FreeBSD, or a few other options that have cropped up.

    As my laundry is nearly done (comforter is in the dryer for a long dry cycle) this is a perfect little diversion to delay my boredom.

    The website for further customization is:

    sw.kovidgoyal.net/kitty/#confi

    #KittyTerminal #config #Linux

  23. Setting up #AppFlowy on #YunoHost shouldn't be this damn difficult but so far I've had to add a bunch of directives to the #nginx #config just to get it to work! But if anybody is interested, here is the config that works. I can login and sync my workspace between my local application and the self-hosted #cloud. YMMV.

    root@ynh01:/var/log/nginx# cat /etc/nginx/conf.d/REDACTED.d/appflowy.conf
    #sub_path_only rewrite ^/$ / permanent;
    
    # GoTrue
    location /gotrue/ {
        proxy_pass http://127.0.0.1:9999;
        include proxy_params_no_auth;
    
        rewrite ^/gotrue(/.*)$ $1 break;
    
        # Allow headers like redirect_to to be handed over to the gotrue
        # for correct redirecting
        proxy_pass_request_headers on;
    }
    
    # WebSocket
    location /ws {
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
        proxy_read_timeout 86400;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }
    
    # AppFlowy-Cloud
    # created a separate location block for handling CORS preflight (OPTIONS) requests specifically for the /api endpoint.
    location = /api/options {
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin";
        }
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
        
    more_set_headers "Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Client-Version";
        more_set_headers "Access-Control-Max-Age: 3600";
        more_set_headers "Content-Type: text/plain; charset=utf-8";
        more_set_headers "Content-Length: 0";
        return 204;
    }
    
    location /api/chat {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
        chunked_transfer_encoding on;
        proxy_buffering off;
        proxy_cache off;
    
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
    }
    
    location /api/health {
        access_by_lua_block { return; }
        # Adding the trailing slash after the port forces Nginx to map 
        # /api/health directly to / on the backend
        proxy_pass http://127.0.0.1:8000/health; 
        include proxy_params_no_auth;
    }
    
    location /api/import {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    
        # Set headers
        proxy_set_header X-Request-Id $request_id;
    
        # Handle CORS
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin always";
        }
        more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept";
        more_set_headers "Access-Control-Max-Age: 3600";
    
        # Timeouts
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
    
        # Disable buffering for large file uploads
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_cache off;
        client_max_body_size 2G;
    }
    
    location /api {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    
        proxy_set_header X-Request-Id $request_id;
    
        # Set CORS headers for other requests
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin";
        }
        more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Client-Version";
        more_set_headers "Access-Control-Max-Age: 3600";
    
        location ~* ^/api/workspace/([a-zA-Z0-9_-]+)/publish$ {
            proxy_pass http://127.0.0.1:8000;
            include proxy_params_no_auth;
            proxy_request_buffering off;
            client_max_body_size 256M;
        }
    }
    
    # AppFlowy AI
    location /ai {
        proxy_pass http://127.0.0.1:5001;
        include proxy_params_no_auth;
        proxy_pass_request_headers on;
    }
    
    # Minio Web UI
    # Derive from: https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
    # Optional Module, comment this section if are did not deploy minio in docker-compose.yml
    location /minio/ {
        proxy_pass http://localhost:9001;
        include proxy_params_no_auth;
    
        rewrite ^/minio/(.*) /$1 break;
        proxy_set_header X-NginX-Proxy true;
    
        ## This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;
    
        proxy_connect_timeout 300;
    
        ## To support websockets in MinIO versions released after January 2023
        # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
        # Uncomment the following line to set the Origin request to an empty string
        # proxy_set_header Origin '';
    
        chunked_transfer_encoding off;
    }
    
    # Admin Frontend
    # Optional Module, comment this section if you are did not deploy admin_frontend in docker-compose.yml
    location /console {
        proxy_pass http://localhost:3000;
        include proxy_params_no_auth;
    }
    
    location /health {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    }
    
    # AppFlowy Web
    location / {
        proxy_pass http://localhost:3001;
        include proxy_params_no_auth;
    }
    root@ynh01:/var/log/nginx# 
    

  24. Setting up #AppFlowy on #YunoHost shouldn't be this damn difficult but so far I've had to add a bunch of directives to the #nginx #config just to get it to work! But if anybody is interested, here is the config that works. I can login and sync my workspace between my local application and the self-hosted #cloud. YMMV.

    root@ynh01:/var/log/nginx# cat /etc/nginx/conf.d/REDACTED.d/appflowy.conf
    #sub_path_only rewrite ^/$ / permanent;
    
    # GoTrue
    location /gotrue/ {
        proxy_pass http://127.0.0.1:9999;
        include proxy_params_no_auth;
    
        rewrite ^/gotrue(/.*)$ $1 break;
    
        # Allow headers like redirect_to to be handed over to the gotrue
        # for correct redirecting
        proxy_pass_request_headers on;
    }
    
    # WebSocket
    location /ws {
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
        proxy_read_timeout 86400;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }
    
    # AppFlowy-Cloud
    # created a separate location block for handling CORS preflight (OPTIONS) requests specifically for the /api endpoint.
    location = /api/options {
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin";
        }
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
        
    more_set_headers "Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Client-Version";
        more_set_headers "Access-Control-Max-Age: 3600";
        more_set_headers "Content-Type: text/plain; charset=utf-8";
        more_set_headers "Content-Length: 0";
        return 204;
    }
    
    location /api/chat {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
        chunked_transfer_encoding on;
        proxy_buffering off;
        proxy_cache off;
    
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
    }
    
    location /api/health {
        access_by_lua_block { return; }
        # Adding the trailing slash after the port forces Nginx to map 
        # /api/health directly to / on the backend
        proxy_pass http://127.0.0.1:8000/health; 
        include proxy_params_no_auth;
    }
    
    location /api/import {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    
        # Set headers
        proxy_set_header X-Request-Id $request_id;
    
        # Handle CORS
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin always";
        }
        more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept";
        more_set_headers "Access-Control-Max-Age: 3600";
    
        # Timeouts
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
    
        # Disable buffering for large file uploads
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_cache off;
        client_max_body_size 2G;
    }
    
    location /api {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    
        proxy_set_header X-Request-Id $request_id;
    
        # Set CORS headers for other requests
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin";
        }
        more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Client-Version";
        more_set_headers "Access-Control-Max-Age: 3600";
    
        location ~* ^/api/workspace/([a-zA-Z0-9_-]+)/publish$ {
            proxy_pass http://127.0.0.1:8000;
            include proxy_params_no_auth;
            proxy_request_buffering off;
            client_max_body_size 256M;
        }
    }
    
    # AppFlowy AI
    location /ai {
        proxy_pass http://127.0.0.1:5001;
        include proxy_params_no_auth;
        proxy_pass_request_headers on;
    }
    
    # Minio Web UI
    # Derive from: https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
    # Optional Module, comment this section if are did not deploy minio in docker-compose.yml
    location /minio/ {
        proxy_pass http://localhost:9001;
        include proxy_params_no_auth;
    
        rewrite ^/minio/(.*) /$1 break;
        proxy_set_header X-NginX-Proxy true;
    
        ## This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;
    
        proxy_connect_timeout 300;
    
        ## To support websockets in MinIO versions released after January 2023
        # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
        # Uncomment the following line to set the Origin request to an empty string
        # proxy_set_header Origin '';
    
        chunked_transfer_encoding off;
    }
    
    # Admin Frontend
    # Optional Module, comment this section if you are did not deploy admin_frontend in docker-compose.yml
    location /console {
        proxy_pass http://localhost:3000;
        include proxy_params_no_auth;
    }
    
    location /health {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    }
    
    # AppFlowy Web
    location / {
        proxy_pass http://localhost:3001;
        include proxy_params_no_auth;
    }
    root@ynh01:/var/log/nginx# 
    

  25. Setting up #AppFlowy on #YunoHost shouldn't be this damn difficult but so far I've had to add a bunch of directives to the #nginx #config just to get it to work! But if anybody is interested, here is the config that works. I can login and sync my workspace between my local application and the self-hosted #cloud. YMMV.

    root@ynh01:/var/log/nginx# cat /etc/nginx/conf.d/REDACTED.d/appflowy.conf
    #sub_path_only rewrite ^/$ / permanent;
    
    # GoTrue
    location /gotrue/ {
        proxy_pass http://127.0.0.1:9999;
        include proxy_params_no_auth;
    
        rewrite ^/gotrue(/.*)$ $1 break;
    
        # Allow headers like redirect_to to be handed over to the gotrue
        # for correct redirecting
        proxy_pass_request_headers on;
    }
    
    # WebSocket
    location /ws {
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
        proxy_read_timeout 86400;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }
    
    # AppFlowy-Cloud
    # created a separate location block for handling CORS preflight (OPTIONS) requests specifically for the /api endpoint.
    location = /api/options {
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin";
        }
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
        
    more_set_headers "Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Client-Version";
        more_set_headers "Access-Control-Max-Age: 3600";
        more_set_headers "Content-Type: text/plain; charset=utf-8";
        more_set_headers "Content-Length: 0";
        return 204;
    }
    
    location /api/chat {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
        chunked_transfer_encoding on;
        proxy_buffering off;
        proxy_cache off;
    
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
    }
    
    location /api/health {
        access_by_lua_block { return; }
        # Adding the trailing slash after the port forces Nginx to map 
        # /api/health directly to / on the backend
        proxy_pass http://127.0.0.1:8000/health; 
        include proxy_params_no_auth;
    }
    
    location /api/import {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    
        # Set headers
        proxy_set_header X-Request-Id $request_id;
    
        # Handle CORS
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin always";
        }
        more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept";
        more_set_headers "Access-Control-Max-Age: 3600";
    
        # Timeouts
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
    
        # Disable buffering for large file uploads
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_cache off;
        client_max_body_size 2G;
    }
    
    location /api {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    
        proxy_set_header X-Request-Id $request_id;
    
        # Set CORS headers for other requests
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin";
        }
        more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Client-Version";
        more_set_headers "Access-Control-Max-Age: 3600";
    
        location ~* ^/api/workspace/([a-zA-Z0-9_-]+)/publish$ {
            proxy_pass http://127.0.0.1:8000;
            include proxy_params_no_auth;
            proxy_request_buffering off;
            client_max_body_size 256M;
        }
    }
    
    # AppFlowy AI
    location /ai {
        proxy_pass http://127.0.0.1:5001;
        include proxy_params_no_auth;
        proxy_pass_request_headers on;
    }
    
    # Minio Web UI
    # Derive from: https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
    # Optional Module, comment this section if are did not deploy minio in docker-compose.yml
    location /minio/ {
        proxy_pass http://localhost:9001;
        include proxy_params_no_auth;
    
        rewrite ^/minio/(.*) /$1 break;
        proxy_set_header X-NginX-Proxy true;
    
        ## This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;
    
        proxy_connect_timeout 300;
    
        ## To support websockets in MinIO versions released after January 2023
        # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
        # Uncomment the following line to set the Origin request to an empty string
        # proxy_set_header Origin '';
    
        chunked_transfer_encoding off;
    }
    
    # Admin Frontend
    # Optional Module, comment this section if you are did not deploy admin_frontend in docker-compose.yml
    location /console {
        proxy_pass http://localhost:3000;
        include proxy_params_no_auth;
    }
    
    location /health {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    }
    
    # AppFlowy Web
    location / {
        proxy_pass http://localhost:3001;
        include proxy_params_no_auth;
    }
    root@ynh01:/var/log/nginx# 
    

  26. Setting up #AppFlowy on #YunoHost shouldn't be this damn difficult but so far I've had to add a bunch of directives to the #nginx #config just to get it to work! But if anybody is interested, here is the config that works. I can login and sync my workspace between my local application and the self-hosted #cloud. YMMV.

    root@ynh01:/var/log/nginx# cat /etc/nginx/conf.d/REDACTED.d/appflowy.conf
    #sub_path_only rewrite ^/$ / permanent;
    
    # GoTrue
    location /gotrue/ {
        proxy_pass http://127.0.0.1:9999;
        include proxy_params_no_auth;
    
        rewrite ^/gotrue(/.*)$ $1 break;
    
        # Allow headers like redirect_to to be handed over to the gotrue
        # for correct redirecting
        proxy_pass_request_headers on;
    }
    
    # WebSocket
    location /ws {
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
        proxy_read_timeout 86400;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }
    
    # AppFlowy-Cloud
    # created a separate location block for handling CORS preflight (OPTIONS) requests specifically for the /api endpoint.
    location = /api/options {
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin";
        }
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
        
    more_set_headers "Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Client-Version";
        more_set_headers "Access-Control-Max-Age: 3600";
        more_set_headers "Content-Type: text/plain; charset=utf-8";
        more_set_headers "Content-Length: 0";
        return 204;
    }
    
    location /api/chat {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
        chunked_transfer_encoding on;
        proxy_buffering off;
        proxy_cache off;
    
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
    }
    
    location /api/health {
        access_by_lua_block { return; }
        # Adding the trailing slash after the port forces Nginx to map 
        # /api/health directly to / on the backend
        proxy_pass http://127.0.0.1:8000/health; 
        include proxy_params_no_auth;
    }
    
    location /api/import {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    
        # Set headers
        proxy_set_header X-Request-Id $request_id;
    
        # Handle CORS
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin always";
        }
        more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept";
        more_set_headers "Access-Control-Max-Age: 3600";
    
        # Timeouts
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
    
        # Disable buffering for large file uploads
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_cache off;
        client_max_body_size 2G;
    }
    
    location /api {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    
        proxy_set_header X-Request-Id $request_id;
    
        # Set CORS headers for other requests
        if ($http_origin ~* (http://127.0.0.1:3000)) {
            more_set_headers "Access-Control-Allow-Origin: $http_origin";
        }
        more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH";
        more_set_headers "Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Client-Version";
        more_set_headers "Access-Control-Max-Age: 3600";
    
        location ~* ^/api/workspace/([a-zA-Z0-9_-]+)/publish$ {
            proxy_pass http://127.0.0.1:8000;
            include proxy_params_no_auth;
            proxy_request_buffering off;
            client_max_body_size 256M;
        }
    }
    
    # AppFlowy AI
    location /ai {
        proxy_pass http://127.0.0.1:5001;
        include proxy_params_no_auth;
        proxy_pass_request_headers on;
    }
    
    # Minio Web UI
    # Derive from: https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
    # Optional Module, comment this section if are did not deploy minio in docker-compose.yml
    location /minio/ {
        proxy_pass http://localhost:9001;
        include proxy_params_no_auth;
    
        rewrite ^/minio/(.*) /$1 break;
        proxy_set_header X-NginX-Proxy true;
    
        ## This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;
    
        proxy_connect_timeout 300;
    
        ## To support websockets in MinIO versions released after January 2023
        # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
        # Uncomment the following line to set the Origin request to an empty string
        # proxy_set_header Origin '';
    
        chunked_transfer_encoding off;
    }
    
    # Admin Frontend
    # Optional Module, comment this section if you are did not deploy admin_frontend in docker-compose.yml
    location /console {
        proxy_pass http://localhost:3000;
        include proxy_params_no_auth;
    }
    
    location /health {
        # Force bypass YunoHost SSO
        access_by_lua_block { return; }
    
        proxy_pass http://127.0.0.1:8000;
        include proxy_params_no_auth;
    }
    
    # AppFlowy Web
    location / {
        proxy_pass http://localhost:3001;
        include proxy_params_no_auth;
    }
    root@ynh01:/var/log/nginx# 
    

  27. I need to translate a piece of #config from #Nginx to #Caddy, send help :drgn_dizzy:


    #config #Nginx #Caddy
  28. How about a configuration format that is actually format agnostic? Something like this:

    #! /bin/env fancy-file-format
    26m2zKqSa... (some binary data)

    Then you just run it like that 🤯

    # Print data as JSON
    ./config.fff --format json

    # Write data from YAML
    echo "so = true" | ./config.fff --format yaml

    # Edit data as temporary TOML file
    ./config.fff --format toml --edit

    #config #xkcd927

  29. How about a configuration format that is actually format agnostic? Something like this:

    #! /bin/env fancy-file-format
    26m2zKqSa... (some binary data)

    Then you just run it like that 🤯

    # Print data as JSON
    ./config.fff --format json

    # Write data from YAML
    echo "so = true" | ./config.fff --format yaml

    # Edit data as temporary TOML file
    ./config.fff --format toml --edit

    #config #xkcd927

  30. How about a configuration format that is actually format agnostic? Something like this:

    #! /bin/env fancy-file-format
    26m2zKqSa... (some binary data)

    Then you just run it like that 🤯

    # Print data as JSON
    ./config.fff --format json

    # Write data from YAML
    echo "so = true" | ./config.fff --format yaml

    # Edit data as temporary TOML file
    ./config.fff --format toml --edit

    #config #xkcd927

  31. How about a configuration format that is actually format agnostic? Something like this:

    #! /bin/env fancy-file-format
    26m2zKqSa... (some binary data)

    Then you just run it like that 🤯

    # Print data as JSON
    ./config.fff --format json

    # Write data from YAML
    echo "so = true" | ./config.fff --format yaml

    # Edit data as temporary TOML file
    ./config.fff --format toml --edit

    #config #xkcd927

  32. Hyperland users: you're gonna like this 🐁

    🖥️ **monitui** — A TUI for wrangling your Hyprland monitors

    💯 Move displays with hjkl, drag with mouse, save presets & live preview

    🦀 Written in Rust & built with @ratatui_rs

    ⭐ GitHub: github.com/nathaniel-fargo/mon