diff --git a/pkgs/flake-module.nix b/pkgs/flake-module.nix index aa353dbb..103b9e38 100644 --- a/pkgs/flake-module.nix +++ b/pkgs/flake-module.nix @@ -7,6 +7,7 @@ ./installer/flake-module.nix ./schemas/flake-module.nix ./webview-ui/flake-module.nix + ./gui-installer/flake-module.nix ]; perSystem = diff --git a/pkgs/gui-installer/flake-module.nix b/pkgs/gui-installer/flake-module.nix new file mode 100644 index 00000000..de7880ed --- /dev/null +++ b/pkgs/gui-installer/flake-module.nix @@ -0,0 +1,24 @@ +{ + perSystem = + { pkgs, ... }: + let + nfpmConfig = pkgs.writeText "clan-nfpm-config.yaml" ( + builtins.toJSON { name = "clan-gui-installer"; } + ); + installerFor = + packager: + pkgs.runCommand "gui-installer" { } '' + mkdir build + cd build + ${pkgs.nfpm}/bin/nfpm package --config ${nfpmConfig} --packager ${packager} + mkdir $out + mv * $out/ + ''; + in + { + packages.gui-installer-apk = installerFor "apk"; + packages.gui-installer-archlinux = installerFor "archlinux"; + packages.gui-installer-deb = installerFor "deb"; + packages.gui-installer-rpm = installerFor "rpm"; + }; +} diff --git a/pkgs/gui-installer/gui-installer.sh b/pkgs/gui-installer/gui-installer.sh new file mode 100755 index 00000000..3f3ed3ae --- /dev/null +++ b/pkgs/gui-installer/gui-installer.sh @@ -0,0 +1,54 @@ +#! /bin/sh + +# create temp dir and ensure it is always cleaned +trap 'clean_temp_dir' EXIT +temp_dir=$(mktemp -d) + +clean_temp_dir() { + rm -rf "$temp_dir" +} + +is_nix_installed() { + if [ -n "$(command -v nix)" ]; then + return 0 + else + return 1 + fi +} + +install_nix() { + curl --proto '=https' --tlsv1.2 -sSf -L \ + https://install.determinate.systems/nix \ + > "$temp_dir"/install_nix.sh + NIX_INSTALLER_DIAGNOSTIC_ENDPOINT="" sh "$temp_dir"/install_nix.sh install +} + +ask_then_install_nix() { + echo "Clan requires Nix to be installed. Would you like to install it now? (y/n)" + read -r response + if [ "$response" = "y" ]; then + install_nix + else + echo "Clan cannot run without Nix. Exiting." + exit 1 + fi +} + +ensure_nix_installed() { + if ! is_nix_installed; then + ask_then_install_nix + fi +} + +start_clan_gui() { + exec nix run \ + https://git.clan.lol/clan/clan-core/archive/main.tar.gz#clan-vm-manager \ + --extra-experimental-features flakes nix-command -- "$@" +} + +main() { + ensure_nix_installed + start_clan_gui "$@" +} + +main "$@"