This commit is contained in:
Brian Zalewski 2023-03-20 02:38:30 -04:00
parent 5dd2d8a1ee
commit 48c51c16c0
100 changed files with 1066 additions and 1321 deletions

View file

@ -134,10 +134,10 @@ tasks:
sh: mktemp sh: mktemp
cmds: cmds:
- | - |
curl -sSL '{{.MODEL_TASKFILE}}' > '{{.MODEL_TMP}}' curl -sSL '{{.MODEL_TASKFILE}}' > '{{.MODEL_TMP}}.yml'
export ZXXXY="$(yq e '.' {{.MODEL_TMP}})" export ZXXXY="$(yq e '.' {{.MODEL_TMP}}.yml)"
yq e -i '. | .vars = (env(ZXXXY) | .vars) | .env = (env(ZXXXY) | .env)' Taskfile.yml yq e -i '. | .vars = (env(ZXXXY) | .vars) | .env = (env(ZXXXY) | .env)' Taskfile.yml
yq eval-all -i 'select(fileIndex == 0) * select(fileIndex == 1)' '{{.MODEL_TMP}}' Taskfile.yml yq eval-all -i 'select(fileIndex == 0) * select(fileIndex == 1)' '{{.MODEL_TMP}}.yml' Taskfile.yml
requirements: requirements:
deps: deps:

View file

@ -277,11 +277,11 @@ tasks:
start: Running Prettier on {{if .CLI_ARGS}}`{{.CLI_ARGS}}`{{else}}project{{end}} start: Running Prettier on {{if .CLI_ARGS}}`{{.CLI_ARGS}}`{{else}}project{{end}}
cmds: cmds:
- cmd: | - cmd: |
prettier --plugin node_modules/prettier-plugin-toml-fixed --ignore-path {{.PRETTIERIGNORE_CONFIG}} \ prettier --ignore-path {{.PRETTIERIGNORE_CONFIG}} \
--write {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} || EXIT_CODE=$? --write {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} || EXIT_CODE=$?
if [ -n "$EXIT_CODE" ]; then if [ -n "$EXIT_CODE" ]; then
.config/log warn 'Failed to run `prettier` - falling back to `prettier`' .config/log warn 'Failed to run `prettier` - falling back to `prettier`'
prettier --plugin node_modules/prettier-plugin-toml-fixed --ignore-path {{.PRETTIERIGNORE_CONFIG}} \ prettier --ignore-path {{.PRETTIERIGNORE_CONFIG}} \
--write {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} --write {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}}
fi fi
ignore_error: true ignore_error: true

View file

@ -3,7 +3,7 @@
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
}, },
"[javascript]": { "[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "dbaeumer.vscode-eslint"
}, },
"[javascriptreact]": { "[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
@ -12,7 +12,7 @@
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
}, },
"[json]": { "[json]": {
"editor.defaultFormatter": "vscode.json-language-features" "editor.defaultFormatter": "dbaeumer.vscode-eslint"
}, },
"[jsonc]": { "[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
@ -33,7 +33,7 @@
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
}, },
"[yaml]": { "[yaml]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "dbaeumer.vscode-eslint"
}, },
"codetour.customTourDirectory": ".config/codetour.yml", "codetour.customTourDirectory": ".config/codetour.yml",
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",

View file

@ -1,170 +1,5 @@
## User / Environment Variable Configuration # Environment Variable Configuration
This script will automatically set up a handful of different configurations / integrations Install Doctor can provision most of the system without additional input. However, you can take advantage of more features if you pass in variables with API keys which are used to leverage free cloud services.
if you decide to add your information. The script will first check for environment variables
and then show prompts to fill in the gaps if the system is not headless. Below you can find
a description of what each piece of information is used for as well as the name of the
environment variable you can specify to bypass the prompt.
If a description starts off with **Environment Variable Only** then the prompt system will not ask you for the default value. Instead, you should run `export VARIABLE_NAME="VALUE_HERE"` for each value you want to utilize before you proceed with the provisioning. For more details on how you can customize your deployment, check out the [Customization](https://install.doctor/customization) and the [Integrating Secrets](https://install.doctor/customization/secrets) documentation.
### Fork / Source Repository
To use a fork (if you made modifications to the original project), set this equal to one of the following:
1. Your GitHub username if you forked this project and the project slug is `install.doctor`
2. Your GitHub username / slug if you changed it from `install.doctor` (e.g. `ProfessorManhattan/install.doctor`)
3. A git remote URL (e.g. `git@gitlab.com:megabyte-labs/install.doctor`)
- Environment variable: `START_REPO`
Note, this variable is used by the `bash <(curl -sSL https://install.doctor/start)` command and is not used anywhere in the project itself.
### Headless Install
Set to true if you would like all prompts to be bypassed. If you have not already set up
your encryption keys, then the encryption process will be bypassed and default fallback
files will be used. Set to any value to perform a headless installation.
- Environment variable: `HEADLESS_INSTALL`
### Work Environment
Set to true if you are setting up a work environment where things like Tor should
not be installed.
- Environment variable: `WORK_ENVIRONMENT`
### Restricted Environment
Set to true if you are setting up an environment that should not use sudo / administrator
privileges. This is a WIP.
- Environment variable: `RESTRICTED_ENVIRONMENT`
### Software Group
The category you select for software group will determine which list of software should be
installed. The lists are configurable by modifying `~/.local/share/chezmoi/software.yml`.
- Environment variable: `SOFTWARE_GROUP`
### Name
Enter your full name as you would like it to appear in configuration files such as the Git
configuration.
- Environment variable: `FULL_NAME`
### E-mail
Enter your primary e-mail address.
- Environment variable: `PRIMARY_EMAIL`
### Public GPG Key ID
**Environment Variable Only** If you have a public GPG key available on the Ubuntu or MIT keyservers, then you can enter it
so that it is automatically imported.
- Environment variable: `KEYID`
### Timezone
Enter your timezone in the format of `America/New_York`. It should be available in the TZ database.
- Environment variable: `TIMEZONE`
### Domain
The domain address you would like to use for any part of the deployment that involves launching
a publicly web service.
- Environment variable: `PUBLIC_SERVICES_DOMAIN`
### CloudFlare API Token
The API token is used to automatically configure various web services that rely on public DNS
records.
- Environment variable: `CLOUDFLARE_API_TOKEN`
### GitHub Gist Token
**Environment Variable Only** Pass in a GitHub token with the `gist` scope to be able to use the `gist` CLI tool without having to authenticate.
- Environment variable: `GITHUB_GIST_TOKEN`
### GitHub Read-Only Token
**Environment Variable Only** Pass in a GitHub read-only token linked to your account to automatically save a backup of your
GitHub repositories. For more information, see [this link](https://github.com/gabrie30/ghorg#scm-provider-setup).
- Environment variable: `GITHUB_READ_TOKEN`
### GitLab Read-Only Token
**Environment Variable Only** Pass in a GitLab read-only token linked to your account to automatically save a backup of your
GitLab repositories. For more information, see [this link](https://github.com/gabrie30/ghorg#scm-provider-setup).
- Environment variable: `GITLAB_READ_TOKEN`
### G-mail Address
**Environment Variable Only** Add a G-mail address which you would like to use as the handler for outgoing SMTP mail.
- Environment variable: `GMAIL_ADDRESS`
### G-mail App Password
**Environment Variable Only** Add the app password to your G-mail address so that outgoing mail can be handled by G-mail.
- Environment variable: `GMAIL_APP_PASSWORD`
### Ngrok Authentication Token
**Environment Variable Only** Add your Ngrok authentication token so that the configuration file can be automatically
generated.
- Environment Variable: `NGROK_AUTH_TOKEN`
### Slack API Token
**Environment Variable Only** Add your Slack API token so that `slackterm` can be automatically set up.
- Environment Variable: `SLACK_API_TOKEN`
### Surge.sh Username
**Environment Variable Only** Add your surge.sh username to automatically sign into surge.sh. Encrypted password should be stored
in `.chezmoitemplates/secrets/key-surgesh-password` to leverage this functionality.
### Tailscale Auth Key
**Environment Variable Only** Add a Tailscale authentication key so that Tailscale can be automatically connected to your Tailscale network.
- Environment Variable: `TAILSCALE_AUTH_KEY`
### OpenVPN Username
- Environment Variable: `OVPN_USERNAME`
### OpenVPN Password
- Environment Variable: `OVPN_PASSWORD`
### VMWare Workstation Key
- Environment Variable: `VMWARE_WORKSTATION_LICENSE_KEY`
### Google Cloud SDK Default E-mail
- Environment Variable: `GCE_SERVICE_ACCOUNT_EMAIL`
### Google Cloud SDK Default Project
- Environment Variable: `CLOUDSDK_CORE_PROJECT`
### Snapcraft E-mail
- `SNAPCRAFT_EMAIL`

View file

@ -32,10 +32,10 @@ if [[ ! "$(test -d /proc && grep Microsoft /proc/version > /dev/null)" ]] && com
# warp-cli set-mode warp+doh # warp-cli set-mode warp+doh
# TODO # TODO
{{ if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-teams-client-id")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-teams-client-secret")) -}} {{ if and (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_TEAMS_CLIENT_ID"))) (env "CLOUDFLARE_TEAMS_CLIENT_ID")) (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_TEAMS_CLIENT_SECRET"))) (env "CLOUDFLARE_TEAMS_CLIENT_SECRET")) -}}
### Enroll with CloudFlare Teams ### Enroll with CloudFlare Teams
logg info 'Enrolling with CloudFlare Teams' logg info 'Enrolling with CloudFlare Teams'
warp-cli teams-enroll '{{- includeTemplate "secrets/key-cloudflare-teams-client-id" | decrypt -}}' '{{- includeTemplate "secrets/key-cloudflare-teams-client-secret" | decrypt -}}' warp-cli teams-enroll '{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_TEAMS_CLIENT_ID")) }}{{ includeTemplate "secrets/CLOUDFLARE_TEAMS_CLIENT_ID" | decrypt }}{{ else }}{{ env "CLOUDFLARE_TEAMS_CLIENT_ID" }}{{ end }}' '{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_TEAMS_CLIENT_SECRET")) }}{{ includeTemplate "secrets/CLOUDFLARE_TEAMS_CLIENT_SECRET" | decrypt }}{{ else }}{{ env "CLOUDFLARE_TEAMS_CLIENT_SECRET" }}{{ end }}'
{{- end }} {{- end }}
fi fi

View file

@ -1,8 +1,17 @@
{{- if and (eq .host.distro.family "linux") (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) -}} {{- if (eq .host.distro.family "linux") -}}
#!/usr/bin/env bash #!/usr/bin/env bash
{{ $ovpnUsername := (default (env "OVPN_USERNAME") ((includeTemplate "secrets/key-ovpn-username") | decrypt)) }} {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "OVPN_USERNAME")) }}
{{ $ovpnPassword := (default (env "OVPN_PASSWORD") ((includeTemplate "secrets/key-ovpn-password") | decrypt)) }} {{ $ovpnUsername := includeTemplate "secrets/OVPN_USERNAME" | decrypt }}
{{ else }}
{{ $ovpnUsername := (env "OVPN_USERNAME") }}
{{ end }}
{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "OVPN_PASSWORD")) }}
{{ $ovpnPassword := includeTemplate "secrets/OVPN_PASSWORD" | decrypt }}
{{ else }}
{{ $ovpnPassword := (env "OVPN_PASSWORD") }}
{{ end }}
{{ includeTemplate "universal/profile" }} {{ includeTemplate "universal/profile" }}
{{ includeTemplate "universal/logg" }} {{ includeTemplate "universal/logg" }}
@ -59,6 +68,7 @@ if command -v nmcli > /dev/null; then
logg info 'See the `docs/VARIABLES.md` file for details.' logg info 'See the `docs/VARIABLES.md` file for details.'
fi fi
{{ if (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) }}
### Setup WireGuard profiles ### Setup WireGuard profiles
if [ -d /etc/NetworkManager/system-connections ]; then if [ -d /etc/NetworkManager/system-connections ]; then
find "${XDG_CONFIG_HOME:-$HOME/.config}/vpn" -type f -name "*.nmconnection" | while read WG_FILE; do find "${XDG_CONFIG_HOME:-$HOME/.config}/vpn" -type f -name "*.nmconnection" | while read WG_FILE; do
@ -85,6 +95,7 @@ if command -v nmcli > /dev/null; then
else else
logg warn '/etc/NetworkManager/system-connections is not a directory!' logg warn '/etc/NetworkManager/system-connections is not a directory!'
fi fi
{{ end -}}
### Restart NetworkManager if changes were made and environment is not WSL ### Restart NetworkManager if changes were made and environment is not WSL
if [ "$RESTART_NM" == 'true' ] && [[ ! "$(test -d proc && grep Microsoft /proc/version > /dev/null)" ]]; then if [ "$RESTART_NM" == 'true' ] && [[ ! "$(test -d proc && grep Microsoft /proc/version > /dev/null)" ]]; then

View file

@ -0,0 +1,30 @@
{{- if (ne .host.distro.family "windows") -}}
#!/usr/bin/env bash
{{ includeTemplate "universal/profile" }}
{{ includeTemplate "universal/logg" }}
if command -v code > /dev/null && command -v pnpm > /dev/null && [ -f "${XDG_DATA_HOME:-$HOME/.local/share}/vscode/package.json" ]; then
### Install linter fallback node_modules / package.json to system or home directory
if sudo cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/vscode/package.json" /package.json; then
logg info 'Successfully copied linter fallback configurations package.json to /package.json'
logg info 'Installing system root directory node_modules'
cd / && sudo pnpm i --no-lockfile || EXIT_CODE=$?
else
logg warn 'Unable to successfully copy linter fallback configurations package.json to /package.json'
logg info 'Installing linter fallback configurations node_modules to home directory instead'
cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/vscode/package.json" "$HOME/package.json"
cd ~ && pnpm i --no-lockfile || EXIT_CODE=$?
fi
### Log message if install failed
if [ -n "$EXIT_CODE" ]; then
logg warn 'Possible error(s) were detected while installing linter fallback configurations to the home directory.'
else
logg success 'Installed linter fallback configuration node_modules'
fi
else
logg info 'Skipping installation of fallback linter configurations because one or more of the dependencies is missing.'
fi
{{ end -}}

View file

@ -2,8 +2,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
{{- $secretKey := "" -}} {{- $secretKey := "" -}}
{{- if (stat (joinPath (.chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-VMWARE_WORKSTATION_LICENSE_KEY"))) -}} {{- if (stat (joinPath (.chezmoi.sourceDir ".chezmoitemplates" "secrets" "VMWARE_WORKSTATION_LICENSE_KEY"))) -}}
{{- $secretKey = (default "4C21U-2KK9Q-M8130-4V2QH-CF810" (includeTemplate "secrets/key-VMWARE_WORKSTATION_LICENSE_KEY" | decrypt)) -}} {{- $secretKey = (default "4C21U-2KK9Q-M8130-4V2QH-CF810" (includeTemplate "secrets/VMWARE_WORKSTATION_LICENSE_KEY" | decrypt)) -}}
{{- else -}} {{- else -}}
{{- $secretKey = (default "4C21U-2KK9Q-M8130-4V2QH-CF810" (env "VMWARE_WORKSTATION_LICENSE_KEY")) -}} {{- $secretKey = (default "4C21U-2KK9Q-M8130-4V2QH-CF810" (env "VMWARE_WORKSTATION_LICENSE_KEY")) -}}
{{- end }} {{- end }}

View file

@ -1,4 +1,4 @@
{{- if and (ne .host.distro.family "windows") (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (or (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-NETDATA_TOKEN")) (env "NETDATA_TOKEN")) (or (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-NETDATA_ROOM")) (env "NETDATA_ROOM")) -}} {{- if and (ne .host.distro.family "windows") (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (or (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NETDATA_TOKEN")) (env "NETDATA_TOKEN")) (or (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NETDATA_ROOM")) (env "NETDATA_ROOM")) -}}
#!/usr/bin/env bash #!/usr/bin/env bash
{{ includeTemplate "universal/profile" }} {{ includeTemplate "universal/profile" }}
@ -6,8 +6,8 @@
### Claim the instance with Netdata Cloud ### Claim the instance with Netdata Cloud
if command -v netdata-claim.sh > /dev/null; then if command -v netdata-claim.sh > /dev/null; then
NETDATA_TOKEN="$(cat "{{ .chezmoi.sourceDir }}/.chezmoitemplates/secrets/key-netdata-token" | chezmoi decrypt)" NETDATA_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NETDATA_TOKEN")) }}{{ includeTemplate "secrets/NETDATA_TOKEN" | decrypt }}{{ else }}{{ env "NETDATA_TOKEN" }}{{ end }}"
NETDATA_ROOM="$(cat "{{ .chezmoi.sourceDir }}/.chezmoitemplates/secrets/key-netdata-room" | chezmoi decrypt)" NETDATA_ROOM="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NETDATA_ROOM")) }}{{ includeTemplate "secrets/NETDATA_ROOM" | decrypt }}{{ else }}{{ env "NETDATA_ROOM" }}{{ end }}"
netdata-claim.sh -token="$NETDATA_TOKEN" -rooms="$NETDATA_ROOM" -url="{{ .netdataClaimURL }}" netdata-claim.sh -token="$NETDATA_TOKEN" -rooms="$NETDATA_ROOM" -url="{{ .netdataClaimURL }}"
# Kernel optimizations # Kernel optimizations

View file

@ -1,4 +1,4 @@
{{- if and (ne .host.distro.family "windows") (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "tailscale")) -}} {{- if or (and (ne .host.distro.family "windows") (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TAILSCALE_AUTH_KEY")) (env "TAILSCALE_AUTH_KEY")) -}}
#!/usr/bin/env bash #!/usr/bin/env bash
### Install the Tailscale system daemon ### Install the Tailscale system daemon
@ -14,7 +14,7 @@ if [ -d /Applications ] && [ -d System ]; then
fi fi
### Connect to Tailscale network ### Connect to Tailscale network
TAILSCALE_AUTH_KEY="$(cat "{{ .chezmoi.sourceDir }}/.chezmoitemplates/secrets/key-netdata-token" | chezmoi decrypt)" TAILSCALE_AUTH_KEY="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "TAILSCALE_AUTH_KEY")) }}{{ includeTemplate "secrets/TAILSCALE_AUTH_KEY" | decrypt }}{{ else }}{{ env "TAILSCALE_AUTH_KEY" }}{{ end }}"
if command -v tailscale > /dev/null && [ "$TAILSCALE_AUTH_KEY" != "" ]; then if command -v tailscale > /dev/null && [ "$TAILSCALE_AUTH_KEY" != "" ]; then
logg info 'Connecting to Tailscale with user-defined authentication key' logg info 'Connecting to Tailscale with user-defined authentication key'
timeout 14 tailscale up --authkey="$TAILSCALE_AUTH_KEY" --accept-routes || EXIT_CODE=$? timeout 14 tailscale up --authkey="$TAILSCALE_AUTH_KEY" --accept-routes || EXIT_CODE=$?

View file

@ -0,0 +1,173 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2VG93RVdJWEgvTlp6M3Zi
NGxrZTNjRm1HZ05Xc01uL2JQYmJ2aThnYVd3Ckx5OFZQODJNNEFiV3A1Yk5IbENZ
V3VOM2lsbXpXd3dVQ2ZVZC9nOTQ1TFUKLS0tIFpuZEZ4SFRScVpQZEZRZy9ZSVhI
QlFLbTVTaUNYK2ZhSzhqWEliWGpibkEKxM+YRRrJiCupt/URAknmPR5MHKfB8McE
e7BoUO1+qLboyAvTFQuwDRhfJu578xQ0FC6lNaknngUcsAaqzIdV4qLm5fUGEEJJ
7jxHHWsjk52qSpVJp8Hqu4ew1yrjaOZtlTm+aJ6sfTnyUWHGiALc+i4upAa5yA4B
OCOm6Yub25tRU9hm2m58wqFgJzfu654baLY7kwb146tlKOPhvlJveyOy+1ghCrj7
nUL5tAx+rm6XF+h7AEOecKSEYnncKa0TP8I+oKr8MyuHwD+iNLT5RDnO0qxVUYWX
7g0TPNLFVbMCUUWTAsMNKLGLKJ8WRoB6uKJa+Pq4ZvwAMx8dGyZk+NP2Nj8HuY3+
rdZDDNlCy723NYXEeX+SpWjXHPpIqEUvPGeRDtRlNu+5U6ILOaLvL20RxizIgoON
YCdFrrV7ixSU0GX8QHSgpMJY9vcYOy8F0/QDsK2e4ljfbwAHVuE8lHQEaT3gskG4
3sMK2rw5LHFuYK03od+ogY5HA2QvFpuUy/h80MI33jyvwrgrhxV8oJ2xQJUvX7Fn
bfDLicwfL6B9orSmlRPGPwNZC6UuxqLnQr47PdB+GnFYbgEx4ZQ03rdSGirM8D6m
GgbdTaYXb81GqNRwD1VKx+GlhFLwSRXlkEEZnkx91dz54Wb6GXIHGa1T9ldupcbi
V/jHrvLvjusIKrbrj/P3DmxgpKgxH29dhbCBp5zMMWsoMEyl55Y3Ff5ldsYNS1F4
wihDGV2p633jhdmRKM2nR535bQ4/Gb98osKkPB8s8rbI5HM/wc93mSnKyMRcruLM
K51Gk4sFGvNHje7EYniqDRaBFoMl+tPKYuB9Rkv3x99itsdtKFUqU0pawB7IapCi
OmcdBJPLE2GJQRCxRhDk5FH/DJ3qBUha77X9eyf45KrGWFDZDGbfXC7PggfSZ2Bb
jefVMVads8/K58FrbBUEe7fpanGtz06Ht0YGFf/bhoOe6grUTa69SHyYg1eFJfC0
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
-----END AGE ENCRYPTED FILE-----

View file

@ -0,0 +1,8 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHQmdqaFhVR2Yxbk9DbjM0
NlBQUUpVZ0tHSzI1aHZFSFh1U2RmdFEvdTJrCjVrY29GNjFPeFlneUhZNWpVS1FD
cG0yejFDRDZ1UHRvN24vdk9nZmRSSVEKLS0tIEpPWmxFaTRKRmVkeVRxSGlUWU9V
ZXoyQmZpeVZoeHlrRU1LK01HbmN2ZFkKWJ15bjX0AW7AIfceDtWOaNCSoFWSfJ4y
F2mmBPzEtKuZFDSl728rZCO5OFiWYQQ1EiI80HaHv1m3ymUxCnJQoyT1tw+Nv5u2
/g==
-----END AGE ENCRYPTED FILE-----

View file

@ -0,0 +1,8 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJYTY4eHFIT1cwUURJRFdn
bFBjM1lGbjdyYlk2andlalJ4dHJvdldzeFd3CmFNTjZRTjdjcUo5cGRLKy9iTEhG
NlFsb2pHZm5IUml5WWxPYkxJOUl3aEEKLS0tIG8yekh6ei9PNFFDSzd0MnFRd084
cXV5NVA0YklEZjlSbTdoeUd5a0dNck0KJn9Z//wqaIyMauUX9QG0EnXFnYIAm1Ia
IAgUxDZEJ/ghuEx12PfUkfmtSfBU6Da5bR3JsTbkzOkBMKxMC0NbgmZU3QLI5eV5
mw==
-----END AGE ENCRYPTED FILE-----

View file

@ -0,0 +1,7 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5QVdYNzJaNGhJNER1QThS
NU15U2VSOExrMy9RUXFrcGhoa2EwYnJuR2lBCjdhdXcwSVpHRUZrMWZpTXBwUmE4
RXFtcnZrU0lRS3dzeTZibW9BSFA3cUEKLS0tIDhGRTJ1MGlXTXlycWYxNnl4OGUv
cFpxdkdUTm9VclN5WmdsakZBRjNQTjgKPiL3djbp+JETKj4D2sQdhusBWScREG0h
p05r7A0o8TSuYEBykXkJpeduCWW+BrmF93XOo1G2MRC97Yc=
-----END AGE ENCRYPTED FILE-----

View file

@ -0,0 +1,8 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArUHJ2VURHcFFvZ0hOUE1s
UzhkM0hIZEh6RHVBV3JJeXVldW1wbUd1Z1M0CnRUNzhiMHFiUEQ0WFpkVzVLUWxV
bEtOTmwxWjhHb2dUZUs1N2dsOU14M0EKLS0tIGRMZnNMMjBpTTJCOUliY2psVG82
WCtCcXZPUGxjbXRsYnNhd1hHRVNNWUUKYWiPZVmfJnjhv9Zg3t0u3ozdD4hQvMrV
EXtAfBeDLbh8ef4Rnz+G4fuXhuNNBO9VuhB/PB97l1za5wcl7SdrmjwcuMB84vLe
qS3naHK7cHJp3g==
-----END AGE ENCRYPTED FILE-----

View file

@ -0,0 +1,8 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2WE14QUJVb0Ewb0dVaVVn
bnV4NzVlR3NsY21uM3ZwL2VsbnFxaS93Z0R3CjZYenhwSGJLMG1HQTRSRWI5VFU3
R1ZFenFLcGIwS0pQc3BSSngyczVTa3cKLS0tIDZuZVpuMFRkWVRtS0N2OGdSUDgv
bFZQMjR0M0dML2xJbEJpSjZOeHA0QmcKo4faB/sD0R4cXeE0hGfB4lh4vpZSdDgM
SUlzJvMatYyMRD/bMX2TrRKBeag6GMAC5lUPAxQyTjjB+a2GBJMh+x4O/HRTdInz
I78ytbMTkArOXTSScKZC8Rs0uvWw8AnTOEGeoC7Kx0GgIfs4BKlXyg==
-----END AGE ENCRYPTED FILE-----

View file

@ -0,0 +1,7 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvNEhWZEUrdkt2VXVPWmpn
OHNxVUI3dWFKcDJEN0RmSnJYYnJwaDhEemdjCkRnWFlQMkhmZjJLRUQ3RElDUExo
ZTBKcVc0djE4SSsvemdpTDVwamtvWDQKLS0tIElKczd6dFppWVowVXF3bU5uaktw
ZTFoWkJJTnVHQXgybmtOWjFwZzlYc1EKdV9vAIJQ6qbei2Bex/iIal4hRAFajMyp
zd3It6bk6NtmN5RQNvAndX5yG8z/Qg06Q7HgKRY=
-----END AGE ENCRYPTED FILE-----

View file

@ -0,0 +1,7 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhcUUwR01TYzdWc2o4S1ph
RWlubENHM2tvekpZWHRWTHVJQUg2dHdYdEhRClJMbTcybUh2NGRQN0RzL2k3RTV0
cml2NXBBdmVORWVoNjNpZzFTamQzMlkKLS0tIGpsblhxcDlvYk9xbVlmckNIWlUr
VmwyUVQvZmNkc2NBdklQckdGeXJYOEkKlZApyKetyIin/wrv+YTlc5TJU3ectaKo
oAw1v1/dpQ+ZZu2XbQb4jE8db2x+qPmwL8gfklPkg9GNNEH0HUYi13s=
-----END AGE ENCRYPTED FILE-----

View file

@ -1,186 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5WmtYMXV6K21NWldPc3g4
VXA4dzJHQTNDQ3ByNmJOb3N1dEZ1ck56Q3lFCkNjeEdha2w3RElBdnh6Y0ZQRXZo
OEcxUTNXcFlSR2ErWXB6Znl0RjdBUzQKLS0tIGt6RmxhYTU3SzZhME92dXRlRGRQ
TWt5WXVPYWxrc0hNSjNvU3R5d1NGKzgKEX2n4iuwetHFGC/rYST5C1rDajyU/adk
bhhIRxE0LqQayqLH6feLQrEW3GNUjVIsI9wPT1oa6anzVxxXePVDy4xEnIvog+IK
NhFTz2teM4Ht6S9oOyh2TCugFpeCvDk0LEMgw95o9tB+0jWVW5cUiS4L3qgkVBvh
iFtr/ykOQaSnTuigvhc/x90jPnN8pJJJI8nMGZcjY2JIl0VJDjw705bI9lrQZ0IH
YUMVLAqAORO/rsvB7Dj2r7f6MyNZv9dkyC5WmNQtpjuvSFCOdrD5vTONxgK2T/Jn
H2SZt3d5PgUaH5JdUGl6AVZqo3n/TKlByecpvke3ypORt+YY2pizOMQtxwfTDN+e
GPUGVusRZQzI9tDY324UVug7BOFvL7hUdTE2FOj41FF6gMA+VULMIddjMVQzYIY2
upNFjUhzteXKESFHqbkOgKOoApAcV3W97z366zHwDywZUehGG6wBEK3v7PMgp/vd
+zCRmqMVdQxtnMv57HTtnvqgVUTAQJQmcMqDBHM1zMuO0iG1YIuox1+BqCOFjgOs
KN94bQp07zSnGAuAY/YEBJBBykkgduCab77iI8r1R4Gooe7X+4CK02TwfHfqpAbc
QEdgfRqUHklOFIXIdgdaxaSfb5uvOQMcSBiAf6QatNxqCuhYF/QHtO4TU9x+ESyF
Wh7rlj18vBcZPZkG1pJYlItbX+Hn3C0d9iDBk/BjMpZMhWOHUQz9kOTmG5Ew79E1
Xs+lK4/SKMrmvg2R/STesX84yHXzz5mK3n+qzRFZ5ykc4WItNCFZMuLrZod/u4Zx
d0WoX4HpcxrM9WaMbuPAtYXHC//79qwSpFwo7qE+dFSdQoD0+QAXyAu3jboBMHZI
kLv8EfVnPlg4fAr7WFBH/iN6eWWTli59r0PuohprFj4qUNqMVwb+kAoS1jGzuIZE
O1LkCqnuX+kCpNTV5KzxQsa/ytiz/skoJ57PQwEQXCYfEjmZWz955NADkcPWugB3
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
-----END AGE ENCRYPTED FILE-----

View file

@ -1,219 +0,0 @@
---
# +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
# |G|E|N|E|R|A|L| |C|O|N|F|I|G|U|R|A|T|I|O|N|
# +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
# Which provider to clone from (github, gitlab, gitea or bitbucket)
# default: github
# flag (--scm, -s) eg: --scm=gitlab
GHORG_SCM_TYPE: gitlab
# How you'd like to clone the repos (https or ssh)
# default: https
# flag (--protocol) eg: --protocol=https
GHORG_CLONE_PROTOCOL: https
# This is where your ghorg directory will be created, use absolute pathing, shell expansions will not work.
# The ghorg directory is the home for all ghorg clones
# See https://github.com/gabrie30/ghorg#changing-clone-directories for example
# default: YOUR_HOME_DIR/ghorg
# flag (--path, -p) eg: --path=/tmp/ghorg
GHORG_ABSOLUTE_PATH_TO_CLONE_TO: /srv/repos
# Folder ghorg will clone all repos into. Cloning will result in: GHORG_ABSOLUTE_PATH_TO_CLONE_TO/GHORG_OUTPUT_DIR/repo
# See https://github.com/gabrie30/ghorg#changing-clone-directories for example
# default: org/user you are cloning, e.g. 'ghorg clone kubernetes' would create a kubernetes directory inside your ghorg directory
# flag (--output-dir) eg: --output-dir=testing
# GHORG_OUTPUT_DIR:
# Type of entity to clone (user or org)
# flag (--clone-type, -c) eg: --clone-type=user
GHORG_CLONE_TYPE: org
# Change SCM api base url, this is for on self hosted scm instances only
# For http gitlab instances see GHORG_INSECURE_GITLAB_CLIENT
# default: github/gitlab/bitbucket public apis
# flag (--base-url) eg: --base-url=https://my.self.hosted.scm.instance.com
GHORG_SCM_BASE_URL:
# Include submodules in all clone and pull operations.
# flag (--include-submodules)
GHORG_INCLUDE_SUBMODULES: true
# Allows you to pass arguments to git's filter flag e.g. git clone --filter=<args> this requires git version 2.19 or greater.
# Useful for filtering out binary objects from repos
# Few caveats, only works on inital clones, however if done on inital clone all subsequent clones will also honor the settings.
# More info at https://stackoverflow.com/questions/49917616/what-is-the-git-clone-filter-options-syntax
# flag (--git-filter) eg: --git-filter=blob:none
# GHORG_GIT_FILTER:
# Deletes all files/directories found in your local clone directory that are not found on the remote (e.g., after remote deletion). With GHORG_SKIP_ARCHIVED set, archived repositories will also be pruned from your local clone.
# Will prompt before deleting any files unless used in combination with --prune-no-confirm
# flag (--prune)
GHORG_PRUNE: true
# Skip interactive y/n prompt when pruning clones (can only be used in combination with --prune).
# flag (--prune-no-confirm)
GHORG_PRUNE_NO_CONFIRM: true
# Color output (enabled, disabled)
# flag (--color) eg: --color=disabled
GHORG_COLOR: enabled
# Skip archived repos, currently github/gitlab/gitea only
# flag (--skip-archived)
GHORG_SKIP_ARCHIVED: true
# Skip repos that are forks, currently github/gitlab/gitea only
# flag (--skip-forks)
GHORG_SKIP_FORKS: false
# Backup mode, clone as mirror, no working copy (ignores branch parameter)
# flag (--backup)
GHORG_BACKUP: true
# Max goroutines created while cloning
# flag (--concurrency)
GHORG_CONCURRENCY: 25
# A comma separated list of topics to filter by, currently github/gitlab/gitea only
# flag (--topics) eg: --topics=frontend
# If any topics exist here, ghorg will only clone repos that match at least one of these topics
# GHORG_TOPICS:
# Only clone repos with matching prefix, can be a comma separated list
# flag (--match-prefix) eg: --match-prefix=backend
# GHORG_MATCH_PREFIX:
# Exclude cloning repos with matching prefix, can be a comma separated list
# flag (--exclude-match-prefix) eg: --exclude-match-prefix=backend
# GHORG_EXCLUDE_MATCH_PREFIX:
# Only clone repos that match name to regex provided
# flag (--match-regex) eg: --match-regex=^foo
# GHORG_MATCH_REGEX:
# Exclude cloning repos that match name to regex provided
# flag (--exclude-match-regex) eg: --exclude-match-regex=^foo
# GHORG_EXCLUDE_MATCH_REGEX:
# Only clones new repos and does not perform a git clean on existing repos. Useful if you don't want to lose changes made to repos in the org/user directory.
# flag (--no-clean)
GHORG_NO_CLEAN: false
# Additionally clone the wiki page for repo
# flag (--clone-wiki)
GHORG_CLONE_WIKI: false
# Fetches all remote branches for each repo by running a git fetch --all
# flag (--fetch-all)
GHORG_FETCH_ALL: false
# If you want to set a path other than $HOME/.config/ghorg/ghorgignore for your ghorgignore
# flag (--ghorgignore-path)
# GHORG_IGNORE_PATH:
# Only emit critical output.
# flag (--quiet)
GHORG_QUIET: false
# Perform a dry run of the clone; fetches repos but does not clone them.
# flag (--dry-run)
GHORG_DRY_RUN: false
# Branch ghorg resets and leaves checked out
# default: default branch
# NOTE: if no default branch is found on the repo, will fallback to using master
# flag (--branch, -b) eg: --branch=develop
# GHORG_BRANCH:
# Allows you to control the exit code when ghorg runs into a problem (info level message) cloning a repo from the remote.
# Info messages will appear after a clone is complete, similar to success messages
# flag (--exit-code-on-clone-infos)
GHORG_EXIT_CODE_ON_CLONE_INFOS: 0
# Allows you to control the exit code when ghorg runs into a problem (issue level message) cloning a repo from the remote.
# Issue messages will appear after a clone is complete, similar to success messages.
# flag (--exit-code-on-clone-issues)
GHORG_EXIT_CODE_ON_CLONE_ISSUES: 1
# Specifies the location of your ghorg conf.yaml, allowing you to have many configuration files, or none at all
# default: ghorg looks in $HOME/.config/ghorg/conf.yaml, if not set in that location nor as a commandline flag, ghorg will use all default values
# NOTE: this cannot be set in the configuration file. Its supported through CLI flag and ENV var only.
# flag (--config)
# GHORG_CONFIG:
# +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# |G|I|T|H|U|B| |S|P|E|C|I|F|I|C|
# +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# Add your GitHub token
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_GITHUB_TOKEN: "{{ env "GITHUB_READ_TOKEN" }}"
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# |G|I|T|L|A|B| |S|P|E|C|I|F|I|C|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# Add your GitLab token
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_GITLAB_TOKEN: "{{ env "GITLAB_READ_TOKEN" }}"
# clones repos in a directory structure that matches gitlab namespaces eg company/unit/subunit/app would clone into ghorg/org/unit/subunit/app
# flag (--preserve-dir)
GHORG_PRESERVE_DIRECTORY_STRUCTURE: true
# Skip TLS certificate verification for hosted gitlab instances
# flag (--insecure-gitlab-client)
GHORG_INSECURE_GITLAB_CLIENT:
# Exclude gitlab groups by regex
# flag (--gitlab-group-exclude-match-regex)
GHORG_GITLAB_GROUP_EXCLUDE_MATCH_REGEX:
# +-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# |G|I|T|E|A| |S|P|E|C|I|F|I|C|
# +-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# Add your Gitea token
# Settings -> Applications -> Generate Token
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_GITEA_TOKEN:
# +-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# |B|I|T|B|U|C|K|E|T| |S|P|E|C|I|F|I|C|
# +-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# When using this OAuth/PAT token, do not set the bitbucket username flag. Do not set both this value and the GHORG_BITBUCKET_APP_PASSWORD
# https://confluence.atlassian.com/bitbucketserver/personal-access-tokens-939515499.html
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_BITBUCKET_OAUTH_TOKEN:
# Add your Bitbucket app password. Do not set both this value and the GHORG_BITBUCKET_OAUTH_TOKEN
# https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_BITBUCKET_APP_PASSWORD:
# Used with GHORG_BITBUCKET_APP_PASSWORD. Should not be set when using GHORG_BITBUCKET_OAUTH_TOKEN
# flag (--bitbucket-username) eg: --bitbucket-username=user123
GHORG_BITBUCKET_USERNAME:
# +-+-+-+-+-+ +-+-+-+-+-+-+-+
# |G|H|O|R|G| |R|E|C|L|O|N|E|
# +-+-+-+-+-+ +-+-+-+-+-+-+-+
# Configuration for ghorg reclone command
# See https://github.com/gabrie30/ghorg#reclone-command for more information on how to setup and use
# If set allows you to specify the location of your reclone.yaml
# Defaults to $HOME/.config/ghorg/reclone.yaml
# flag (--reclone-path)
GHORG_RECLONE_PATH:
# Get more verbose logging with reclone command
# flag (--verbose)
GHORG_RECLONE_VERBOSE: false
# Quiet logging output with reclone command
# flag (--quiet)
GHORG_RECLONE_QUIET: false

View file

@ -1,9 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlQi9vZncrUXduQWlCdzB0
SkFmSUpEZW95R21Jc3p2WElYK1gxcW96YzNnCkZjSmZHNS94a0pRclNmdUdyMFVP
RXdXa3oyVUFTLy9PNEIrUk9pcURnWHcKLS0tIFlLVTdnTVFVN3g0TGtQT01RRnpK
c1RNWEg3ckt1blhxQ2UvVVZkRGFLUDQKlaFMP2aDfW4P+nYRKxV6tuAOMQGyloFI
T0AsckE6HFX6gNINUOwUNZJfyHegjgbiv00+mCwEf8Y618XUZn/vJihZc74cQ/y0
ZmkPr8FBvwwD/pDFaAfWFN3OuiUB5KwhM5l0bgDbHOPqZmG2/cT4P6Nu0nuNKU1N
uh0owEonxlXGMwR7jw==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,5 +0,0 @@
#!/usr/bin/env bash
echo "{{ env "GITHUB_GIST_TOKEN" }}" > ~/.gist
gist $*
rm -f ~/.gist

View file

@ -1,8 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0NzFNUVRodFpFbzI1VmxU
bzk3ajVpaUdwUXJVRW9qOElyOTZCalVrbTJvCmg5UVpHT2ZnRlMxUzUrMk9yR0VE
aTdINlVOM04weVJ0ME1BWkdxQ05kQlkKLS0tIGpPVllEUWlMNmRJT1ZoVUpQb1Rl
N3VBeXdXMEZ6SlRCNGpIbzlVMlVWaVkKjKWy+2FM4edw+AoD776u6aWLG/BZabZo
PS7SRsQT+XAr4WoVX4lESosxzl1lFBrtSGLkxL5yWTwNmbEZVAkPNsfWtdMHj/Rv
gnTwIggp5RJwWcDnTNcSJ/sCnB8uHVjGvbH48KCmKd1GMg==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,2 +0,0 @@
version: "2"
authtoken: '{{ env "NGROK_AUTH_TOKEN" }}'

View file

@ -1,47 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBURUtSeHhGWXRHY3hiWjR6
cEsybHUzSnF1M1pleEpnd0c1MVdsSFo5YTF3Cll2RExOck9TMmE0SmJqYWFLZEJG
MUhsc21YWUprRTNzb1VHRWtJVy9TZ2MKLS0tIGkrRVFmb0pheFBqMktPbjNHaFdS
SHdQcUF1VkZuYVhyWXVzQ3ZnUDZYdmMKVsiujjIfmYDSdSmPpgueFxMq9vY38d/W
1w8HC/rpDVBgh0un9IPkC0jVLbaMbjEHr+RoVhNi0LzMl+BPbwpMN/1FgN3KK05B
dbIBaP/xA9MMS0rfKvHXtrUsBAJ4hgNGdOlhiaCCRVtEAI0rMc0bYfIuZoxiJyS4
EM6ohaZTygNTSH68mq5vsZwcip9zTRh602pLsnwrigjE93FKQ8B6TxpLyZnU4KsW
J7tKHfDD2A212RuB0zooMakzQCy+QhTdDewmyVLN2/UkDxu7IeiDJ+eUSZu/zY76
7J9uWSl5Mlrz1tnSR5iPbgEnU0kPql2q1DMlpGLWWK3PYHDizOHMWDn6yUgNP5O1
4lII0LXVxwiUSjUzMIogntUjOu0xmtpG5rouV6GUpzdEa3UPn6Z/vNxTJDGDpNgG
tz8PT7Bd5P5O/gXI196fO7EiaFkUGyrUkHbmatte4d45Fo4n78uzZEiRcb/Amccu
zV/jEIgOv0vyuS6l/f13QCc7Ku5KBwWQgbn9z0Xrf2qpUmKBKHgD9QtMJ113bQ0Z
6Z8UUtzZv0A4ozcdHVWGh0xqvM3+6h5eMAvB9iVFhaZsvhz5vSnlFnZAjERkcGqf
V45rCI1x4AAJuOMXIgcv3N6Klndyj7CMMm/cltl8r6jtfhUILOJA3ldMf437eQxl
ZqjNtuKDdLmXNIPyh77+J42yQM2wUmYiywCDrFEWzLT9XQL5DiU7HZ4k9mNUAKd8
Zq8TQGp9Lf6/1WsuZmn+Ki6gLwRAh8zsv8Nrnz8Wt6SFfqavRK7am40bX3MdlKD9
9nypCrorz5z6qI1KPH/ckgpyfRBJF4PtH0AjcKnw7+ML0xYa5jGvEsD61DBjbluM
KCPBFzYUOOdvHGz1cY0dI5GCRwq1rCK/Mz3LrKmnHUDVI2NfKSdHazshcBPs/Ocf
4rft1ONWGMTyzRsdlFKvabX68lzBwO8/0slcKZO1TDRGcjzMg4TlgKh+qKeDwUKs
TnbQG1I7CvFoYFYgi0wybhw1f6PEYB6PEPbvWxMevrAzSZ/y5TfrUk7VDPKNVK41
VE3TuSaoQlWL+617HXeKmg5rGz2GfSnp3v+YLi/s5ldG3w/06Ta0hDVcf5L3kGR6
n3UkRZPskxwnl86IOWbC7vTgnlAqDgMrWqjl63fBiJv4kjzT54JYgrOyoXyU77AZ
n3PyKU07vtASQPk6hF7cGYNihfGY2asPa5v54pO6dMd86i6eHRQal5SJyiTdeCRa
unVemKb4qDKE4S98PLTKq4E7DpKRZjTZfc2YrCojckWhcD/dkNyOR5BqCDV4sjz0
4gzxDvUXL60X11OfqXt7DRh+uKE7FVHXwzq1bWE2uJ3kOlFuzJpPe5lpbKtmyOOF
97vGRGlrR76wJn7dOTvoyQnuat1XCo65aS/iFINnbh1LpXDv4T4qaLOggB//anuy
Asb4y3AF2SEU1k6lDFef/RLLHdRjGhxmCNFd44w97xxfr1etTbvQ5ypnJBfzKv1c
Q5OqIYMgx70d8R/iCc4cZ6QSphEwBVqNo8WaStVx28v3oDAN7RBQ328Euqrzphwe
hFbnUG9quMr0kgEgzAnvfCz8bqZ7LQT4YbcvBdPMagVdTqr4c0UoU6c4YMe/XAp9
CkZxqKBoXtiUQsZLH7x4OaYShnr+lbIdql/gf73J3f/8/mE3qEMngu9R/NqkG2sM
Qkxz57RtR2losnbZTTnI9wLZDmdVvjqxh+W2E8ygPEd6vLImk4YHz7j9stSCeBam
f37bSbyWT+mjfSGk40Y3yWTkAWjGvmKzSwNrsPmuZ8s7A5svRw8ueQNAEZjdGLD0
jeMPTvoqBtlcoNVfXABDcVPa9kCR8CAC+tVaYtYW7nwC2HwZ9DRTs1Kj6rm6dO3Y
BCjT2HZ1hMUwhv+MU2b4lEM8hunvij8FsS+mhGU45stRX6o7l+c/dOnO03Ypy7Oz
JbEXqOED+CXELdwRbzFXhkavYp99cUrOOKHY4ZmBUxrEP4rsNavoMNBsmr1Lp3gP
tFHfcY7kC8Dk+CKwcb1P9OPCCoe2Igyha9rbh30DiHk0yBECHUW+zcF6iZS8Y19z
2unX7wOTf3lTlQhsosLhjy8Nm1ZXJLd0H8Ns/vHGbSSKC85W+/0N3yKN8gqY3gaM
TKjBgnKyEapT9lXakcMi0PmL8/mJe7JZVJH5CRh78ptZ6Qe0yomwZ2F2hYwtTFwh
aoXQn7FZSwUqPfywtr9iO1vKLGU00OfiMXmDr2vDWWmcIWm1YPLLroGcL/tluEzo
jPgirTN6sd4nnFAO/DAaASjydEqVnXV2V+Z9i/a4fEnY2TqZQHEM5N9JtLRDAhWh
I1UnhUFhm43pCil3l6o0IF9bC3pAL6TrSxqgYRt6mS0Le0xCGFsKjSc7flVE33jI
gpmb/zt/pamjOVnmwQjf4IQLS0VqhIxmK0OkGzU6ZjhAXtyVtlrlyBTtvWuYvqH3
8alpP+8kfBw3foZr4t/25OZDgExcSNH5/16tfffnBUIYUZXce0avySZQZ+QOEj97
bBlFPeVzotiMCjDMb3jFoEPzN/26OpBIUzk/R52wOa2FkLG/jAQjJPR/o6+YW8dz
ndOWxTkW3LeRalRhafl6Ae8DX2IGfgKc5xBJSyl9c8Je
-----END AGE ENCRYPTED FILE-----

View file

@ -1,70 +0,0 @@
{
"slack_token": "{{ env "SLACK_API_TOKEN" }}",
"sidebar_width": 3,
"notify": "mention",
"emoji": true,
"key_map": {
"command": {
"i": "mode-insert",
"/": "mode-search",
"k": "channel-up",
"j": "channel-down",
"g": "channel-top",
"G": "channel-bottom",
"K": "thread-up",
"J": "thread-down",
"<previous>": "chat-up",
"C-b": "chat-up",
"C-u": "chat-up",
"<next>": "chat-down",
"C-f": "chat-down",
"C-d": "chat-down",
"n": "channel-search-next",
"N": "channel-search-previous",
"'": "channel-jump",
"q": "quit",
"<f1>": "help"
},
"insert": {
"<left>": "cursor-left",
"<right>": "cursor-right",
"<enter>": "send",
"<escape>": "mode-command",
"<backspace>": "backspace",
"C-8": "backspace",
"<delete>": "delete",
"<space>": "space"
},
"search": {
"<left>": "cursor-left",
"<right>": "cursor-right",
"<escape>": "clear-input",
"<enter>": "clear-input",
"<backspace>": "backspace",
"C-8": "backspace",
"<delete>": "delete",
"<space>": "space"
}
},
"theme": {
"view": {
"fg": "white",
"bg": "default",
"border_fg": "white",
"border_bg": "",
"label_fg": "white",
"label_bg": ""
},
"channel": {
"prefix": "",
"icon": "",
"text": ""
},
"message": {
"time_format": "15:04",
"name": "",
"time": "",
"text": ""
}
}
}

View file

@ -1,22 +0,0 @@
Host *
IgnoreUnknown AddKeysToAgent,UseKeychain
AddKeysToAgent yes
UseKeychain yes
Compression no
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster auto
ControlPersist 5
ExitOnForwardFailure yes
ForwardAgent yes
ForwardX11 no
ForwardX11Trusted no
GSSAPIAuthentication no
PreferredAuthentications publickey
Protocol 2
ServerAliveInterval 60
ServerAliveCountMax 30
IdentitiesOnly yes
Host gitlab.com
UpdateHostKeys no
Host github.com
UpdateHostKeys no

View file

@ -1,18 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyejV2UVNzaysreEZvSGVV
STVtdTN2bUsvYitzd042Z1V2UVRIZ0FKVTJ3CmRDcjl0VGQyR0pTaWxoOGNzUGpm
QzFqMWNjdEo1K3d0VWovWWxoVzRBRzQKLS0tIDQxRGdBWUZFNGt5dmZqZFlDa25Z
UjBDQkdVajBwRGs4UlF0dDZwKzZEbGMKMhMg1iE9exULYnVwEg+vWgVS2O4UYr86
kXwdqMcHrhM0O928X7xHvtqV1iSfMOGTLtPI41AU/ZO/YzATpn+x28TYHvYYYG4p
sz/sKKvY3RCbT87HbxNn7/OrbQ4qFWAYfRfE2coa8kfzAQdpYRN4dWTI/dLBRtrB
IeEeqZ0gB1U2Vv0KULQS2tdbV7f+lQwmUCkuVgBaL+pV+KtFdfaJk3rqYfSkc/p7
DenimmbECrMMP0V40SA6KxbBng/n0MDLMgBOPDbPnOTasSxx6AfhjUFMmOKgPF4I
9zVmmUwPJd5g5TFsoGjKmW97w7jbO5ju4JgLY3OoyLGcjSmztUYIFqY0QiARJ+rd
gtkLEWxQkzni+HnqJUsv41mfOyDj94v5yK0o/amquAj/TTpT+YXpwydfBg2V+d3G
sMRrrlTjJavBd0MzNuHZqKf1Fmkh7ByARn4iI7ndSHeXEdudBl/iwRlE+1jna5Cl
UDCgUEkTpHcDBUdVobhYu5kxtZhMN0PIh4qNFVetSIo40EG3xAgXWePEPwEcizkF
/rRghpQQOsKayBipjJHUQc15QxUU0DH8WY7aiexreSPWksSNHYaDWs4K9dCUnF6j
54eCjURQa3lXuozQKjSrkCSLfT2UXzdcpxdakv+TuVm6MkpOEadJ6k11G4Dx/M3g
5ktowr14y1z5MaardRbzPLLKxifLjdOQ44r+Jk3RNXDVVxw7D/dfEbKCRsh5JDTC
GG6JNhDW2saKsK+AehGA/Tafhi522taIyrdDV7fS77nnqloWFg==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,100 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFaHB6eGNBbXRIa3NMWnRw
RFR1TXpwYU5jZFlPMGxVb1l4dWVZWGJTMVNNCkhXelYvTTN1VlVCUUI0Y0JzMFRq
V3RmRm1LQkJ4eTJZSSt0bFpZSzh5Y2sKLS0tIHlsSlk4SWZnQy90SHhIa3hJREp4
QTF3cHpWMXp1ZThxOUJFZHFVK3ZyMk0Kzua8rWDOM0wJKoBpbKr2a+3p79+0x9jV
509utGwdKhCR+V44PJOz28/zLgQvGwSi0rLJFZ05JR785XTqBD3J9LeksYX1eUHr
ET+lW79K3bUQxTz4tqPwpVkyYk72pJ32DVWOPHa/WXBUVNaMBu9mxOOsDcjCqiL9
LVTH/AXP0fLopCobvss9SMPNJobG9uR9/htObHxOkDaMxRjNlnqdv19iATxybvyM
1azxKC+Xx18Bp3Tn8AYPbhOwCz1M0aphVWtdMR+bHn+8fhMEakbBijfKWcjikop9
anZywz4ChTjKv3N9yh9hsM5mqCz7BQeupcPzsqhqLe06XxCNE5C/atoRKS5YCkF/
IO9OW9mfLC9YfyaI8x80pINB9EaGj6NshjN/k73tNZqwmyWhRPPAFHw1kbwe/Cg9
kY1efUyRTrTXzLS4LO031BecmMzm5JyoXf4FONDFfdR3ayNOlYFQF7qCp04DCkNM
0lMJkV8tP5qX2avT5o3qPWIEXNfe4dc1RtuL6QesKETTxqESEUKtgiKbgyuYj6Kz
GovoIgX/7Rgg8+Z/sr2P5oj+qZGYTUZe6DJ9WOAnoYYfgpPgieMdl/ODJz/vgjIU
VvA7qNWHV3vLOj16Qy/cD+tmlwZzsOxtovGfDuaiUS2eRCvia+0PP1sQC2ReoAAi
4zq1zHkTlwAeaII9mY08dwaaQHudnVB/GpgJsyytKGpGTF+YzJfJAgudsuGmy/ep
pTrzaaMkTeCmjyZwwBDm8t/x/hNkGEmqBXMbSCgMomTJaIfkXAVOmVue9Gi5IvTQ
NSvLopP3FB85g9+gPOW/FQtV/x75GGM6Hh3Jbu47ijZvd/eseMk3TskwedD/ZI6l
tfN6tZ6wYirU4Si+frY9g2nBE0A2e+UTJpC5YVVK5h2XMOjbaKDBeVZ6IyqPyufB
8s4UUtB+s+OW9BB/S+oj/B2cDr9b+8Frgm2ea5L9fztuflUQxjh76XaJq7QViH2s
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
3owgAJc76Q==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,218 +0,0 @@
version: 3
profiles: []
hotkeys:
toggle-window:
- Ctrl-Space
copy-current-path: []
ctrl-c:
- Ctrl-C
copy:
- ⌘-C
paste:
- ⌘-V
clear:
- ⌘-K
select-all:
- ⌘-A
zoom-in:
- ⌘-=
- ⌘-Shift-=
zoom-out:
- ⌘--
- ⌘-Shift--
reset-zoom:
- ⌘-0
home:
- ⌘-Left
- Home
end:
- ⌘-Right
- End
previous-word:
- ⌥-Left
next-word:
- ⌥-Right
delete-previous-word:
- ⌥-Backspace
delete-line:
- ⌘-Backspace
delete-next-word:
- ⌥-Delete
search:
- ⌘-F
pane-focus-all:
- ⌘-Shift-I
scroll-to-top:
- Shift-PageUp
scroll-up:
- ⌥-PageUp
scroll-down:
- ⌥-PageDown
scroll-to-bottom:
- Shift-PageDown
restart-telnet-session: []
restart-ssh-session: []
launch-winscp: []
settings-tab: {}
settings:
- ⌘-,
serial:
- Alt-K
restart-serial-session: []
new-window:
- ⌘-N
new-tab:
- ⌘-T
profile: {}
profile-selectors: {}
toggle-fullscreen:
- Ctrl+⌘+F
close-tab:
- ⌘-W
reopen-tab:
- ⌘-Shift-T
toggle-last-tab: []
rename-tab:
- ⌘-R
next-tab:
- Ctrl-Tab
previous-tab:
- Ctrl-Shift-Tab
move-tab-left:
- ⌘-Shift-Left
move-tab-right:
- ⌘-Shift-Right
rearrange-panes:
- ⌘-Shift
tab-1:
- ⌘-1
tab-2:
- ⌘-2
tab-3:
- ⌘-3
tab-4:
- ⌘-4
tab-5:
- ⌘-5
tab-6:
- ⌘-6
tab-7:
- ⌘-7
tab-8:
- ⌘-8
tab-9:
- ⌘-9
tab-10:
- ⌘-0
duplicate-tab: []
restart-tab: []
explode-tab:
- ⌘-Shift-.
combine-tabs:
- ⌘-Shift-,
tab-11: []
tab-12: []
tab-13: []
tab-14: []
tab-15: []
tab-16: []
tab-17: []
tab-18: []
tab-19: []
tab-20: []
split-right:
- ⌘-Shift-D
split-bottom:
- ⌘-D
split-left: []
split-top: []
pane-nav-right:
- ⌘-⌥-Right
pane-nav-down:
- ⌘-⌥-Down
pane-nav-up:
- ⌘-⌥-Up
pane-nav-left:
- ⌘-⌥-Left
pane-nav-previous:
- ⌘-⌥-[
pane-nav-next:
- ⌘-⌥-]
pane-nav-1: []
pane-nav-2: []
pane-nav-3: []
pane-nav-4: []
pane-nav-5: []
pane-nav-6: []
pane-nav-7: []
pane-nav-8: []
pane-nav-9: []
pane-maximize:
- ⌘-⌥-Enter
close-pane:
- ⌘-Shift-W
pane-increase-vertical: []
pane-decrease-vertical: []
pane-increase-horizontal: []
pane-decrease-horizontal: []
profile-selector:
- ⌘-E
switch-profile:
- ⌘-Shift-E
search-in-browser: []
qc:
- Alt-Q
terminal:
searchOptions: {}
colorScheme:
name: Betelgeuse
foreground: '#C3C7D1'
background: '#161925'
selection: null
cursor: '#C3C7D1'
cursorAccent: null
colors:
- '#282C34'
- '#ED254E'
- '#71F79F'
- '#F9DC5C'
- '#7CB7FF'
- '#C74D89'
- '#00C1E4'
- '#DCDFE4'
- '#4C5058'
- '#FF4972'
- '#95FFC3'
- '#FFFF80'
- '#A0DBFF'
- '#EB71AD'
- '#24E5FF'
- '#FFFFFF'
font: Hack Nerd Font
ligatures: true
fallbackFont: MesloLGSDZ Nerd Font
ssh: {}
clickableLinks:
modifier: metaKey
accessibility: {}
appearance: {}
hacks: {}
pluginBlacklist: []
profileDefaults: {}
searchInBrowserPlugin: {}
saveOutput: {}
qc:
cmds:
- name: Hey
text: Dude whats goodie
appendCR: true
group: null
- name: Provision Qubes
text: Okay
appendCR: true
group: null
docker: {}
enableAnalytics: false
enableWelcomeTab: false
recoverTabs: false
workspaceManager: {}

View file

@ -1,3 +1,3 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-id")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-secret")) (ne .user.cloudflare.r2 "") -}} {{- if and (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID"))) (env "CLOUDFLARE_R2_ID")) (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET"))) (env "CLOUDFLARE_R2_SECRET)) (ne .user.cloudflare.r2 "") -}}
/mnt/s3-private /mnt/s3-private
{{- end -}} {{- end -}}

View file

@ -1,3 +1,3 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-id")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-secret")) (ne .user.cloudflare.r2 "") -}} {{- if and (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID"))) (env "CLOUDFLARE_R2_ID")) (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET"))) (env "CLOUDFLARE_R2_SECRET)) (ne .user.cloudflare.r2 "") -}}
/mnt/s3-public /mnt/s3-public
{{- end -}} {{- end -}}

View file

@ -1,3 +1,3 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-id")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-secret")) (ne .user.cloudflare.r2 "") -}} {{- if and (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID"))) (env "CLOUDFLARE_R2_ID")) (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET"))) (env "CLOUDFLARE_R2_SECRET)) (ne .user.cloudflare.r2 "") -}}
{{ .host.home }}/.local/mnt/s3 {{ .host.home }}/.local/mnt/s3
{{- end -}} {{- end -}}

View file

@ -1,121 +0,0 @@
{
"private": false,
"name": "install-doctor-vscode-libs",
"version": "0.0.1",
"description": "Configuration for supporting Node.js packages depended on by the VSCode configuration",
"license": "MIT",
"author": "Brian Zalewski <brian@megabyte.space> (https://megabyte.space)",
"homepage": "https://megabyte.space",
"config": {
"commitizen": {
"path": "node_modules/git-cz-emoji"
}
},
"peerDependenciesMeta": {
"eslint": {
"optional": true
}
},
"devDependencies": {
"@commitlint/config-conventional": "latest",
"eslint-config-strict-mode": "latest",
"git-cz-emoji": "latest",
"handlebars-helpers": "latest",
"jest-preset-ts": "latest",
"prettier": "^2.4.1",
"prettier-config-sexy-mode": "latest",
"semantic-release-config": "latest",
"typescript": "^4.5.5"
},
"keywords": [
"vscode",
"plugins",
"extensions",
"prettier",
"eslint"
],
"engines": {
"node": ">=18.4.0"
},
"changelog": {
"displayTypes": [
"feat",
"fix",
"perf",
"refactor",
"revert"
],
"showAuthor": true
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
],
"helpUrl": "https://megabyte.space/docs/contributing/commits"
},
"eslintConfig": {
"extends": "eslint-config-strict-mode"
},
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/megabytelabs"
},
{
"type": "patreon",
"url": "https://www.patreon.com/ProfessorManhattan"
}
],
"jest": {
"preset": "jest-preset-ts",
"reporters": [
"default",
[
"jest-html-reporters",
{
"filename": "index.html",
"logoImgPath": "./.config/assets/logo-jest-report.png",
"openReport": true,
"pageTitle": "Code Coverage Report",
"publicPath": "./coverage"
}
]
]
},
"pnpm": {
"allowedVersions": {
"@typescript-eslint/eslint-plugin": "5",
"eslint": "8",
"typescript": "4"
},
"neverBuiltDependencies": [
"core-js",
"core-js-pure",
"highlight.js"
],
"peerDependencyRules": {
"ignoreMissing": [
"eslint",
"prettier",
"puppeteer"
]
}
},
"prettier": "prettier-config-sexy-mode",
"release": {
"branches": [
"main",
"master",
"next",
{
"name": "beta",
"prerelease": true
}
],
"extends": "semantic-release-config"
},
"volta": {
"node": "18.4.0",
"yarn": "1.22.19"
}
}

View file

@ -49,8 +49,21 @@
"eslint.alwaysShowStatus": true, "eslint.alwaysShowStatus": true,
"eslint.format.enable": true, "eslint.format.enable": true,
"eslint.lintTask.enable": true, "eslint.lintTask.enable": true,
"eslint.lintTask.options": "-c package.json --no-eslintrc --cache --cache-location .cache/eslintcache .",
"eslint.packageManager": "pnpm", "eslint.packageManager": "pnpm",
"eslint.probe": [
"html",
"javascript",
"javascriptreact",
"json",
"jsonc",
"json5",
"markdown",
"toml",
"typescript",
"typescriptreact",
"vue",
"yaml"
],
"eslint.validate": [ "eslint.validate": [
"html", "html",
"javascript", "javascript",
@ -90,6 +103,7 @@
"npm.enableRunFromFolder": true, "npm.enableRunFromFolder": true,
"npm.packageManager": "pnpm", "npm.packageManager": "pnpm",
"prettier.printWidth": 120, "prettier.printWidth": 120,
"prettier.resolveGlobalModules": true,
"prettier.singleQuote": true, "prettier.singleQuote": true,
"python.languageServer": "Pylance", "python.languageServer": "Pylance",
"security.workspace.trust.banner": "never", "security.workspace.trust.banner": "never",

View file

@ -1,3 +1,3 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "google-assistant-client-secret")) -}} {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "files" "google-assistant-client-secret")) -}}
{{ includeTemplate "secrets/google-assistant-client-secret" | decrypt -}} {{ includeTemplate "files/google-assistant-client-secret" | decrypt -}}
{{ end -}} {{ end -}}

View file

@ -1,3 +1,3 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "google-assistant-tokens")) -}} {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "files" "google-assistant-tokens")) -}}
{{ includeTemplate "secrets/google-assistant-tokens" | decrypt -}} {{ includeTemplate "files/google-assistant-tokens" | decrypt -}}
{{ end -}} {{ end -}}

View file

@ -1,5 +1,219 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ghorg")) -}} ---
{{ includeTemplate "secrets/ghorg" | decrypt -}} # +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
{{ else if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ghorg-fallback")) -}} # |G|E|N|E|R|A|L| |C|O|N|F|I|G|U|R|A|T|I|O|N|
{{ includeTemplate "secrets/ghorg-fallback" }} # +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
{{- end -}}
# Which provider to clone from (github, gitlab, gitea or bitbucket)
# default: github
# flag (--scm, -s) eg: --scm=gitlab
GHORG_SCM_TYPE: gitlab
# How you'd like to clone the repos (https or ssh)
# default: https
# flag (--protocol) eg: --protocol=https
GHORG_CLONE_PROTOCOL: https
# This is where your ghorg directory will be created, use absolute pathing, shell expansions will not work.
# The ghorg directory is the home for all ghorg clones
# See https://github.com/gabrie30/ghorg#changing-clone-directories for example
# default: YOUR_HOME_DIR/ghorg
# flag (--path, -p) eg: --path=/tmp/ghorg
GHORG_ABSOLUTE_PATH_TO_CLONE_TO: ~/.local/ghorg
# Folder ghorg will clone all repos into. Cloning will result in: GHORG_ABSOLUTE_PATH_TO_CLONE_TO/GHORG_OUTPUT_DIR/repo
# See https://github.com/gabrie30/ghorg#changing-clone-directories for example
# default: org/user you are cloning, e.g. 'ghorg clone kubernetes' would create a kubernetes directory inside your ghorg directory
# flag (--output-dir) eg: --output-dir=testing
# GHORG_OUTPUT_DIR:
# Type of entity to clone (user or org)
# flag (--clone-type, -c) eg: --clone-type=user
GHORG_CLONE_TYPE: org
# Change SCM api base url, this is for on self hosted scm instances only
# For http gitlab instances see GHORG_INSECURE_GITLAB_CLIENT
# default: github/gitlab/bitbucket public apis
# flag (--base-url) eg: --base-url=https://my.self.hosted.scm.instance.com
GHORG_SCM_BASE_URL:
# Include submodules in all clone and pull operations.
# flag (--include-submodules)
GHORG_INCLUDE_SUBMODULES: true
# Allows you to pass arguments to git's filter flag e.g. git clone --filter=<args> this requires git version 2.19 or greater.
# Useful for filtering out binary objects from repos
# Few caveats, only works on inital clones, however if done on inital clone all subsequent clones will also honor the settings.
# More info at https://stackoverflow.com/questions/49917616/what-is-the-git-clone-filter-options-syntax
# flag (--git-filter) eg: --git-filter=blob:none
# GHORG_GIT_FILTER:
# Deletes all files/directories found in your local clone directory that are not found on the remote (e.g., after remote deletion). With GHORG_SKIP_ARCHIVED set, archived repositories will also be pruned from your local clone.
# Will prompt before deleting any files unless used in combination with --prune-no-confirm
# flag (--prune)
GHORG_PRUNE: true
# Skip interactive y/n prompt when pruning clones (can only be used in combination with --prune).
# flag (--prune-no-confirm)
GHORG_PRUNE_NO_CONFIRM: true
# Color output (enabled, disabled)
# flag (--color) eg: --color=disabled
GHORG_COLOR: enabled
# Skip archived repos, currently github/gitlab/gitea only
# flag (--skip-archived)
GHORG_SKIP_ARCHIVED: true
# Skip repos that are forks, currently github/gitlab/gitea only
# flag (--skip-forks)
GHORG_SKIP_FORKS: false
# Backup mode, clone as mirror, no working copy (ignores branch parameter)
# flag (--backup)
GHORG_BACKUP: true
# Max goroutines created while cloning
# flag (--concurrency)
GHORG_CONCURRENCY: 25
# A comma separated list of topics to filter by, currently github/gitlab/gitea only
# flag (--topics) eg: --topics=frontend
# If any topics exist here, ghorg will only clone repos that match at least one of these topics
# GHORG_TOPICS:
# Only clone repos with matching prefix, can be a comma separated list
# flag (--match-prefix) eg: --match-prefix=backend
# GHORG_MATCH_PREFIX:
# Exclude cloning repos with matching prefix, can be a comma separated list
# flag (--exclude-match-prefix) eg: --exclude-match-prefix=backend
# GHORG_EXCLUDE_MATCH_PREFIX:
# Only clone repos that match name to regex provided
# flag (--match-regex) eg: --match-regex=^foo
# GHORG_MATCH_REGEX:
# Exclude cloning repos that match name to regex provided
# flag (--exclude-match-regex) eg: --exclude-match-regex=^foo
# GHORG_EXCLUDE_MATCH_REGEX:
# Only clones new repos and does not perform a git clean on existing repos. Useful if you don't want to lose changes made to repos in the org/user directory.
# flag (--no-clean)
GHORG_NO_CLEAN: false
# Additionally clone the wiki page for repo
# flag (--clone-wiki)
GHORG_CLONE_WIKI: false
# Fetches all remote branches for each repo by running a git fetch --all
# flag (--fetch-all)
GHORG_FETCH_ALL: false
# If you want to set a path other than $HOME/.config/ghorg/ghorgignore for your ghorgignore
# flag (--ghorgignore-path)
# GHORG_IGNORE_PATH:
# Only emit critical output.
# flag (--quiet)
GHORG_QUIET: false
# Perform a dry run of the clone; fetches repos but does not clone them.
# flag (--dry-run)
GHORG_DRY_RUN: false
# Branch ghorg resets and leaves checked out
# default: default branch
# NOTE: if no default branch is found on the repo, will fallback to using master
# flag (--branch, -b) eg: --branch=develop
# GHORG_BRANCH:
# Allows you to control the exit code when ghorg runs into a problem (info level message) cloning a repo from the remote.
# Info messages will appear after a clone is complete, similar to success messages
# flag (--exit-code-on-clone-infos)
GHORG_EXIT_CODE_ON_CLONE_INFOS: 0
# Allows you to control the exit code when ghorg runs into a problem (issue level message) cloning a repo from the remote.
# Issue messages will appear after a clone is complete, similar to success messages.
# flag (--exit-code-on-clone-issues)
GHORG_EXIT_CODE_ON_CLONE_ISSUES: 1
# Specifies the location of your ghorg conf.yaml, allowing you to have many configuration files, or none at all
# default: ghorg looks in $HOME/.config/ghorg/conf.yaml, if not set in that location nor as a commandline flag, ghorg will use all default values
# NOTE: this cannot be set in the configuration file. Its supported through CLI flag and ENV var only.
# flag (--config)
# GHORG_CONFIG:
# +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# |G|I|T|H|U|B| |S|P|E|C|I|F|I|C|
# +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# Add your GitHub token
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_GITHUB_TOKEN: {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GITHUB_READ_TOKEN")) }}{{ includeTemplate "secrets/GITHUB_READ_TOKEN" | decrypt }}{{ else }}{{ env "GITHUB_READ_TOKEN" }}{{ end }}
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# |G|I|T|L|A|B| |S|P|E|C|I|F|I|C|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# Add your GitLab token
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_GITLAB_TOKEN: {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GITLAB_READ_TOKEN")) }}{{ includeTemplate "secrets/GITLAB_READ_TOKEN" | decrypt }}{{ else }}{{ env "GITLAB_READ_TOKEN" }}{{ end }}
# clones repos in a directory structure that matches gitlab namespaces eg company/unit/subunit/app would clone into ghorg/org/unit/subunit/app
# flag (--preserve-dir)
GHORG_PRESERVE_DIRECTORY_STRUCTURE: true
# Skip TLS certificate verification for hosted gitlab instances
# flag (--insecure-gitlab-client)
GHORG_INSECURE_GITLAB_CLIENT:
# Exclude gitlab groups by regex
# flag (--gitlab-group-exclude-match-regex)
GHORG_GITLAB_GROUP_EXCLUDE_MATCH_REGEX:
# +-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# |G|I|T|E|A| |S|P|E|C|I|F|I|C|
# +-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# Add your Gitea token
# Settings -> Applications -> Generate Token
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_GITEA_TOKEN:
# +-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# |B|I|T|B|U|C|K|E|T| |S|P|E|C|I|F|I|C|
# +-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
# When using this OAuth/PAT token, do not set the bitbucket username flag. Do not set both this value and the GHORG_BITBUCKET_APP_PASSWORD
# https://confluence.atlassian.com/bitbucketserver/personal-access-tokens-939515499.html
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_BITBUCKET_OAUTH_TOKEN:
# Add your Bitbucket app password. Do not set both this value and the GHORG_BITBUCKET_OAUTH_TOKEN
# https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html
# flag (--token, -t) eg: --token=bGVhdmUgYSBjb21tZW50IG9uIGlzc3VlIDY2
GHORG_BITBUCKET_APP_PASSWORD:
# Used with GHORG_BITBUCKET_APP_PASSWORD. Should not be set when using GHORG_BITBUCKET_OAUTH_TOKEN
# flag (--bitbucket-username) eg: --bitbucket-username=user123
GHORG_BITBUCKET_USERNAME:
# +-+-+-+-+-+ +-+-+-+-+-+-+-+
# |G|H|O|R|G| |R|E|C|L|O|N|E|
# +-+-+-+-+-+ +-+-+-+-+-+-+-+
# Configuration for ghorg reclone command
# See https://github.com/gabrie30/ghorg#reclone-command for more information on how to setup and use
# If set allows you to specify the location of your reclone.yaml
# Defaults to $HOME/.config/ghorg/reclone.yaml
# flag (--reclone-path)
GHORG_RECLONE_PATH:
# Get more verbose logging with reclone command
# flag (--verbose)
GHORG_RECLONE_VERBOSE: false
# Quiet logging output with reclone command
# flag (--quiet)
GHORG_RECLONE_QUIET: false

View file

@ -1,3 +1,3 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "gphotos-sync")) -}} {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "files" "gphotos-sync")) -}}
{{ includeTemplate "secrets/gphotos-sync" | decrypt -}} {{ includeTemplate "files/gphotos-sync" | decrypt -}}
{{ end -}} {{ end -}}

View file

@ -1,5 +1,4 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ngrok")) -}} {{- if (or (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NGROK_AUTH_TOKEN")) (env "NGROK_AUTH_TOKEN")) -}}
{{ includeTemplate "secrets/ngrok" | decrypt -}} version: "2"
{{ else if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ngrok-fallback")) -}} authtoken: '{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NGROK_AUTH_TOKEN")) }}{{ includeTemplate "secrets/NGROK_AUTH_TOKEN" | decrypt }}{{ else }}{{ env "NGROK_AUTH_TOKEN" }}{{ end }}'
{{ includeTemplate "secrets/ngrok-fallback" }}
{{- end -}} {{- end -}}

View file

@ -1,4 +1,26 @@
module.exports = { /* eslint-disable no-secrets/no-secrets */
/* eslint-disable node/no-unsupported-features/es-syntax */
import { execSync } from 'node:child_process'
/**
* Acquires latest version of GitSync and runs setup / maintainence tasks
*/
execSync(
`
if command -v curl > /dev/null && command -v task > /dev/null; then
if [ ! -d "\${XDG_DATA_HOME:-$HOME/.local/share}/gitsync/local" ]; then
mkdir -p "\${XDG_DATA_HOME:-$HOME/.local/share}/gitsync/local"
fi
curl -sSL https://gitsync.org/init > "\${XDG_DATA_HOME:-$HOME/.local/share}/gitsync/local/Taskfile-init.yml"
task --taskfile "\${XDG_DATA_HOME:-$HOME/.local/share}/gitsync/local/Taskfile-init.yml"
else
echo 'Skipping NPM init script because curl and / or task are not in the PATH'
fi
`,
{ stdio: 'inherit' }
)
export default {
main: 'index.js', main: 'index.js',
scripts: { scripts: {
start: 'node index.js' start: 'node index.js'

View file

@ -1,9 +1,12 @@
cache={{ .host.home }}/.cache/npm cache=${XDG_CACHE_HOME:-$HOME/.cache}/npm
init-author-name "{{ .user.name }} <{{ .user.email }}> ({{ .user.domain }})" init-author-email={{ .user.email }}
init-author-name="{{ .user.name }} <{{ .user.email }}> ({{ .user.domain }})"
init-author-url="{{ .user.domain }}"
init-license=MIT init-license=MIT
init-module=${XDG_CONFIG_HOME:-$HOME/.config}/npm/config/npm-init.js
init-version=0.0.1 init-version=0.0.1
init-module={{ .host.home }}/.config/npm/config/npm-init.js loglevel=error
prefix={{ .host.home }}/.local/share/npm network-concurrency=32
store-dir={{ .host.home }}/.local/share/pnpm-store prefix=${XDG_DATA_HOME:-$HOME/.local/share}/npm
loglevel=error 8 │
strict-peer-dependencies=false strict-peer-dependencies=false
//registry.npmjs.org/:_authToken={{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NPM_TOKEN")) }}{{ includeTemplate "secrets/NPM_TOKEN" | decrypt }}{{ else if (env "NPM_TOKEN") }}{{ env "NPM_TOKEN" }}{{ else }}${NPM_TOKEN}{{ end }}

View file

@ -1,4 +1,4 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-id")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-secret")) (ne .user.cloudflare.r2 "") -}} {{- if and (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID"))) (env "CLOUDFLARE_R2_ID")) (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET"))) (env "CLOUDFLARE_R2_SECRET)) (ne .user.cloudflare.r2 "") -}}
#!/usr/bin/env bash #!/usr/bin/env bash
CONFIG_FILE="$HOME/.config/rclone/rclone.conf" CONFIG_FILE="$HOME/.config/rclone/rclone.conf"
@ -18,8 +18,8 @@ tee -a "$CONFIG_FILE" > /dev/null <<EOT
[{{ .user.username}}-s3] [{{ .user.username}}-s3]
type = s3 type = s3
provider = Cloudflare provider = Cloudflare
access_key_id = {{ includeTemplate "secrets/key-cloudflare-r2-id" | decrypt -}} access_key_id = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_ID" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_ID" }}{{ end }}
secret_access_key = {{ includeTemplate "secrets/key-cloudflare-r2-secret" | decrypt -}} secret_access_key = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_SECRET" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_SECRET" }}{{ end }}
region = auto region = auto
endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/user endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/user
acl = private acl = private

View file

@ -1,11 +1,11 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-id")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-secret")) (ne .user.cloudflare.r2 "") -}} {{- if and (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID"))) (env "CLOUDFLARE_R2_ID")) (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET"))) (env "CLOUDFLARE_R2_SECRET)) (ne .user.cloudflare.r2 "") -}}
[docker] [docker]
access_key_id = {{ includeTemplate "secrets/key-cloudflare-r2-id" | decrypt -}} access_key_id = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_ID" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_ID" }}{{ end }}
acl = private acl = private
endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/docker endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/docker
env_auth = false env_auth = false
provider = Cloudflare provider = Cloudflare
region = auto region = auto
secret_access_key = {{ includeTemplate "secrets/key-cloudflare-r2-secret" | decrypt -}} secret_access_key = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_SECRET" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_SECRET" }}{{ end }}
type = s3 type = s3
{{ end -}} {{ end -}}

View file

@ -1,10 +1,10 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-id")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-cloudflare-r2-secret")) (ne .user.cloudflare.r2 "") -}} {{- if and (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID"))) (env "CLOUDFLARE_R2_ID")) (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET"))) (env "CLOUDFLARE_R2_SECRET)) (ne .user.cloudflare.r2 "") -}}
[private] [private]
type = s3 type = s3
provider = Cloudflare provider = Cloudflare
env_auth = false env_auth = false
access_key_id = {{ includeTemplate "secrets/key-cloudflare-r2-id" | decrypt -}} access_key_id = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_ID" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_ID" }}{{ end }}
secret_access_key = {{ includeTemplate "secrets/key-cloudflare-r2-secret" | decrypt -}} secret_access_key = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_SECRET" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_SECRET" }}{{ end }}
endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/private endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/private
acl = private acl = private
@ -12,8 +12,8 @@ acl = private
type = s3 type = s3
provider = Cloudflare provider = Cloudflare
env_auth = false env_auth = false
access_key_id = {{ includeTemplate "secrets/key-cloudflare-r2-id" | decrypt -}} access_key_id = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_ID" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_ID" }}{{ end }}
secret_access_key = {{ includeTemplate "secrets/key-cloudflare-r2-secret" | decrypt -}} secret_access_key = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_SECRET" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_SECRET" }}{{ end }}
endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/public endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/public
acl = public-read acl = public-read
@ -21,8 +21,8 @@ acl = public-read
type = s3 type = s3
provider = Cloudflare provider = Cloudflare
env_auth = false env_auth = false
access_key_id = {{ includeTemplate "secrets/key-cloudflare-r2-id" | decrypt -}} access_key_id = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_ID" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_ID" }}{{ end }}
secret_access_key = {{ includeTemplate "secrets/key-cloudflare-r2-secret" | decrypt -}} secret_access_key = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET")) }}{{ includeTemplate "secrets/CLOUDFLARE_R2_SECRET" | decrypt }}{{ else }}{{ env "CLOUDFLARE_R2_SECRET" }}{{ end }}
endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/system endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com/system
acl = private acl = private
{{ end -}} {{ end -}}

View file

@ -2,8 +2,8 @@
#!/usr/bin/env sh #!/usr/bin/env sh
### Ansible ### Ansible
export ANSIBLE_GALAXY_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-ANSIBLE_GALAXY_TOKEN")) }}{{ includeTemplate "secrets/key-ANSIBLE_GALAXY_TOKEN" }}{{ else }}{{ env "ANSIBLE_GALAXY_TOKEN" }}{{ end }}" export ANSIBLE_GALAXY_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ANSIBLE_GALAXY_TOKEN")) }}{{ includeTemplate "secrets/ANSIBLE_GALAXY_TOKEN" | decrypt }}{{ else }}{{ env "ANSIBLE_GALAXY_TOKEN" }}{{ end }}"
export ANSIBLE_VAULT_PASSWORD="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-ANSIBLE_VAULT_PASSWORD")) }}{{ includeTemplate "secrets/key-ANSIBLE_VAULT_PASSWORD" }}{{ else }}{{ env "ANSIBLE_VAULT_PASSWORD" }}{{ end }}" export ANSIBLE_VAULT_PASSWORD="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ANSIBLE_VAULT_PASSWORD")) }}{{ includeTemplate "secrets/ANSIBLE_VAULT_PASSWORD" | decrypt }}{{ else }}{{ env "ANSIBLE_VAULT_PASSWORD" }}{{ end }}"
export AVP="$ANSIBLE_VAULT_PASSWORD" export AVP="$ANSIBLE_VAULT_PASSWORD"
### Google Cloud SDK ### Google Cloud SDK
@ -16,35 +16,39 @@ export LEXICON_CLOUDFLARE_TOKEN=""
export LEXICON_CLOUDFLARE_USERNAME="{{ .user.cloudflare.username }}" export LEXICON_CLOUDFLARE_USERNAME="{{ .user.cloudflare.username }}"
### DockerHub ### DockerHub
export DOCKERHUB_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-DOCKERHUB_TOKEN")) }}{{ includeTemplate "secrets/key-DOCKERHUB_TOKEN" }}{{ else }}{{ env "DOCKERHUB_TOKEN" }}{{ end }}" export DOCKERHUB_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "DOCKERHUB_TOKEN")) }}{{ includeTemplate "secrets/DOCKERHUB_TOKEN" | decrypt }}{{ else }}{{ env "DOCKERHUB_TOKEN" }}{{ end }}"
export DOCKERHUB_REGISTRY_PASSWORD="$DOCKERHUB_TOKEN" export DOCKERHUB_REGISTRY_PASSWORD="$DOCKERHUB_TOKEN"
### GitHub ### GitHub
export GH_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-GITHUB_TOKEN")) }}{{ includeTemplate "secrets/key-GITHUB_TOKEN" }}{{ else }}{{ env "GITHUB_TOKEN" }}{{ end }}" export GH_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GITHUB_TOKEN")) }}{{ includeTemplate "secrets/GITHUB_TOKEN" | decrypt }}{{ else }}{{ env "GITHUB_TOKEN" }}{{ end }}"
export GITHUB_TOKEN="$GH_TOKEN" export GITHUB_TOKEN="$GH_TOKEN"
### GitLab ### GitLab
export GL_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-GITLAB_TOKEN")) }}{{ includeTemplate "secrets/key-GITLAB_TOKEN" }}{{ else }}{{ env "GITLAB_TOKEN" }}{{ end }}" export GL_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GITLAB_TOKEN")) }}{{ includeTemplate "secrets/GITLAB_TOKEN" | decrypt }}{{ else }}{{ env "GITLAB_TOKEN" }}{{ end }}"
export GITLAB_TOKEN="$GL_TOKEN" export GITLAB_TOKEN="$GL_TOKEN"
### Heroku ### Heroku
export HEROKU_API_KEY="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-HEROKU_API_KEY")) }}{{ includeTemplate "secrets/key-HEROKU_API_KEY" }}{{ else }}{{ env "HEROKU_API_KEY" }}{{ end }}" export HEROKU_API_KEY="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "HEROKU_API_KEY")) }}{{ includeTemplate "secrets/HEROKU_API_KEY" | decrypt }}{{ else }}{{ env "HEROKU_API_KEY" }}{{ end }}"
### Megabyte Labs ### Megabyte Labs
export FULLY_AUTOMATED_TASKS=true export FULLY_AUTOMATED_TASKS=true
### NPM ### NPM
export NPM_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-NPM_TOKEN")) }}{{ includeTemplate "secrets/key-NPM_TOKEN" }}{{ else }}{{ env "NPM_TOKEN" }}{{ end }}" export NPM_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NPM_TOKEN")) }}{{ includeTemplate "secrets/NPM_TOKEN" | decrypt }}{{ else }}{{ env "NPM_TOKEN" }}{{ end }}"
### PyPi ### PyPi
export PYPI_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-PYPI_TOKEN")) }}{{ includeTemplate "secrets/key-PYPI_TOKEN" }}{{ else }}{{ env "PYPI_TOKEN" }}{{ end }}" export PYPI_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "PYPI_TOKEN")) }}{{ includeTemplate "secrets/PYPI_TOKEN" | decrypt }}{{ else }}{{ env "PYPI_TOKEN" }}{{ end }}"
### Snapcraft ### Snapcraft
export SNAPCRAFT_EMAIL="{{ .user.snapcraft.username }}" export SNAPCRAFT_EMAIL="{{ .user.snapcraft.username }}"
export SNAPCRAFT_MACAROON="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-SNAPCRAFT_MACAROON")) }}{{ includeTemplate "secrets/key-SNAPCRAFT_MACAROON" }}{{ else }}{{ env "SNAPCRAFT_MACAROON" }}{{ end }}" export SNAPCRAFT_MACAROON="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SNAPCRAFT_MACAROON")) }}{{ includeTemplate "secrets/SNAPCRAFT_MACAROON" | decrypt }}{{ else }}{{ env "SNAPCRAFT_MACAROON" }}{{ end }}"
export SNAPCRAFT_UNBOUND_DISCHARGE="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-SNAPCRAFT_UNBOUND_DISCHARGE")) }}{{ includeTemplate "secrets/key-SNAPCRAFT_UNBOUND_DISCHARGE" }}{{ else }}{{ env "SNAPCRAFT_UNBOUND_DISCHARGE" }}{{ end }}" export SNAPCRAFT_UNBOUND_DISCHARGE="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SNAPCRAFT_UNBOUND_DISCHARGE")) }}{{ includeTemplate "secrets/SNAPCRAFT_UNBOUND_DISCHARGE" | decrypt }}{{ else }}{{ env "SNAPCRAFT_UNBOUND_DISCHARGE" }}{{ end }}"
### Surge.sh
export SURGE_LOGIN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SURGE_LOGIN")) }}{{ includeTemplate "secrets/SURGE_LOGIN" | decrypt }}{{ else }}{{ env "SURGE_LOGIN" }}{{ end }}"
export SURGE_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SURGE_TOKEN")) }}{{ includeTemplate "secrets/SURGE_TOKEN" | decrypt }}{{ else }}{{ env "SURGE_TOKEN" }}{{ end }}"
### Vagrant Cloud ### Vagrant Cloud
export VAGRANT_CLOUD_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "key-VAGRANT_CLOUD_TOKEN")) }}{{ includeTemplate "secrets/key-VAGRANT_CLOUD_TOKEN" }}{{ else }}{{ env "VAGRANT_CLOUD_TOKEN" }}{{ end }}" export VAGRANT_CLOUD_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "VAGRANT_CLOUD_TOKEN")) }}{{ includeTemplate "secrets/VAGRANT_CLOUD_TOKEN" | decrypt }}{{ else }}{{ env "VAGRANT_CLOUD_TOKEN" }}{{ end }}"
{{ end -}} {{ end -}}

View file

@ -1,5 +1,70 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "slack-term")) -}} {
{{ includeTemplate "secrets/slack-term" | decrypt -}} "slack_token": "{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SLACK_API_TOKEN")) }}{{ includeTemplate "secrets/SLACK_API_TOKEN" | decrypt }}{{ else }}{{ env "SLACK_API_TOKEN" }}{{ end }}",
{{ else if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "slack-term-fallback")) -}} "sidebar_width": 3,
{{ includeTemplate "secrets/slack-term-fallback" }} "notify": "mention",
{{- end -}} "emoji": true,
"key_map": {
"command": {
"i": "mode-insert",
"/": "mode-search",
"k": "channel-up",
"j": "channel-down",
"g": "channel-top",
"G": "channel-bottom",
"K": "thread-up",
"J": "thread-down",
"<previous>": "chat-up",
"C-b": "chat-up",
"C-u": "chat-up",
"<next>": "chat-down",
"C-f": "chat-down",
"C-d": "chat-down",
"n": "channel-search-next",
"N": "channel-search-previous",
"'": "channel-jump",
"q": "quit",
"<f1>": "help"
},
"insert": {
"<left>": "cursor-left",
"<right>": "cursor-right",
"<enter>": "send",
"<escape>": "mode-command",
"<backspace>": "backspace",
"C-8": "backspace",
"<delete>": "delete",
"<space>": "space"
},
"search": {
"<left>": "cursor-left",
"<right>": "cursor-right",
"<escape>": "clear-input",
"<enter>": "clear-input",
"<backspace>": "backspace",
"C-8": "backspace",
"<delete>": "delete",
"<space>": "space"
}
},
"theme": {
"view": {
"fg": "white",
"bg": "default",
"border_fg": "white",
"border_bg": "",
"label_fg": "white",
"label_bg": ""
},
"channel": {
"prefix": "",
"icon": "",
"text": ""
},
"message": {
"time_format": "15:04",
"name": "",
"time": "",
"text": ""
}
}
}

View file

@ -1,5 +1,218 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "tabby")) -}} {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "files" "tabby")) -}}
{{ includeTemplate "secrets/tabby" | decrypt -}} {{ includeTemplate "files/tabby" | decrypt -}}
{{ else if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "tabby-fallback")) -}} {{ else -}}
{{ includeTemplate "secrets/tabby-fallback" }} version: 3
profiles: []
hotkeys:
toggle-window:
- Ctrl-Space
copy-current-path: []
ctrl-c:
- Ctrl-C
copy:
- ⌘-C
paste:
- ⌘-V
clear:
- ⌘-K
select-all:
- ⌘-A
zoom-in:
- ⌘-=
- ⌘-Shift-=
zoom-out:
- ⌘--
- ⌘-Shift--
reset-zoom:
- ⌘-0
home:
- ⌘-Left
- Home
end:
- ⌘-Right
- End
previous-word:
- ⌥-Left
next-word:
- ⌥-Right
delete-previous-word:
- ⌥-Backspace
delete-line:
- ⌘-Backspace
delete-next-word:
- ⌥-Delete
search:
- ⌘-F
pane-focus-all:
- ⌘-Shift-I
scroll-to-top:
- Shift-PageUp
scroll-up:
- ⌥-PageUp
scroll-down:
- ⌥-PageDown
scroll-to-bottom:
- Shift-PageDown
restart-telnet-session: []
restart-ssh-session: []
launch-winscp: []
settings-tab: {}
settings:
- ⌘-,
serial:
- Alt-K
restart-serial-session: []
new-window:
- ⌘-N
new-tab:
- ⌘-T
profile: {}
profile-selectors: {}
toggle-fullscreen:
- Ctrl+⌘+F
close-tab:
- ⌘-W
reopen-tab:
- ⌘-Shift-T
toggle-last-tab: []
rename-tab:
- ⌘-R
next-tab:
- Ctrl-Tab
previous-tab:
- Ctrl-Shift-Tab
move-tab-left:
- ⌘-Shift-Left
move-tab-right:
- ⌘-Shift-Right
rearrange-panes:
- ⌘-Shift
tab-1:
- ⌘-1
tab-2:
- ⌘-2
tab-3:
- ⌘-3
tab-4:
- ⌘-4
tab-5:
- ⌘-5
tab-6:
- ⌘-6
tab-7:
- ⌘-7
tab-8:
- ⌘-8
tab-9:
- ⌘-9
tab-10:
- ⌘-0
duplicate-tab: []
restart-tab: []
explode-tab:
- ⌘-Shift-.
combine-tabs:
- ⌘-Shift-,
tab-11: []
tab-12: []
tab-13: []
tab-14: []
tab-15: []
tab-16: []
tab-17: []
tab-18: []
tab-19: []
tab-20: []
split-right:
- ⌘-Shift-D
split-bottom:
- ⌘-D
split-left: []
split-top: []
pane-nav-right:
- ⌘-⌥-Right
pane-nav-down:
- ⌘-⌥-Down
pane-nav-up:
- ⌘-⌥-Up
pane-nav-left:
- ⌘-⌥-Left
pane-nav-previous:
- ⌘-⌥-[
pane-nav-next:
- ⌘-⌥-]
pane-nav-1: []
pane-nav-2: []
pane-nav-3: []
pane-nav-4: []
pane-nav-5: []
pane-nav-6: []
pane-nav-7: []
pane-nav-8: []
pane-nav-9: []
pane-maximize:
- ⌘-⌥-Enter
close-pane:
- ⌘-Shift-W
pane-increase-vertical: []
pane-decrease-vertical: []
pane-increase-horizontal: []
pane-decrease-horizontal: []
profile-selector:
- ⌘-E
switch-profile:
- ⌘-Shift-E
search-in-browser: []
qc:
- Alt-Q
terminal:
searchOptions: {}
colorScheme:
name: Betelgeuse
foreground: '#C3C7D1'
background: '#161925'
selection: null
cursor: '#C3C7D1'
cursorAccent: null
colors:
- '#282C34'
- '#ED254E'
- '#71F79F'
- '#F9DC5C'
- '#7CB7FF'
- '#C74D89'
- '#00C1E4'
- '#DCDFE4'
- '#4C5058'
- '#FF4972'
- '#95FFC3'
- '#FFFF80'
- '#A0DBFF'
- '#EB71AD'
- '#24E5FF'
- '#FFFFFF'
font: Hack Nerd Font
ligatures: true
fallbackFont: MesloLGSDZ Nerd Font
ssh: {}
clickableLinks:
modifier: metaKey
accessibility: {}
appearance: {}
hacks: {}
pluginBlacklist: []
profileDefaults: {}
searchInBrowserPlugin: {}
saveOutput: {}
qc:
cmds:
- name: Example command
text: Example command text
appendCR: true
group: null
docker: {}
enableAnalytics: false
enableWelcomeTab: false
recoverTabs: false
workspaceManager: {}
{{- end -}} {{- end -}}

View file

@ -1,4 +1,3 @@
{{- if (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) -}}
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqdjJPNS9YOVZvMVhMWUkv YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqdjJPNS9YOVZvMVhMWUkv
OWJ6Sk1qeDZLSzM3M1BwUzc2bE84TXppakg4CkR5aXFab1RHdm5XU1MrZWxOMFRl OWJ6Sk1qeDZLSzM3M1BwUzc2bE84TXppakg4CkR5aXFab1RHdm5XU1MrZWxOMFRl
@ -13,4 +12,3 @@ ksZapodbBUhvEecubTy/Gza73zTJB9tD4YKJODugttRa1ExB0yA56DTpcaOfHM0n
+zAJm+wzmyfUPQVVXtdcE/f7ARpxLxQ5wZvWmsILeMrk09xhhNtH6jVnBn4ov9uF +zAJm+wzmyfUPQVVXtdcE/f7ARpxLxQ5wZvWmsILeMrk09xhhNtH6jVnBn4ov9uF
EuGJ EuGJ
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
{{- end -}}

View file

@ -1,4 +1,3 @@
{{- if (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) -}}
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4TVMrdEtiVVhzRk1tNFBZ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4TVMrdEtiVVhzRk1tNFBZ
T3BQakpsalY2ekZLbFJqbmR4Y2U1YnJXNG5VCmw1VndzemI5Y0s0UnQ0aWJYYS9v T3BQakpsalY2ekZLbFJqbmR4Y2U1YnJXNG5VCmw1VndzemI5Y0s0UnQ0aWJYYS9v
@ -17,4 +16,3 @@ qBu6otIw/NVJR9C6eGqD5yNXpFpaG1yFavWkBllVaBuVPCbRK1ztT5qz9jDBy1qg
8+0Lii+8Vx9PBA5F2+kWmQJ2P3t5qoSTS00zyVsDQ4afBpVJbW05EJYHDaVY5onZ 8+0Lii+8Vx9PBA5F2+kWmQJ2P3t5qoSTS00zyVsDQ4afBpVJbW05EJYHDaVY5onZ
HUbgzq+h7zFinyr3Uw== HUbgzq+h7zFinyr3Uw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
{{- end -}}

View file

@ -1,5 +1,5 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "gist")) -}} #!/usr/bin/env bash
{{ includeTemplate "secrets/gist" | decrypt -}}
{{ else if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "gist-fallback")) -}} echo "{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NPM_TOKEN")) }}{{ includeTemplate "secrets/NPM_TOKEN" | decrypt }}{{ else if (env "NPM_TOKEN") }}{{ env "NPM_TOKEN" }}{{ else }}${GITHUB_GIST_TOKEN}{{ end }}" > ~/.gist
{{ includeTemplate "secrets/gist-fallback" }} gist $*
{{- end -}} rm -f ~/.gist

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,128 @@
{
"private": false,
"name": "install-doctor-shared-libs",
"version": "1.0.0",
"description": "Fallback configuration for VSCode, linters, and other utilities that progressively traverse through directories for default settings.",
"license": "MIT",
"author": "Brian Zalewski <brian@megabyte.space> (https://megabyte.space)",
"homepage": "https://megabyte.space",
"config": {
"commitizen": {
"path": "node_modules/git-cz-emoji"
}
},
"peerDependencies": {
"stylelint": ">= 9.x"
},
"peerDependenciesMeta": {
"eslint": {
"optional": true
}
},
"devDependencies": {
"@commitlint/config-conventional": "latest",
"eslint-config-strict-mode": "latest",
"git-cz-emoji": "latest",
"handlebars-helpers": "latest",
"jest-preset-ts": "latest",
"prettier": "^2.4.1",
"prettier-config-sexy-mode": "latest",
"semantic-release-config": "latest",
"stylelint-config-strict-mode": "latest",
"typescript": "^4.5.5"
},
"keywords": [
"eslint",
"extensions",
"plugins",
"prettier",
"vscode"
],
"engines": {
"node": ">=18.4.0"
},
"changelog": {
"displayTypes": [
"feat",
"fix",
"perf",
"refactor",
"revert"
],
"showAuthor": true
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
],
"helpUrl": "https://megabyte.space/docs/contributing"
},
"eslintConfig": {
"extends": "eslint-config-strict-mode"
},
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/megabytelabs"
},
{
"type": "patreon",
"url": "https://www.patreon.com/ProfessorManhattan"
}
],
"jest": {
"preset": "jest-preset-ts",
"reporters": [
"default",
[
"jest-html-reporters",
{
"filename": "index.html",
"logoImgPath": "~/.local/megabyte-labs/assets/icon-jest.png",
"openReport": true,
"pageTitle": "Code Coverage Report",
"publicPath": "./coverage"
}
]
]
},
"pnpm": {
"allowedVersions": {
"@typescript-eslint/eslint-plugin": "5",
"eslint": "8",
"typescript": "4"
},
"neverBuiltDependencies": [
"core-js",
"core-js-pure",
"highlight.js"
],
"peerDependencyRules": {
"ignoreMissing": [
"eslint",
"prettier",
"puppeteer"
]
}
},
"prettier": "prettier-config-sexy-mode",
"release": {
"branches": [
"main",
"master",
"next",
{
"name": "beta",
"prerelease": true
}
],
"extends": "semantic-release-config"
},
"stylelint": {
"extends": "stylelint-config-strict-mode"
},
"volta": {
"node": "18.4.0",
"yarn": "1.22.19"
}
}

View file

@ -0,0 +1,3 @@
{{- if eq (output "echo" "$USER") "vagrant" -}}
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
{{- end -}}

View file

@ -1,5 +1,27 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-config")) -}} {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "ssh" "config")) -}}
{{ includeTemplate "secrets/ssh-config" | decrypt -}} {{ includeTemplate "ssh/config" | decrypt -}}
{{ else if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-config-fallback")) -}} {{ else -}}
{{ includeTemplate "secrets/ssh-config-fallback" }} Host *
IgnoreUnknown AddKeysToAgent,UseKeychain
AddKeysToAgent yes
UseKeychain yes
Compression no
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster auto
ControlPersist 5
ExitOnForwardFailure yes
ForwardAgent yes
ForwardX11 no
ForwardX11Trusted no
GSSAPIAuthentication no
PreferredAuthentications publickey
Protocol 2
ServerAliveInterval 60
ServerAliveCountMax 30
IdentitiesOnly yes
Host gitlab.com
UpdateHostKeys no
Host github.com
UpdateHostKeys no
{{- end -}} {{- end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-id-rsa")) -}}
{{ includeTemplate "secrets/ssh-id-rsa" | decrypt -}}
{{ end -}}

View file

@ -1,5 +1,8 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "ssh" "known_hosts")) }}
{{ else -}}
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw== bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
gitlab.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf gitlab.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf
github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg= github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
{{- end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-audi")) -}}
{{ includeTemplate "secrets/ssh-audi" | decrypt -}}
{{ end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-blue")) -}}
{{ includeTemplate "secrets/ssh-blue" | decrypt -}}
{{ end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-fiat")) -}}
{{ includeTemplate "secrets/ssh-fiat" | decrypt -}}
{{ end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-honda")) -}}
{{ includeTemplate "secrets/ssh-honda" | decrypt -}}
{{ end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-lab.pub")) -}}
{{ includeTemplate "secrets/ssh-lab.pub" | decrypt -}}
{{ end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-lab")) -}}
{{ includeTemplate "secrets/ssh-lab" | decrypt -}}
{{ end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-mini")) -}}
{{ includeTemplate "secrets/ssh-mini" | decrypt -}}
{{ end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-red")) -}}
{{ includeTemplate "secrets/ssh-red" | decrypt -}}
{{ end -}}

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-yellow")) -}}
{{ includeTemplate "secrets/ssh-yellow" | decrypt -}}
{{ end -}}

View file

@ -0,0 +1,15 @@
{{- if (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) -}}
#!/usr/bin/env bash
{{ includeTemplate "universal/profile" }}
{{ includeTemplate "universal/logg" }}
logg info 'Decrypting SSH keys stored in the `home/.chezmoitemplates/ssh` folder of the Install Doctor repo / fork.'
find "{{ .chezmoi.sourceDir }}/home/.chezmoitemplates/ssh" -type f | while read SSH_FILE; do
logg info 'Decrypting the $(basename "$SSH_FILE") encrypted SSH file'
chezmoi decrypt "$SSH_FILE" > "$HOME/.ssh/$(basename "$SSH_FILE")" || EXIT_CODE=$?
if [ -n "$EXIT_CODE" ]; then
logg warn "Unable to decrypt the file stored in $SSH_FILE"
fi
fi
{{ end -}}

View file

@ -10,10 +10,10 @@
{{ includeTemplate "universal/profile" }} {{ includeTemplate "universal/profile" }}
{{ includeTemplate "universal/logg" }} {{ includeTemplate "universal/logg" }}
logg info 'Ensuring RSA public keys are present' logg info 'Ensuring public keys are present'
find "$HOME/.ssh" -type f | while read FILE; do find "$HOME/.ssh" -type f | while read FILE; do
if [ ! -f "${FILE}" ] && cat "$FILE" | grep 'BEGIN RSA PRIVATE KEY'; then if [ ! -f "${FILE}.pub" ]; then
logg info 'Generating missing public key for `'"$FILE"'`' logg info 'Generating missing public key for `'"$FILE"'`'
ssh-keygen -f "$FILE" -y > "${FILE}.pub" ssh-keygen -f "$FILE" -y > "${FILE}.pub"
fi fi

View file

@ -1,3 +0,0 @@
{{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "ssh-authorized_keys.yubikey")) -}}
{{ includeTemplate "secrets/ssh-authorized_keys.yubikey" | decrypt -}}
{{ end -}}