Add disko support #2
							
								
								
									
										34
									
								
								modules/home/utilities/impermanence.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								modules/home/utilities/impermanence.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| { lib, config, ... }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.impermanence; | ||||
| in | ||||
| { | ||||
|   options.modules.impermanence = { | ||||
|     enable = mkEnableOption "Impermanence"; | ||||
|     directories = mkOption { | ||||
|       type = types.listOf types.str; | ||||
|       default = [ ]; | ||||
|       description = '' | ||||
|         Directories that should be stored in persistent storage. | ||||
|       ''; | ||||
|     }; | ||||
|     files = mkOption { | ||||
|       type = types.listOf types.str; | ||||
|       default = [ ]; | ||||
|       description = '' | ||||
|         Files that should be stored in persistent storage. | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     home.persistence."/persist/home" = { | ||||
|       enable = true; | ||||
|       hideMounts = true; | ||||
|       directories = cfg.directories; | ||||
|       files = cfg.files; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										42
									
								
								modules/nixos/impermanence.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								modules/nixos/impermanence.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| { lib, config, ... }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.impermanence; | ||||
| in | ||||
| { | ||||
|   options.modules.impermanence = { | ||||
|     enable = mkEnableOption "Impermanence"; | ||||
|     directories = mkOption { | ||||
|       type = types.listOf types.str; | ||||
|       default = [ ]; | ||||
|       description = '' | ||||
|         Directories that should be stored in persistent storage. | ||||
|       ''; | ||||
|     }; | ||||
|     files = mkOption { | ||||
|       type = types.listOf types.str; | ||||
|       default = [ ]; | ||||
|       description = '' | ||||
|         Files that should be stored in persistent storage. | ||||
|       ''; | ||||
|     }; | ||||
|     resetScript = mkOption { | ||||
|       type = types.lines; | ||||
|       description = '' | ||||
|         Script to run on boot that resets the root partition. | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     boot.initrd.postResumeCommands = mkAfter cfg.resetScript; | ||||
| 
 | ||||
|     environment.persistence."/persist/system" = { | ||||
|       enable = true; | ||||
|       hideMounts = true; | ||||
|       directories = cfg.directories; | ||||
|       files = cfg.files; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| @ -23,6 +23,14 @@ in | ||||
|         enable = true; | ||||
|         profile = "vm"; | ||||
|       }; | ||||
|       impermanence = { | ||||
|         enable = true; | ||||
|         directories = [ "/var/lib/nixos" ]; | ||||
|         resetScript = '' | ||||
|           # Revert to the blank state for the root directory | ||||
|           zfs rollback -r tank/root@blank | ||||
|         ''; | ||||
|       }; | ||||
|       ssh.enable = true; | ||||
|     }; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user