main
 1{den, ...}: {
 2  den.hosts.kevin = {
 3    settings = {
 4      desktop.aesthetic = {
 5        fonts.size = 13;
 6      };
 7    };
 8  };
 9
10  den.aspects.kevin = {
11    includes = with den.aspects.hardware; [
12      cpu.intel
13      gpu.intel
14      gpu.nvidia
15
16      bluetooth
17      thunderbolt
18    ];
19
20    nixos = {
21      pkgs,
22      config,
23      ...
24    }: {
25      hardware.facter.reportPath = ./facter.json;
26
27      boot.loader.systemd-boot.enable = true;
28
29      boot.kernelPackages = pkgs.linuxPackages_latest;
30
31      # Work around patchelf 0.19.2 corrupting the prebuilt NVIDIA programs,
32      # which makes ld.so segfault. https://github.com/NixOS/patchelf/issues/674
33      # TODO: Drop this after https://github.com/NixOS/nixpkgs/pull/576397 merge into nixos-unstable
34      hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.latest.overrideAttrs (old: {
35        postFixup = ''
36          for prog in "$bin"/origBin/*; do
37            name=$(basename "$prog")
38            install -m755 "$prog" "$bin/bin/$name"
39            patchelf --set-rpath "$out/lib:$libPath" "$bin/bin/$name"
40            patchelf --set-interpreter "$(cat "$NIX_CC/nix-support/dynamic-linker")" "$bin/bin/$name"
41          done
42        '';
43      });
44
45      hardware.keyboard.qmk = {
46        enable = true;
47        keychronSupport = true;
48      };
49    };
50
51    provides.to-users = {
52      hjem = {
53        pkgs,
54        lib,
55        config,
56        ...
57      }: {
58        packages = [pkgs.kanshi];
59
60        xdg.config.files."kanshi/config".source = ./kanshi-config;
61
62        systemd.services.kanshi = {
63          description = "Dynamic output configuration";
64          documentation = ["man:kanshi(1)"];
65
66          partOf = ["graphical-session.target"];
67          requires = ["graphical-session.target"];
68          after = ["graphical-session.target"];
69          wantedBy = ["graphical-session.target"];
70
71          script = lib.getExe pkgs.kanshi;
72          reload = "${lib.getExe' pkgs.kanshi "kanshictl"} reload";
73          reloadTriggers = ["${config.xdg.config.directory}/kanshi/config"];
74
75          serviceConfig.Restart = "always";
76        };
77      };
78    };
79  };
80}