diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..b529367 --- /dev/null +++ b/install.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash + +set -euo pipefail + +arg="${1:-nixos}" +isNixOS=$(grep -q 'ID=nixos' /etc/os-release) + +case "$arg" in + "nixos") + if ! isNixOS; then + echo "⚠️ - Requires NixOS & sudo priveledge" + fi + echo "Install this NixOS Configuration? (y/n)" + while true; do + read res; + if [ "$res" = "y" ] || [ "$res" = "Y" ]; then + echo "Installing..."; + if [ "$EUID" -ne 0 ]; then + echo "Allow sudo access? (y/n)" + while true; do + read -r res + case "$res" in + [yY]) + exec sudo bash "$0" "$@" + exit 0 + ;; + [nN]) + echo "Aborting..." + exit 1 + ;; + *) + echo "Please enter a valid response (y/n)" + ;; + esac + done + fi + if [ -d "/etc/nixos" ]; then + echo "The /etc/nixos directory exists." + echo "Would you like to back up and proceed? (y/n)" + while true; do + read -r res + case "$res" in + [yY]) + mkdir -p $(git rev-parse --show-toplevel)/bkup + cp -r /etc/nixos $(git rev-parse --show-toplevel)/bkup.nixos_$(date +%Y%m%d%H%M%S) + break + ;; + [nN]) + echo "Cancelled. Aborting..." + exit 1 + ;; + *) + echo "Error: Please enter a valid response (y/n)" + ;; + esac + done + else + ln -s /etc/nixos $(git rev-parse --show-toplevel) + fi + fi +elif [ "{{TYPE}}" = "home" ]; then + echo "Install this Home-Manager Configuration?" + echo "⚠️ - If you don't have nix + home-manager installed, this will install them both" + echo "Proceed? (y/n)" + while true; do + read -r res + case "$res" in + [yY]) + echo "Installing..." + + if grep -q + + + if [ -d "$HOME/.config/home-manager" ]; then + echo "The ~/.config/home-manager directory exists." + echo "Would you like to back up and proceed? (y/n)" + while true; do + read -r res + case "$res" in + [yY]) + mkdir -p $(git rev-parse --show-toplevel)/bkup + mv $HOME/.config/home-manager $(git rev-parse --show-toplevel)/bkup/home-manager_$(date +%Y%m%d%H%M%S) + ln -s $HOME/.config/home-manager $(git rev-parse --show-toplevel) + break + ;; + [nN]) + echo "Cancelled. Aborting..." + exit 1 + ;; + *) + echo "Error: Please enter a valid response (y/n)" + ;; + esac + done + else + ln -s $HOME/.config/home-manager $(git rev-parse --show-toplevel) + fi + ;; + [nN]) + echo "Cancelled. Aborting..." + exit 1 + ;; + *) + echo "Error: Please enter a valid response (y/n)" + ;; + esac + done + flake_config="experimental-features = nix-command flakes" + + if [ -f "/etc/nix/nix.conf" ] || [ -f "$HOME/.config/nix/nix.conf" ]; then + if grep -q "^$flake_config" "" diff --git a/justfile b/justfile index f4903e9..51dc306 100644 --- a/justfile +++ b/justfile @@ -1,89 +1,47 @@ -# Run a dry-build -test TYPE="nix" SYSTEM="": - @if [ "{{TYPE}}" = "home" ]; then \ - if [ -n "{{SYSTEM}}" ]; then \ - echo "Error: Undefined argument"; \ - exit 1; \ - fi; \ - echo "Testing home configuration..."; \ - nix build --dry-run .#homeConfigurations."workstation".config.system.build.toplevel -L; \ - elif [ "{{TYPE}}" = "nix" ]; then \ - if [ -z "{{SYSTEM}}" ]; then \ - SYSTEM="desktop"; \ - fi; \ - if [ "{{SYSTEM}}" = "desktop" ] || [ "{{SYSTEM}}" = "server" ] || [ "{{SYSTEM}}" = "wsl" ] || [ "{{SYSTEM}}" = "laptop" ]; then \ - echo "Testing NixOS configuration for {{SYSTEM}}..."; \ - nix build --dry-run .#nixosConfigurations."{{SYSTEM}}".config.system.build.toplevel -L; \ - else \ - echo "Error: Unknown argument - '{{SYSTEM}}'"; \ - echo "Use one of:"; \ - echo " desktop"; \ - echo " server"; \ - echo " laptop"; \ - echo " wsl"; \ - exit 1; \ - fi; \ - else \ - echo "Invalid usage: {{TYPE}}. Use 'home' or 'nix'."; \ - exit 1; \ +# Output what derivations will be built +test TYPE="nixos" SYSTEM="desktop": + #!/usr/bin/env bash + set -euo pipefail + if [ "{{TYPE}}" = "home" ]; then + if [ -n "{{SYSTEM}}" ]; then + echo "Error: Undefined argument" + exit 1 + fi + echo "Testing home configuration..." + nix build --dry-run .#homeConfigurations."workstation".config.system.build.toplevel -L + elif [ "{{TYPE}}" = "nixos" ]; then + if [ "{{SYSTEM}}" = "desktop" ] || [ "{{SYSTEM}}" = "server" ] || [ "{{SYSTEM}}" = "wsl" ] || [ "{{SYSTEM}}" = "laptop" ]; then + echo "Testing NixOS configuration for {{SYSTEM}}..." + nix build --dry-run .#nixosConfigurations."{{SYSTEM}}".config.system.build.toplevel -L + else + echo "Error: Unknown argument - '{{SYSTEM}}'" + echo "Use one of:" + echo " desktop" + echo " server" + echo " laptop" + echo " wsl" + exit 1 + fi + else + echo "Invalid usage: {{TYPE}}."; + echo "Use one of:" + echo " nixos" + echo " home" + exit 1 fi -# Install this repo -install TYPE="nixos": - if [ "${{TYPE}}" = "nixos" ]; then \ - echo "Install this NixOS Configuration? (y/n)" \ - read res; \ - if [ "$res" = "y"] || [ "$res" = "Y"]; then \ - echo "Installing..."; \ - if [ -d "/etc/nixos" ]; then \ - echo "The /etc/nixos directory exists. Would you like to back up and proceed? (y/n)"; \ - read answer; \ - if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then \ - sudo cp -r /etc/nixos $(git rev-parse --show-toplevel)/nixos.bkup.$(date +%Y%m%d%H%M%S); \ - elif [ "$answer" = "n" ] || [ "$answer" = "N" ]; then \ - echo "Cancelled. Aborting..."; \ - exit 1; \ - else \ - echo "Error: Please enter a valid response (y/n)" \ - fi \ - else \ - sudo ln -s /etc/nixos $(git rev-parse --show-toplevel) \ - fi \ - elif [ "$res" = "n"] || [ "$res" = "N"]; then \ - echo "Cancelled. Aborting..."; \ - else \ - echo "Error: Please enter a valid response (y/n)" \ - fi - if [ "${{TYPE}}" = "home" ]; then \ - echo "Install this Home-Manager Configuration? (y/n)" \ - read res; \ - if [ "$res" = "y"] || [ "$res" = "Y"]; then \ - echo "Installing..."; \ - if [ -d "~/.config/home-manager" ]; then \ - echo "The ~/.config/home-manager directory exists. Would you like to back up and proceed? (y/n)"; \ - read answer; \ - if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then \ - sudo cp -r ~/.config/home-manager $(git rev-parse --show-toplevel)/home-manager.bkup.$(date +%Y%m%d%H%M%S); \ - elif [ "$answer" = "n" ] || [ "$answer" = "N" ]; then \ - echo "Cancelled. Aborting..."; \ - exit 1; \ - else \ - echo "Error: Please enter a valid response (y/n)" \ - fi \ - else \ - sudo ln -s ~/.config/home-manager $(git rev-parse --show-toplevel) \ - fi \ - elif [ "$res" = "n"] || [ "$res" = "N"]; then \ - echo "Cancelled. Aborting..."; \ - else \ - echo "Error: Please enter a valid response (y/n)" \ - fi - fi +# Symlinks /etc/nixos or ~/.config/home-manager to this repo +install: + source ./install # Commit all changes and push to upstream -gh: - @echo "Commit message:" - @read message - git add -A - git commit -m "$$message" - git push +gh MESSAGE="": + #!/usr/bin/env bash + set -euo pipefail + if [ -n "{{MESSAGE}}" ]; then + git add -A + git commit -m "{{MESSAGE}}" + git push + else + echo "Error: Empty commit message" + fi