crosup_types/
nix.rs

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}