Skip to main content

codex_cli/
config.rs

1use nils_common::shell::{SingleQuoteEscapeStyle, quote_posix_single_with_style};
2
3pub fn show() -> i32 {
4    let snapshot = crate::runtime::config_snapshot();
5
6    println!("CODEX_CLI_MODEL={}", snapshot.model);
7    println!("CODEX_CLI_REASONING={}", snapshot.reasoning);
8    println!(
9        "CODEX_ALLOW_DANGEROUS_ENABLED={}",
10        snapshot.allow_dangerous_enabled_raw
11    );
12
13    if let Some(path) = snapshot.secret_dir {
14        println!("CODEX_SECRET_DIR={}", path.to_string_lossy());
15    } else {
16        println!("CODEX_SECRET_DIR=");
17    }
18
19    if let Some(path) = snapshot.auth_file {
20        println!("CODEX_AUTH_FILE={}", path.to_string_lossy());
21    } else {
22        println!("CODEX_AUTH_FILE=");
23    }
24
25    if let Some(path) = snapshot.secret_cache_dir {
26        println!("CODEX_SECRET_CACHE_DIR={}", path.to_string_lossy());
27    } else {
28        println!("CODEX_SECRET_CACHE_DIR=");
29    }
30
31    println!(
32        "CODEX_PROMPT_SEGMENT_ENABLED={}",
33        snapshot.prompt_segment_enabled
34    );
35    println!(
36        "CODEX_AUTO_REFRESH_ENABLED={}",
37        snapshot.auto_refresh_enabled
38    );
39    println!(
40        "CODEX_AUTO_REFRESH_MIN_DAYS={}",
41        snapshot.auto_refresh_min_days
42    );
43
44    0
45}
46
47pub fn set(key: &str, value: &str) -> i32 {
48    match key {
49        "model" | "CODEX_CLI_MODEL" => {
50            println!(
51                "export CODEX_CLI_MODEL={}",
52                quote_posix_single_with_style(value, SingleQuoteEscapeStyle::DoubleQuoteBoundary)
53            );
54            0
55        }
56        "reasoning" | "reason" | "CODEX_CLI_REASONING" => {
57            println!(
58                "export CODEX_CLI_REASONING={}",
59                quote_posix_single_with_style(value, SingleQuoteEscapeStyle::DoubleQuoteBoundary)
60            );
61            0
62        }
63        "dangerous" | "allow-dangerous" | "CODEX_ALLOW_DANGEROUS_ENABLED" => {
64            let lowered = value.trim().to_ascii_lowercase();
65            if lowered != "true" && lowered != "false" {
66                eprintln!(
67                    "codex-cli config: dangerous must be true|false (got: {})",
68                    value
69                );
70                return 64;
71            }
72            println!("export CODEX_ALLOW_DANGEROUS_ENABLED={}", lowered);
73            0
74        }
75        _ => {
76            eprintln!("codex-cli config: unknown key: {key}");
77            eprintln!("codex-cli config: keys: model|reasoning|dangerous");
78            64
79        }
80    }
81}