refactor: split systems into archetypes
refactor(module): move kernel config to module refactor(module): move nix config to module refactor(module): move networking config to module refactor(module): move nix config to module refactor(module): move grub config to module
This commit is contained in:
		
							parent
							
								
									067bc992b6
								
							
						
					
					
						commit
						b43660c227
					
				
					 9 changed files with 228 additions and 66 deletions
				
			
		|  | @ -18,7 +18,18 @@ | ||||||
|   # All other arguments come from the home home. |   # All other arguments come from the home home. | ||||||
|   config, |   config, | ||||||
|   ... |   ... | ||||||
| }: with lib; with lib.${namespace}; { | }: with lib; with lib.${namespace}; | ||||||
|  | let | ||||||
|  |     zed-fhs = pkgs.buildFHSUserEnv { | ||||||
|  |         name = "zed"; | ||||||
|  |         targetPkgs = pkgs: | ||||||
|  |         with pkgs; [ | ||||||
|  |             zed-editor | ||||||
|  |         ]; | ||||||
|  |         runScript = "zed"; | ||||||
|  |     }; | ||||||
|  | in | ||||||
|  | { | ||||||
|   imports = [ |   imports = [ | ||||||
|     ./apps/gnome.nix |     ./apps/gnome.nix | ||||||
|   ]; |   ]; | ||||||
|  | @ -54,7 +65,7 @@ | ||||||
|     nodejs_22 |     nodejs_22 | ||||||
|     bun |     bun | ||||||
|     devenv |     devenv | ||||||
|     zed-editor |     zed-fhs | ||||||
| 
 | 
 | ||||||
|     ### Rust development specific |     ### Rust development specific | ||||||
|     rustup |     rustup | ||||||
|  | @ -71,7 +82,7 @@ | ||||||
|     sidequest |     sidequest | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   puzzlevision.apps.zed-editor.enable = true; |   #lib.puzzlevision.apps.zed-editor.enable = true; | ||||||
| 
 | 
 | ||||||
|   home.stateVersion = "24.05"; |   home.stateVersion = "24.05"; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -27,8 +27,6 @@ let | ||||||
| in { | in { | ||||||
|     options.${namespace}.apps.zed-editor = { enable = mkEnableOption "zed-editor"; }; |     options.${namespace}.apps.zed-editor = { enable = mkEnableOption "zed-editor"; }; | ||||||
| 
 | 
 | ||||||
|     home.packages = [zed-fhs]; |  | ||||||
| 
 |  | ||||||
|     config = mkIf cfg.enable { |     config = mkIf cfg.enable { | ||||||
|         home.packages = [zed-fhs]; |         home.packages = [zed-fhs]; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
							
								
								
									
										40
									
								
								modules/nixos/archetypes/workstation/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								modules/nixos/archetypes/workstation/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   inputs, | ||||||
|  | 
 | ||||||
|  |   namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal". | ||||||
|  |   system, # The system architecture for this host (eg. `x86_64-linux`). | ||||||
|  |   target, # The Snowfall Lib target for this system (eg. `x86_64-iso`). | ||||||
|  |   format, # A normalized name for the system target (eg. `iso`). | ||||||
|  |   virtual, # A boolean to determine whether this system is a virtual target using nixos-generators. | ||||||
|  |   systems, # An attribute map of your defined hosts. | ||||||
|  | 
 | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: with lib; with lib.${namespace}; | ||||||
|  | let | ||||||
|  |   cfg = config.${namespace}.archetypes.workstation; | ||||||
|  | in { | ||||||
|  |   options.${namespace}.archetypes.workstation = { enable = mkEnableOption "Enable the workstation archetype for your current system"; }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     environment.sessionVariables = { | ||||||
|  |       NIXOS_OZONE_WL = "1"; # Chromium/Electron native Wayland support | ||||||
|  |       MOZ_ENABLE_WAYLAND = "1"; # Firefox native Wayland support | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Enable modules | ||||||
|  |     puzzlevision = { | ||||||
|  |       common = { | ||||||
|  |         nix.enable = true; # Standard Nix configuration | ||||||
|  |         grub.enable = true; # Bootloader grub | ||||||
|  |         networking.enable = true; # Networkmanager configuration | ||||||
|  |         kernel.enable = true; # Kernel modifications | ||||||
|  |         bluetooth.enable = true; # Bluetooth support | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       desktop.gnome.enable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								modules/nixos/common/bluetooth/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								modules/nixos/common/bluetooth/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   inputs, | ||||||
|  | 
 | ||||||
|  |   namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal". | ||||||
|  |   system, # The system architecture for this host (eg. `x86_64-linux`). | ||||||
|  |   target, # The Snowfall Lib target for this system (eg. `x86_64-iso`). | ||||||
|  |   format, # A normalized name for the system target (eg. `iso`). | ||||||
|  |   virtual, # A boolean to determine whether this system is a virtual target using nixos-generators. | ||||||
|  |   systems, # An attribute map of your defined hosts. | ||||||
|  | 
 | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: with lib; with lib.${namespace}; | ||||||
|  | let | ||||||
|  |   cfg = config.${namespace}.common.bluetooth; | ||||||
|  | in { | ||||||
|  |   options.${namespace}.common.bluetooth = { enable = mkEnableOption "Enable bluetooth support on your current system"; }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     hardware.bluetooth = { | ||||||
|  |       enable = true; | ||||||
|  |       powerOnBoot = true; | ||||||
|  |       package = pkgs.bluez; | ||||||
|  | 
 | ||||||
|  |       settings = { | ||||||
|  |         General = { | ||||||
|  |           ControllerMode = "dual"; | ||||||
|  |           FastConnectable = "true"; | ||||||
|  |           Experimental = "true"; | ||||||
|  |           KernelExperimental = "true"; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										38
									
								
								modules/nixos/common/grub/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								modules/nixos/common/grub/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   inputs, | ||||||
|  | 
 | ||||||
|  |   namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal". | ||||||
|  |   system, # The system architecture for this host (eg. `x86_64-linux`). | ||||||
|  |   target, # The Snowfall Lib target for this system (eg. `x86_64-iso`). | ||||||
|  |   format, # A normalized name for the system target (eg. `iso`). | ||||||
|  |   virtual, # A boolean to determine whether this system is a virtual target using nixos-generators. | ||||||
|  |   systems, # An attribute map of your defined hosts. | ||||||
|  | 
 | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: with lib; with lib.${namespace}; | ||||||
|  | let | ||||||
|  |   cfg = config.${namespace}.common.grub; | ||||||
|  | in { | ||||||
|  |   options.${namespace}.common.grub = { enable = mkEnableOption "grub"; }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     boot.loader.grub = { | ||||||
|  |       enable = true; | ||||||
|  |       devices = [ "nodev" ]; | ||||||
|  |       efiInstallAsRemovable = true; | ||||||
|  |       efiSupport = true; | ||||||
|  | 
 | ||||||
|  |       extraEntries = '' | ||||||
|  |         menuentry "Reboot" { | ||||||
|  |           reboot | ||||||
|  |         } | ||||||
|  |         menuentry "Poweroff" { | ||||||
|  |           halt | ||||||
|  |         } | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								modules/nixos/common/kernel/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								modules/nixos/common/kernel/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   inputs, | ||||||
|  | 
 | ||||||
|  |   namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal". | ||||||
|  |   system, # The system architecture for this host (eg. `x86_64-linux`). | ||||||
|  |   target, # The Snowfall Lib target for this system (eg. `x86_64-iso`). | ||||||
|  |   format, # A normalized name for the system target (eg. `iso`). | ||||||
|  |   virtual, # A boolean to determine whether this system is a virtual target using nixos-generators. | ||||||
|  |   systems, # An attribute map of your defined hosts. | ||||||
|  | 
 | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: with lib; with lib.${namespace}; | ||||||
|  | let | ||||||
|  |   cfg = config.${namespace}.common.kernel; | ||||||
|  | in { | ||||||
|  |   options.${namespace}.common.kernel = { | ||||||
|  |     enable = mkEnableOption "Modify the standard kernel settings"; | ||||||
|  |     version = mkOption { | ||||||
|  |       type = lib.types.str; | ||||||
|  |       default = "latest"; | ||||||
|  |       example = "latest"; | ||||||
|  |       description = "Set the kernel version to be used by your system" | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     kernelPackages = pkgs.linuxPackages_${cfg.version}; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								modules/nixos/common/networking/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								modules/nixos/common/networking/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   inputs, | ||||||
|  | 
 | ||||||
|  |   namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal". | ||||||
|  |   system, # The system architecture for this host (eg. `x86_64-linux`). | ||||||
|  |   target, # The Snowfall Lib target for this system (eg. `x86_64-iso`). | ||||||
|  |   format, # A normalized name for the system target (eg. `iso`). | ||||||
|  |   virtual, # A boolean to determine whether this system is a virtual target using nixos-generators. | ||||||
|  |   systems, # An attribute map of your defined hosts. | ||||||
|  | 
 | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: with lib; with lib.${namespace}; | ||||||
|  | let | ||||||
|  |   cfg = config.${namespace}.common.networking; | ||||||
|  | in { | ||||||
|  |   options.${namespace}.common.networking = { enable = mkEnableOption "networking"; }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     networking.networkmanager.enable = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								modules/nixos/common/nix/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								modules/nixos/common/nix/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   inputs, | ||||||
|  | 
 | ||||||
|  |   namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal". | ||||||
|  |   system, # The system architecture for this host (eg. `x86_64-linux`). | ||||||
|  |   target, # The Snowfall Lib target for this system (eg. `x86_64-iso`). | ||||||
|  |   format, # A normalized name for the system target (eg. `iso`). | ||||||
|  |   virtual, # A boolean to determine whether this system is a virtual target using nixos-generators. | ||||||
|  |   systems, # An attribute map of your defined hosts. | ||||||
|  | 
 | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: with lib; with lib.${namespace}; | ||||||
|  | let | ||||||
|  |   cfg = config.${namespace}.common.nix; | ||||||
|  | in { | ||||||
|  |   options.${namespace}.common.nix = { enable = mkEnableOption "nix"; }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     nix = { | ||||||
|  |       settings = { | ||||||
|  |         auto-optimise-store = true; | ||||||
|  |         builders-use-substitutes = true; | ||||||
|  |         experimental-features = [ "nix-command" "flakes" ]; | ||||||
|  |         keep-derivations = true; | ||||||
|  |         keep-outputs = true; | ||||||
|  |         max-jobs = "auto"; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       # Garbage collection configuration. | ||||||
|  |       gc = { | ||||||
|  |         automatic = true; | ||||||
|  |         dates = "daily"; | ||||||
|  |         options = "--delete-older-than 3d"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -29,35 +29,11 @@ with lib.${namespace}; | ||||||
|     inputs.hardware.nixosModules.common-pc-laptop-ssd |     inputs.hardware.nixosModules.common-pc-laptop-ssd | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   nix = { |  | ||||||
|     settings = { |  | ||||||
|       auto-optimise-store = true; |  | ||||||
|       builders-use-substitutes = true; |  | ||||||
|       experimental-features = [ "nix-command" "flakes" ]; |  | ||||||
|       keep-derivations = true; |  | ||||||
|       keep-outputs = true; |  | ||||||
|       max-jobs = "auto"; |  | ||||||
|       warn-dirty = false; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Garbage collection configuration. |  | ||||||
|     gc = { |  | ||||||
|       automatic = true; |  | ||||||
|       dates = "daily"; |  | ||||||
|       options = "--delete-older-than 3d"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Set hostname |   # Set hostname | ||||||
|  |   # Todo: move to common/networking module | ||||||
|   networking.hostName = "puzzlevision"; |   networking.hostName = "puzzlevision"; | ||||||
| 
 | 
 | ||||||
|   # Enable networking through networkmanager (required for most desktop environments). |  | ||||||
|   networking.networkmanager.enable = true; |  | ||||||
| 
 |  | ||||||
|   boot = { |   boot = { | ||||||
|     # Always run the latest kernel. |  | ||||||
|     kernelPackages = pkgs.linuxPackages_latest; |  | ||||||
| 
 |  | ||||||
|     # Configure additional kernel modules. |     # Configure additional kernel modules. | ||||||
|     extraModulePackages = [ |     extraModulePackages = [ | ||||||
|       pkgs.linuxPackages_latest.rtl8821ce # Use custom network-card driver. |       pkgs.linuxPackages_latest.rtl8821ce # Use custom network-card driver. | ||||||
|  | @ -66,23 +42,6 @@ with lib.${namespace}; | ||||||
|     blacklistedKernelModules = [ |     blacklistedKernelModules = [ | ||||||
|       "rtw88_8821ce" # Block the default network-card driver. |       "rtw88_8821ce" # Block the default network-card driver. | ||||||
|     ]; |     ]; | ||||||
| 
 |  | ||||||
|     # Grub configuration. |  | ||||||
|     loader.grub = { |  | ||||||
|       enable = true; |  | ||||||
|       devices = [ "nodev" ]; |  | ||||||
|       efiInstallAsRemovable = true; |  | ||||||
|       efiSupport = true; |  | ||||||
| 
 |  | ||||||
|       extraEntries = '' |  | ||||||
|         menuentry "Reboot" { |  | ||||||
|           reboot |  | ||||||
|         } |  | ||||||
|         menuentry "Poweroff" { |  | ||||||
|           halt |  | ||||||
|         } |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   # Set timezone. |   # Set timezone. | ||||||
|  | @ -127,24 +86,8 @@ with lib.${namespace}; | ||||||
|     pulse.enable = true; |     pulse.enable = true; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   # Bluetooth configuration. |   # Set system Type | ||||||
|   hardware.bluetooth = { |   puzzlevision.archetypes.workstation.enable = true; | ||||||
|     enable = true; |  | ||||||
|     powerOnBoot = true; |  | ||||||
|     package = pkgs.bluez; |  | ||||||
| 
 |  | ||||||
|     settings = { |  | ||||||
|       General = { |  | ||||||
|         ControllerMode = "dual"; |  | ||||||
|         FastConnectable = "true"; |  | ||||||
|         Experimental = "true"; |  | ||||||
|         KernelExperimental = "true"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Enable Gnome |  | ||||||
|   puzzlevision.desktop.gnome.enable = true; |  | ||||||
| 
 | 
 | ||||||
|   # Enable flatpak support. |   # Enable flatpak support. | ||||||
|   services.flatpak.enable = true; |   services.flatpak.enable = true; | ||||||
|  | @ -177,7 +120,6 @@ with lib.${namespace}; | ||||||
|     nano |     nano | ||||||
|     firefox |     firefox | ||||||
|     chromium |     chromium | ||||||
|     lutris |  | ||||||
|     vlc |     vlc | ||||||
|     spotify |     spotify | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue