summaryrefslogtreecommitdiff
path: root/flake.nix
blob: 959240a6dfec1a619fd311a7f36a6054a058cf30 (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
{
  inputs = {
    nixpkgs-unstable.url = "github:nixos/nixpkgs?ref=nixos-unstable";
    nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-25.05";

    lix-module = {
      url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.1.tar.gz";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    flake-utils.url = "github:numtide/flake-utils";

    sops-nix = {
      url = "github:Mic92/sops-nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    microvm = {
      url = "github:astro/microvm.nix";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        flake-utils.follows = "flake-utils";
      };
    };

    authentik-nix = {
      url = "github:nix-community/authentik-nix";
    };

    website = {
      url = "git+https://git.oxapentane.com/0xa/website.git?ref=main";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.flake-utils.follows = "flake-utils";
    };

    tmux-yank = {
      url = "github:tmux-plugins/tmux-yank";
      flake = false;
    };
  };

  outputs =
    inputs@{
      lix-module,
      microvm,
      nixpkgs,
      nixpkgs-unstable,
      sops-nix,
      ...
    }:

    {
      nixosConfigurations =
        let
          microvm-stable-list = [
            "forgejo"
            "miniflux"
            "radicale"
            "stream"
          ];
          microvm-unstable-list = [
            "auth"
            "immich"
            "conduwuit"
          ];

          microvm-builder = (
            nixpkgs-ver: vm-list:
            builtins.listToAttrs (
              map (vm: {
                name = vm;
                value = nixpkgs-ver.lib.nixosSystem {
                  system = "x86_64-linux";
                  specialArgs = { inherit inputs; };
                  modules = [
                    sops-nix.nixosModules.sops
                    microvm.nixosModules.microvm

                    ./hosts/${vm}
                    ./modules/server
                    ./modules/wg
                  ];
                };
              }) vm-list
            )
          );
          microvms =
            (microvm-builder nixpkgs microvm-stable-list)
            // (microvm-builder nixpkgs-unstable microvm-unstable-list);
        in
        microvms
        // {
          cloud = nixpkgs.lib.nixosSystem {
            system = "x86_64-linux";
            specialArgs = { inherit inputs; };
            modules = [
              sops-nix.nixosModules.sops

              ./hosts/cloud

              ./modules/basic-tools
              ./modules/server
              ./modules/binary-caches.nix
              ./modules/wg
            ];
          };
          minime = nixpkgs.lib.nixosSystem {
            system = "x86_64-linux";
            specialArgs = { inherit inputs; };
            modules = [
              sops-nix.nixosModules.sops
              microvm.nixosModules.host
              lix-module.nixosModules.default

              ./hosts/minime
              ./modules/basic-tools
              ./modules/server
              ./modules/binary-caches.nix
              ./modules/wg

              {
                config.microvm.autostart = microvm-stable-list ++ microvm-unstable-list;
              }
            ];
          };
        };
    };
}