Skip to content

Commit 7741f39

Browse files
committed
feat: add extra profiles
1 parent 821c1c8 commit 7741f39

File tree

5 files changed

+36
-1
lines changed

5 files changed

+36
-1
lines changed

bats-tests/tests.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ setup() {
9494
assert_symlink_to "$HOME/dotfiles/.dots/maven/corporate.settings.xml" "$HOME/.m2/settings.xml"
9595
}
9696

97+
@test "Link meta profile" {
98+
run bombadil link -p corporate-sway
99+
assert_success
100+
assert_symlink_to "$HOME/dotfiles/.dots/sway" "$HOME/.config/sway"
101+
assert_file_exist "$HOME/.config/sway/config"
102+
assert_symlink_to "$HOME/dotfiles/.dots/maven/corporate.settings.xml" "$HOME/.m2/settings.xml"
103+
}
104+
105+
97106
@test "Profile should override default vars" {
98107
run bombadil link
99108
assert_success

bats-tests/tom_home/dotfiles/bombadil.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,16 @@ maven = { source = "maven/corporate.settings.xml", target = ".m2/settings.xml" }
1717
[profiles.i3.dots]
1818
i3 = { source = "i3", target = ".config/i3" }
1919

20+
[profiles.sway.dots]
21+
sway = { source = "sway", target = ".config/sway" }
22+
2023
[profiles.java-16]
2124
vars = [ "profiles/java16.toml"]
2225

2326
[profiles.java-17.dots]
2427
bash = { vars = "profiles/java17.toml" }
2528

29+
[profiles.corporate-sway]
30+
extra_profiles = ["corporate", "sway"]
31+
2632

bats-tests/tom_home/dotfiles/sway/config

Whitespace-only changes.

src/lib.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,27 @@ impl Bombadil {
235235

236236
/// Enable a dotfile profile by merging its config with the default profile
237237
pub fn enable_profiles(&mut self, profile_keys: Vec<&str>) -> Result<()> {
238-
let profiles: Vec<Profile> = profile_keys
238+
let mut profiles: Vec<Profile> = profile_keys
239239
.iter()
240240
// unwrap here is safe cause allowed profile keys are checked by clap
241241
.map(|profile_key| self.profiles.get(&profile_key.to_string()).unwrap())
242242
.cloned()
243243
.collect();
244244

245+
let sub_profiles: Vec<Profile> = profiles
246+
.iter()
247+
.flat_map(|profile| {
248+
profile
249+
.extra_profiles
250+
.iter()
251+
.flat_map(|sub_profile| self.profiles.get(sub_profile))
252+
.collect::<Vec<&Profile>>()
253+
})
254+
.cloned()
255+
.collect();
256+
257+
profiles.extend(sub_profiles);
258+
245259
// Merge profile dots
246260
for profile in profiles.iter() {
247261
profile.dots.iter().for_each(|(key, dot_override)| {
@@ -900,6 +914,7 @@ mod tests {
900914
"profile_one".to_string(),
901915
Profile {
902916
dots: dots_profile_one,
917+
extra_profiles: vec![],
903918
prehooks: vec![],
904919
posthooks: vec![],
905920
vars: vec![],
@@ -913,6 +928,7 @@ mod tests {
913928
prehooks: vec![],
914929
posthooks: vec![],
915930
vars: vec![],
931+
extra_profiles: vec![],
916932
},
917933
);
918934

src/settings.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ pub struct Profile {
6868
#[serde(default)]
6969
pub dots: HashMap<String, DotOverride>,
7070

71+
/// A list of additional profiles to enable
72+
#[serde(default)]
73+
pub extra_profiles: Vec<String>,
74+
7175
/// Pre install hook commands
7276
#[serde(default)]
7377
pub prehooks: Vec<String>,

0 commit comments

Comments
 (0)