about summary refs log tree commit diff
path: root/modules/nixos/x11.nix
blob: 55ba0b5712a00486f9181958179eb533032247d2 (plain) (blame)
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
{
  config,
  lib,
  pkgs,
  ...
}:
with lib;
let
  cfg = config.nixfiles.modules.x11;
in
{
  options.nixfiles.modules.x11.enable = mkEnableOption "X11";

  config = mkIf cfg.enable {
    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";
        };

        packages = with pkgs; [ xclip ];
      };

      xresources.properties = {
        "Xft.antialias" = mkDefault 1;
        "Xft.autohint" = mkDefault 0;
        "Xft.hinting" = mkDefault 1;
        "Xft.hintstyle" = mkDefault "hintslight";
        "Xft.lcdfilter" = mkDefault "lcddefault";
        "Xft.rgba" = mkDefault "rgb";
      };

      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 = 50;

      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"
        ''
      ];
    };
  };
}

Consider giving Nix/NixOS a try! <3