76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
  opts = { name, config, ... }: {
 | 
						|
    options = {
 | 
						|
      enable = mkOption {
 | 
						|
        default = true;
 | 
						|
        type = types.bool;
 | 
						|
        example = true;
 | 
						|
        description = "Whether to enable proxy for this bucket";
 | 
						|
      };
 | 
						|
      bucketName = mkOption {
 | 
						|
        type = types.str;
 | 
						|
        default = name;
 | 
						|
        example = "my-bucket-name";
 | 
						|
        description = "Name of Google storage bucket";
 | 
						|
      };
 | 
						|
      address = mkOption {
 | 
						|
        type = types.str;
 | 
						|
        example = "localhost:3000";
 | 
						|
        description = "The address of the proxy.";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
  enabledProxies = lib.filterAttrs (n: v: v.enable) config.services.nix-store-gcs-proxy;
 | 
						|
  mapProxies = function: lib.mkMerge (lib.mapAttrsToList function enabledProxies);
 | 
						|
in
 | 
						|
{
 | 
						|
  options.services.nix-store-gcs-proxy = mkOption {
 | 
						|
    type = types.attrsOf (types.submodule opts);
 | 
						|
    default = {};
 | 
						|
    description = ''
 | 
						|
      An attribute set describing an HTTP to GCS proxy that allows us to use GCS
 | 
						|
      bucket via HTTP protocol.
 | 
						|
    '';
 | 
						|
  };
 | 
						|
 | 
						|
  config.systemd.services = mapProxies (name: cfg: {
 | 
						|
    "nix-store-gcs-proxy-${name}" = {
 | 
						|
      description = "A HTTP nix store that proxies requests to Google Storage";
 | 
						|
      wantedBy = ["multi-user.target"];
 | 
						|
 | 
						|
      serviceConfig = {
 | 
						|
        RestartSec = 5;
 | 
						|
        StartLimitInterval = 10;
 | 
						|
        ExecStart = ''
 | 
						|
          ${pkgs.nix-store-gcs-proxy}/bin/nix-store-gcs-proxy \
 | 
						|
            --bucket-name ${cfg.bucketName} \
 | 
						|
            --addr ${cfg.address}
 | 
						|
        '';
 | 
						|
 | 
						|
        DynamicUser = true;
 | 
						|
 | 
						|
        ProtectSystem = "strict";
 | 
						|
        ProtectHome = true;
 | 
						|
        PrivateTmp = true;
 | 
						|
        PrivateDevices = true;
 | 
						|
        PrivateMounts = true;
 | 
						|
        PrivateUsers = true;
 | 
						|
 | 
						|
        ProtectKernelTunables = true;
 | 
						|
        ProtectKernelModules = true;
 | 
						|
        ProtectControlGroups = true;
 | 
						|
 | 
						|
        NoNewPrivileges = true;
 | 
						|
        LockPersonality = true;
 | 
						|
        RestrictRealtime = true;
 | 
						|
      };
 | 
						|
    };
 | 
						|
  });
 | 
						|
 | 
						|
  meta.maintainers = [ maintainers.mrkkrp ];
 | 
						|
}
 |