{ config, lib, pkgs, ... }: let phppoolName = "shaarli"; dataDir = "/var/lib/shaarli"; vhost = "192.168.1.6:1232"; shaarli = pkgs.callPackage ./pkg-shaarli.nix { inherit dataDir; }; in { services.nginx.virtualHosts."${vhost}" = { forceSSL = false; enableACME = false; root = "${dataDir}"; listen = [ { addr = "192.168.1.6"; port = 1232; } ]; extraConfig = '' index index.php; ''; locations."/" = { extraConfig = '' try_files _ /index.php$is_args$args;"; ''; }; locations."~ (index)\\.php$" = { extraConfig = '' fastcgi_split_path_info ^(.+\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_pass unix:${config.services.phpfpm.pools.shaarli.socket}; fastcgi_index index.php; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS $https; ''; }; }; services.phpfpm.pools.shaarli = { user = "shaarli"; group = "shaarli"; settings = { "listen.owner" = "nginx"; "listen.group" = "nginx"; "user" = "shaarli"; "pm" = "dynamic"; "pm.max_children" = "75"; "pm.min_spare_servers" = "5"; "pm.max_spare_servers" = "20"; "pm.max_requests" = "10"; "catch_workers_output" = "1"; }; }; users.extraUsers.shaarli = { group = "shaarli"; home = dataDir; }; users.extraGroups.shaarli = { }; systemd.services.shaarli-install = { serviceConfig.Type = "oneshot"; wantedBy = [ "multi-user.target" ]; script = '' if [ ! -d "${dataDir}" ]; then mkdir -p ${dataDir}/{cache,data,pagecache,tmp} cp -R ${shaarli}/data.orig/.htaccess ${dataDir}/cache/ cp -R ${shaarli}/data.orig/.htaccess ${dataDir}/data/ cp -R ${shaarli}/data.orig/.htaccess ${dataDir}/pagecache/ cp -R ${shaarli}/data.orig/.htaccess ${dataDir}/tmp/ fi chown -Rc shaarli:shaarli ${dataDir} find ${dataDir} -type d ! -perm 0700 -exec chmod 0700 {} \; -exec chmod g-s {} \; find ${dataDir} -type f ! -perm 0600 -exec chmod 0600 {} \; ''; }; networking.firewall.allowedTCPPorts = [ 1232 ]; }