1{
2 description = "multi device configuration flake";
3 inputs = {
4 nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
5
6 home-manager.url = "github:nix-community/home-manager/master";
7 home-manager.inputs.nixpkgs.follows = "nixpkgs";
8
9 rust-overlay.url = "github:oxalica/rust-overlay";
10 rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
11
12 apple-fonts.url = "github:nmarks413/apple-fonts.nix";
13
14 nvf.url = "github:notashelf/nvf";
15 nvf.inputs.nixpkgs.follows = "nixpkgs";
16
17 darwin.url = "github:lnl7/nix-darwin/master";
18 darwin.inputs.nixpkgs.follows = "nixpkgs";
19
20 zig.url = "github:mitchellh/zig-overlay";
21 zls.url = "github:zigtools/zls?rev=a26718049a8657d4da04c331aeced1697bc7652b";
22
23 moonlight.url = "github:moonlight-mod/moonlight"; # Add `/develop` to the flake URL to use nightly.
24 moonlight.inputs.nixpkgs.follows = "nixpkgs";
25
26 zen-browser = {
27 url = "github:youwen5/zen-browser-flake";
28 inputs.nixpkgs.follows = "nixpkgs";
29 };
30
31 android-nixpkgs = {
32 url = "github:tadfisher/android-nixpkgs/stable";
33 inputs.nixpkgs.follows = "nixpkgs";
34
35 };
36
37 vicinae.url = "github:vicinaehq/vicinae";
38
39 nix-options-search.url = "github:madsbv/nix-options-search";
40
41 nix-index-database.url = "github:nix-community/nix-index-database";
42 nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
43 };
44 outputs =
45 {
46 self,
47 nixpkgs,
48 darwin,
49 ...
50 }@inputs:
51 let
52 inherit (nixpkgs) lib;
53
54 overlays = [
55 inputs.zig.overlays.default
56 inputs.rust-overlay.overlays.default
57 inputs.android-nixpkgs.overlays.default
58
59 # https://github.com/NixOS/nixpkgs/issues/513245#issuecomment-4320293674
60 (_: prev: {
61 openldap = prev.openldap.overrideAttrs {
62 doCheck = !prev.stdenv.hostPlatform.isi686;
63 };
64 })
65
66 # https://github.com/LnL7/nix-darwin/issues/1041
67 (_: prev: {
68 karabiner-elements = prev.karabiner-elements.overrideAttrs (old: {
69 version = "14.13.0";
70
71 src = prev.fetchurl {
72 inherit (old.src) url;
73 hash = "sha256-gmJwoht/Tfm5qMecmq1N6PSAIfWOqsvuHU8VDJY8bLw=";
74 };
75 });
76 })
77
78 # custom packages
79 (_: pkgs: {
80 autofmt = pkgs.callPackage ./packages/autofmt { };
81 exiled_exchange_2 = pkgs.callPackage ./packages/exiled_exchange_2 { };
82 awakened_poe_trade = pkgs.callPackage ./packages/awakened_poe_trade { };
83 mtga-draft-17lands = pkgs.callPackage ./packages/17lands { };
84 })
85 ];
86
87 # We only use x86_64 on Linux and Apple Silicon Macs
88 # Overlays are applied here, as early as possible.
89 getNixPkgs = system: import nixpkgs { inherit system overlays; };
90 systems = {
91 "x86_64-linux" = getNixPkgs "x86_64-linux";
92 "aarch64-darwin" = getNixPkgs "aarch64-darwin";
93 };
94 forAllSystems =
95 f:
96 builtins.mapAttrs # #
97 (system: pkgs: f (inputs // { inherit system pkgs; }))
98 systems;
99
100 # Library Functions
101 mkNeovim = import ./lib/mkNeovim.nix { inherit self inputs; };
102 mkSystem = import ./lib/mkSystem.nix { inherit inputs mkNeovim overlays; };
103 in
104 rec {
105 # "nix fmt"
106 formatter = forAllSystems (inputs: inputs.pkgs.autofmt);
107 packages = forAllSystems (
108 { system, pkgs, ... }:
109 {
110 nvim-clover = mkNeovim "clover" pkgs;
111 nvim-fish = mkNeovim "fish" pkgs;
112 nvim-natalie = mkNeovim "natalie" pkgs;
113
114 inherit (pkgs) autofmt;
115 }
116 // lib.optionalAttrs (system == "aarch64-darwin") {
117 # "nix run .#darwin-rebuild"
118 inherit (darwin.packages.aarch64-darwin) darwin-rebuild;
119 }
120 );
121
122 # natalie's desktop computer
123 nixosConfigurations.nixos = mkSystem "nixos" {
124 user = "natalie";
125 host = "desktop";
126 system = "x86_64-linux";
127 };
128 # natalie's laptop
129 darwinConfigurations."Natalies-MacBook-Air" = mkSystem "Natalies-MacBook-Air" {
130 user = "natalie";
131 host = "laptop";
132 system = "aarch64-darwin";
133 };
134
135 # clover's mac studio "sandwich"
136 darwinConfigurations.sandwich = mkSystem "sandwich" {
137 user = "clover";
138 host = "sandwich";
139 system = "aarch64-darwin";
140 };
141 # clover's macbook air "paperback"
142 darwinConfigurations.paperback = mkSystem "paperback" {
143 user = "clover";
144 host = "paperback";
145 system = "aarch64-darwin";
146 };
147 # clover's work macbook pro
148 darwinConfigurations.clover-work-mac = mkSystem "clover-work-mac" {
149 user = "clover";
150 host = "work";
151 system = "aarch64-darwin";
152 };
153
154 # fish's cattop
155 nixosConfigurations.cattop = mkSystem "cattop" {
156 user = "fish";
157 host = "cattop";
158 system = "x86_64-linux";
159 };
160
161 # generate checks for "nix flake check --all-systems --no-build"
162 # checks.aarch64-darwin = builtins.listToAttrs (
163 # builtins.map (
164 # name:
165 # let
166 # d = darwinConfigurations.${name}.system;
167 # in
168 # {
169 # name = "darwinConfiguration-" + d.name;
170 # value = d;
171 # }
172 # ) (builtins.attrNames darwinConfigurations)
173 # );
174 };
175}