move to ohmyposh for zsh
This commit is contained in:
66
.config/ohmyposh/config.toml
Normal file
66
.config/ohmyposh/config.toml
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json
|
||||||
|
|
||||||
|
version = 2
|
||||||
|
final_space = true
|
||||||
|
console_title_template = '{{ .Shell }} in {{ .Folder }}'
|
||||||
|
|
||||||
|
[[blocks]]
|
||||||
|
type = 'prompt'
|
||||||
|
alignment = 'left'
|
||||||
|
newline = true
|
||||||
|
|
||||||
|
[[blocks.segments]]
|
||||||
|
type = 'path'
|
||||||
|
style = 'plain'
|
||||||
|
background = 'transparent'
|
||||||
|
foreground = 'blue'
|
||||||
|
template = '{{ .Path }}'
|
||||||
|
|
||||||
|
[blocks.segments.properties]
|
||||||
|
style = 'full'
|
||||||
|
|
||||||
|
[[blocks.segments]]
|
||||||
|
type = 'git'
|
||||||
|
style = 'plain'
|
||||||
|
foreground = 'p:grey'
|
||||||
|
background = 'transparent'
|
||||||
|
template = ' {{ .HEAD }}{{ if or (.Working.Changed) (.Staging.Changed) }}*{{ end }} <cyan>{{ if gt .Behind 0 }}⇣{{ end }}{{ if gt .Ahead 0 }}⇡{{ end }}</>'
|
||||||
|
|
||||||
|
[blocks.segments.properties]
|
||||||
|
branch_icon = ''
|
||||||
|
commit_icon = '@'
|
||||||
|
fetch_status = true
|
||||||
|
|
||||||
|
[[blocks]]
|
||||||
|
type = 'rprompt'
|
||||||
|
overflow = 'hidden'
|
||||||
|
|
||||||
|
[[blocks.segments]]
|
||||||
|
type = 'executiontime'
|
||||||
|
style = 'plain'
|
||||||
|
foreground = 'yellow'
|
||||||
|
background = 'transparent'
|
||||||
|
template = '{{ .FormattedMs }}'
|
||||||
|
|
||||||
|
[blocks.segments.properties]
|
||||||
|
threshold = 5000
|
||||||
|
|
||||||
|
[[blocks]]
|
||||||
|
type = 'prompt'
|
||||||
|
alignment = 'left'
|
||||||
|
newline = true
|
||||||
|
|
||||||
|
[[blocks.segments]]
|
||||||
|
type = 'text'
|
||||||
|
style = 'plain'
|
||||||
|
foreground_templates = [
|
||||||
|
"{{if gt .Code 0}}red{{end}}",
|
||||||
|
"{{if eq .Code 0}}magenta{{end}}",
|
||||||
|
]
|
||||||
|
background = 'transparent'
|
||||||
|
template = '❯'
|
||||||
|
|
||||||
|
[secondary_prompt]
|
||||||
|
foreground = 'magenta'
|
||||||
|
background = 'transparent'
|
||||||
|
template = '❯❯ '
|
||||||
@@ -1,25 +1,25 @@
|
|||||||
oh-my-posh init pwsh --config ~/.config/powershell/config.json | Invoke-Expression
|
oh-my-posh init pwsh --config ~/.config/ohmyposh/config.toml | Invoke-Expression
|
||||||
Set-PSReadLineOption -PredictionSource History
|
Set-PSReadLineOption -PredictionSource History
|
||||||
|
|
||||||
@(
|
@(
|
||||||
"cat,get-content"
|
"cat,get-content"
|
||||||
"cd,set-location"
|
"cd,set-location"
|
||||||
"clear,clear-host"
|
"clear,clear-host"
|
||||||
"cp,copy-item"
|
"cp,copy-item"
|
||||||
"history,get-history"
|
"history,get-history"
|
||||||
"kill,stop-process"
|
"kill,stop-process"
|
||||||
"ls,Get-ChildItem"
|
"ls,Get-ChildItem"
|
||||||
"mv,move-item"
|
"mv,move-item"
|
||||||
"ps,get-process"
|
"ps,get-process"
|
||||||
"pwd,get-location"
|
"pwd,get-location"
|
||||||
"which,get-command"
|
"which,get-command"
|
||||||
"open,Invoke-Item"
|
"open,Invoke-Item"
|
||||||
"basename,Split-Path"
|
"basename,Split-Path"
|
||||||
"realpath,resolve-path"
|
"realpath,resolve-path"
|
||||||
) | ForEach-Object {
|
) | ForEach-Object {
|
||||||
$Alias = ($PSItem -split ",")[0]
|
$Alias = ($PSItem -split ",")[0]
|
||||||
$value = ($PSItem -split ",")[1]
|
$value = ($PSItem -split ",")[1]
|
||||||
Set-Alias -Name $Alias -Value $value -Option AllScope
|
Set-Alias -Name $Alias -Value $value -Option AllScope
|
||||||
}
|
}
|
||||||
|
|
||||||
$env:POWERSHELL_TELEMETRY_OPTOUT = 1
|
$env:POWERSHELL_TELEMETRY_OPTOUT = 1
|
||||||
@@ -32,10 +32,12 @@ $tokens = @(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
function unlockbw {
|
function unlockbw
|
||||||
|
{
|
||||||
$env:BW_SESSION = "$(bw unlock --raw)"
|
$env:BW_SESSION = "$(bw unlock --raw)"
|
||||||
|
|
||||||
foreach ($token in $tokens) {
|
foreach ($token in $tokens)
|
||||||
|
{
|
||||||
Set-Variable -Name $token.name -Value $(bw get password $token.value) -Scope script
|
Set-Variable -Name $token.name -Value $(bw get password $token.value) -Scope script
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
|
|
||||||
"blocks": [
|
|
||||||
{
|
|
||||||
"segments": [
|
|
||||||
{
|
|
||||||
"foreground": "#00C5C7",
|
|
||||||
"properties": {
|
|
||||||
"time_format": "15:04:05"
|
|
||||||
},
|
|
||||||
"style": "plain",
|
|
||||||
"template": " {{ .CurrentDate | date .Format }} ",
|
|
||||||
"type": "time"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"type": "rprompt"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"alignment": "left",
|
|
||||||
"segments": [
|
|
||||||
{
|
|
||||||
"foreground": "#77E4F7",
|
|
||||||
"properties": {
|
|
||||||
"style": "full"
|
|
||||||
},
|
|
||||||
"style": "plain",
|
|
||||||
"template": "{{ .Path }} ",
|
|
||||||
"type": "path"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"foreground": "#FFE700",
|
|
||||||
"style": "plain",
|
|
||||||
"template": "{{ .HEAD }} ",
|
|
||||||
"type": "git"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"foreground": "#43D426",
|
|
||||||
"style": "plain",
|
|
||||||
"template": "\u276f ",
|
|
||||||
"type": "text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"type": "prompt"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"version": 2
|
|
||||||
}
|
|
||||||
193
.p10k.zsh
193
.p10k.zsh
@@ -1,193 +0,0 @@
|
|||||||
# Generated by Powerlevel10k configuration wizard on 2024-05-25 at 18:43 CDT.
|
|
||||||
# Based on romkatv/powerlevel10k/config/p10k-pure.zsh, checksum 07533.
|
|
||||||
# Wizard options: nerdfont-v3 + powerline, large icons, pure, original, rprompt, 1 line,
|
|
||||||
# sparse, instant_prompt=quiet.
|
|
||||||
# Type `p10k configure` to generate another config.
|
|
||||||
#
|
|
||||||
# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure).
|
|
||||||
#
|
|
||||||
# Differences from Pure:
|
|
||||||
#
|
|
||||||
# - Git:
|
|
||||||
# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state.
|
|
||||||
# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`).
|
|
||||||
#
|
|
||||||
# Apart from the differences listed above, the replication of Pure prompt is exact. This includes
|
|
||||||
# even the questionable parts. For example, just like in Pure, there is no indication of Git status
|
|
||||||
# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt
|
|
||||||
# doesn't fit on one line, it wraps around with no attempt to shorten it.
|
|
||||||
#
|
|
||||||
# If you like the general style of Pure but not particularly attached to all its quirks, type
|
|
||||||
# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking
|
|
||||||
# advantage of Powerlevel10k features that aren't present in Pure.
|
|
||||||
|
|
||||||
# Temporarily change options.
|
|
||||||
'builtin' 'local' '-a' 'p10k_config_opts'
|
|
||||||
[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
|
|
||||||
[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
|
|
||||||
[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
|
|
||||||
'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
|
|
||||||
|
|
||||||
() {
|
|
||||||
emulate -L zsh -o extended_glob
|
|
||||||
|
|
||||||
# Unset all configuration options.
|
|
||||||
unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
|
|
||||||
|
|
||||||
# Zsh >= 5.1 is required.
|
|
||||||
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
|
|
||||||
|
|
||||||
# Prompt colors.
|
|
||||||
local grey='242'
|
|
||||||
local red='1'
|
|
||||||
local yellow='3'
|
|
||||||
local blue='4'
|
|
||||||
local magenta='5'
|
|
||||||
local cyan='6'
|
|
||||||
local white='7'
|
|
||||||
|
|
||||||
# Left prompt segments.
|
|
||||||
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
|
||||||
# context # user@host
|
|
||||||
dir # current directory
|
|
||||||
vcs # git status
|
|
||||||
# command_execution_time # previous command duration
|
|
||||||
# virtualenv # python virtual environment
|
|
||||||
prompt_char # prompt symbol
|
|
||||||
)
|
|
||||||
|
|
||||||
# Right prompt segments.
|
|
||||||
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
|
|
||||||
command_execution_time # previous command duration
|
|
||||||
virtualenv # python virtual environment
|
|
||||||
context # user@host
|
|
||||||
# time # current time
|
|
||||||
)
|
|
||||||
|
|
||||||
# Basic style options that define the overall prompt look.
|
|
||||||
typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
|
|
||||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
|
|
||||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
|
|
||||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
|
|
||||||
typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons
|
|
||||||
|
|
||||||
# Add an empty line before each prompt except the first. This doesn't emulate the bug
|
|
||||||
# in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar.
|
|
||||||
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
|
|
||||||
|
|
||||||
# Magenta prompt symbol if the last command succeeded.
|
|
||||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$magenta
|
|
||||||
# Red prompt symbol if the last command failed.
|
|
||||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red
|
|
||||||
# Default prompt symbol.
|
|
||||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯'
|
|
||||||
# Prompt symbol in command vi mode.
|
|
||||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮'
|
|
||||||
# Prompt symbol in visual vi mode is the same as in command mode.
|
|
||||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='❮'
|
|
||||||
# Prompt symbol in overwrite vi mode is the same as in command mode.
|
|
||||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false
|
|
||||||
|
|
||||||
# Grey Python Virtual Environment.
|
|
||||||
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey
|
|
||||||
# Don't show Python version.
|
|
||||||
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
|
|
||||||
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
|
|
||||||
|
|
||||||
# Blue current directory.
|
|
||||||
typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue
|
|
||||||
|
|
||||||
# Context format when root: user@host. The first part white, the rest grey.
|
|
||||||
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$white}%n%f%F{$grey}@%m%f"
|
|
||||||
# Context format when not root: user@host. The whole thing grey.
|
|
||||||
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$grey}%n@%m%f"
|
|
||||||
# Don't show context unless root or in SSH.
|
|
||||||
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION=
|
|
||||||
|
|
||||||
# Show previous command duration only if it's >= 5s.
|
|
||||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5
|
|
||||||
# Don't show fractional seconds. Thus, 7s rather than 7.3s.
|
|
||||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
|
|
||||||
# Duration format: 1d 2h 3m 4s.
|
|
||||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
|
|
||||||
# Yellow previous command duration.
|
|
||||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow
|
|
||||||
|
|
||||||
# Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey
|
|
||||||
|
|
||||||
# Disable async loading indicator to make directories that aren't Git repositories
|
|
||||||
# indistinguishable from large Git repositories without known state.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_LOADING_TEXT=
|
|
||||||
|
|
||||||
# Don't wait for Git status even for a millisecond, so that prompt always updates
|
|
||||||
# asynchronously when Git state changes.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0
|
|
||||||
|
|
||||||
# Cyan ahead/behind arrows.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan
|
|
||||||
# Don't show remote branch, current tag or stashes.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind)
|
|
||||||
# Don't show the branch icon.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
|
|
||||||
# When in detached HEAD state, show @commit where branch normally goes.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@'
|
|
||||||
# Don't show staged, unstaged, untracked indicators.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON=
|
|
||||||
# Show '*' when there are staged, unstaged or untracked files.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_DIRTY_ICON='*'
|
|
||||||
# Show '⇣' if local branch is behind remote.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣'
|
|
||||||
# Show '⇡' if local branch is ahead of remote.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡'
|
|
||||||
# Don't show the number of commits next to the ahead/behind arrows.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1
|
|
||||||
# Remove space between '⇣' and '⇡' and all trailing spaces.
|
|
||||||
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }'
|
|
||||||
|
|
||||||
# Grey current time.
|
|
||||||
typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey
|
|
||||||
# Format for the current time: 09:51:02. See `man 3 strftime`.
|
|
||||||
typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
|
|
||||||
# If set to true, time will update when you hit enter. This way prompts for the past
|
|
||||||
# commands will contain the start times of their commands rather than the end times of
|
|
||||||
# their preceding commands.
|
|
||||||
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
|
|
||||||
|
|
||||||
# Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
|
|
||||||
# when accepting a command line. Supported values:
|
|
||||||
#
|
|
||||||
# - off: Don't change prompt when accepting a command line.
|
|
||||||
# - always: Trim down prompt when accepting a command line.
|
|
||||||
# - same-dir: Trim down prompt when accepting a command line unless this is the first command
|
|
||||||
# typed after changing current working directory.
|
|
||||||
typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off
|
|
||||||
|
|
||||||
# Instant prompt mode.
|
|
||||||
#
|
|
||||||
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
|
|
||||||
# it incompatible with your zsh configuration files.
|
|
||||||
# - quiet: Enable instant prompt and don't print warnings when detecting console output
|
|
||||||
# during zsh initialization. Choose this if you've read and understood
|
|
||||||
# https://github.com/romkatv/powerlevel10k#instant-prompt.
|
|
||||||
# - verbose: Enable instant prompt and print a warning when detecting console output during
|
|
||||||
# zsh initialization. Choose this if you've never tried instant prompt, haven't
|
|
||||||
# seen the warning, or if you are unsure what this all means.
|
|
||||||
typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
|
|
||||||
|
|
||||||
# Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
|
|
||||||
# For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
|
|
||||||
# can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
|
|
||||||
# really need it.
|
|
||||||
typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
|
|
||||||
|
|
||||||
# If p10k is already loaded, reload configuration.
|
|
||||||
# This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
|
|
||||||
(( ! $+functions[p10k] )) || p10k reload
|
|
||||||
}
|
|
||||||
|
|
||||||
# Tell `p10k configure` which file it should overwrite.
|
|
||||||
typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a}
|
|
||||||
|
|
||||||
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
|
|
||||||
'builtin' 'unset' 'p10k_config_opts'
|
|
||||||
13
.zshrc
13
.zshrc
@@ -27,12 +27,7 @@ alias network='nmtui'
|
|||||||
alias docker='podman'
|
alias docker='podman'
|
||||||
alias sudo='sudo '
|
alias sudo='sudo '
|
||||||
|
|
||||||
#
|
eval "$(oh-my-posh init zsh --config ~/.config/ohmyposh/config.toml)"
|
||||||
## Initialization code that may require console input (password prompts, [y/n]
|
|
||||||
# confirmations, etc.) must go above this block; everything else may go below.
|
|
||||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
|
||||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f "/opt/homebrew/bin/brew" ]] then
|
if [[ -f "/opt/homebrew/bin/brew" ]] then
|
||||||
# If you're using macOS, you'll want this enabled
|
# If you're using macOS, you'll want this enabled
|
||||||
@@ -51,9 +46,6 @@ fi
|
|||||||
# Source/Load zinit
|
# Source/Load zinit
|
||||||
source "${ZINIT_HOME}/zinit.zsh"
|
source "${ZINIT_HOME}/zinit.zsh"
|
||||||
|
|
||||||
# Add in Powerlevel10k
|
|
||||||
zinit ice depth=1; zinit light romkatv/powerlevel10k
|
|
||||||
|
|
||||||
# Add in zsh plugins
|
# Add in zsh plugins
|
||||||
zinit light zsh-users/zsh-syntax-highlighting
|
zinit light zsh-users/zsh-syntax-highlighting
|
||||||
zinit light zsh-users/zsh-completions
|
zinit light zsh-users/zsh-completions
|
||||||
@@ -81,9 +73,6 @@ autoload -Uz compinit && compinit
|
|||||||
|
|
||||||
zinit cdreplay -q
|
zinit cdreplay -q
|
||||||
|
|
||||||
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
|
|
||||||
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
|
|
||||||
|
|
||||||
# Keybindings
|
# Keybindings
|
||||||
bindkey -e
|
bindkey -e
|
||||||
bindkey '^p' history-search-backward
|
bindkey '^p' history-search-backward
|
||||||
|
|||||||
Reference in New Issue
Block a user