Create `pijul_config::global_config_directory()`

finchie
Jul 27, 2025, 2:02 PM
HGJETVANHD25AZLOPYYEXCMLZHZWZ2NAKI33XQ7F43XM3UZVQNOQC

Dependencies

  • [2] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [3] VL7ZYKHB Running hooks through shell on Windows and Unix
  • [4] 4KJ45IJL Implement new identity management
  • [5] LZOGKBJX new command `pijul client` for authenticating to a HTTP server
  • [6] QWIYNMI5 Formatting + big-endian Sanakirja
  • [7] Z4PPQZUG Refactor `pijul-config` to support layered configuration
  • [8] YW6NICQV Migrate codebase to refactored `pijul_config` crate
  • [9] HM6QW3CY Handle missing configurations in `pijul_config`
  • [10] TFPETWTV Add config options for patch message templates
  • [11] HJVWPKWV Migrate crates to edition 2024
  • [12] ZSFJT4SF Allow remotes to have a different push and pull address
  • [13] 5WERCJKL Check if any identities exist before removal
  • [14] 2TWREKSR Treat missing config file as empty
  • [15] N26HD5PF Replace `chrono` with `jiff`
  • [16] 4OJWMSOW Fully replace crate::Identity
  • [17] I24UEJQL Various post-fire fixes
  • [18] 4RV7T4SR Migrate from `pijul::config` to `pijul-config`
  • [19] HKHMES6T Solving conflicts
  • [20] IUGP6ZGB Add support for ~/.config/pijul even on macos
  • [21] WTPFQPO5 Add global `no_prompt` flag

Change contents

  • replacement in pijul-identity/src/repair.rs at line 43
    [8.2814][8.2814:2931]()
    let config_path = Global::config_file().unwrap();
    let mut dir = config_path.parent().unwrap().to_path_buf();
    [8.2814]
    [8.2931]
    let mut dir = pijul_config::global_config_directory().unwrap();
  • replacement in pijul-identity/src/repair.rs at line 176
    [8.3529][8.3529:3643]()
    let config_path = Global::config_file().unwrap();
    let config_dir = config_path.parent().unwrap();
    [8.3529]
    [8.3643]
    let config_dir = pijul_config::global_config_directory().unwrap();
  • edit in pijul-identity/src/load.rs at line 5
    [4.22551][8.4182:4216]()
    use pijul_config::global::Global;
  • replacement in pijul-identity/src/load.rs at line 29
    [4.23384][8.4217:4397]()
    let config_file_path = Global::config_file().unwrap();
    let config_directory = config_file_path
    .parent()
    .expect("Could not find global config directory");
    [4.23384]
    [8.4397]
    let config_directory = pijul_config::global_config_directory().unwrap();
  • replacement in pijul-identity/src/load.rs at line 122
    [4.27540][8.4747:4861]()
    let config_file = Global::config_file().unwrap();
    let config_dir = config_file.parent().unwrap();
    [4.27540]
    [4.27603]
    let config_dir = pijul_config::global_config_directory().unwrap();
  • replacement in pijul-config/src/lib.rs at line 17
    [2.89898][7.4559:4580]()
    use std::path::Path;
    [2.89898]
    [2.89898]
    use std::path::{Path, PathBuf};
  • edit in pijul-config/src/lib.rs at line 72
    [7.5606][7.5606:5671]()
    let global_config_path = Global::config_file().unwrap();
  • replacement in pijul-config/src/lib.rs at line 90
    [9.86][9.86:475]()
    let global_config = match Global::read_contents(&global_config_path) {
    Ok(contents) => {
    // Parse the config (and make sure it's valid!)
    let global_config = Global::parse_contents(&global_config_path, &contents)?;
    // Add the configuration layer as a string
    layers = layers.merge(Toml::string(&contents));
    [9.86]
    [9.475]
    let global_config = match Global::config_file() {
    Some(global_config_path) => match Global::read_contents(&global_config_path) {
    Ok(contents) => {
    // Parse the config (and make sure it's valid!)
    let global_config = Global::parse_contents(&global_config_path, &contents)?;
    // Add the configuration layer as a string
    layers = layers.merge(Toml::string(&contents));
  • replacement in pijul-config/src/lib.rs at line 98
    [9.476][9.476:626]()
    Some(global_config)
    }
    Err(error) => {
    warn!("Unable to read global config file: {error:#?}");
    [9.476]
    [9.626]
    Some(global_config)
    }
    Err(error) => {
    warn!("Unable to read global config file: {error:#?}");
    None
    }
    },
    None => {
    warn!("Unable to find global configuration path");
  • edit in pijul-config/src/lib.rs at line 169
    [7.8427]
    [3.214]
    }
    /// Select which configuration directory to use
    pub fn global_config_directory() -> Option<PathBuf> {
    // 1. $PIJUL_CONFIG_DIR/
    std::env::var("PIJUL_CONFIG_DIR")
    .ok()
    .map(PathBuf::from)
    .map(|directory| directory.join(CONFIG_FILE))
    // 2. ~/.config/pijul/
    .or_else(|| match dirs_next::config_dir() {
    Some(global_config_dir) => Some(global_config_dir.join(CONFIG_DIR)),
    None => None,
    })
    // 3. ~/.pijulconfig/
    .or_else(|| match dirs_next::home_dir() {
    Some(home_dir) => Some(home_dir.join(CONFIG_DIR)),
    None => None,
    })
  • replacement in pijul-config/src/global.rs at line 2
    [7.10672][7.10672:10738]()
    use crate::{CONFIG_DIR, CONFIG_FILE, GLOBAL_CONFIG_FILE, Shared};
    [7.10672]
    [7.10738]
    use crate::{CONFIG_FILE, Shared};
  • replacement in pijul-config/src/global.rs at line 28
    [7.11353][7.11353:12368]()
    // 1. PIJUL_CONFIG_DIR environment variable
    std::env::var("PIJUL_CONFIG_DIR")
    .ok()
    .map(PathBuf::from)
    // 2. ~/.config/pijul/config.toml
    .or_else(|| match dirs_next::config_dir() {
    Some(config_dir) => {
    let config_path = config_dir.join(CONFIG_DIR).join(CONFIG_FILE);
    match config_path.exists() {
    true => Some(config_path),
    false => None,
    }
    }
    None => None,
    })
    // 3. ~/.pijulconfig
    .or_else(|| match dirs_next::home_dir() {
    Some(home_dir) => {
    let config_path = home_dir.join(GLOBAL_CONFIG_FILE);
    match config_path.exists() {
    true => Some(config_path),
    false => None,
    }
    }
    None => None,
    })
    [7.11353]
    [7.12368]
    // {config_directory}/config.toml
    crate::global_config_directory().map(|config_directory| config_directory.join(CONFIG_FILE))
  • edit in pijul/src/commands/identity.rs at line 3
    [8.13420][8.13420:13454]()
    use pijul_config::global::Global;
  • replacement in pijul/src/commands/identity.rs at line 456
    [8.14687][8.14687:14736]()
    let path = Global::config_file()
    [8.14687]
    [8.14736]
    let path = pijul_config::global_config_directory()
  • edit in pijul/src/commands/identity.rs at line 458
    [8.14766][8.14766:14796](),[8.14796][4.56074:56104](),[4.56074][4.56074:56104]()
    .parent()
    .unwrap()
  • edit in pijul/src/commands/client.rs at line 5
    [6.1966][8.15662:15696]()
    use pijul_config::global::Global;
  • replacement in pijul/src/commands/client.rs at line 22
    [5.5116][8.15697:15781]()
    if let Some(mut cached) = Global::config_file() {
    cached.pop();
    [5.5116]
    [5.5172]
    if let Some(mut cached) = pijul_config::global_config_directory() {