62 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ lib, config, ... }:
 | 
						|
 | 
						|
let
 | 
						|
  inherit (lib) mkOption types;
 | 
						|
  cfg = config.monitors;
 | 
						|
in
 | 
						|
{
 | 
						|
  options.monitors = mkOption {
 | 
						|
    type = types.listOf (types.submodule {
 | 
						|
      options = {
 | 
						|
        name = mkOption {
 | 
						|
          type = types.str;
 | 
						|
          example = "DP-1";
 | 
						|
        };
 | 
						|
        primary = mkOption {
 | 
						|
          type = types.bool;
 | 
						|
          default = false;
 | 
						|
        };
 | 
						|
        width = mkOption {
 | 
						|
          type = types.int;
 | 
						|
          example = 1920;
 | 
						|
        };
 | 
						|
        height = mkOption {
 | 
						|
          type = types.int;
 | 
						|
          example = 1080;
 | 
						|
        };
 | 
						|
        refreshRate = mkOption {
 | 
						|
          type = types.int;
 | 
						|
          default = 60;
 | 
						|
        };
 | 
						|
        x = mkOption {
 | 
						|
          type = types.int;
 | 
						|
          default = 0;
 | 
						|
        };
 | 
						|
        y = mkOption {
 | 
						|
          type = types.int;
 | 
						|
          default = 0;
 | 
						|
        };
 | 
						|
        transform = mkOption {
 | 
						|
          type = types.int;
 | 
						|
          default = 0;
 | 
						|
        };
 | 
						|
        enabled = mkOption {
 | 
						|
          type = types.bool;
 | 
						|
          default = true;
 | 
						|
        };
 | 
						|
        workspace = mkOption {
 | 
						|
          type = types.nullOr types.str;
 | 
						|
          default = null;
 | 
						|
        };
 | 
						|
      };
 | 
						|
    });
 | 
						|
    default = [ ];
 | 
						|
  };
 | 
						|
  config = {
 | 
						|
    assertions = [{
 | 
						|
      assertion = ((lib.length config.monitors) != 0) ->
 | 
						|
        ((lib.length (lib.filter (m: m.primary) config.monitors)) == 1);
 | 
						|
      message = "Exactly one monitor must be set to primary.";
 | 
						|
    }];
 | 
						|
  };
 | 
						|
} |