mod/direnv: add support of shell and args
This commit is contained in:
parent
0a74fec499
commit
747b5c642b
4 changed files with 53 additions and 24 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
[direnv]
|
||||||
|
nix = "flake"
|
||||||
|
|
||||||
[gitignore]
|
[gitignore]
|
||||||
direnv = true
|
direnv = true
|
||||||
rust = true
|
rust = true
|
||||||
|
|
|
@ -1,24 +1,34 @@
|
||||||
use crate::module::direnv::DirenvModuleArgs;
|
use crate::module::direnv::{DirenvModuleArgs, DirenvNixFunction};
|
||||||
|
|
||||||
#[derive(Debug, Clone, clap::ValueEnum)]
|
#[derive(Debug, Clone, clap::ValueEnum)]
|
||||||
pub enum DirenvCliNixValue {
|
pub enum DirenvCliNixValue {
|
||||||
Flake,
|
Flake,
|
||||||
Shell,
|
Shell,
|
||||||
}
|
}
|
||||||
|
impl From<DirenvCliNixValue> for DirenvNixFunction {
|
||||||
|
fn from(value: DirenvCliNixValue) -> Self {
|
||||||
|
match value {
|
||||||
|
DirenvCliNixValue::Flake => DirenvNixFunction::Flake,
|
||||||
|
DirenvCliNixValue::Shell => DirenvNixFunction::Shell,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, clap::Args)]
|
#[derive(Debug, Clone, clap::Args)]
|
||||||
pub struct DirenvModuleCliArgs {
|
pub struct DirenvModuleCliArgs {
|
||||||
#[clap(long)]
|
#[clap(long)]
|
||||||
pub nix: Option<DirenvCliNixValue>,
|
pub nix: Option<DirenvCliNixValue>,
|
||||||
#[clap(long)]
|
#[clap(long)]
|
||||||
|
pub nix_args: Option<String>,
|
||||||
|
#[clap(long)]
|
||||||
pub nodejs: bool,
|
pub nodejs: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<DirenvModuleCliArgs> for DirenvModuleArgs {
|
impl From<DirenvModuleCliArgs> for DirenvModuleArgs {
|
||||||
fn from(args: DirenvModuleCliArgs) -> Self {
|
fn from(args: DirenvModuleCliArgs) -> Self {
|
||||||
DirenvModuleArgs {
|
DirenvModuleArgs {
|
||||||
nix_shell: matches!(args.nix, Some(DirenvCliNixValue::Shell)),
|
nix: args.nix.map(From::from),
|
||||||
nix_flake: matches!(args.nix, Some(DirenvCliNixValue::Flake)),
|
nix_args: args.nix_args,
|
||||||
nodejs: args.nodejs,
|
nodejs: args.nodejs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::module::direnv::DirenvModuleArgs;
|
use crate::module::direnv::{DirenvModuleArgs, DirenvNixFunction};
|
||||||
|
|
||||||
#[derive(Default, serde::Deserialize, serde::Serialize)]
|
#[derive(Default, serde::Deserialize, serde::Serialize)]
|
||||||
pub struct DirenvModuleConfig {
|
pub struct DirenvModuleConfig {
|
||||||
|
@ -9,14 +9,18 @@ pub struct DirenvModuleConfig {
|
||||||
impl From<DirenvModuleConfig> for DirenvModuleArgs {
|
impl From<DirenvModuleConfig> for DirenvModuleArgs {
|
||||||
fn from(cfg: DirenvModuleConfig) -> Self {
|
fn from(cfg: DirenvModuleConfig) -> Self {
|
||||||
DirenvModuleArgs {
|
DirenvModuleArgs {
|
||||||
nix_shell: cfg
|
nix: cfg
|
||||||
.nix
|
.nix
|
||||||
.map(|v| v.to_lowercase() == "shell")
|
.clone()
|
||||||
.unwrap_or_default(),
|
.and_then(|v| match v.split_whitespace().next() {
|
||||||
nix_flake: cfg
|
Some("flake") => Some(DirenvNixFunction::Flake),
|
||||||
.nix
|
Some("shell") => Some(DirenvNixFunction::Shell),
|
||||||
.map(|v| v.to_lowercase() == "flake")
|
_ => None,
|
||||||
.unwrap_or_default(),
|
}),
|
||||||
|
nix_args: cfg.nix.and_then(|v| match v.split_once(" ") {
|
||||||
|
Some((_, args)) => Some(String::from(args)),
|
||||||
|
None => None,
|
||||||
|
}),
|
||||||
nodejs: cfg.nodejs.unwrap_or_default(),
|
nodejs: cfg.nodejs.unwrap_or_default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,29 +2,41 @@ use std::collections::HashMap;
|
||||||
|
|
||||||
use super::Module;
|
use super::Module;
|
||||||
|
|
||||||
const NIX_SHELL_PART: &str = "\
|
|
||||||
# nix
|
|
||||||
use nix";
|
|
||||||
|
|
||||||
const NIX_FLAKE_PART: &str = "\
|
|
||||||
# nix
|
|
||||||
use flake";
|
|
||||||
|
|
||||||
const NODEJS_PART: &str = "\
|
const NODEJS_PART: &str = "\
|
||||||
# nodejs
|
# nodejs
|
||||||
layout node";
|
layout node";
|
||||||
|
|
||||||
|
pub enum DirenvNixFunction {
|
||||||
|
Flake,
|
||||||
|
Shell,
|
||||||
|
}
|
||||||
|
impl std::fmt::Display for DirenvNixFunction {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
Self::Flake => f.write_str("flake"),
|
||||||
|
Self::Shell => f.write_str("nix"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct DirenvModuleArgs {
|
pub struct DirenvModuleArgs {
|
||||||
pub nix_shell: bool,
|
pub nix: Option<DirenvNixFunction>,
|
||||||
pub nix_flake: bool,
|
pub nix_args: Option<String>,
|
||||||
pub nodejs: bool,
|
pub nodejs: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_gitignore_content(args: DirenvModuleArgs) -> String {
|
fn make_gitignore_content(args: DirenvModuleArgs) -> String {
|
||||||
[
|
[
|
||||||
args.nix_shell.then_some(NIX_SHELL_PART),
|
args.nix.map(|function| {
|
||||||
args.nix_flake.then_some(NIX_FLAKE_PART),
|
format!(
|
||||||
args.nodejs.then_some(NODEJS_PART),
|
"# nix\nuse {} {}",
|
||||||
|
function,
|
||||||
|
args.nix_args.unwrap_or_default()
|
||||||
|
)
|
||||||
|
.trim_end()
|
||||||
|
.to_owned()
|
||||||
|
}),
|
||||||
|
args.nodejs.then_some(NODEJS_PART.to_string()),
|
||||||
]
|
]
|
||||||
.iter()
|
.iter()
|
||||||
.flatten()
|
.flatten()
|
||||||
|
|
Loading…
Reference in a new issue