From 97064b737e4a4c60c6860eaabf817299b8646e69 Mon Sep 17 00:00:00 2001 From: Brian Zalewski <59970525+ProfessorManhattan@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:05:20 +0000 Subject: [PATCH] Latest --- docs/TODO.md | 3 + home/.chezmoidata.yaml | 2 + .../run_onchange_after_05-postfix.sh.tmpl | 6 +- ...n_onchange_after_18-install-sdkman.sh.tmpl | 9 ++ .../run_onchange_after_57-netdata.sh.tmpl | 9 ++ .../secrets/SFTPGO_DEFAULT_ADMIN_PASSWORD | 7 + .../secrets/SFTPGO_DEFAULT_ADMIN_USERNAME | 7 + home/dot_bashrc | 4 +- home/dot_config/postfix/README.md | 5 + home/dot_config/postfix/main.cf.tmpl | 11 +- home/dot_config/shell/exports.sh.tmpl | 4 +- home/dot_config/shell/private_private.sh.tmpl | 4 + home/dot_local/bin/executable_install-program | 49 +++---- home/dot_local/etc/sftpgo/sftpgo.json | 32 +++-- home/dot_local/scripts/motd.bash | 20 +-- home/dot_local/scripts/p10k.zsh | 128 ++++++++++++------ home/dot_zshrc | 21 ++- software.yml | 46 ++++++- 18 files changed, 236 insertions(+), 131 deletions(-) create mode 100644 home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_PASSWORD create mode 100644 home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_USERNAME create mode 100644 home/dot_config/postfix/README.md diff --git a/docs/TODO.md b/docs/TODO.md index 73335641..1613da78 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -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 diff --git a/home/.chezmoidata.yaml b/home/.chezmoidata.yaml index c800b2cd..dd335c3f 100644 --- a/home/.chezmoidata.yaml +++ b/home/.chezmoidata.yaml @@ -384,6 +384,8 @@ softwareGroups: - thefuck - tldr - xdotool + - taskwarrior + - timewarrior - tmuxinator - up - wallpaper-cli diff --git a/home/.chezmoiscripts/universal/run_onchange_after_05-postfix.sh.tmpl b/home/.chezmoiscripts/universal/run_onchange_after_05-postfix.sh.tmpl index 622a62cc..dc98964f 100644 --- a/home/.chezmoiscripts/universal/run_onchange_after_05-postfix.sh.tmpl +++ b/home/.chezmoiscripts/universal/run_onchange_after_05-postfix.sh.tmpl @@ -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 diff --git a/home/.chezmoiscripts/universal/run_onchange_after_18-install-sdkman.sh.tmpl b/home/.chezmoiscripts/universal/run_onchange_after_18-install-sdkman.sh.tmpl index bf46ffc3..c9119d22 100644 --- a/home/.chezmoiscripts/universal/run_onchange_after_18-install-sdkman.sh.tmpl +++ b/home/.chezmoiscripts/universal/run_onchange_after_18-install-sdkman.sh.tmpl @@ -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`' diff --git a/home/.chezmoiscripts/universal/run_onchange_after_57-netdata.sh.tmpl b/home/.chezmoiscripts/universal/run_onchange_after_57-netdata.sh.tmpl index 7cf63a42..03419145 100644 --- a/home/.chezmoiscripts/universal/run_onchange_after_57-netdata.sh.tmpl +++ b/home/.chezmoiscripts/universal/run_onchange_after_57-netdata.sh.tmpl @@ -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" diff --git a/home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_PASSWORD b/home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_PASSWORD new file mode 100644 index 00000000..f34a6445 --- /dev/null +++ b/home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_PASSWORD @@ -0,0 +1,7 @@ +-----BEGIN AGE ENCRYPTED FILE----- +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmNWduTWZXVDN4VWlhUW4x +d2xWcEhpdWZOQnMwWWpmbWszbFI5UldjZmxnCm0wbmhBRm16Z2VkZjRPYm1tYnZP +Nm95VTI3N2RHemhCNDkyOFVpanN5K28KLS0tIEpLN0x6M09jWHB4Q3hhc3hnMDNT +b1BFMVVHMnNJZWRCRE9XZzZMZHI5SlEKj0npjixy7aNtXHHQEqM0YNeX9V5EGSJb +quU8KuNxbS9vG0WK8dUNQccKbf1Bg+9h +-----END AGE ENCRYPTED FILE----- \ No newline at end of file diff --git a/home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_USERNAME b/home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_USERNAME new file mode 100644 index 00000000..932c4fb2 --- /dev/null +++ b/home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_USERNAME @@ -0,0 +1,7 @@ +-----BEGIN AGE ENCRYPTED FILE----- +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3MnUrR1Z1Vkg1cmJHUnp6 +LzRSa3E5THVJRnZmZS92MEI5ck0yRWRxNVVVClJhNThYOFJaUXVrN3FYU0pNRnhk +ZHNBTUFUT3VGem40Q0U4N08reERVTncKLS0tICtiRGdZV2NHZUQ2N3M5TkM5THB5 +eDJlZ0szbFpZRmR5eURDV0hycTZOZFkKyldRoEIqhmTHAX71jlKvQ57jQnArFTtd +geVsREvQtVX9Zw8PON4= +-----END AGE ENCRYPTED FILE----- \ No newline at end of file diff --git a/home/dot_bashrc b/home/dot_bashrc index 8764edf3..15909b04 100644 --- a/home/dot_bashrc +++ b/home/dot_bashrc @@ -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 diff --git a/home/dot_config/postfix/README.md b/home/dot_config/postfix/README.md new file mode 100644 index 00000000..2b95c517 --- /dev/null +++ b/home/dot_config/postfix/README.md @@ -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`. \ No newline at end of file diff --git a/home/dot_config/postfix/main.cf.tmpl b/home/dot_config/postfix/main.cf.tmpl index 7250b259..1dbfa6eb 100644 --- a/home/dot_config/postfix/main.cf.tmpl +++ b/home/dot_config/postfix/main.cf.tmpl @@ -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 diff --git a/home/dot_config/shell/exports.sh.tmpl b/home/dot_config/shell/exports.sh.tmpl index c552b363..2c0ed14b 100644 --- a/home/dot_config/shell/exports.sh.tmpl +++ b/home/dot_config/shell/exports.sh.tmpl @@ -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" diff --git a/home/dot_config/shell/private_private.sh.tmpl b/home/dot_config/shell/private_private.sh.tmpl index a615d787..c2e3a03e 100644 --- a/home/dot_config/shell/private_private.sh.tmpl +++ b/home/dot_config/shell/private_private.sh.tmpl @@ -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 }}" diff --git a/home/dot_local/bin/executable_install-program b/home/dot_local/bin/executable_install-program index faa6cbee..ec698404 100644 --- a/home/dot_local/bin/executable_install-program +++ b/home/dot_local/bin/executable_install-program @@ -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) diff --git a/home/dot_local/etc/sftpgo/sftpgo.json b/home/dot_local/etc/sftpgo/sftpgo.json index fce7b325..0aa10e2a 100644 --- a/home/dot_local/etc/sftpgo/sftpgo.json +++ b/home/dot_local/etc/sftpgo/sftpgo.json @@ -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 /dev/null && command -v figlet >/dev/null; then - if [[ "${#HOSTNAME}" -lt 14 ]]; then - figlet "$(hostname)" | lolcat -f - else + if [ ! -f "$HOME/.cache/hey-banner-printed" ]; then + if command -v lolcat >/dev/null && command -v figlet >/dev/null; then + figlet "Hey" | lolcat -f + printf "\\n" + elif command -v figlet >/dev/null; then + printf "\\n%s\\n" "$(figlet -t -f "$BANNER_FONTPATH" " Hey")" 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" - printf " \\033[1;37mHostname:\\033[0m %s\\n" "$(hostname)" + 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 diff --git a/home/dot_local/scripts/p10k.zsh b/home/dot_local/scripts/p10k.zsh index 884e7241..15b2e600 100644 --- a/home/dot_local/scripts/p10k.zsh +++ b/home/dot_local/scripts/p10k.zsh @@ -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 @@ -1638,4 +1680,4 @@ typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' +'builtin' 'unset' 'p10k_config_opts' \ No newline at end of file diff --git a/home/dot_zshrc b/home/dot_zshrc index d87464d5..89205680 100644 --- a/home/dot_zshrc +++ b/home/dot_zshrc @@ -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 diff --git a/software.yml b/software.yml index 42e54fc9..1ba8909f 100644 --- a/software.yml +++ b/software.yml @@ -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: