Merge pull request #465 from a-kenji/set-data-dir
Add Complile Time System Directories
This commit is contained in:
commit
a24c7f79f1
4 changed files with 40 additions and 9 deletions
|
|
@ -78,3 +78,7 @@ assets = [
|
||||||
["assets/completions/zellij.fish", "usr/share/fish/vendor_completions.d/zellij.fish", "644"],
|
["assets/completions/zellij.fish", "usr/share/fish/vendor_completions.d/zellij.fish", "644"],
|
||||||
["assets/completions/_zellij", "usr/share/zsh/vendor-completions/_zellij", "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 crate::os_input_output::set_permissions;
|
||||||
use directories_next::{BaseDirs, ProjectDirs};
|
use directories_next::BaseDirs;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::{fs, path::Path, path::PathBuf};
|
use std::{fs, path::Path, path::PathBuf};
|
||||||
|
|
||||||
|
|
@ -51,6 +53,8 @@ pub mod install {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(test))]
|
#[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> {
|
pub fn find_default_config_dir() -> Option<PathBuf> {
|
||||||
vec![
|
vec![
|
||||||
home_config_dir(),
|
home_config_dir(),
|
||||||
|
|
@ -68,9 +72,24 @@ pub fn find_default_config_dir() -> Option<PathBuf> {
|
||||||
None
|
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 {
|
pub fn xdg_config_dir() -> PathBuf {
|
||||||
let project_dirs = ProjectDirs::from("org", "Zellij Contributors", "Zellij").unwrap();
|
ZELLIJ_PROJ_DIR.config_dir().to_owned()
|
||||||
project_dirs.config_dir().to_owned()
|
}
|
||||||
|
|
||||||
|
pub fn xdg_data_dir() -> PathBuf {
|
||||||
|
ZELLIJ_PROJ_DIR.data_dir().to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn home_config_dir() -> Option<PathBuf> {
|
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 ZELLIJ_CONFIG_DIR_ENV: &str = "ZELLIJ_CONFIG_DIR";
|
||||||
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
|
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_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! {
|
lazy_static! {
|
||||||
static ref UID: Uid = Uid::current();
|
static ref UID: Uid = Uid::current();
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ use crate::common::{
|
||||||
os_input_output::{set_permissions, ServerOsApi},
|
os_input_output::{set_permissions, ServerOsApi},
|
||||||
pty::{pty_thread_main, Pty, PtyInstruction},
|
pty::{pty_thread_main, Pty, PtyInstruction},
|
||||||
screen::{screen_thread_main, ScreenInstruction},
|
screen::{screen_thread_main, ScreenInstruction},
|
||||||
setup::install::populate_data_dir,
|
setup::{get_default_data_dir, install::populate_data_dir},
|
||||||
thread_bus::{ChannelWithContext, SenderType, SenderWithContext},
|
thread_bus::{ChannelWithContext, SenderType, SenderWithContext},
|
||||||
utils::consts::{ZELLIJ_IPC_PIPE, ZELLIJ_PROJ_DIR},
|
utils::consts::{ZELLIJ_IPC_PIPE, ZELLIJ_PROJ_DIR},
|
||||||
wasm_vm::{wasm_thread_main, PluginInstruction},
|
wasm_vm::{wasm_thread_main, PluginInstruction},
|
||||||
|
|
@ -185,9 +185,9 @@ fn init_session(
|
||||||
let to_pty = SenderWithContext::new(SenderType::Sender(to_pty));
|
let to_pty = SenderWithContext::new(SenderType::Sender(to_pty));
|
||||||
|
|
||||||
// Determine and initialize the data directory
|
// Determine and initialize the data directory
|
||||||
let data_dir = opts
|
let data_dir = opts.data_dir.unwrap_or_else(get_default_data_dir);
|
||||||
.data_dir
|
|
||||||
.unwrap_or_else(|| ZELLIJ_PROJ_DIR.data_dir().to_path_buf());
|
#[cfg(enable_automatic_assets_installation)]
|
||||||
populate_data_dir(&data_dir);
|
populate_data_dir(&data_dir);
|
||||||
|
|
||||||
// Don't use default layouts in tests, but do everywhere else
|
// Don't use default layouts in tests, but do everywhere else
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue