mirror of
				https://github.com/Jokiller230/puzzlevision.git
				synced 2025-10-31 13:50:04 +00:00 
			
		
		
		
	🚧 Finish user configuration loading and implement working workstation setup
This commit is contained in:
		
							parent
							
								
									54edba0070
								
							
						
					
					
						commit
						09c06d34e5
					
				
					 8 changed files with 137 additions and 16 deletions
				
			
		
							
								
								
									
										18
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								README.md
									
										
									
									
									
								
							|  | @ -6,22 +6,30 @@ | |||
| <br> | ||||
| 
 | ||||
| ## 🚧 State of development | ||||
| Version 2.0 is still very much an experiment and not ready to be used in a production | ||||
| environment. If you must, try running it within a VM using the provided deployment | ||||
| instructions. | ||||
| All the basic functionality of v2 should be working correctly, including: | ||||
| 
 | ||||
| - The custom lib implementation at self.lib, recursively built from the contents of the `lib` directory. | ||||
| - Loading of systems from the `systems` directory, using easy-hosts. | ||||
|   - A basic workstation archetype for desktop systems. | ||||
| - Creating users in your systems through ${self.namespace}.users, | ||||
| automatically maps home-manager configurations from the `homes` directory to their corresponding users. | ||||
| 
 | ||||
| Nonetheless, one should still consider this implementation experimental, | ||||
| once I start using this on my laptop, | ||||
| I'll aim for production grade stability. | ||||
| 
 | ||||
| ## 🚀 Deployment | ||||
| To deploy a system run the following command in your terminal of choice. | ||||
| 
 | ||||
| ```sh | ||||
| sudo nixos-rebuild switch --flake .#hostname | ||||
| sudo nixos-rebuild switch --flake .#hostname --accept-flake-config | ||||
| ``` | ||||
| 
 | ||||
| If you're interested in a quick way to experiment with this configuration, | ||||
| you may use the following command to build a VM. | ||||
| 
 | ||||
| ```sh | ||||
| sudo nixos-rebuild build-vm --flake .#hostname | ||||
| sudo nixos-rebuild build-vm --flake .#hostname --accept-flake-config | ||||
| ``` | ||||
| 
 | ||||
| ## 📝 Goals and improvements | ||||
|  |  | |||
|  | @ -1,10 +1,7 @@ | |||
| { | ||||
|   pkgs, | ||||
|   ... | ||||
| }: { | ||||
| {pkgs, ...}: { | ||||
|   home.packages = with pkgs; [ | ||||
|     vscodium | ||||
|     cmatrix | ||||
|     zed-editor | ||||
|     firefox | ||||
|   ]; | ||||
| 
 | ||||
|   home.stateVersion = "25.05"; | ||||
|  |  | |||
							
								
								
									
										32
									
								
								modules/nixos/archetypes/workstation/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								modules/nixos/archetypes/workstation/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| { | ||||
|   lib, | ||||
|   self, | ||||
|   config, | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib) mkEnableOption mkIf mkDefault; | ||||
|   inherit (self) namespace; | ||||
| 
 | ||||
|   cfg = config.${namespace}.archetypes.workstation; | ||||
| in { | ||||
|   options.${namespace}.archetypes.workstation = { | ||||
|     enable = mkEnableOption "the workstation archetype."; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     ${namespace} = { | ||||
|       # Basic system functionality | ||||
|       system.grub.enable = true; | ||||
|       system.networking.enable = true; | ||||
|       system.kernel.enable = true; | ||||
| 
 | ||||
|       # Services | ||||
|       services.docker.enable = true; | ||||
| 
 | ||||
|       # Desktop environment | ||||
|       desktop.gnome.enable = true; | ||||
|     }; | ||||
| 
 | ||||
|     time.timeZone = mkDefault "Europe/Berlin"; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										20
									
								
								modules/nixos/services/docker/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/nixos/services/docker/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| { | ||||
|   lib, | ||||
|   self, | ||||
|   config, | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib) mkIf mkEnableOption; | ||||
|   inherit (self) namespace; | ||||
| 
 | ||||
|   cfg = config.${namespace}.services.docker; | ||||
| in { | ||||
|   options.${namespace}.services.docker = { | ||||
|     enable = mkEnableOption "the docker service."; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     # Enable docker | ||||
|     virtualisation.docker.enable = true; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										22
									
								
								modules/nixos/system/kernel/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/nixos/system/kernel/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   self, | ||||
|   config, | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib) mkEnableOption mkIf; | ||||
|   inherit (self) namespace; | ||||
|   inherit (self.lib) mkOpt; | ||||
| 
 | ||||
|   cfg = config.${namespace}.system.kernel; | ||||
| in { | ||||
|   options.${namespace}.system.kernel = { | ||||
|     enable = mkEnableOption "Modify the standard kernel settings"; | ||||
|     version = mkOpt lib.types.str "linuxPackages_latest" "Set the kernel version to be used by your system"; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     boot.kernelPackages = pkgs.${cfg.version}; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										19
									
								
								modules/nixos/system/networking/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								modules/nixos/system/networking/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| { | ||||
|   lib, | ||||
|   self, | ||||
|   config, | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib) mkEnableOption mkIf; | ||||
|   inherit (self) namespace; | ||||
| 
 | ||||
|   cfg = config.${namespace}.system.networking; | ||||
| in { | ||||
|   options.${namespace}.system.networking = { | ||||
|     enable = mkEnableOption "networking."; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     networking.networkmanager.enable = true; | ||||
|   }; | ||||
| } | ||||
|  | @ -39,6 +39,9 @@ in { | |||
|   }; | ||||
| 
 | ||||
|   config = { | ||||
|     # TODO: fix this | ||||
|     #nix.settings.trusted-users = ["root" (lib.forEach cfg (username: toString username))]; | ||||
| 
 | ||||
|     # Manage users declaratively and map userConfig to users.users by name; | ||||
|     users.mutableUsers = false; | ||||
|     users.users = lib.mapAttrs (username: userConfig: | ||||
|  |  | |||
|  | @ -10,14 +10,34 @@ | |||
|       extraGroups = ["wheel"]; | ||||
|     }; | ||||
| 
 | ||||
|     desktop.gnome.enable = true; | ||||
|     system.grub.enable = true; | ||||
|     users.jo = { | ||||
|       enable = true; | ||||
|       password = "jo"; # For testing only, replace with sops secret before production use | ||||
|       extraGroups = ["wheel"]; | ||||
|     }; | ||||
| 
 | ||||
|   environment.systemPackages = with pkgs; [ | ||||
|     ghostty | ||||
|     firefox | ||||
|     archetypes.workstation.enable = true; | ||||
|   }; | ||||
| 
 | ||||
|   # Configure 8GB SWAP partition | ||||
|   swapDevices = [ | ||||
|     { | ||||
|       device = "/swapfile"; | ||||
|       size = 8 * 1024; | ||||
|     } | ||||
|   ]; | ||||
| 
 | ||||
|   boot = { | ||||
|     # Configure additional kernel modules. | ||||
|     extraModulePackages = [ | ||||
|       pkgs.linuxPackages_latest.rtl8821ce # Use custom network-card driver. | ||||
|     ]; | ||||
| 
 | ||||
|     blacklistedKernelModules = [ | ||||
|       "rtw88_8821ce" # Block the default network-card driver. | ||||
|     ]; | ||||
|   }; | ||||
| 
 | ||||
|   networking.hostName = "puzzlevision"; | ||||
|   system.stateVersion = "25.05"; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue