PowerShell profile

$home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

$env:TERM = "xterm-256color"

oh-my-posh init pwsh --config 'C:/Users/dhya/.mytheme.omp.json' | Invoke-Expression
#oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/jandedobbeleer.omp.json" | Invoke-Expression

## Make Ctrl-D exit
Set-PSReadlineKeyHandler -Key ctrl+d -Function DeleteCharOrExit

## PSReadLine
Import-Module PSReadLine
# enable bash style completion without using Emacs mode
Set-PSReadLineKeyHandler -Key Tab -Function Complete
Set-PSReadlineOption -BellStyle None

<#
Function prompt {
  $username = $Env:UserName
  $currdir = Split-Path -leaf -path (Get-Location)
  $compname = $env:COMPUTERNAME
  $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = [Security.Principal.WindowsPrincipal] $identity
    $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

  $(if (Test-Path variable:/PSDebugContext) {
      '[DBG] '
    }
      elseif($principal.IsInRole($adminRole)) {
      "[ADMIN] "
    }
      else {
      ''
    }
    ) + ("$([char]27)[32m$username$([char]27)[0m" +
         "@" +
         "$([char]27)[32m$compname$([char]27)[0m" +
         ":" +
         "$([char]27)[34m$currdir$([char]27)[0m" +
         $(if ($NestedPromptLevel -ge 1) { '>>' }) +
         '> ')

    # set title to currrent dir
    #$host.ui.RawUI.WindowTitle = $(get-location)

    # set title to last entered command
    #if ((Get-History).Count -gt 0) {
    #  $Host.UI.RawUI.WindowTitle =
    #    ((Get-History)[-1].CommandLine[0..25] -join '')
    #}
}
#>

Set-Alias -Name ls -Value eza -Option AllScope
Set-Alias 7z "C:\Program Files\7-Zip\7z.exe"
$pythonPath = "C:\Lib\Python312\python.exe"
Set-Alias python $pythonPath
Set-Alias python3 $pythonPath

# Vim
Set-Alias vi "C:\Program Files\Vim\vim91\vim.exe"
function view { vi -R $args }

Set-Alias git "C:\Program Files\Git\bin\git.exe"

# $env:USERPROFILE or $home?
Function flip() {
    python $home\bin\flip.py
}

Function divine() {
    python $home\bin\divine.py
}

Function update-check() {
    winget list --upgrade-available --source=winget
}

Function upgrade() {
    # winget upgrade --all --include-unknown
    winget upgrade --all
}

Function id() {
    Write-Host "User: " -NoNewline
    [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    Write-Host "Has admin: " -NoNewline
    [bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")
}

#Function less($name) {
#    source-highlight --failsafe -f esc -i "$name" | C:\ProgramData\chocolatey\bin\less.exe -R
#}

Function realpath($name) {
    Resolve-Path "$name"
}

Function touch($name) {
    New-Item "$name"
}

Function date() {
    Get-Date -Format "dddd yyyy-MM-dd HH:mm K"
}

Function which($name) { Get-Command "$name" | Select-Object -ExpandProperty Definition }

Function host($name) { Resolve-DnsName -Name "$name" }

Function disks() { wmic diskdrive list brief }

Function psql() {
    C:\Program` Files\PostgreSQL\16\bin\psql.exe -U postgres $args
}

Function setJavaHome($name) {
    [System.Environment]::SetEnvironmentVariable('JAVA_HOME', $name, 'Machine')
    [System.Environment]::SetEnvironmentVariable('JAVA_HOME', $name, 'User')
}

# Import the Chocolatey Profile that contains the necessary code to enable
# tab-completions to Function for `choco`.
# Be aware that if you are missing these lines from your profile, tab completion
# for `choco` will not function.
# See https://ch0.co/tab-completion for details.
$ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
if (Test-Path($ChocolateyProfile)) {
  Import-Module "$ChocolateyProfile"
}

Function getMSOfficeVersion {
    wmic product get caption,version | Select-String -Pattern "^Office.*Licensing Component"
}

# Fast Node Manager
fnm env --fnm-dir C:\Lib\Node.js --use-on-cd | Out-String | Invoke-Expression


# completer for Terraform
Register-ArgumentCompleter -Native -CommandName terraform -ScriptBlock {
    param($wordToComplete, $commandAst, $cursorPosition)

    $env:COMP_LINE=$commandAst.ToString()
    terraform | ForEach-Object {
        [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
    }
    Remove-Item Env:\COMP_LINE
}