feat: Support bare `writable` nodes in KDL config
Bumps serde-kdl2 to 0.1.1-alpha.4 and uses its `bare_defaults`
deserializer so `writable` (without `#true`) means writable.

Assisted-by: Claude Opus 4.6 via pi
change wxzwtqpkmwxwsmsqtokwsyuxnuwkokmy
commit 52e15bad00063aafde49ca73dda4dfa60a157a9c
author Alpha Chen <alpha@kejadlen.dev>
date
parent ssnynwrw
diff --git a/Cargo.lock b/Cargo.lock
index 3ebde19..0c916d8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -558,9 +558,9 @@ dependencies = [
 
 [[package]]
 name = "serde-kdl2"
-version = "0.1.0"
+version = "0.1.1-alpha.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b9cea21f8a61b2de91d2edc3f523b9be71e380b6596d739638d9c20b70139de"
+checksum = "88a4b4201ac42c878b105d4f78b21162c39257f69a09e1c214fba9dac4fd12cd"
 dependencies = [
  "kdl",
  "serde",
diff --git a/Cargo.toml b/Cargo.toml
index 1afb4b1..6897d71 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,7 +10,8 @@ clap = { version = "*", features = ["derive"] }
 color-eyre = "*"
 fs-err = "*"
 serde = { version = "*", features = ["derive"] }
-serde-kdl2 = "*"
+# Pinned to prerelease — alpha.4 fixes serde defaults with bare KDL values.
+serde-kdl2 = "0.1.1-alpha.4"
 serde_yaml = "*"
 shellexpand = "*"
 tracing = "*"
diff --git a/src/config.rs b/src/config.rs
index 09d7090..8cc6d44 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -12,7 +12,7 @@ pub struct Config {
 pub struct Mount {
     pub source: String,
     pub target: Option<String>,
-    #[serde(default)]
+    #[serde(default, deserialize_with = "serde_kdl2::bare_defaults::bool::bare_true")]
     pub writable: bool,
 }
 
@@ -175,6 +175,24 @@ mod tests {
         assert!(!parsed.mounts[3].writable);
     }
 
+    #[test]
+    fn kdl_bare_writable() {
+        let kdl_content = r#"
+            mounts {
+                source "~/.local/share/ranger"
+                writable
+            }
+            mounts {
+                source "~/.config/git"
+            }
+        "#;
+
+        let parsed: Config = serde_kdl2::from_str(kdl_content).unwrap();
+        assert_eq!(parsed.mounts.len(), 2);
+        assert!(parsed.mounts[0].writable);
+        assert!(!parsed.mounts[1].writable);
+    }
+
     #[test]
     fn kdl_parse_error_on_invalid_syntax() {
         let invalid_kdl = "invalid_syntax_here{ missing closing brace";