/ 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 }