mirror of
https://github.com/zellij-org/zellij.git
synced 2024-11-23 08:57:14 +03:00
Merge pull request #465 from a-kenji/set-data-dir
Add Complile Time System Directories
This commit is contained in:
commit
a24c7f79f1
@ -78,3 +78,7 @@ assets = [
|
||||
["assets/completions/zellij.fish", "usr/share/fish/vendor_completions.d/zellij.fish", "644"],
|
||||
["assets/completions/_zellij", "usr/share/zsh/vendor-completions/_zellij", "644"],
|
||||
]
|
||||
|
||||
[features]
|
||||
default = [ "enable_automatic_asset_installation", ]
|
||||
enable_automatic_asset_installation = []
|
||||
|
@ -1,6 +1,8 @@
|
||||
use crate::common::utils::consts::{SYSTEM_DEFAULT_CONFIG_DIR, VERSION};
|
||||
use crate::common::utils::consts::{
|
||||
SYSTEM_DEFAULT_CONFIG_DIR, SYSTEM_DEFAULT_DATA_DIR_PREFIX, VERSION, ZELLIJ_PROJ_DIR,
|
||||
};
|
||||
use crate::os_input_output::set_permissions;
|
||||
use directories_next::{BaseDirs, ProjectDirs};
|
||||
use directories_next::BaseDirs;
|
||||
use std::io::Write;
|
||||
use std::{fs, path::Path, path::PathBuf};
|
||||
|
||||
@ -51,6 +53,8 @@ pub mod install {
|
||||
}
|
||||
|
||||
#[cfg(not(test))]
|
||||
/// Goes through a predefined list and checks for an already
|
||||
/// existing config directory, returns the first match
|
||||
pub fn find_default_config_dir() -> Option<PathBuf> {
|
||||
vec![
|
||||
home_config_dir(),
|
||||
@ -68,9 +72,24 @@ pub fn find_default_config_dir() -> Option<PathBuf> {
|
||||
None
|
||||
}
|
||||
|
||||
/// Looks for an existing dir, uses that, else returns a
|
||||
/// dir matching the config spec.
|
||||
pub fn get_default_data_dir() -> PathBuf {
|
||||
vec![
|
||||
xdg_data_dir(),
|
||||
Path::new(SYSTEM_DEFAULT_DATA_DIR_PREFIX).join("share/zellij"),
|
||||
]
|
||||
.into_iter()
|
||||
.find(|p| p.exists())
|
||||
.unwrap_or_else(xdg_data_dir)
|
||||
}
|
||||
|
||||
pub fn xdg_config_dir() -> PathBuf {
|
||||
let project_dirs = ProjectDirs::from("org", "Zellij Contributors", "Zellij").unwrap();
|
||||
project_dirs.config_dir().to_owned()
|
||||
ZELLIJ_PROJ_DIR.config_dir().to_owned()
|
||||
}
|
||||
|
||||
pub fn xdg_data_dir() -> PathBuf {
|
||||
ZELLIJ_PROJ_DIR.data_dir().to_owned()
|
||||
}
|
||||
|
||||
pub fn home_config_dir() -> Option<PathBuf> {
|
||||
|
@ -11,8 +11,16 @@ pub const ZELLIJ_CONFIG_FILE_ENV: &str = "ZELLIJ_CONFIG_FILE";
|
||||
pub const ZELLIJ_CONFIG_DIR_ENV: &str = "ZELLIJ_CONFIG_DIR";
|
||||
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
// TODO: ${PREFIX} argument in makefile
|
||||
pub const SYSTEM_DEFAULT_CONFIG_DIR: &str = "/etc/zellij";
|
||||
pub const SYSTEM_DEFAULT_DATA_DIR_PREFIX: &str = system_default_data_dir();
|
||||
|
||||
const fn system_default_data_dir() -> &'static str {
|
||||
if let Some(data_dir) = std::option_env!("PREFIX") {
|
||||
data_dir
|
||||
} else {
|
||||
&"/usr"
|
||||
}
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
static ref UID: Uid = Uid::current();
|
||||
|
@ -17,7 +17,7 @@ use crate::common::{
|
||||
os_input_output::{set_permissions, ServerOsApi},
|
||||
pty::{pty_thread_main, Pty, PtyInstruction},
|
||||
screen::{screen_thread_main, ScreenInstruction},
|
||||
setup::install::populate_data_dir,
|
||||
setup::{get_default_data_dir, install::populate_data_dir},
|
||||
thread_bus::{ChannelWithContext, SenderType, SenderWithContext},
|
||||
utils::consts::{ZELLIJ_IPC_PIPE, ZELLIJ_PROJ_DIR},
|
||||
wasm_vm::{wasm_thread_main, PluginInstruction},
|
||||
@ -185,9 +185,9 @@ fn init_session(
|
||||
let to_pty = SenderWithContext::new(SenderType::Sender(to_pty));
|
||||
|
||||
// Determine and initialize the data directory
|
||||
let data_dir = opts
|
||||
.data_dir
|
||||
.unwrap_or_else(|| ZELLIJ_PROJ_DIR.data_dir().to_path_buf());
|
||||
let data_dir = opts.data_dir.unwrap_or_else(get_default_data_dir);
|
||||
|
||||
#[cfg(enable_automatic_assets_installation)]
|
||||
populate_data_dir(&data_dir);
|
||||
|
||||
// Don't use default layouts in tests, but do everywhere else
|
||||
|
Loading…
Reference in New Issue
Block a user