summaryrefslogtreecommitdiff
path: root/modules/nixos/x11.nix
blob: b629aeb36b84eb283c70fd9b3021312329d92a93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
{
  config,
  lib,
  pkgs,
  ...
}:
with lib; let
  cfg = config.nixfiles.modules.x11;
in {
  options.nixfiles.modules.x11.enable = mkEnableOption "X11";

  config = mkIf cfg.enable {
    assertions = [
      {
        assertion = !config.nixfiles.modules.wayland.enable;
        message = "Pick only one!";
      }
    ];

    hm = {
      home.sessionVariables = {
        XCOMPOSEFILE = pkgs.writeText "XCompose" ''
          include "${pkgs.xorg.libX11}/share/X11/locale/en_US.UTF-8/Compose"
        '';
        XCOMPOSECACHE = "${config.dirs.cache}/libx11/compose";
      };

      xresources.properties =
        (let
          font = with config.fontScheme.monospaceFont; "${family}:style=${style}:size=${toString size}";
        in {
          "*.font" = font;

          "Xft.antialias" = mkDefault 1;
          "Xft.autohint" = mkDefault 0;
          "Xft.hinting" = mkDefault 1;
          "Xft.hintstyle" = mkDefault "hintslight";
          "Xft.lcdfilter" = mkDefault "lcddefault";
          "Xft.rgba" = mkDefault "rgb";
        })
        // (with config.colourScheme; {
          "*.color0" = black;
          "*.color8" = brightBlack;
          "*.color1" = red;
          "*.color9" = brightRed;
          "*.color2" = green;
          "*.color10" = brightGreen;
          "*.color3" = yellow;
          "*.color11" = brightYellow;
          "*.color4" = blue;
          "*.color12" = brightBlue;
          "*.color5" = magenta;
          "*.color13" = brightMagenta;
          "*.color6" = cyan;
          "*.color14" = brightCyan;
          "*.color7" = white;
          "*.color15" = brightWhite;

          "*.background" = background;
          "*.foreground" = foreground;
        });

      services.xsettingsd = {
        enable = true;
        # https://codeberg.org/derat/xsettingsd#settings
        settings = let
          xprop = config.hm.xresources.properties;
        in {
          "Net/CursorBlink" = 1;
          "Net/CursorBlinkTime" = 1200;
          "Net/DndDragThreshold" = 0;
          "Net/DoubleClickDistance" = 5;
          "Net/DoubleClickTime" = 250;
          "Net/EnableEventSounds" = 1;
          "Net/EnableInputFeedbackSounds" = 1;
          "Xft/Antialias" = xprop."Xft.antialias";
          "Xft/HintStyle" = xprop."Xft.hintstyle";
          "Xft/Hinting" = xprop."Xft.hinting";
          "Xft/RGBA" = xprop."Xft.rgba";
        };
      };
    };

    services.xserver = {
      enable = true;

      tty = mkDefault 1;

      autoRepeatDelay = 200;
      autoRepeatInterval = 25;

      libinput.enable = true;

      monitorSection = ''
        Option "DPMS" "false"
      '';

      serverFlagsSection = ''
        Option "BlankTime" "0"
        Option "OffTime" "0"
        Option "StandbyTime" "0"
        Option "SuspendTime" "0"
      '';

      inputClassSections = [
        ''
          Identifier "Mouse"
          MatchIsPointer "yes"
          Option "AccelerationNumerator" "2"
          Option "AccelerationDenominator" "1"
          Option "AccelerationThreshold" "4"
        ''
      ];
    };
  };
}