kt-go-split #1

Merged
maemachinebroke merged 8 commits from kt-go-split into main 2025-10-07 11:52:11 +09:00
8 changed files with 163 additions and 5 deletions
Showing only changes of commit bc1c7172d4 - Show all commits

2
.idea/gradle.xml generated
View File

@ -8,6 +8,8 @@
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/definition" />
<option value="$PROJECT_DIR$/host" />
</set>
</option>
</GradleProjectSettings>

2
.idea/kotlinc.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinJpsPluginSettings">
<option name="version" value="2.2.10" />
<option name="version" value="2.2.20" />
</component>
</project>

View File

@ -1,5 +1,6 @@
plugins {
kotlin("jvm") version "2.2.10"
kotlin("plugin.serialization") version "2.2.20"
}
group = "moe.rosa"
@ -11,6 +12,7 @@ repositories {
dependencies {
testImplementation(kotlin("test"))
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0")
}
tasks.test {

View File

@ -1,4 +1,6 @@
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
rootProject.name = "planterette"
rootProject.name = "planterette"
include("definition")
include("host")

View File

@ -1,5 +1,2 @@
package moe.rosa.planterette
fun main() {
}

View 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
)

View 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()
}
}

View File