Merge pull request #465 from a-kenji/set-data-dir

Add Complile Time System Directories
This commit is contained in:
a-kenji 2021-05-12 20:11:06 +02:00 committed by GitHub
commit a24c7f79f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 9 deletions

View File

@ -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 = []

View File

@ -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> {

View File

@ -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();

View File

@ -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