navi 2.24.0

An interactive cheatsheet tool for the command-line
Documentation
### This script installs the Powershell module under the user's Powershell modules path
### For modifications of the Powershell Navi plugin, see /shell/navi.plugin/navi.plugin.psm1.

param (    
    ### Controls if we update the current module (otherwise we don't rewrite the already existing module, if present)
    [Switch]$Update,
    ### Should the verbosity be enabled?
    [Switch]$Verbose
)


function InstallNaviWidgetModule(){
    [String]$PwshModulePath = $env:PSModulePath.Split(";")[0];
    [String]$NAVI_PLUGIN = "navi.plugin";

    Write-Debug "Are we updating the PowerShell module: $Update"
    Write-Debug "Current Root Powershell Module path is: $PwshModulePath"

    ### If we're updating the module, Copy the newly updated contents to the currently installed module
    ### then quit with a successful exit code.
    ### We're not supposed to update the shortcut binding.
    if ($Update){
        Write-Debug "Updating Navi-Widget PowerShell module"
        Copy-Item -Path .\navi.plugin\ -Destination $PwshModulePath -Force -Recurse
        exit 0
    }

    ### If we're not updating, check if we don't have the module already installed
    if (-Not (Test-Path -Path $PwshModulePath\$NAVI_PLUGIN)) {
        Write-Debug "Copying Item to the path"
        Copy-Item -Path .\navi.plugin\ -Destination $PwshModulePath -Recurse
    } else {
        Write-Error "Navi-Widget is already installed for PowerShell!"
        exit 1
    }

    Write-Debug "Registering the navi shortcut inside the current shell session"
    Set-PSReadlineKeyHandler -BriefDescription "A keybinding to open Navi Widget" -Chord Ctrl+g -ScriptBlock { Invoke-NaviWidget }

    Write-Debug "Appending the navi shortcut inside the current user's profile"
    ### Adding a new line
    Write-Output "Import-Module navi.plugin" >> $PROFILE
    Write-Output "" >> $PROFILE
    Write-Output 'Set-PSReadlineKeyHandler -BriefDescription "A keybinding to open Navi Widget" -Chord Ctrl+g -ScriptBlock { Invoke-NaviWidget }' >> $PROFILE


    Write-Output "Navi plugin has been installed!"
    exit 0 ### Succesful installation
}

if ($Verbose) {
    ### Enabling verbose/debug output at the start of the script
    $DebugPreference = 'Continue'
    InstallNaviWidgetModule -Update $Update
    ### Disabling verbose/debug output at the end of the script
    ### in order to not modify the current user's shell environment
    $DebugPreference = 'SilentlyContinue'
} else {
    InstallNaviWidgetModule -Update $Update
}