This commit is contained in:
Brian Zalewski 2023-08-04 06:05:20 +00:00
parent db7608b369
commit 97064b737e
18 changed files with 236 additions and 131 deletions

View file

@ -22,6 +22,9 @@ This page outlines various projects and tasks that we are currently working on.
* Create seed for Lulu
* https://github.com/essandess/macOS-Fortress
* https://wakatime.com/plugins
* https://github.com/containers/toolbox consider for p10k.zsh file
* Figure out where Vector service fits in
* Figure out if Squid can be used to improve web surfing speed
## Upstream

View file

@ -384,6 +384,8 @@ softwareGroups:
- thefuck
- tldr
- xdotool
- taskwarrior
- timewarrior
- tmuxinator
- up
- wallpaper-cli

View file

@ -16,7 +16,7 @@
if command -v postfix > /dev/null; then
### Ensure dependencies are installed
if command -v apt > /dev/null; then
if command -v apt-get > /dev/null; then
logg info 'Installing libsasl2-modules'
sudo apt-get update
sudo apt-get install -y libsasl2-modules || EXIT_CODE=$?
@ -46,8 +46,8 @@ if command -v postfix > /dev/null; then
### Add Postfix main configuration
logg "Adding configuration from ${XDG_CONFIG_HOME:-$HOME/.config}/postfix/main.cf to /etc/postfix/main.cf"
echo "" | sudo tee -a "$CONFIG_FILE"
cat "${XDG_CONFIG_HOME:-$HOME/.config}/postfix/main.cf" | sudo tee -a "$CONFIG_FILE"
echo "" | sudo tee -a "$CONFIG_FILE"
fi
### Ensure proper permissions on `sasl_passwd` and update Postfix hashmaps
@ -58,7 +58,7 @@ if command -v postfix > /dev/null; then
sudo chmod 600 /etc/postfix/sasl_passwd
logg info 'Updating Postfix hashmaps for /etc/postfix/sasl_passwd'
sudo postmap /etc/postfix/sasl_passwd
else
elseThere was an error ensuring the Postfix-SendGrid dependencies were installed
logg warn '~/.config/postfix/sasl_passwd file is missing'
fi

View file

@ -8,6 +8,15 @@
{{ includeTemplate "universal/profile" }}
{{ includeTemplate "universal/logg" }}
### SDKMan ~/.bashrc settings
if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
. "$SDKMAN_DIR/bin/sdkman-init.sh"
elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
export SDKMAN_DIR="$XDG_DATA_HOME/sdkman"
. "$SDKMAN_DIR/bin/sdkman-init.sh"
fi
### Ensure SDKMan is installed (https://sdkman.io/)
if [ ! -d "$SDKMAN_DIR" ]; then
logg info 'Installing SDKMan via `curl -s "https://get.sdkman.io?rcupdate=false`'

View file

@ -113,6 +113,15 @@ if command -v netdata-claim.sh > /dev/null; then
fi
fi
### Ensure / report whether speedtest-cli is installed
if ! command -v speedtest-cli > /dev/null; then
if command -v pipx > /dev/null; then
pipx install speedtest-cli
else
logg warn 'speedtest-cli not installed and pipx is not available'
fi
fi
### Configure Netdata to gather information about Internet connection speed
if command -v speedtest-cli > /dev/null; then
SPEEDTEST_GIT="${XDG_DATA_HOME:-$HOME/.local/share}/netdata-speedtest"

View file

@ -0,0 +1,7 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmNWduTWZXVDN4VWlhUW4x
d2xWcEhpdWZOQnMwWWpmbWszbFI5UldjZmxnCm0wbmhBRm16Z2VkZjRPYm1tYnZP
Nm95VTI3N2RHemhCNDkyOFVpanN5K28KLS0tIEpLN0x6M09jWHB4Q3hhc3hnMDNT
b1BFMVVHMnNJZWRCRE9XZzZMZHI5SlEKj0npjixy7aNtXHHQEqM0YNeX9V5EGSJb
quU8KuNxbS9vG0WK8dUNQccKbf1Bg+9h
-----END AGE ENCRYPTED FILE-----

View file

@ -0,0 +1,7 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3MnUrR1Z1Vkg1cmJHUnp6
LzRSa3E5THVJRnZmZS92MEI5ck0yRWRxNVVVClJhNThYOFJaUXVrN3FYU0pNRnhk
ZHNBTUFUT3VGem40Q0U4N08reERVTncKLS0tICtiRGdZV2NHZUQ2N3M5TkM5THB5
eDJlZ0szbFpZRmR5eURDV0hycTZOZFkKyldRoEIqhmTHAX71jlKvQ57jQnArFTtd
geVsREvQtVX9Zw8PON4=
-----END AGE ENCRYPTED FILE-----

View file

@ -187,7 +187,9 @@ if [ "$BASH_SUPPORT" = 'true' ]; then
### zoxide
if command -v zoxide > /dev/null; then
eval "$(zoxide init --cmd cd bash)" > /dev/null
eval "$(zoxide init --cmd z bash)" > /dev/null
else
alias z='cd'
fi
### Ble.sh

View file

@ -0,0 +1,5 @@
# Postfix
**Configures Postfix to use SendGrid as a relay host**
This configuration file is appended to `/etc/postfix/main.cf` by one of the scripts. It configures SendGrid as a relay host that Postfix can use. More details can be found in the [SendGrid documentation on integrating Postfix](https://docs.sendgrid.com/for-developers/sending-email/postfix). Some FROM addresses do not work properly when using SendGrid. Because of this, the configuration will automatically re-write the FROM address to equal `system@public.domain.com`, where `public.domain.com` is the value specified under `.host.domain` in `~/.config/chezmoi/chezmoi.yml`.

View file

@ -1,16 +1,7 @@
### INSTALL DOCTOR MANAGED ### START
# @file SendGrid Postfix configuration
# @brief Configures Postfix to use SendGrid as a relay host
# @description
# This configuration file is appended to `/etc/postfix/main.cf` by one of the scripts. It configures SendGrid
# as a relay host that Postfix can use. More details can be found in the
# [SendGrid documentation on integrating Postfix](https://docs.sendgrid.com/for-developers/sending-email/postfix).
#
# Some FROM addresses do not work properly when using SendGrid. Because of this, the configuration will automatically
# re-write the FROM address to equal `system@public.domain.com`, where `public.domain.com` is the value specified under
# `.host.domain` in `~/.config/chezmoi/chezmoi.yml`.
header_size_limit = 4096000
inet_interfaces = loopback-only
myhostname = {{ .host.domain }}
relayhost = [smtp.sendgrid.net]:587
smtp_header_checks = regexp:/etc/postfix/header_checks

View file

@ -232,9 +232,7 @@ export GRADLE_USER_HOME="$XDG_DATA_HOME/gradle"
### Homebrew
export HOMEBREW_BUNDLE_FILE="$XDG_CONFIG_HOME/Brewfile"
{{ if (and (eq .host.distro.family "darwin") (.host.restricted)) }}
export HOMEBREW_CASK_OPTS="--appdir=~/Applications"
{{ end }}
export HOMEBREW_CASK_OPTS="--appdir=/Applications --display-times"
### HTTPie
export HTTPIE_CONFIG_DIR="$XDG_CONFIG_HOME/httpie"

View file

@ -95,6 +95,10 @@ export GOOGLE_SEARCH_ID="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitempl
### Serper.dev
export SERP_API_KEY="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SERP_API_KEY")) }}{{ includeTemplate "secrets/SERP_API_KEY" | decrypt | trim }}{{ else }}{{ env "SERP_API_KEY" }}{{ end }}"
### SFTPGo
export SFTPGO_DEFAULT_ADMIN_PASSWORD="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SFTPGO_DEFAULT_ADMIN_PASSWORD")) }}{{ includeTemplate "secrets/SFTPGO_DEFAULT_ADMIN_PASSWORD" | decrypt | trim }}{{ else }}{{ env "SFTPGO_DEFAULT_ADMIN_PASSWORD" }}{{ end }}"
export SFTPGO_DEFAULT_ADMIN_USERNAME="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SFTPGO_DEFAULT_ADMIN_USERNAME")) }}{{ includeTemplate "secrets/SFTPGO_DEFAULT_ADMIN_USERNAME" | decrypt | trim }}{{ else }}{{ env "SFTPGO_DEFAULT_ADMIN_USERNAME" }}{{ end }}"
### Snapcraft
export SNAPCRAFT_EMAIL="{{ .user.snapcraft.username }}"
export SNAPCRAFT_MACAROON="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SNAPCRAFT_MACAROON")) }}{{ includeTemplate "secrets/SNAPCRAFT_MACAROON" | decrypt | trim }}{{ else }}{{ env "SNAPCRAFT_MACAROON" }}{{ end }}"

View file

@ -107,6 +107,10 @@ function fileExists(pathToFile) {
return fs.existsSync(pathToFile)
}
function dirExists(pathToDir) {
return fs.existsSync(pathToDir)
}
let installData
let installOrders = {}
let installMeta = {}
@ -202,7 +206,7 @@ async function generateInstallOrders(pkgsToInstall) {
} else if (softwarePackages[packageKey]['_' + currentSelector + ':' + osType + ':' + preference]) {
pref = osType + ':' + preference
}
log('info', 'Filter', `${pkg} is being skipped because of the _when:${pref} condition`)
process.env.DEBUG === 'true' && log('info', 'Filter', `${pkg} is being skipped because of the _when:${pref} condition`)
processPluginOrders(pkg)
continue pkgFor
}
@ -211,7 +215,7 @@ async function generateInstallOrders(pkgsToInstall) {
await runSilentCommand(scopedPkgManager)
} catch (e) {
const pref = preference
log('info', 'Filter', `${pkg} is being skipped because of the _when:${pref} condition`)
process.env.DEBUG === 'true' && log('info', 'Filter', `${pkg} is being skipped because of the _when:${pref} condition`)
processPluginOrders(pkg)
continue pkgFor
}
@ -225,7 +229,7 @@ async function generateInstallOrders(pkgsToInstall) {
} else if (softwarePackages[packageKey]['_' + currentSelector + ':' + osType]) {
pref = osType
}
log('info', 'Filter', `${pkg} is being skipped because of the _when:${pref} condition`)
process.env.DEBUG === 'true' && log('info', 'Filter', `${pkg} is being skipped because of the _when:${pref} condition`)
processPluginOrders(pkg)
continue pkgFor
}
@ -233,7 +237,7 @@ async function generateInstallOrders(pkgsToInstall) {
try {
await runSilentCommand(normalCheck)
} catch (e) {
log('info', 'Filter', `${pkg} is being skipped because of the _when condition`)
process.env.DEBUG === 'true' && log('info', 'Filter', `${pkg} is being skipped because of the _when condition`)
processPluginOrders(pkg)
continue pkgFor
}
@ -267,7 +271,7 @@ async function generateInstallOrders(pkgsToInstall) {
} else if (softwarePackages[packageKey]['_' + currentSelector + ':' + osType + ':' + preference]) {
pref = osType + ':' + preference
}
log('info', 'Filter', `${bin} already in PATH (via _bin:${pref})`)
process.env.DEBUG === 'true' && log('info', 'Filter', `${bin} already in PATH (via _bin:${pref})`)
processPluginOrders(pkg)
continue pkgFor
} else {
@ -282,7 +286,7 @@ async function generateInstallOrders(pkgsToInstall) {
: scopedPkgManager.map((x) => which.sync(x, { nothrow: true })).every((y) => !!y)
if (bin) {
const pref = preference
log('info', 'Filter', `${bin} already in PATH (via _bin:${pref})`)
process.env.DEBUG === 'true' && log('info', 'Filter', `${bin} already in PATH (via _bin:${pref})`)
processPluginOrders(pkg)
continue pkgFor
} else {
@ -302,7 +306,7 @@ async function generateInstallOrders(pkgsToInstall) {
} else if (softwarePackages[packageKey]['_' + currentSelector + ':' + osType]) {
pref = osType
}
log('info', 'Filter', `${bin} already in PATH (via _bin:${pref})`)
process.env.DEBUG === 'true' && log('info', 'Filter', `${bin} already in PATH (via _bin:${pref})`)
processPluginOrders(pkg)
continue pkgFor
} else {
@ -316,7 +320,7 @@ async function generateInstallOrders(pkgsToInstall) {
? which.sync(normalCheck, { nothrow: true })
: normalCheck.map((x) => which.sync(x, { nothrow: true })).every((y) => !!y)
if (bin) {
log('info', 'Filter', `${bin} already in PATH (via _bin)`)
process.env.DEBUG === 'true' && log('info', 'Filter', `${bin} already in PATH (via _bin)`)
processPluginOrders(pkg)
continue pkgFor
} else {
@ -442,7 +446,8 @@ async function updateInstallMaps(preference, packages, scopedPreference, pkg, pa
installOrdersPost = installOrdersPost.concat(typeof postHook === 'string' ? [postHook] : postHook)
}
const serviceHook = getHook(packages, 'service', scopedPreference, preference)
if (serviceHook) {
const serviceEnabledHook = getHook(packages, 'serviceEnabled', scopedPreference)
if (serviceHook && serviceEnabledHook) {
installOrdersService = installOrdersService.concat(typeof serviceHook === 'string' ? [serviceHook] : serviceHook)
}
const groupsHook = getHook(packages, 'groups', scopedPreference, preference)
@ -523,12 +528,7 @@ async function OSTypeInstallerKey() {
const yum = which.sync('yum', { nothrow: true })
const zypper = which.sync('zypper', { nothrow: true })
if (apt) {
try {
await $`test -d /etc/ubuntu-advantage`
return 'ubuntu'
} catch (e) {
return 'apt'
}
return dirExists('/etc/ubuntu-advantage') ? 'ubuntu' : 'apt'
} else if (dnf || yum) {
return 'dnf'
} else if (pacman) {
@ -538,12 +538,7 @@ async function OSTypeInstallerKey() {
} else if (freebsdPkg && freebsdVersion) {
return 'freebsd'
} else {
try {
await $`test -d /Applications && test -d /Library`
return 'darwin'
} catch (e) {
return 'windows'
}
return dirExists('/Applications') && dirExists('/Library') ? 'darwin' : 'windows'
}
} catch (e) {
log('error', 'OS Detection', 'There was an error determining the type of operating system')
@ -553,17 +548,7 @@ async function OSTypeInstallerKey() {
// Acquire OS type
async function OSType() {
try {
await $`test -d /Applications && test -d /Library`
return 'darwin'
} catch (e) {
try {
await $`test -f /etc/os-release`
return 'linux'
} catch (e) {
return 'windows'
}
}
return dirExists('/Applications') && dirExists('/Library') ? 'darwin' : (fileExists('/etc/os-release') ? 'linux' : 'windows')
}
// Acquire release ID (for Linux)

View file

@ -1,3 +1,7 @@
{{- $baseDomain := (join (join .host.hostname ".") .host.domain) -}}
{{- if eq .host.qubes true -}}
{{- $baseDomain := (join (join .host.hostname "-qube.") .host.domain) -}}
{{- end -}}
{
"common": {
"idle_timeout": 15,
@ -20,7 +24,7 @@
"whitelist_file": "",
"allow_self_connections": 0,
"defender": {
"enabled": false,
"enabled": true,
"driver": "memory",
"ban_time": 30,
"ban_time_increment": 50,
@ -56,8 +60,8 @@
]
},
"acme": {
"domains": [],
"email": "",
"domains": ["sftp.{{ $baseDomain }}"],
"email": "{{ .user.cloudflare.username }}",
"key_type": "4096",
"certs_path": "certs",
"ca_endpoint": "https://acme-v02.api.letsencrypt.org/directory",
@ -236,7 +240,7 @@
},
"password_caching": true,
"update_mode": 0,
"create_default_admin": false,
"create_default_admin": true,
"naming_rules": 1,
"is_shared": 0,
"node": {
@ -249,7 +253,7 @@
"httpd": {
"bindings": [
{
"port": 8080,
"port": 11101,
"address": "",
"enable_web_admin": true,
"enable_web_client": true,
@ -354,7 +358,7 @@
"installation_code": "",
"installation_code_hint": "Installation code"
},
"hide_support_link": false
"hide_support_link": true
},
"telemetry": {
"bind_port": 0,
@ -391,20 +395,20 @@
"mfa": {
"totp": [
{
"name": "Default",
"issuer": "SFTPGo",
"name": "Install Doctor",
"issuer": "SFTPGo - Install Doctor",
"algo": "sha1"
}
]
},
"smtp": {
"host": "",
"port": 25,
"from": "",
"user": "",
"password": "",
"host": "smtp.sendgrid.net",
"port": 587,
"from": "LitOS SFTPGo <no-reply@{{ .host.domain }}",
"user": "apikey",
"password": "{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SENDGRID_API_KEY")) }}{{ includeTemplate "secrets/SENDGRID_API_KEY" | decrypt | trim }}{{ else }}{{ env "SENDGRID_API_KEY" }}",
"auth_type": 0,
"encryption": 0,
"encryption": 1,
"domain": "",
"templates_path": "templates"
},

View file

@ -203,19 +203,19 @@ generate_bar_disk() {
}
print_banner() {
if [ ! -f "$HOME/.cache/hey-banner-printed" ]; then
if command -v lolcat >/dev/null && command -v figlet >/dev/null; then
if [[ "${#HOSTNAME}" -lt 14 ]]; then
figlet "$(hostname)" | lolcat -f
else
figlet "Hey" | lolcat -f
printf "\\n"
printf " \\033[1;37mHostname:\\033[0m %s\\n" "$(hostname)"
fi
elif command -v figlet >/dev/null; then
printf "\\n%s\\n" "$(figlet -t -f "$BANNER_FONTPATH" " $BANNER_TEXT")"
else
printf "\\n%s\\n" "$(figlet -t -f "$BANNER_FONTPATH" " Hey")"
printf "\\n"
printf " \\033[1;37mHostname:\\033[0m %s\\n" "$(hostname)"
fi
mkdir -p "$HOME/.cache"
touch "$HOME/.cache/hey-banner-printed"
fi
printf " \\033[1;37mHostname:\\033[0m %s\\n" "$(hostname)"
if [ -f /etc/os-release ]; then
. /etc/os-release

View file

@ -1,8 +1,8 @@
# Generated by Powerlevel10k configuration wizard on 2022-10-29 at 08:32 EDT.
# Based on romkatv/powerlevel10k/config/p10k-classic.zsh, checksum 52170.
# Wizard options: nerdfont-complete + powerline, large icons, classic, unicode, dark,
# 12h time, angled separators, sharp heads, flat tails, 2 lines, disconnected,
# left frame, sparse, many icons, concise, transient_prompt, instant_prompt=verbose.
# Generated by Powerlevel10k configuration wizard on 2023-08-04 at 00:33 EDT.
# Based on romkatv/powerlevel10k/config/p10k-classic.zsh.
# Wizard options: nerdfont-complete + powerline, large icons, classic, unicode, darkest,
# 24h time, vertical separators, sharp heads, flat tails, 1 line, compact, many icons,
# concise, transient_prompt, instant_prompt=quiet.
# Type `p10k configure` to generate another config.
#
# Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate
@ -27,17 +27,14 @@
unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
# Zsh >= 5.1 is required.
autoload -Uz is-at-least && is-at-least 5.1 || return
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
# The list of segments shown on the left. Fill it with the most important segments.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
# =========================[ Line #1 ]=========================
os_icon # os identifier
dir # current directory
vcs # git status
# =========================[ Line #2 ]=========================
newline # \n
# prompt_char # prompt symbol
prompt_char # prompt symbol
)
# The list of segments shown on the right. Fill it with less important segments.
@ -45,7 +42,6 @@
# automatically hidden when the input line reaches it. Right prompt above the
# last prompt line gets hidden if it would overlap with left prompt.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
# =========================[ Line #1 ]=========================
status # exit code of the last command
command_execution_time # duration of the last command
background_jobs # presence of background jobs
@ -72,6 +68,7 @@
# luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv)
# jenv # java version from jenv (https://github.com/jenv/jenv)
# plenv # perl version from plenv (https://github.com/tokuhirom/plenv)
# perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew)
# phpenv # php version from phpenv (https://github.com/phpenv/phpenv)
# scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv)
# haskell_stack # haskell version from stack (https://haskellstack.org/)
@ -88,22 +85,23 @@
# nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
# ranger # ranger shell (https://github.com/ranger/ranger)
nnn # nnn shell (https://github.com/jarun/nnn)
# lf # lf shell (https://github.com/gokcehan/lf)
# xplr # xplr shell (https://github.com/sayanarijit/xplr)
vim_shell # vim shell indicator (:sh)
# midnight_commander # midnight commander shell (https://midnight-commander.org/)
# nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
vi_mode # vi mode (you don't need this if you've enabled prompt_char)
chezmoi_shell # chezmoi shell (https://www.chezmoi.io/)
# vi_mode # vi mode (you don't need this if you've enabled prompt_char)
# vpn_ip # virtual private network indicator
# load # CPU load
# disk_usage # disk usage
ram # free RAM
# ram # free RAM
# swap # used swap
# todo # todo items (https://github.com/todotxt/todo.txt-cli)
# timewarrior # timewarrior tracking status (https://timewarrior.net/)
# taskwarrior # taskwarrior task count (https://taskwarrior.org/)
timewarrior # timewarrior tracking status (https://timewarrior.net/)
taskwarrior # taskwarrior task count (https://taskwarrior.org/)
# cpu_arch # CPU architecture
time # current time
# =========================[ Line #2 ]=========================
# newline # \n
# ip # ip address and bandwidth usage for a specified network interface
# public_ip # public IP address
# proxy # system-wide http/https/ftp proxy
@ -132,17 +130,17 @@
typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=
# Add an empty line before each prompt.
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
# Connect left prompt lines with these symbols. You'll probably want to use the same color
# as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%240F╭─'
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%240F├─'
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%240F╰─'
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%238F╭─'
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%238F├─'
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%238F╰─'
# Connect right prompt lines with these symbols.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%238F─╮'
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%238F─┤'
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%238F─╯'
# Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or
# '─'. The last two make it easier to see the alignment between left and right prompt and to
@ -154,7 +152,7 @@
if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
# The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE
# ornaments defined above.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=238
# Start filler from the edge of the screen if there are no left segments on the first line.
typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
# End filler on the edge of the screen if there are no right segments on the first line.
@ -162,16 +160,19 @@
fi
# Default background color.
typeset -g POWERLEVEL9K_BACKGROUND=236
typeset -g POWERLEVEL9K_BACKGROUND=234
# Separator between same-color segments on the left.
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%244F\uE0B1'
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%242F\u2502'
# Separator between same-color segments on the right.
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%244F\uE0B3'
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%242F\u2502'
# Separator between different-color segments on the left.
typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0'
typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=''
# Separator between different-color segments on the right.
typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2'
typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=''
# To remove a separator between two segments, add "_joined" to the second segment name.
# For example: POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(os_icon context_joined)
# The right end of left prompt.
typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0'
# The left end of right prompt.
@ -344,10 +345,10 @@
# typeset -g POWERLEVEL9K_DIR_CLASSES=()
# Custom prefix.
# typeset -g POWERLEVEL9K_DIR_PREFIX='%246Fin '
# typeset -g POWERLEVEL9K_DIR_PREFIX='%244Fin '
#####################################[ vcs: git status ]######################################
# Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon.
# Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon.
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 '
# Untracked files icon. It's really a question mark, your font isn't broken.
@ -374,7 +375,7 @@
if (( $1 )); then
# Styling for up-to-date Git status.
local meta='%246F' # grey foreground
local meta='%244F' # grey foreground
local clean='%76F' # green foreground
local modified='%178F' # yellow foreground
local untracked='%39F' # blue foreground
@ -490,7 +491,7 @@
# Custom icon.
# typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
# typeset -g POWERLEVEL9K_VCS_PREFIX='%246Fon '
# typeset -g POWERLEVEL9K_VCS_PREFIX='%244Fon '
# Show status of repositories of these types. You can add svn and/or hg if you are
# using them. If you do, your prompt may become slow even when your current directory
@ -551,7 +552,7 @@
# Custom icon.
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%246Ftook '
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%244Ftook '
#######################[ background_jobs: presence of background jobs ]#######################
# Don't show the number of background jobs.
@ -728,6 +729,12 @@
# Custom icon.
# typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐'
######################[ lf: lf shell (https://github.com/gokcehan/lf) ]#######################
# lf shell color.
typeset -g POWERLEVEL9K_LF_FOREGROUND=72
# Custom icon.
# typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐'
##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]##################
# xplr shell color.
typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72
@ -750,12 +757,21 @@
# Nix shell color.
typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74
# Display the icon of nix_shell if PATH contains a subdirectory of /nix/store.
# typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false
# Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line.
# typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION=
# Custom icon.
# typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
##################[ chezmoi_shell: chezmoi shell (https://www.chezmoi.io/) ]##################
# chezmoi shell color.
typeset -g POWERLEVEL9K_CHEZMOI_SHELL_FOREGROUND=33
# Custom icon.
# typeset -g POWERLEVEL9K_CHEZMOI_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
##################################[ disk_usage: disk usage ]##################################
# Colors for different levels of disk usage.
typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35
@ -866,6 +882,17 @@
# Custom icon.
# typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐'
################################[ cpu_arch: CPU architecture ]################################
# CPU architecture color.
typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172
# Hide the segment when on a specific CPU architecture.
# typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION=
# typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION=
# Custom icon.
# typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐'
##################################[ context: user@hostname ]##################################
# Context color when running with privileges.
typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178
@ -888,7 +915,7 @@
# Custom icon.
# typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
# typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%246Fwith '
# typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%244Fwith '
###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]###
# Python virtual environment color.
@ -991,6 +1018,11 @@
##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]###############
# Nvm color.
typeset -g POWERLEVEL9K_NVM_FOREGROUND=70
# If set to false, hide node version if it's the same as default:
# $(nvm version current) == $(nvm version default).
typeset -g POWERLEVEL9K_NVM_PROMPT_ALWAYS_SHOW=false
# If set to false, hide node version if it's equal to "system".
typeset -g POWERLEVEL9K_NVM_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
@ -1140,6 +1172,16 @@
# Custom icon.
# typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############
# Perlbrew color.
typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67
# Show perlbrew version only when in a perl project subdirectory.
typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true
# Don't show "perl-" at the front.
typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false
# Custom icon.
# typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐'
############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############
# PHP color.
typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99
@ -1222,7 +1264,7 @@
#############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
# Show kubecontext only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show kubecontext.
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern'
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor|cmctl|sparkctl'
# Kubernetes context classes for the purpose of using different colors, icons and expansions with
# different contexts.
@ -1304,7 +1346,7 @@
POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}'
# Custom prefix.
# typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%246Fat '
# typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%244Fat '
#[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]#
# Show aws only when the command you are typing invokes one of these tools.
@ -1465,7 +1507,7 @@
# Custom icon.
# typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
# typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%246Fin '
# typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%244Fin '
###############################[ public_ip: public IP address ]###############################
# Public IP color.
@ -1481,7 +1523,7 @@
typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION=
# Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN
# to see the name of the interface.
typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*'
typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)'
# If set to true, show one segment per matching network interface. If set to false, show only
# one segment corresponding to the first matching network interface.
# Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION.
@ -1560,7 +1602,7 @@
# Current time color.
typeset -g POWERLEVEL9K_TIME_FOREGROUND=66
# Format for the current time: 09:51:02. See `man 3 strftime`.
typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%I:%M:%S %p}'
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 as opposed to the default
# behavior where they contain the end times of their preceding commands.
@ -1568,7 +1610,7 @@
# Custom icon.
# typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
# typeset -g POWERLEVEL9K_TIME_PREFIX='%246Fat '
# typeset -g POWERLEVEL9K_TIME_PREFIX='%244Fat '
# Example of a user-defined prompt segment. Function prompt_example will be called on every
# prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or

View file

@ -8,10 +8,7 @@ export LC_ALL="en_US.UTF-8"
export BASH_SUPPORT=true
### Import Common Settings
export XDG_CONFIG_HOME="$HOME/.config"
if [ -f "$HOME/.config/shell/profile.sh" ]; then
. "$XDG_CONFIG_HOME/shell/profile.sh"
fi
[[ ! -f "$HOME/.config/shell/profile.sh" ]] || source "$HOME/.config/shell/profile.sh"
# If not running interactively, don't do anything
case $- in
@ -31,15 +28,13 @@ export TIMEFMT=$'\nreal\t%E\nuser\t%U\nsys\t%S\ncpu\t%P'
export ZSH_COMPDUMP="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/zcompdump-$ZSH_VERSION"
### Antigen
export ADOTDIR="$HOME/.local/antigen"
export ADOTDIR="${XDG_DATA_HOME:-$HOME/.local/share}/antigen"
### Powerline
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
[[ ! -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]] || source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
### Fig
[[ -f "$HOME/.fig/shell/zshrc.pre.zsh" ]] && . "$HOME/.fig/shell/zshrc.pre.zsh"
[[ -f "$HOME/.fig/shell/zshrc.pre.zsh" ]] && source "$HOME/.fig/shell/zshrc.pre.zsh"
# --------------------------------- SETTINGS ----------------------------------
setopt AUTO_CD
@ -110,7 +105,7 @@ bindkey ' ' magic-space
# Plugin source helper
_source_plugin() {
local plugin_name="$1"
for basedir in "$HOME/.local/antigen/bundles/zsh-users"; do
for basedir in "${XDG_DATA_HOME:-$HOME/.local/share}/antigen/bundles/zsh-users"; do
plugin="$basedir/$plugin_name/$plugin_name.zsh"
[ -f "$plugin" ] && source "$plugin" && return 0
done
@ -171,7 +166,7 @@ unset -f _source_plugin
# POWERLEVEL
if ! [[ $(tty) = /dev/tty* ]]; then
if source "$HOME/.local/antigen/bundles/romkatv/powerlevel10k/powerlevel10k.zsh-theme" 2> /dev/null; then
if source "${XDG_DATA_HOME:-$HOME/.local/share}/antigen/bundles/romkatv/powerlevel10k/powerlevel10k.zsh-theme" 2> /dev/null; then
s=' ' # fix too wide icons
POWERLEVEL9K_MODE=nerdfont-complete
POWERLEVEL9K_SHORTEN_STRATEGY=truncate_beginning
@ -518,5 +513,7 @@ fi
### zoxide
if command -v zoxide > /dev/null; then
zstyle ':autocomplete:recent-dirs' backend zoxide
eval "$(zoxide init --cmd cd zsh)" > /dev/null
eval "$(zoxide init --cmd z zsh)" > /dev/null
else
alias z='cd'
fi

View file

@ -1137,7 +1137,8 @@ softwarePackages:
_bin: openssl-osx-ca
_github: https://github.com/raggi/openssl-osx-ca
_name: OpenSSL macOS CA
_service: openssl-osx-ca
_service:brew:darwin: openssl-osx-ca
_serviceEnabled: true
brew:darwin: raggi/ale/openssl-osx-ca
meta-package-manager:
_bin: mpm
@ -1164,7 +1165,7 @@ softwarePackages:
brew-pkg:
_github: https://github.com/timsutton/brew-pkg
_name: Homebrew Pkg
_when:darwin: '! brew pkg --help'
_when:darwin: '! brew pkg --help > /dev/null'
brew:darwin: timsutton/formulae/brew-pkg
bash-completion:
_bin: null
@ -2137,6 +2138,7 @@ softwarePackages:
_github: https://github.com/syncthing/syncthing
_name: Syncthing
_service: syncthing
_serviceEnabled: true
brew: syncthing
choco: syncthing
port: syncthing
@ -2766,6 +2768,7 @@ softwarePackages:
_home: null
_name: etcd
_service: etcd
_serviceEnabled: true
apt: etcd
brew: etcd
choco: etcd
@ -3737,6 +3740,7 @@ softwarePackages:
_home: https://gitlab.com/gitlab-org/gitlab-runner
_name: Gitlab Runner
_service: gitlab-runner
_serviceEnabled: true
ansible: professormanhattan.gitlabrunner
brew: gitlab-runner
choco: gitlab-runner
@ -4974,6 +4978,7 @@ softwarePackages:
_home: https://www.linux-kvm.org/page/Main_Page
_name: KVM
_service: libvirt
_serviceEnabled: true
ansible: professormanhattan.kvm
apt:
- bridge-utils
@ -6025,6 +6030,7 @@ softwarePackages:
_home: https://www.netdata.cloud/
_name: Netdata
_service: netdata
_serviceEnabled: true
_deps:
- debsecan
- speedtest-cli
@ -6088,6 +6094,7 @@ softwarePackages:
- port: 443
proto: tcp
_service: nginx
_serviceEnabled: true
ansible: professormanhattan.nginx
apt: nginx
brew: nginx
@ -8044,7 +8051,9 @@ softwarePackages:
_github: https://github.com/drakkan/sftpgo
_home: null
_name: sftpgo
_post: cp -f "$HOME/.local/etc/sftpgo.json" /usr/local/etc/sftpgo/sftpgo.json && sudo sftpgo initprovider
_service: sftpgo
_serviceEnabled: true
brew: sftpgo
choco: sftpgo
github: github.com/drakkan/sftpgo
@ -9161,6 +9170,7 @@ softwarePackages:
_home: https://www.privoxy.org/
_name: Privoxy
_service: privoxy
_serviceEnabled: true
apt: privoxy
brew: privoxy
dnf: privoxy
@ -9174,6 +9184,7 @@ softwarePackages:
_home: https://www.torproject.org/
_name: TOR
_service: tor
_serviceEnabled: true
ansible:linux: professormanhattan.tor
apt: tor
brew: tor
@ -9881,6 +9892,7 @@ softwarePackages:
fail2ban:
_bin: fail2ban-client
_service: fail2ban
_serviceEnabled: true
# fail2ban cannot be installed on Qubes Fedora 36 without messing with the qubes-firewall since firewalld is required
_when:linux: echo '! command -v qubes-firewall > /dev/null && test -f /proc/version && ! grep Microsoft /proc/version > /dev/null' | bash
apt: fail2ban
@ -9888,6 +9900,33 @@ softwarePackages:
dnf: fail2ban
pacman: fail2ban
port: fail2ban
timewarrior:
_bin: timewarrior
_github: https://github.com/GothenburgBitFactory/timewarrior
_name: Time Warrior
apt: timewarrior
brew: timewarrior
dnf: timew
emerge: app-misc/timew
nix-env: timewarrior
pacman: timew
taskwarrior:
_bin: taskwarrior
_github: https://github.com/GothenburgBitFactory/taskwarrior
_name: Task Warrior
apt: taskwarrior
dnf: task
brew:
- task
- taskd
- tasksh
nix-env: taskwarrior
sbopkg: task
port: task
emerge: task
pacman: task
xbps-install: task
zypper: taskwarrior
boringtun:
_bin: boringtun-cli
_desc: BoringTun is an implementation of the WireGuard® protocol designed for portability and speed.
@ -10406,7 +10445,7 @@ softwarePlugins:
- dotnet-format
- git-credential-manager
gcloud:
cmd: bash -c 'if ! gcloud components list | grep "Installed.*{PLUGIN}" > /dev/null; then gcloud components install --quiet "{PLUGIN}"; fi'
cmd: bash -c 'if ! gcloud components list | grep "Installed.*{PLUGIN}" > /dev/null; then echo "Installing.." && gcloud components install --quiet "{PLUGIN}"; fi'
plugins:
- app-engine-go
- cloud-datastore-emulator
@ -10524,6 +10563,7 @@ softwarePlugins:
- theapsgroup/keycloak
- theapsgroup/vault
- twitter
update: steampipe plugin update --all
teams:
cmd:
plugins: