write hakurei config representation
This commit is contained in:
		
							parent
							
								
									b57edb8d3a
								
							
						
					
					
						commit
						bc1c7172d4
					
				
							
								
								
									
										2
									
								
								.idea/gradle.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/gradle.xml
									
									
									
										generated
									
									
									
								
							| @ -8,6 +8,8 @@ | |||||||
|         <option name="modules"> |         <option name="modules"> | ||||||
|           <set> |           <set> | ||||||
|             <option value="$PROJECT_DIR$" /> |             <option value="$PROJECT_DIR$" /> | ||||||
|  |             <option value="$PROJECT_DIR$/definition" /> | ||||||
|  |             <option value="$PROJECT_DIR$/host" /> | ||||||
|           </set> |           </set> | ||||||
|         </option> |         </option> | ||||||
|       </GradleProjectSettings> |       </GradleProjectSettings> | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.idea/kotlinc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/kotlinc.xml
									
									
									
										generated
									
									
									
								
							| @ -1,6 +1,6 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <project version="4"> | <project version="4"> | ||||||
|   <component name="KotlinJpsPluginSettings"> |   <component name="KotlinJpsPluginSettings"> | ||||||
|     <option name="version" value="2.2.10" /> |     <option name="version" value="2.2.20" /> | ||||||
|   </component> |   </component> | ||||||
| </project> | </project> | ||||||
| @ -1,5 +1,6 @@ | |||||||
| plugins { | plugins { | ||||||
|     kotlin("jvm") version "2.2.10" |     kotlin("jvm") version "2.2.10" | ||||||
|  |     kotlin("plugin.serialization") version "2.2.20" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| group = "moe.rosa" | group = "moe.rosa" | ||||||
| @ -11,6 +12,7 @@ repositories { | |||||||
| 
 | 
 | ||||||
| dependencies { | dependencies { | ||||||
|     testImplementation(kotlin("test")) |     testImplementation(kotlin("test")) | ||||||
|  |     implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| tasks.test { | tasks.test { | ||||||
|  | |||||||
| @ -2,3 +2,5 @@ plugins { | |||||||
|     id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" |     id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" | ||||||
| } | } | ||||||
| rootProject.name = "planterette" | rootProject.name = "planterette" | ||||||
|  | include("definition") | ||||||
|  | include("host") | ||||||
| @ -1,5 +1,2 @@ | |||||||
| package moe.rosa.planterette | package moe.rosa.planterette | ||||||
| 
 | 
 | ||||||
| fun main() { |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
							
								
								
									
										62
									
								
								src/main/kotlin/moe/rosa/planterette/hakurei/Filesystem.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								src/main/kotlin/moe/rosa/planterette/hakurei/Filesystem.kt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | |||||||
|  | package moe.rosa.planterette.hakurei | ||||||
|  | 
 | ||||||
|  | import kotlinx.serialization.Serializable | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class AbsolutePath(private val path: String) { | ||||||
|  |     override fun toString(): String { | ||||||
|  |         return path | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface FSType { | ||||||
|  |     val type: String | ||||||
|  | } | ||||||
|  | data class ApplyState(val autoEtcPrefix: String) | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class FSBind( | ||||||
|  |     val target: AbsolutePath, | ||||||
|  |     val source: AbsolutePath, | ||||||
|  |     val write: Boolean, | ||||||
|  |     val device: Boolean, | ||||||
|  |     val ensure: Boolean, | ||||||
|  |     val optional: Boolean, | ||||||
|  |     val special: Boolean, | ||||||
|  | 
 | ||||||
|  |     override val type: String = "bind", | ||||||
|  | ) : FSType | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class FSEphemeral( | ||||||
|  |     val target: AbsolutePath, | ||||||
|  |     val write: Boolean, | ||||||
|  |     val size: Int, | ||||||
|  |     val perm: Int, | ||||||
|  | 
 | ||||||
|  |     override val type: String = "ephemeral" | ||||||
|  | ) : FSType | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class FSLink( | ||||||
|  |     val target: AbsolutePath, | ||||||
|  |     val linkname: String, | ||||||
|  |     val dereference: Boolean, | ||||||
|  | 
 | ||||||
|  |     override val type: String = "link" | ||||||
|  | ) : FSType | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class FSOverlay( | ||||||
|  |     val target: AbsolutePath, | ||||||
|  |     val lower: List<AbsolutePath>, | ||||||
|  |     val upper: AbsolutePath, | ||||||
|  |     val work: AbsolutePath, | ||||||
|  | 
 | ||||||
|  |     override val type: String = "overlay" | ||||||
|  | ) : FSType | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class FilesystemConfig( | ||||||
|  |     val config: FSType | ||||||
|  | ) | ||||||
							
								
								
									
										93
									
								
								src/main/kotlin/moe/rosa/planterette/hakurei/Hakurei.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								src/main/kotlin/moe/rosa/planterette/hakurei/Hakurei.kt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,93 @@ | |||||||
|  | package moe.rosa.planterette.hakurei | ||||||
|  | 
 | ||||||
|  | import kotlinx.serialization.Serializable | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class HakureiConfig( | ||||||
|  |     val id: String, | ||||||
|  |     val path: AbsolutePath, | ||||||
|  |     val args: List<String>, | ||||||
|  |     val enablements: Enablements, | ||||||
|  |     val sessionBus: DBusConfig, | ||||||
|  |     val systemBus: DBusConfig, | ||||||
|  |     val directWayland: Boolean, | ||||||
|  |     val username: String, | ||||||
|  |     val shell: AbsolutePath, | ||||||
|  |     val home: AbsolutePath, | ||||||
|  | 
 | ||||||
|  |     val extraPerms: ExtraPermsConfig, | ||||||
|  |     val identity: Int, | ||||||
|  |     val groups: List<String>, | ||||||
|  | 
 | ||||||
|  |     val container: ContainerConfig, | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class DBusConfig( | ||||||
|  |     val see: List<String>, | ||||||
|  |     val talk: List<String>, | ||||||
|  |     val own: List<String>, | ||||||
|  |     val call: Map<String, String>, | ||||||
|  |     val broadcast: Map<String, String>, | ||||||
|  |     val log: Boolean, | ||||||
|  |     val filter: Boolean, | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class Enablements( | ||||||
|  |     val wayland: Boolean, | ||||||
|  |     val x11: Boolean, | ||||||
|  |     val dbus: Boolean, | ||||||
|  |     val pulse: Boolean, | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | @Serializable | ||||||
|  | data class ContainerConfig( | ||||||
|  |     val hostname: String, | ||||||
|  |     val waitDelay: Long, | ||||||
|  |     val seccompFlags: Int, | ||||||
|  |     val seccompPresets: Int, | ||||||
|  |     val seccompCompat: Boolean, | ||||||
|  |     val devel: Boolean, | ||||||
|  |     val userns: Boolean, | ||||||
|  |     val hostNet: Boolean, | ||||||
|  |     val hostAbstract: Boolean, | ||||||
|  |     val tty: Boolean, | ||||||
|  |     val multiarch: Boolean, | ||||||
|  | 
 | ||||||
|  |     val env: Map<String, String>, | ||||||
|  | 
 | ||||||
|  |     val mapRealUid: Boolean, | ||||||
|  |     val device: Boolean, | ||||||
|  | 
 | ||||||
|  |     val filesystem: List<FilesystemConfig>, | ||||||
|  | ) | ||||||
|  | @Serializable | ||||||
|  | data class ExtraPermsConfig( | ||||||
|  |     val ensure: Boolean, | ||||||
|  |     val path: AbsolutePath, | ||||||
|  |     val read: Boolean, | ||||||
|  |     val write: Boolean, | ||||||
|  |     val execute: Boolean, | ||||||
|  | ) { | ||||||
|  |     override fun toString(): String { | ||||||
|  |         val buffer = StringBuffer(5 + path.toString().length) | ||||||
|  |         buffer.append("---") | ||||||
|  |         if(ensure) { | ||||||
|  |             buffer.append("+") | ||||||
|  |         } | ||||||
|  |         buffer.append(":") | ||||||
|  |         buffer.append(path.toString()) | ||||||
|  |         if(read) { | ||||||
|  |             buffer.setCharAt(0, 'r') | ||||||
|  |         } | ||||||
|  |         if(write) { | ||||||
|  |             buffer.setCharAt(1, 'w') | ||||||
|  |         } | ||||||
|  |         if(execute) { | ||||||
|  |             buffer.setCharAt(2, 'x') | ||||||
|  |         } | ||||||
|  |         return buffer.toString() | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										0
									
								
								src/test/resources/ChromiumExample.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/test/resources/ChromiumExample.kts
									
									
									
									
									
										Normal file
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user