diff --git a/configs/crystal/create-partitions/up.nu b/configs/crystal/create-partitions/up.nu index bb6a526..c2884aa 100644 --- a/configs/crystal/create-partitions/up.nu +++ b/configs/crystal/create-partitions/up.nu @@ -46,10 +46,10 @@ module auto_partition { run btrfs subvolume create @home } run umount $root_part - run mount $root_part /mnt subvol=@ + run mount $root_part /mnt -o subvol=@ mkdir /mnt/boot/efi mkdir /mnt/home - run mount $root_part /mnt/home subvol=@home + run mount $root_part /mnt/home -o subvol=@home run mount $boot_part /mnt/boot/efi } diff --git a/configs/crystal/install-base/up.nu b/configs/crystal/install-base/up.nu index 3fbee4f..c15b72b 100644 --- a/configs/crystal/install-base/up.nu +++ b/configs/crystal/install-base/up.nu @@ -1,4 +1,64 @@ +def install_base_packages [] { + ( + run pacstrap /mnt + base + linux-firmware + systemd-sysvcompat + networkmanager + man-db + man-pages + texinfo + nano + sudo + curl + archlinux-keyring + + # crystal base + crystal-core + crystal-branding + + # crystal extras + crystal-first-setup + neofetch + btrfs-progs + which + base-devel + + # fonts + noto-fonts + noto-fonts-emoji + noto-fonts-cjk + noto-fonts-extra + ttf-nerd-fonts-symbols-common + ttf-firacode-nerd + ttf-liberation + + # audio + pipewire + pipewire-pulse + pipewire-alsa + pipewire-jack + wireplumber + helvum + + # utils + xterm + cups + cups-pdf + bluez + bluez-cups + ntfs-3g + bash-completion + zsh-completions + ) +} + # Applies all system changes of `install-base` def main [cfg] { - echo "Executing up task `install-base` with config" $cfg + debug $"installing base with config ($cfg)" + + mkdir /mnt/etc + install_base_packages + cp /etc/pacman.conf /mnt/etc/pacman.conf + run bash -c 'genfstab -U /mnt >> /mnt/etc/fstab' } diff --git a/configs/crystal/install-kernels/up.nu b/configs/crystal/install-kernels/up.nu index f385ba8..7512f18 100644 --- a/configs/crystal/install-kernels/up.nu +++ b/configs/crystal/install-kernels/up.nu @@ -1,5 +1,26 @@ -let RUN_IN_CHROOT = true; +let SUPPORTED_KERNELS = ["linux", "linux-zen", "linus-hardened", "linux-lts"]; + # Applies all system changes of `install-kernels` def main [cfg] { - echo "Executing up task `install-kernels` with config" $cfg + debug $"installing kernels with config ($cfg)" + mut kernel = $cfg.default + + if $kernel not-in $SUPPORTED_KERNELS { + warn $"Unsupported kernel ($kernel). Defaulting to 'linux' kernel" + $kernel = "linux" + } + + run pacstrap /mnt $kernel + + debug "Installing additional kernels" + + $cfg.additional | each {|$k| + debug $"installing ($k)" + + if $k in $SUPPORTED_KERNELS { + run pacstrap /mnt $k + } else { + warn $"Unsupported kernel ($k)" + } + } } diff --git a/src/task/commands/mod.rs b/src/task/commands/mod.rs index ae3824d..67915d2 100644 --- a/src/task/commands/mod.rs +++ b/src/task/commands/mod.rs @@ -1,8 +1,10 @@ mod debug; mod info; mod run; +mod warn; mod with_cwd; pub use debug::*; pub use info::*; pub use run::*; +pub use warn::*; pub use with_cwd::*; diff --git a/src/task/commands/run.rs b/src/task/commands/run.rs index 36fe1f6..63e2731 100644 --- a/src/task/commands/run.rs +++ b/src/task/commands/run.rs @@ -59,14 +59,14 @@ impl embed_nu::nu_protocol::engine::Command for RunCommand { let mut stdin = cmd.stdin.take().unwrap(); stdin.write_all(input.collect_string_strict(call.span())?.0.as_bytes())?; - if cmd.wait().is_err() { + if cmd.wait()?.success() { + Ok(PipelineData::empty()) + } else { Err(ShellError::ExternalCommand( executable, String::from("Is it written correctly?"), call.span(), )) - } else { - Ok(PipelineData::empty()) } } } diff --git a/src/task/commands/warn.rs b/src/task/commands/warn.rs new file mode 100644 index 0000000..4f71087 --- /dev/null +++ b/src/task/commands/warn.rs @@ -0,0 +1,36 @@ +use embed_nu::{ + nu_protocol::{engine::Command, Signature, SyntaxShape}, + CallExt, PipelineData, +}; + +#[derive(Clone)] +pub struct WarnCommand; + +impl Command for WarnCommand { + fn name(&self) -> &str { + "warn" + } + + fn signature(&self) -> embed_nu::nu_protocol::Signature { + Signature::new("warn") + .rest("rest", SyntaxShape::Any, "the warning to print") + .category(embed_nu::nu_protocol::Category::Custom("Tourmaline".into())) + } + + fn usage(&self) -> &str { + "Prints the given message and values with warning severity" + } + + fn run( + &self, + engine_state: &embed_nu::nu_protocol::engine::EngineState, + stack: &mut embed_nu::nu_protocol::engine::Stack, + call: &embed_nu::nu_protocol::ast::Call, + _input: embed_nu::PipelineData, + ) -> Result { + let args: Vec = call.rest(engine_state, stack, 0)?; + tracing::warn!("{}", args.join(" ")); + + Ok(PipelineData::empty()) + } +} diff --git a/src/task/exec_builder.rs b/src/task/exec_builder.rs index c0d9d1f..29d241c 100644 --- a/src/task/exec_builder.rs +++ b/src/task/exec_builder.rs @@ -6,7 +6,7 @@ use std::fs; use crate::{distro::OSConfig, error::ScriptError, utils::CFG_PATH}; use miette::{Context, IntoDiagnostic, Result}; -use super::commands::{DebugCommand, InfoCommand, RunCommand, WithCwdCommand}; +use super::commands::{DebugCommand, InfoCommand, RunCommand, WarnCommand, WithCwdCommand}; #[derive(Clone)] pub struct ExecBuilder { @@ -25,6 +25,7 @@ impl ExecBuilder { let mut ctx = embed_nu::Context::builder() .with_command_groups(CommandGroupConfig::default().all_groups(true))? .add_command(RunCommand)? + .add_command(WarnCommand)? .add_command(InfoCommand)? .add_command(DebugCommand)? .add_command(WithCwdCommand)?