diff --git a/nix/configurations/vanadium/nixos/display.nix b/nix/configurations/vanadium/nixos/display.nix index 476195d8..e76cd6e4 100644 --- a/nix/configurations/vanadium/nixos/display.nix +++ b/nix/configurations/vanadium/nixos/display.nix @@ -33,54 +33,56 @@ }; profiles = let - built-in = "00ffffffffffff0009e5ca0b000000002f200104a51c137803de50a3544c99260f505400000001010101010101010101010101010101115cd01881e02d50302036001dbe1000001aa749d01881e02d50302036001dbe1000001a000000fe00424f452043510a202020202020000000fe004e4531333546424d2d4e34310a0073"; - asus-monitor = "00ffffffffffff0006b35b27010101012c210103803c22782a29d5ad4f44a7240f5054bfef00714f81809500d1c0d1e8d1fc01010101565e00a0a0a029503020350055502100001a000000fd0030901edf3c000a202020202020000000fc005647323741514c33410a202020000000ff0052414c4d51533139373533370a0111020347f14a90030204014061603f1f230907078301000067030c002000384468d85dc401788003026d1a000002013090f00069096909e305ff01e6060701696900e2006ae20fc0eae70070a0a067500820980455502100001a6fc200a0a0a055503020350055502100001a5aa000a0a0a046503020350055502100001a0000bc"; - - allExternDevices = - map (portNumber: "DP-${toString portNumber}") (lib.range 1 8); - - allDevices = ["eDP-1"] ++ allExternDevices; - # TODO: merge when upstream is merged # https://github.com/NixOS/nixpkgs/pull/436434 # # Generate an attribute set by mapping a function over a list of attribute names. # It allows setting the name of the attribute. genAttrs' = xs: func: builtins.listToAttrs (map func xs); + singleton = k: v: {${k} = v;}; + + fingerprints = { + built-in = singleton "eDP-1" "00ffffffffffff0009e5ca0b000000002f200104a51c137803de50a3544c99260f505400000001010101010101010101010101010101115cd01881e02d50302036001dbe1000001aa749d01881e02d50302036001dbe1000001a000000fe00424f452043510a202020202020000000fe004e4531333546424d2d4e34310a0073"; + asus-monitor = device: singleton device "00ffffffffffff0006b35b27010101012c210103803c22782a29d5ad4f44a7240f5054bfef00714f81809500d1c0d1e8d1fc01010101565e00a0a0a029503020350055502100001a000000fd0030901edf3c000a202020202020000000fc005647323741514c33410a202020000000ff0052414c4d51533139373533370a0111020347f14a90030204014061603f1f230907078301000067030c002000384468d85dc401788003026d1a000002013090f00069096909e305ff01e6060701696900e2006ae20fc0eae70070a0a067500820980455502100001a6fc200a0a0a055503020350055502100001a5aa000a0a0a046503020350055502100001a0000bc"; + }; + + devices = rec { + built-in = "eDP-1"; + # Run `xrandr` to see the max number + extern = map (portNumber: "DP-${toString portNumber}") (lib.range 1 8); + all = [built-in] ++ extern; + }; switches = { - setDPI = {dpi}: { - "10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" '' + setDPI = {dpi}: + singleton "10_xrdb-dpi" "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" '' Xcursor.size: 64 Xft.dpi: ${toString dpi} ''}"; - }; # Is scoped to an output device, no need to be called on built-in display setSoftwareBrightness = { device, # obtain with `xrandr` brightness, # [0..1] - }: { - "10_xrandr_brightness" = '' + }: + singleton "10_xrandr_brightness" '' xrandr --output ${device} --brightness ${toString brightness} ''; - }; # Is scoped to an output device, no need to be called on built-in display setDDCBrightness = { modelName, # obtain with `ddcutil detect` brightness, # [0..1] - }: { - "10_ddc_brightness" = '' + }: + singleton "10_ddc_brightness" '' ddcutil --model ${modelName} setvcp 10 ${toString (brightness * 100)} ''; - }; }; # Note: the "position" field corresponds to the "pos" field outputted by autorandr # To get the current config, run `xrandr --auto` and then `autorandr --config` configs = { - allOff = lib.genAttrs allDevices (_: {enable = false;}); + allOff = lib.genAttrs devices.all (_: {enable = false;}); enableBuiltin = { eDP-1 = { enable = true; @@ -103,30 +105,29 @@ }; frameworkBuiltin = { - fingerprint.eDP-1 = built-in; - config = with configs; allOff // enableBuiltin; - hooks.postswitch = with switches; setDPI {dpi = 150;}; + fingerprint = fingerprints.built-in; + config = configs.allOff // configs.enableBuiltin; + hooks.postswitch = switches.setDPI {dpi = 150;}; }; mkAsusProfile = name: { - fingerprint = { - ${name} = asus-monitor; - eDP-1 = built-in; - }; - config = with configs; allOff // enableDevice name; - hooks.postswitch = with switches; - setDPI {dpi = 110;} - // setDDCBrightness { + fingerprint = fingerprints.built-in // fingerprints.asus-monitor name; + config = configs.allOff // configs.enableDevice name; + hooks.postswitch = + switches.setDPI {dpi = 110;} + // switches.setDDCBrightness { modelName = "VG27AQL3A"; brightness = 0; } - // setSoftwareBrightness { + // switches.setSoftwareBrightness { device = name; brightness = 0.7; }; }; in - {default = frameworkBuiltin;} - // genAttrs' allExternDevices (name: lib.nameValuePair "asus-${name}" (mkAsusProfile name)); + lib.mkMerge [ + {default = frameworkBuiltin;} + (genAttrs' devices.extern (name: lib.nameValuePair "asus-${name}" (mkAsusProfile name))) + ]; }; }