aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
blob: e773a34a6c454a90661e4d9f4740468c5dd49696 (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# This flake file is community maintained
{
  description = "Niri: A scrollable-tiling Wayland compositor.";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    nix-filter.url = "github:numtide/nix-filter";
  };

  outputs =
    {
      self,
      nixpkgs,
      nix-filter,
      ...
    }:
    let
      inherit (nixpkgs) lib;
      systems = [
        "aarch64-linux"
        "x86_64-linux"
      ];

      forAllSystems = lib.genAttrs systems;
      nixpkgsFor = forAllSystems (system: nixpkgs.legacyPackages.${system});
    in
    {
      checks = forAllSystems (system: {
        inherit (self.packages.${system}) niri;
      });

      devShells = forAllSystems (
        system:
        let
          inherit (self.packages.${system}) niri;
        in
        {
          default = nixpkgsFor.${system}.mkShell {
            inputsFrom = [ niri ];

            env = {
              LD_LIBRARY_PATH = lib.makeLibraryPath niri.buildInputs;
              inherit (niri.env) LIBCLANG_PATH;
            };
          };
        }
      );

      formatter = forAllSystems (system: nixpkgsFor.${system}.nixfmt-rfc-style);

      packages = forAllSystems (system: {
        niri = nixpkgsFor.${system}.callPackage (
          {
            cairo,
            clang,
            fontconfig,
            gdk-pixbuf,
            glib,
            graphene,
            gtk4,
            libadwaita,
            libclang,
            libdisplay-info,
            libglvnd,
            libinput,
            libxkbcommon,
            mesa,
            pango,
            pipewire,
            pixman,
            pkg-config,
            rustPlatform,
            seatd,
            stdenv,
            systemd,
            wayland,
            xorg,
          }:
          rustPlatform.buildRustPackage rec {
            pname = "niri";
            version = self.shortRev or self.dirtyShortRev or "unknown";

            cargoLock = {
              # NOTE: This is only used for Git dependencies
              allowBuiltinFetchGit = true;
              lockFile = ./Cargo.lock;
            };

            src = nix-filter.lib.filter {
              root = self;
              include = [
                "niri-config"
                "niri-ipc"
                "resources"
                "src"
              ];
            };

            nativeBuildInputs = [
              clang
              gdk-pixbuf
              graphene
              gtk4
              libadwaita
              pkg-config
            ];

            buildInputs = [
              cairo
              fontconfig
              glib
              libdisplay-info
              libinput
              libxkbcommon
              mesa # For libgbm
              pango
              pipewire
              pixman
              seatd # For libseat
              stdenv.cc.cc.lib
              systemd # For libudev
              wayland
            ];

            runtimeDependencies = [
              libglvnd # For libEGL
              libxkbcommon
              mesa
              wayland
              xorg.libXcursor
              xorg.libXi
            ];

            LD_LIBRARY_PATH = lib.makeLibraryPath runtimeDependencies;
            LIBCLANG_PATH = lib.getLib libclang + "/lib";
          }
        ) { };

        default = self.packages.${system}.niri;
      });
    };
}