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> | <br> | ||||||
| 
 | 
 | ||||||
| ## 🚧 State of development | ## 🚧 State of development | ||||||
| Version 2.0 is still very much an experiment and not ready to be used in a production | All the basic functionality of v2 should be working correctly, including: | ||||||
| environment. If you must, try running it within a VM using the provided deployment | 
 | ||||||
| instructions. | - 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 | ## 🚀 Deployment | ||||||
| To deploy a system run the following command in your terminal of choice. | To deploy a system run the following command in your terminal of choice. | ||||||
| 
 | 
 | ||||||
| ```sh | ```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, | If you're interested in a quick way to experiment with this configuration, | ||||||
| you may use the following command to build a VM. | you may use the following command to build a VM. | ||||||
| 
 | 
 | ||||||
| ```sh | ```sh | ||||||
| sudo nixos-rebuild build-vm --flake .#hostname | sudo nixos-rebuild build-vm --flake .#hostname --accept-flake-config | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## 📝 Goals and improvements | ## 📝 Goals and improvements | ||||||
|  |  | ||||||
|  | @ -1,10 +1,7 @@ | ||||||
| { | {pkgs, ...}: { | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   home.packages = with pkgs; [ |   home.packages = with pkgs; [ | ||||||
|     vscodium |     zed-editor | ||||||
|     cmatrix |     firefox | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   home.stateVersion = "25.05"; |   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 = { |   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; |     # Manage users declaratively and map userConfig to users.users by name; | ||||||
|     users.mutableUsers = false; |     users.mutableUsers = false; | ||||||
|     users.users = lib.mapAttrs (username: userConfig: |     users.users = lib.mapAttrs (username: userConfig: | ||||||
|  |  | ||||||
|  | @ -10,14 +10,34 @@ | ||||||
|       extraGroups = ["wheel"]; |       extraGroups = ["wheel"]; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     desktop.gnome.enable = true; |     users.jo = { | ||||||
|     system.grub.enable = true; |       enable = true; | ||||||
|  |       password = "jo"; # For testing only, replace with sops secret before production use | ||||||
|  |       extraGroups = ["wheel"]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     archetypes.workstation.enable = true; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   environment.systemPackages = with pkgs; [ |   # Configure 8GB SWAP partition | ||||||
|     ghostty |   swapDevices = [ | ||||||
|     firefox |     { | ||||||
|  |       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"; |   system.stateVersion = "25.05"; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue