1use indexmap::IndexMap;
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug, Clone, Default)]
5pub struct NixConfiguration {
6 #[serde(serialize_with = "hcl::ser::labeled_block")]
7 pub pkg: IndexMap<String, Package>,
8}
9
10#[derive(Serialize, Deserialize, Debug, Clone, Default)]
11pub struct Package {
12 #[serde(skip_serializing, skip_deserializing)]
13 pub name: String,
14
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub impure: Option<bool>,
17
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub experimental_features: Option<String>,
20
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub accept_flake_config: Option<bool>,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub preinstall: Option<String>,
26 pub flake: String,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub depends_on: Option<Vec<String>>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub version_check: Option<String>,
33}
34
35pub fn default_nix_install() -> IndexMap<String, NixConfiguration> {
36 let mut pkg = IndexMap::new();
37 pkg.insert("flox".into(),
38 Package {
39 name: "flox".into(),
40 impure: Some(true),
41 experimental_features: Some("nix-command flakes".into()),
42 accept_flake_config: Some(true),
43 flake: "github:flox/floxpkgs#flox.fromCatalog".into(),
44 preinstall: Some("echo 'extra-trusted-substituters = https://cache.floxdev.com' | sudo tee -a /etc/nix/nix.conf && echo 'extra-trusted-public-keys = flox-store-public-0:8c/B+kjIaQ+BloCmNkRUKwaVPFWkriSAd0JJvuDu4F0=' | sudo tee -a /etc/nix/nix.conf".into()),
45 ..Default::default()
46 }
47 );
48
49 pkg.insert(
50 "cachix".into(),
51 Package {
52 name: "cachix".into(),
53 flake: "github:cachix/cachix".into(),
54 ..Default::default()
55 },
56 );
57
58 pkg.insert(
59 "devenv".into(),
60 Package {
61 name: "devenv".into(),
62 accept_flake_config: Some(true),
63 flake: "github:cachix/devenv/latest".into(),
64 preinstall: Some(
65 r#"echo "trusted-users = root $USER" | sudo tee -a /etc/nix/nix.conf
66sudo pkill nix-daemon
67cachix use devenv"#
68 .into(),
69 ),
70 depends_on: Some(vec!["cachix".into()]),
71 ..Default::default()
72 },
73 );
74
75 let mut nix = IndexMap::new();
76 nix.insert("install".into(), NixConfiguration { pkg });
77 nix
78}