aboutsummaryrefslogtreecommitdiff
path: root/powershell/Microsoft.PowerShell_profile.ps1
blob: 574b323d96a3ab74f731a47216799a045b55a3ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# -----------------------------------------------------------------------------
#     - MODULES -
# -----------------------------------------------------------------------------

Import-Module -Name PSFzf -ErrorAction 'SilentlyContinue'
Import-Module -Name posh-git -ErrorAction 'SilentlyContinue'

if ($IsWindows) {
    $env:XDG_CONFIG_HOME = "$env:USERPROFILE/.config"
    if (-not(Test-Path -Path $env:XDG_CONFIG_HOME -PathType Container)) {
        New-Item -Path $env:XDG_CONFIG_HOME -ItemType Directory
    }
} else {
    $env:XDG_CONFIG_HOME = "$env:HOME/.config"
}

# -----------------------------------------------------------------------------
#     - PROMPT -
# -----------------------------------------------------------------------------

if (Get-Command 'oh-my-posh' -ErrorAction 'SilentlyContinue') {
    oh-my-posh init pwsh --config "$env:XDG_CONFIG_HOME/oh-my-posh/config.yml" | Invoke-Expression
} else {
    function prompt {
        $git_branch = $(git branch --show-current 2>/dev/null)
        if ($git_branch -ne $null -and $git_branch -ne "") {
            $git_branch = "($($git_branch))"
        }
        $hostname = [System.Net.Dns]::GetHostName().Split(".")[0]
        $pathname = Split-Path -Path $pwd -Leaf
        $path = if ($pathname -eq $env:USER) { "~" } else { $pathname }
        "[pwsh] `e[01;32m$($env:USER)@$($hostname)`e[00m:`e[01;34m$($path) `e[1;35m$git_branch`e[00m`$ "
    }
}

# -----------------------------------------------------------------------------
#     - ENVIRONMENT VARIABLES -
# -----------------------------------------------------------------------------

$env:PATH += ":$env:HOME/go/bin"
$env:EDITOR = "vim"
$env:VISUAL = "code"

# -----------------------------------------------------------------------------
#     - CUSTOM FUNCTIONS -
# -----------------------------------------------------------------------------

function New-Note {
    param(
        [Parameter()]
        [string] $Name = "{0}.md" -f (New-Guid)
    )

    $path = Join-Path $env:HOME "notes" $Name

    "$env:EDITOR $path" | Invoke-Expression
}

function Open-Note {
    param(
        [Parameter()]
        [string] $Name = ""
    )

    $notesPath = Join-Path $env:HOME "notes"
    $path = Join-Path $notesPath $Name

    if (Test-Path $path) {
        "$env:EDITOR $path" | Invoke-Expression
    } else {
        "$env:EDITOR $notesPath" | Invoke-Expression
    }
}

# -----------------------------------------------------------------------------
#     - PSREADLINE CONFIGURATIONS -
# -----------------------------------------------------------------------------

Set-PSReadLineOption -PredictionSource History
Set-PSReadLineKeyHandler -Chord "Ctrl+f" -Function ForwardWord
Set-PSReadLineKeyHandler -Chord "Alt+RightArrow" -Function ForwardWord
Set-PSReadLineKeyHandler -Chord "Alt+LeftArrow" -Function BackwardWord
Set-PSReadLineKeyHandler -Chord "Alt+LeftArrow" -Function BackwardWord
Set-PSReadLineKeyHandler -Chord "Ctrl+Backspace" -Function DeleteWord

if (Get-Command 'Set-PsFzfOption' -ErrorAction 'SilentlyContinue') {
    Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' -PSReadlineChordReverseHistory 'Ctrl+r'
}

# --- Hide sensitive information from history
Set-PSReadLineOption -AddToHistoryHandler {
    param(
        [string]$line
    )
    $sensitive = "password|asplaintext|token|secret"
    return ($line -notmatch $sensitive)
}

Set-PSReadLineOption -Colors @{ Member = "`e[95m"; Number = "`e[95m" }
Set-PSReadLineOption -Colors @{
    Member    = "`e[95m"
    Parameter = "`e[97m"
    Number    = "`e[97m"
}

# -----------------------------------------------------------------------------
#     - ALIASES -
# -----------------------------------------------------------------------------
function ListFilesAndFolders { param([string]$path = ".") Get-ChildItem -Path $path }
Set-Alias -Name ll -Value ListFilesAndFolders

function ListAllFilesAndFolders { param([string]$path = ".") Get-ChildItem -Path $path -Force }
Set-Alias -Name la -Value ListAllFilesAndFolders

function ListAllFilesAndFoldersSorted { param([string]$path = ".") Get-ChildItem -Path $path -Force | Sort-Object LastWriteTime }
Set-Alias -Name lss -Value ListAllFilesAndFoldersSorted

function GitCommitAlias { git commit -m $args[0] }
Set-Alias -Name gcmm -Value GitCommitAlias

function GitStatusAll { git status -uall }
Set-Alias -Name gsa -Value GitStatusAll

function GitCommitPatch { git commit -p }
Set-Alias -Name gcp -Value GitCommitPatch

function GitAddPatch { git add -p $args }
Set-Alias -Name gap -Value GitAddPatch

Set-Alias -Name vi -Value vim