/ flake.nix
flake.nix
  1  {
  2    description = "System Config";
  3  
  4    outputs = { self, ... } @ inputs:
  5      let
  6        stableModules = [
  7          inputs.home-manager-24_11.nixosModules.home-manager
  8        ];
  9        unstableModules = [
 10          inputs.home-manager.nixosModules.home-manager
 11        ];
 12        commonModules = [
 13          {
 14            config.nixpkgs.overlays = [
 15              (import ./nix/overlays).tekton
 16              (import ./nix/overlays/sbr.nix)
 17              inputs.emacs-overlay.overlay
 18              inputs.chapeau-rouge.overlays.openshift
 19              inputs.chick-group.overlays.default
 20              (_: prev: {
 21                inherit (inputs.buildkit-tekton.packages.${prev.system}) tkn-local;
 22                inherit (inputs.dagger.packages.${prev.system}) dagger;
 23              })
 24            ];
 25          }
 26          ./systems/modules/core/default.nix
 27          ./systems/modules/shell/default.nix
 28          ./systems/modules/desktop/default.nix
 29          ./systems/modules/dev/default.nix
 30          ./systems/modules/editors/default.nix
 31          ./systems/modules/hardware/default.nix
 32          ./systems/modules/profiles/default.nix
 33          ./systems/modules/virtualisation/default.nix
 34          ./systems/modules/virtualisation/buildkit.nix
 35          ./systems/modules/services/default.nix
 36          inputs.agenix.nixosModules.default
 37          # inputs.envfs.nixosModules.envfs
 38          {
 39            # config.nix.generateRegistryFromInputs = true;
 40            config.home-manager.useGlobalPkgs = true;
 41            config.home-manager.useUserPackages = true;
 42            # Import custom home-manager modules (NixOS)
 43            config.home-manager.sharedModules = import ./users/modules/modules.nix;
 44          }
 45        ];
 46      in
 47      {
 48        images = {
 49          # ami(s) (AWS)
 50          carthage = inputs.nixos-generators.nixosGenerate rec {
 51            system = "aarch64-linux";
 52            format = "amazon";
 53            modules = commonModules ++ stableModules ++ [
 54              ./systems/hosts/carthage.nix
 55            ];
 56          };
 57          # sdimages
 58          athena = (self.nixosConfigurations.athena.extendModules {
 59            modules = [
 60              "${inputs.nixpkgs-24_11}/nixos/modules/installer/sd-card/sd-image-aarch64.nix"
 61            ];
 62          }).config.system.build.sdImage;
 63          demeter = (self.nixosConfigurations.demeter.extendModules {
 64            modules = [
 65              "${inputs.nixpkgs-24_11}/nixos/modules/installer/sd-card/sd-image-aarch64.nix"
 66            ];
 67          }).config.system.build.sdImage;
 68        };
 69        nixosConfigurations =
 70          {
 71            # Work laptop (unstable)
 72            wakasu = inputs.nixpkgs.lib.nixosSystem {
 73              system = "x86_64-linux";
 74              modules = commonModules ++ unstableModules ++ [
 75                inputs.nixos-hardware.nixosModules.lenovo-thinkpad-x1-9th-gen
 76                ./systems/hosts/wakasu.nix
 77              ];
 78            };
 79            aomi = inputs.nixpkgs.lib.nixosSystem {
 80              system = "x86_64-linux";
 81              modules = commonModules ++ unstableModules ++ [
 82                inputs.nixos-hardware.nixosModules.lenovo-thinkpad-p1-gen3
 83                inputs.nixos-hardware.nixosModules.common-pc-laptop-ssd
 84                ./systems/hosts/aomi.nix
 85              ];
 86            };
 87            # Servers (stable)
 88            shikoku = inputs.nixpkgs-24_11.lib.nixosSystem {
 89              system = "x86_64-linux";
 90              modules = commonModules ++ stableModules ++ [
 91                ./systems/hosts/shikoku.nix
 92              ];
 93            };
 94            sakhalin = inputs.nixpkgs-24_11.lib.nixosSystem {
 95              system = "x86_64-linux";
 96              modules = commonModules ++ stableModules ++ [
 97                inputs.nixos-hardware.nixosModules.common-pc-ssd
 98                ./systems/hosts/sakhalin.nix
 99              ];
100            };
101            kerkouane = inputs.nixpkgs-24_11.lib.nixosSystem {
102              system = "x86_64-linux";
103              modules = commonModules ++ stableModules ++ [
104                ./systems/modules/services/govanityurl.nix
105                ./systems/hosts/kerkouane.nix
106              ];
107            };
108            # carthage = inputs.nixpkgs-24_11.lib.nixosSystem {
109            #   system = "aarch64-linux";
110            #   modules = commonModules ++ stableModules ++ [
111            #     ./systems/hosts/carthage.nix
112            #   ];
113            # };
114            # Raspberry PI
115            # athena
116            athena = inputs.nixpkgs-24_11.lib.nixosSystem {
117              system = "aarch64-linux";
118              modules = commonModules ++ stableModules ++ [
119                ./systems/hosts/athena.nix
120              ];
121            };
122            # demeter
123            demeter = inputs.nixpkgs-24_11.lib.nixosSystem {
124              system = "aarch64-linux";
125              modules = commonModules ++ stableModules ++ [
126                ./systems/hosts/demeter.nix
127              ];
128            };
129          };
130  
131        # TODO: expose some packages ?
132        # This is probably not gonna happen, instead I should move any internal package here outside, in their
133        # own repository and flake. If they are useful upstream.
134  
135        overlays = import ./nix/overlays;
136  
137        devShells.x86_64-linux.default =
138          let
139            pkgs = import inputs.nixpkgs {
140              system = "x86_64-linux";
141              config.allowUnfree = true;
142            };
143          in
144          pkgs.mkShell {
145            packages = [ pkgs.alejandra pkgs.git pkgs.nodePackages.prettier pkgs.deadnix pkgs.nixfmt-classic inputs.agenix.packages.x86_64-linux.default ];
146            name = "home";
147            DIRENV_LOG_FORMAT = "";
148          };
149      };
150  
151    inputs = {
152      # Flake for compatibility with non-flake commands
153      flake-compat = { type = "github"; owner = "edolstra"; repo = "flake-compat"; flake = false; };
154  
155      buildkit-tekton = { url = "github:vdemeester/buildkit-tekton"; inputs.nixpkgs.follows = "nixpkgs"; };
156  
157      # nixpkgs
158      nixpkgs = { type = "github"; owner = "NixOS"; repo = "nixpkgs"; ref = "nixos-unstable"; };
159      nixpkgs-24_05 = { type = "github"; owner = "NixOS"; repo = "nixpkgs"; ref = "nixos-24.05"; };
160      nixpkgs-24_11 = { type = "github"; owner = "NixOS"; repo = "nixpkgs"; ref = "nixos-24.11"; };
161      # Home Manager
162      home-manager = { type = "github"; owner = "nix-community"; repo = "home-manager"; inputs.nixpkgs.follows = "nixpkgs"; };
163      home-manager-24_05 = { type = "github"; owner = "nix-community"; repo = "home-manager"; ref = "release-24.05"; inputs.nixpkgs.follows = "nixpkgs-24_05"; };
164      home-manager-24_11 = { type = "github"; owner = "nix-community"; repo = "home-manager"; ref = "release-24.11"; inputs.nixpkgs.follows = "nixpkgs-24_11"; };
165  
166      impermanence = { type = "github"; owner = "nix-community"; repo = "impermanence"; };
167  
168      dagger = { type = "github"; owner = "dagger"; repo = "nix"; inputs.nixpkgs.follows = "nixpkgs"; };
169  
170      emacs-overlay = {
171        url = "github:nix-community/emacs-overlay";
172        inputs.nixpkgs.follows = "nixpkgs";
173        inputs.nixpkgs-stable.follows = "nixpkgs-24_05";
174      };
175  
176      # WSL
177      nixos-wsl = { type = "github"; owner = "nix-community"; repo = "NixOS-WSL"; inputs.nixpkgs.follows = "nixpkgs"; };
178      nixos-hardware = { type = "github"; owner = "NixOS"; "repo" = "nixos-hardware"; };
179  
180      # Me :D
181      chick-group = {
182        type = "github";
183        owner = "vdemeester";
184        repo = "chick-group";
185        inputs.nixpkgs.follows = "nixpkgs";
186      };
187      # Red Hat
188      chapeau-rouge = {
189        type = "github";
190        owner = "vdemeester";
191        repo = "chapeau-rouge";
192        inputs.nixpkgs.follows = "nixpkgs";
193      };
194      # Used to generate NixOS images for other platforms
195      nixos-generators = {
196        url = "github:nix-community/nixos-generators";
197        inputs.nixpkgs.follows = "nixpkgs";
198      };
199      agenix.url = "github:ryantm/agenix";
200    };
201  }