Latest
This commit is contained in:
parent
9644f940ae
commit
1a8fdfb963
21 changed files with 2331 additions and 58 deletions
|
@ -155,13 +155,14 @@ if [ -d /Applications ] && [ -d /System ]; then
|
|||
fi
|
||||
|
||||
### SDKMan
|
||||
if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
|
||||
export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
|
||||
. "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
|
||||
export SDKMAN_DIR="$XDG_DATA_HOME/sdkman"
|
||||
. "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
fi
|
||||
### Deprecated in favor of mise
|
||||
# if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
|
||||
# export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
|
||||
# . "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
# elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
|
||||
# export SDKMAN_DIR="$XDG_DATA_HOME/sdkman"
|
||||
# . "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
# fi
|
||||
|
||||
### VIM
|
||||
export GVIMINIT='let $MYGVIMRC="$XDG_CONFIG_HOME/vim/gvimrc" | source $MYGVIMRC'
|
||||
|
|
|
@ -866,7 +866,6 @@ softwareGroups:
|
|||
- proxyman
|
||||
- pushpin
|
||||
- rust
|
||||
- sdkman-cli
|
||||
- snapcraft
|
||||
- solidity
|
||||
- swimat
|
||||
|
@ -1591,6 +1590,8 @@ softwareGroups:
|
|||
note: Deprecated because browser extensions do a better job of unifying bookmarks. Namely, the extension called Floccus allows cross-browser bookmark syncing. The Raindrop package also requires a paid subscription for advanced features.
|
||||
- pkg: rvm
|
||||
note: Deprecated in favor of using ASDF.
|
||||
- pkg: sdkman-cli
|
||||
note: Deprecated in favor of mise
|
||||
- pkg: standard-notes
|
||||
note: Deprecated in favor of Obsidian / Notion
|
||||
- pkg: stubby
|
||||
|
|
|
@ -8,6 +8,19 @@
|
|||
{{ includeTemplate "universal/profile" }}
|
||||
{{ includeTemplate "universal/logg" }}
|
||||
|
||||
cleanAptGet() {
|
||||
if command -v apt-get > /dev/null; then
|
||||
logg info 'Running sudo apt-get autoclean' && sudo apt-get autoclean
|
||||
logg info 'Running sudo apt-get -y autoremove' && sudo apt-get -y autoremove
|
||||
fi
|
||||
}
|
||||
|
||||
cleanupBrew() {
|
||||
if command -v brew > /dev/null; then
|
||||
logg info 'Running brew cleanup' && brew cleanup
|
||||
fi
|
||||
}
|
||||
|
||||
### Remove meta sudo file
|
||||
if [ -f "$HOME/.sudo_as_admin_successful" ]; then
|
||||
rm -f "$HOME/.sudo_as_admin_successful"
|
||||
|
@ -43,3 +56,9 @@ if [ -d /Applications ] && [ -d /System ]; then
|
|||
logg info 'Emptying trash' && m trash clean
|
||||
fi
|
||||
fi
|
||||
|
||||
cleanAptGet &
|
||||
cleanupBrew &
|
||||
wait
|
||||
|
||||
logg success 'Finished cleanup process'
|
||||
|
|
|
@ -123,6 +123,10 @@ else
|
|||
fi
|
||||
done
|
||||
elif [ '{{ .host.distro.id }}' = 'debian' ]; then
|
||||
if command -v apt-get > /dev/null && [ -f /etc/apt/preferences.d/nosnap.pref ]; then
|
||||
logg info 'Moving /etc/apt/preferences.d/nosnap.pref to /etc/apt/nosnap.pref.bak' && sudo mv -f /etc/apt/preferences.d/nosnap.pref /etc/apt/nosnap.pref.bak
|
||||
fi
|
||||
|
||||
### Print dependency list
|
||||
logg 'Installing common dependencies using apt-get'
|
||||
logg info 'Dependencies: {{ $packages | sortAlpha | uniq | join " " -}}'
|
||||
|
@ -239,6 +243,10 @@ else
|
|||
fi
|
||||
done
|
||||
elif [ '{{ .host.distro.id }}' = 'ubuntu' ]; then
|
||||
if command -v apt-get > /dev/null && [ -f /etc/apt/preferences.d/nosnap.pref ]; then
|
||||
logg info 'Moving /etc/apt/preferences.d/nosnap.pref to /etc/apt/nosnap.pref.bak' && sudo mv -f /etc/apt/preferences.d/nosnap.pref /etc/apt/nosnap.pref.bak
|
||||
fi
|
||||
|
||||
### Print dependency list
|
||||
logg 'Installing common dependencies using apt-get'
|
||||
logg info 'Dependencies: {{ $packages | sortAlpha | uniq | join " " -}}'
|
||||
|
|
|
@ -640,18 +640,42 @@ showNotificationCenter() {
|
|||
fi
|
||||
}
|
||||
|
||||
installAnsible() {
|
||||
if command -v pipx > /dev/null; then
|
||||
if [ ! -f "${XDG_CACHE_HOME:-$HOME/.cache}/install.doctor/ansible-installed" ]; then
|
||||
logg info 'Running pipx install ansible-core' && pipx install ansible-core
|
||||
if [ -d /Applications ] && [ -d /System ]; then
|
||||
logg info 'Injecting ansible-core pipx with ansible-core PyObjC PyObjC-core because system is macOS' && pipx inject ansible-core PyObjC PyObjC-core
|
||||
fi
|
||||
logg info 'Running pipx inject ansible-core docker lxml netaddr pexpect python-vagrant pywinrm requests-credssp watchdog' && pipx inject ansible-core docker lxml netaddr pexpect python-vagrant pywinrm requests-credssp watchdog
|
||||
mkdir -p "${XDG_CACHE_HOME:-$HOME/.cache}/install.doctor"
|
||||
touch "${XDG_CACHE_HOME:-$HOME/.cache}/install.doctor/ansible-installed"
|
||||
else
|
||||
logg info 'Ansible installation routine appears to have already been run'
|
||||
fi
|
||||
else
|
||||
logg warn 'pipx is unavailable to use for installing Ansible'
|
||||
fi
|
||||
}
|
||||
|
||||
installBrewPackages() {
|
||||
ensureNodeInstalled
|
||||
ensureDeltaInstalled
|
||||
ensureBrewPackageInstalled "gh"
|
||||
ensureBrewPackageInstalled "go"
|
||||
ensureBrewPackageInstalled "zx"
|
||||
ensureBrewPackageInstalled "volta"
|
||||
volta install node@latest &
|
||||
volta install yarn@latest &
|
||||
npm install -g npm@latest &
|
||||
ensureBrewPackageInstalled "pipx"
|
||||
pipx ensurepath &
|
||||
ensureBrewPackageInstalled "gh"
|
||||
ensureBrewPackageInstalled "go"
|
||||
ensureBrewPackageInstalled "ruby"
|
||||
ensureBrewPackageInstalled "rustup"
|
||||
ensureBrewPackageInstalled "zx"
|
||||
ensureBrewPackageInstalled "whalebrew"
|
||||
wait
|
||||
logg success 'Finished installing auxilary Homebrew packages'
|
||||
logg info 'Ensuring Ansible is installed (with plugins)' && installAnsible
|
||||
}
|
||||
|
||||
ensureMacportsInstalled() {
|
||||
|
@ -666,8 +690,83 @@ ensureMacportsInstalled() {
|
|||
fi
|
||||
}
|
||||
|
||||
setupSnap() {
|
||||
if [ ! -d /Applications ] && [ ! -d /System ] && command -v snap > /dev/null; then
|
||||
logg info 'Enabling snapd' && sudo systemctl enable snapd
|
||||
logg info 'Starting snapd' && sudo systemctl start snapd
|
||||
if [ -d /snap ]; then
|
||||
logg info 'Linking /var/lib/snapd/snap to /snap' && sudo ln -s /var/lib/snapd/snap /snap
|
||||
fi
|
||||
logg info 'Running sudo snap info core' && sudo snap info core
|
||||
logg info 'Running sudo snap wait system seed.loaded' && sudo snap wait system seed.loaded
|
||||
logg info 'Running sudo snap install core' && sudo snap install core
|
||||
fi
|
||||
}
|
||||
|
||||
installYay() {
|
||||
if [ -f /etc/arch-release ] && ! command -v yay > /dev/null
|
||||
sudo rm -rf /usr/local/src/yay
|
||||
sudo git clone https://aur.archlinux.org/yay.git /usr/local/src/yay
|
||||
cd /usr/local/src/yay
|
||||
sudo makepkg -si
|
||||
fi
|
||||
}
|
||||
|
||||
installNix() {
|
||||
if ! command -v nix-shell > /dev/null; then
|
||||
if [ -d /Applications ] && [ -d /System ]; then
|
||||
### macOS
|
||||
logg info 'Installing nix for macOS' && sh <(curl -L https://nixos.org/nix/install) --yes
|
||||
else
|
||||
### Linux
|
||||
logg info 'Installing nix' && sh <(curl -L https://nixos.org/nix/install) --daemon --yes
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
rustUpInit() {
|
||||
if command -v rustup-init > /dev/null && ! command -v rustc > /dev/null; then
|
||||
logg info 'Running rustup-init -y' && rustup-init -y
|
||||
fi
|
||||
}
|
||||
|
||||
zapInstall() {
|
||||
if ! command -v zap > /dev/null; then
|
||||
### Architecture
|
||||
if [ -z ${ARCH+x} ]; then
|
||||
MACHINE_ARCH="$(uname -m)"
|
||||
if [ "$MACHINE_ARCH" = "amd64" ]; then
|
||||
ARCH="amd64"
|
||||
elif [ "$MACHINE_ARCH" = "x86_64" ]; then
|
||||
ARCH="amd64"
|
||||
elif [ "$MACHINE_ARCH" = "i386" ]; then
|
||||
ARCH="386"
|
||||
elif [ "$MACHINE_ARCH" = "i686" ]; then
|
||||
ARCH="386" # both are 32bit, should be compatible
|
||||
elif [ "$MACHINE_ARCH" = "aarch64" ]; then
|
||||
ARCH="arm64"
|
||||
elif [ "$MACHINE_ARCH" = "arm64" ]; then
|
||||
ARCH="arm64"
|
||||
elif [ "$MACHINE_ARCH" = "arm" ]; then
|
||||
ARCH="arm"
|
||||
fi
|
||||
export ARCH
|
||||
fi
|
||||
logg info 'Downloading zap to /usr/local/bin/zap' && sudo curl -sSL --output /usr/local/bin/zap "https://github.com/srevinsaju/zap/releases/download/continuous/zap-${ARCH}"
|
||||
logg info 'Making /usr/local/bin/zap executable' && sudo chmod +x /usr/local/bin/zap
|
||||
fi
|
||||
}
|
||||
|
||||
addFlathub() {
|
||||
if command -v flatpak > /dev/null; then
|
||||
logg info 'Adding flatpak flathub repository' && sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
fi
|
||||
}
|
||||
|
||||
# TODO - Add install on macOS for macports
|
||||
if [ -n "$DEBUG" ] || [ -n "$DEBUG_MODE" ]; then
|
||||
logg info 'The DEBUG or DEBUG_MODE environment variable is set so preliminary system tweaks will be run synchronously'
|
||||
addFlathub
|
||||
allocateSwap
|
||||
configureGPG
|
||||
disableDStoreFileCreation
|
||||
|
@ -679,12 +778,17 @@ if [ -n "$DEBUG" ] || [ -n "$DEBUG_MODE" ]; then
|
|||
installDocker
|
||||
installJumpCloud
|
||||
installSystemPips
|
||||
installYay
|
||||
removeLinuxBloatware
|
||||
rustUpInit
|
||||
setHostname
|
||||
setNtpServer
|
||||
setTimezone
|
||||
setupSnap
|
||||
showNotificationCenter
|
||||
zapInstall
|
||||
else
|
||||
addFlathub &
|
||||
allocateSwap &
|
||||
configureGPG &
|
||||
disableDStoreFileCreation &
|
||||
|
@ -696,11 +800,15 @@ else
|
|||
installDocker &
|
||||
installJumpCloud &
|
||||
installSystemPips &
|
||||
installYay &
|
||||
removeLinuxBloatware &
|
||||
rustUpInit &
|
||||
setHostname &
|
||||
setNtpServer &
|
||||
setTimezone &
|
||||
setupSnap &
|
||||
showNotificationCenter &
|
||||
zapInstall &
|
||||
wait
|
||||
fi
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
"age/bullseye-backports"
|
||||
"build-essential"
|
||||
"gnome"
|
||||
"gnome-software-plugin-flatpak"
|
||||
"gnupg-agent"
|
||||
"golang-go"
|
||||
"hopenpgp-tools"
|
||||
|
@ -27,6 +28,7 @@
|
|||
"npm"
|
||||
"pcscd"
|
||||
"pkg-config"
|
||||
"plasmashell"
|
||||
"progress"
|
||||
"ruby-dev"
|
||||
"scdaemon"
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
"build-essential"
|
||||
"golang-go"
|
||||
"gnome"
|
||||
"gnome-software-plugin-flatpak"
|
||||
"gnupg-agent"
|
||||
"hopenpgp-tools"
|
||||
"libaio1"
|
||||
|
@ -27,6 +28,7 @@
|
|||
"npm"
|
||||
"pcscd"
|
||||
"pkg-config"
|
||||
"plasmashell"
|
||||
"progress"
|
||||
"ruby-dev"
|
||||
"scdaemon"
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
{{- $packages := list
|
||||
"bash"
|
||||
"bison"
|
||||
"cargo"
|
||||
"coreutils"
|
||||
"cryptsetup"
|
||||
"curl"
|
||||
"expect"
|
||||
"flatpak"
|
||||
"git"
|
||||
"grep"
|
||||
"gnupg2"
|
||||
|
|
|
@ -105,4 +105,4 @@
|
|||
"wslEngineEnabled": false,
|
||||
"wslInstallMode": "installLatestWsl",
|
||||
"wslUpdateRequired": false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -170,13 +170,14 @@ if [ "$BASH_SUPPORT" = 'true' ] && [ -n "$BASH" ]; then
|
|||
! command -v rtx > /dev/null || eval "$(rtx activate bash)"
|
||||
|
||||
### SDKMan
|
||||
if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
|
||||
export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
|
||||
source "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
|
||||
export SDKMAN_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/sdkman"
|
||||
source "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
fi
|
||||
### Using mise instead for Java handling
|
||||
# if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
|
||||
# export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
|
||||
# source "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
# elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
|
||||
# export SDKMAN_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/sdkman"
|
||||
# source "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
# fi
|
||||
|
||||
### Sheldon
|
||||
export SHELDON_CONFIG_FILE="${SHELDON_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/sheldon}/plugins.bash.toml"
|
||||
|
|
|
@ -356,7 +356,8 @@ export NETRC="${XDG_CONFIG_HOME:-$HOME/.config}/netrc"
|
|||
export NAVI_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/navi/config.yaml"
|
||||
|
||||
### Nix
|
||||
export NIX_SSL_CERT_FILE="$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.crt"
|
||||
# TODO: Fix this
|
||||
# export NIX_SSL_CERT_FILE="$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.crt"
|
||||
|
||||
### nnn
|
||||
if command -v nnn > /dev/null; then
|
||||
|
|
|
@ -588,13 +588,6 @@ async function afterInstall(packageManager) {
|
|||
const logStage = 'Post-Install Package Manager'
|
||||
if (packageManager === 'appimage') {
|
||||
} else if (packageManager === 'ansible') {
|
||||
log('info', logStage, `Ensuring temporary passwordless sudo privileges used by Ansible are removed`)
|
||||
const gsed = which.sync('gsed', { nothrow: true })
|
||||
if (gsed) {
|
||||
await $`sudo gsed -i '/# TEMPORARY FOR INSTALL DOCTOR ANSIBLE/d' /etc/sudoers`
|
||||
} else {
|
||||
await $`sudo sed -i '/# TEMPORARY FOR INSTALL DOCTOR ANSIBLE/d' /etc/sudoers`
|
||||
}
|
||||
} else if (packageManager === 'apk') {
|
||||
} else if (packageManager === 'apt') {
|
||||
try {
|
||||
|
|
1882
home/dot_local/bin/executable_install-program-edit
Normal file
1882
home/dot_local/bin/executable_install-program-edit
Normal file
File diff suppressed because it is too large
Load diff
|
@ -146,17 +146,44 @@ async function createCaskLinks() {
|
|||
for (const app of caskApps) {
|
||||
const appField = getPkgData('_app', app, app.installType)
|
||||
const binField = getPkgData('_bin', app, app.installType)
|
||||
if (fs.existsSync(`${os.homedir()}/Applications/${x[appField]}`)) {
|
||||
fs.writeFileSync(`${os.homedir()}/.local/bin/cask/${x[binField]}`, `open "$HOME/Applications/${x[appField]}" $*`)
|
||||
} else if (fs.existsSync(`/Applications/${x[appField]}`)) {
|
||||
fs.writeFileSync(`${os.homedir()}/.local/bin/cask/${x[binField]}`, `open "/Applications/${x[appField]}" $*`)
|
||||
if (fs.existsSync(`${os.homedir()}/Applications/${app[appField]}`)) {
|
||||
fs.writeFileSync(`${os.homedir()}/.local/bin/cask/${app[binField]}`, `#!/usr/bin/env bash\nopen "$HOME/Applications/${app[appField]}" $*`)
|
||||
await $`chmod +x '${os.homedir()}/.local/bin/cask/${app[binField]}'`
|
||||
} else if (fs.existsSync(`/Applications/${app[appField]}`)) {
|
||||
fs.writeFileSync(`${os.homedir()}/.local/bin/cask/${app[binField]}`, `#!/usr/bin/env bash\nopen "/Applications/${app[appField]}" $*`)
|
||||
await $`chmod +x '${os.homedir()}/.local/bin/cask/${app[binField]}'`
|
||||
} else {
|
||||
log(`Unable to create bin link to ${x[appField]}`)
|
||||
log(`Unable to create bin link to ${app[appField]}`)
|
||||
}
|
||||
}
|
||||
caskApps.length && log(`Finished creating Homebrew cask links in ~/.local/bin/cask`)
|
||||
}
|
||||
|
||||
async function createFlatpakLinks() {
|
||||
const flatpakInstallations = await $`flatpak --installations`
|
||||
const flatpakDir = flatpakInstallations.stdout.replace('\n', '')
|
||||
const flatpakApps = pkgMap(pkgs)
|
||||
.filter(x => {
|
||||
if (x.installType === 'flatpak') {
|
||||
const binField = getPkgData('_bin', x, x.installType)
|
||||
const binFile = fs.existsSync(`${os.homedir()}/.local/bin/flatpak/${x[binField]}`)
|
||||
return !binFile
|
||||
}
|
||||
return false
|
||||
})
|
||||
flatpakApps.length && await $`mkdir -p "$HOME/.local/bin/flatpak"`
|
||||
for (const app of flatpakApps) {
|
||||
const binField = getPkgData('_bin', app, app.installType)
|
||||
if (fs.existsSync(`${flatpakDir}/app/${app.installList[0]}`)) {
|
||||
fs.writeFileSync(`${os.homedir()}/.local/bin/flatpak/${app[binField]}`, `#!/usr/bin/env bash\nflatpak run ${app.installList[0]} $*`)
|
||||
await $`chmod +x '${os.homedir()}/.local/bin/flatpak/${app[binField]}'`
|
||||
} else {
|
||||
log(`Unable to create bin link to ${x.flatpak}`)
|
||||
}
|
||||
}
|
||||
flatpakApps.length && log(`Finished creating Flatpak links in ~/.local/bin/flatpak`)
|
||||
}
|
||||
|
||||
async function bundleInstall(brews, casks) {
|
||||
try {
|
||||
const lines = []
|
||||
|
@ -207,8 +234,10 @@ async function installPackages(pkgInstructions) {
|
|||
switch (key) {
|
||||
case 'ansible':
|
||||
promises.push(forEachSeries(combined[key].flatMap(x => x.installList.flatMap(i => $`${key} 127.0.0.1 -v${process.env.DEBUG && 'vv'} -e '{ ansible_connection: "local", ansible_become_user: "root", ansible_user: "${process.env.USER}", ansible_family: "${osId.charAt(0).toUpperCase() + osId.slice(1)}", install_homebrew: False }' -m include_role -a name=${i}`))))
|
||||
break
|
||||
case 'apk':
|
||||
promises.push($`sudo ${key} add ${combined[key].flatMap(x => x.installList).split(' ')}`)
|
||||
break
|
||||
case 'appimage':
|
||||
promises.push(...combined[key].flatMap(x => x.installList.flatMap(i => {
|
||||
if (x.substring(0, 4) === 'http') {
|
||||
|
@ -219,8 +248,10 @@ async function installPackages(pkgInstructions) {
|
|||
return $`zap install --select-first -q ${i}`
|
||||
}
|
||||
})))
|
||||
break
|
||||
case 'apt':
|
||||
promises.push($`DEBIAN_FRONTEND=noninteractive sudo apt-get -o DPkg::Options::=--force-confdef install -y ${combined[key].flatMap(x => x.installList).split(' ')}`)
|
||||
break
|
||||
case 'basher':
|
||||
case 'baulk':
|
||||
case 'cargo':
|
||||
|
@ -237,11 +268,13 @@ async function installPackages(pkgInstructions) {
|
|||
case 'binary':
|
||||
// TODO
|
||||
promises.push(...combined[key].flatMap(x => x.installList.flatMap(i => $`TMP="$(mktemp)" && curl -sSL ${i} > "$TMP" && sudo mv "$TMP" /usr/local/src/${x._bin} && chmod +x /usr/local/src/${x._bin}`)))
|
||||
break
|
||||
case 'brew':
|
||||
case 'cask': // Handled above
|
||||
break
|
||||
case 'choco':
|
||||
promises.push($`${key} install -y ${combined[key].flatMap(x => x.installList).join(' ')}`)
|
||||
break
|
||||
case 'dnf':
|
||||
case 'yum':
|
||||
case 'zypper':
|
||||
|
@ -293,17 +326,30 @@ async function installPackages(pkgInstructions) {
|
|||
const installs = await Promise.allSettled(promises)
|
||||
log(`All of the installations have finished`)
|
||||
console.log('Installs:', installs)
|
||||
await postInstall(combined)
|
||||
}
|
||||
|
||||
async function postInstall(combined) {
|
||||
log(`Running post-install routine`)
|
||||
const promises = []
|
||||
Object.keys(combined).includes('flatpak') && promises.push(createFlatpakLinks())
|
||||
const postInstalls = await Promise.allSettled(promises)
|
||||
console.log('Post installs:', postInstalls)
|
||||
}
|
||||
|
||||
async function acquireManagerList(type, command) {
|
||||
if (fs.existsSync(`${cacheDir}/${type}`)) {
|
||||
setTimeout(() => {
|
||||
if (which.sync(type, { nothrow: true })) {
|
||||
if (fs.existsSync(`${cacheDir}/${type}`)) {
|
||||
setTimeout(() => {
|
||||
require('child_process').execSync(`${command} > ${cacheDir}/${type}`)
|
||||
}, 0)
|
||||
} else {
|
||||
require('child_process').execSync(`${command} > ${cacheDir}/${type}`)
|
||||
}, 0)
|
||||
}
|
||||
return fs.readFileSync(`${cacheDir}/${type}`).toString().split('\n')
|
||||
} else {
|
||||
require('child_process').execSync(`${command} > ${cacheDir}/${type}`)
|
||||
return []
|
||||
}
|
||||
return fs.readFileSync(`${cacheDir}/${type}`).toString().split('\n')
|
||||
}
|
||||
|
||||
function pkgMap(pkgDefs) {
|
||||
|
@ -349,21 +395,34 @@ async function main() {
|
|||
installOrder = initData[1].installerPreference
|
||||
log(`Populating lists of pre-installed packages`)
|
||||
const lists = [
|
||||
acquireManagerList('apt', `dpkg -l`),
|
||||
acquireManagerList('brew', `brew list -1`),
|
||||
acquireManagerList('cargo', `cargo install --list | awk '/^[[:alnum:]]/ {print $1}'`),
|
||||
acquireManagerList('dnf', `rpm -qa`),
|
||||
acquireManagerList('flatpak', `flatpak --columns=app list`),
|
||||
acquireManagerList('gem', `gem list | awk '{print $1}'`),
|
||||
acquireManagerList('npm', `volta list --format plain | awk '{print $2}' | sed 's/@.*//'`),
|
||||
acquireManagerList('pacman', `pacman -Qs`),
|
||||
acquireManagerList('pip3', `pip3 list | awk '{print $1}'`),
|
||||
acquireManagerList('pipx', `pipx list --short | awk '{print $1}'`)
|
||||
acquireManagerList('pipx', `pipx list --short | awk '{print $1}'`),
|
||||
acquireManagerList('snap', `snap list`),
|
||||
acquireManagerList('zap', `zap list`)
|
||||
]
|
||||
const managerLists = {
|
||||
brew: lists[0],
|
||||
cargo: lists[1],
|
||||
cask: lists[0],
|
||||
gem: lists[2],
|
||||
npm: lists[3],
|
||||
pip3: lists[4],
|
||||
pipx: lists[5]
|
||||
appimage: lists[6],
|
||||
apt: lists[0],
|
||||
brew: lists[1],
|
||||
cargo: lists[2],
|
||||
cask: lists[1],
|
||||
dnf: lists[3],
|
||||
flatpak: lists[4],
|
||||
gem: lists[5],
|
||||
npm: lists[6],
|
||||
pacman: lists[7],
|
||||
pip3: lists[8],
|
||||
pipx: lists[9],
|
||||
snap: lists[10],
|
||||
zap: lists[11]
|
||||
}
|
||||
log(`Acquiring installation keys`)
|
||||
const installKeys = Object.keys(pkgs)
|
||||
|
|
101
home/dot_local/bin/executable_update-system
Normal file
101
home/dot_local/bin/executable_update-system
Normal file
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
updateApk() {
|
||||
if command -v apk > /dev/null; then
|
||||
logg info 'Running sudo apk update' && sudo apk update || logg error 'Failed to run sudo apk update'
|
||||
fi
|
||||
}
|
||||
|
||||
updateAptGet() {
|
||||
if command -v apt-get > /dev/null; then
|
||||
logg info 'Running sudo apt-get update' && sudo apt-get update || logg error 'Failed to run sudo apt-get update'
|
||||
logg info 'Running sudo apt-get upgrade -y' && sudo apt-get upgrade -y || logg error 'Failed to run sudo apt-get upgrade -y'
|
||||
fi
|
||||
}
|
||||
|
||||
updateBrew() {
|
||||
logg info 'Running brew update' && brew update || logg error 'Failed to run brew update'
|
||||
logg info 'Running brew upgrade' && brew upgrade || logg error 'Failed to run brew upgrade'
|
||||
if [ -d /Applications ] && [ -d /System ]; then
|
||||
### macOS
|
||||
logg info 'Running brew upgrade --cask' && brew upgrade --cask || logg error 'Failed to run brew upgrade --cask'
|
||||
fi
|
||||
}
|
||||
|
||||
updateCrew() {
|
||||
if command -v crew > /dev/null; then
|
||||
logg info 'Running crew update' && crew update || logg error 'Failed to run crew update'
|
||||
fi
|
||||
}
|
||||
|
||||
updateDnf() {
|
||||
if command -v dnf > /dev/null; then
|
||||
logg info 'Running sudo dnf update -y' && sudo dnf update -y || logg error 'Failed to run sudo dnf update -y'
|
||||
fi
|
||||
}
|
||||
|
||||
updateFlatpak() {
|
||||
if command -v flatpak > /dev/null; then
|
||||
logg info 'Running sudo flatpak update -y' && sudo flatpak update -y || logg error 'Failed to run sudo flatpak update -y'
|
||||
fi
|
||||
}
|
||||
|
||||
updateNix() {
|
||||
if command -v nix-channel > /dev/null; then
|
||||
logg info 'Running nix-channel --update' && nix-channel --update || logg error 'Failed to run nix-channel --update'
|
||||
fi
|
||||
}
|
||||
|
||||
updatePacman() {
|
||||
if command -v pacman > /dev/null; then
|
||||
logg info 'Running sudo pacman -Syu' && sudo pacman -Syu || logg error 'Failed to run sudo pacman -Syu'
|
||||
fi
|
||||
}
|
||||
|
||||
updatePort() {
|
||||
if command -v port > /dev/null; then
|
||||
logg info 'Running sudo port sync' && sudo port sync || logg error 'Failed to run sudo port sync'
|
||||
fi
|
||||
}
|
||||
|
||||
updateSnap() {
|
||||
if command -v snap > /dev/null; then
|
||||
logg info 'Running sudo snap refresh' && sudo snap refresh || logg error 'Failed to run sudo snap refresh'
|
||||
fi
|
||||
}
|
||||
|
||||
updateZypper() {
|
||||
if command -v zypper > /dev/null; then
|
||||
logg info 'Running sudo zypper update' && sudo zypper update || logg error 'Failed to run sudo zypper update'
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -n "$DEBUG" ] || [ -n "$DEBUG_MODE" ]; then
|
||||
logg info 'The DEBUG or DEBUG_MODE environment variable is set so updates will be run synchronously'
|
||||
updateApk
|
||||
updateAptGet
|
||||
updateBrew
|
||||
updateCrew
|
||||
updateDnf
|
||||
updateFlatpak
|
||||
updateNix
|
||||
updatePacman
|
||||
updatePort
|
||||
updateSnap
|
||||
updateZypper
|
||||
else
|
||||
updateApk &
|
||||
updateAptGet &
|
||||
updateBrew &
|
||||
updateCrew &
|
||||
updateDnf &
|
||||
updateFlatpak &
|
||||
updateNix &
|
||||
updatePacman &
|
||||
updatePort &
|
||||
updateSnap &
|
||||
updateZypper &
|
||||
wait
|
||||
fi
|
||||
|
||||
logg success 'Finished running update-system'
|
|
@ -470,13 +470,14 @@ fi
|
|||
! command -v rtx > /dev/null || eval "$(rtx activate zsh)"
|
||||
|
||||
### SDKMan
|
||||
if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
|
||||
export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
|
||||
. "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
|
||||
export SDKMAN_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/sdkman"
|
||||
. "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
fi
|
||||
### Using mise instead for Java handling
|
||||
# if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
|
||||
# export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
|
||||
# . "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
# elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
|
||||
# export SDKMAN_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/sdkman"
|
||||
# . "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
# fi
|
||||
|
||||
### Sheldon
|
||||
export SHELDON_CONFIG_FILE="${SHELDON_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/sheldon}/plugins.zsh.toml"
|
||||
|
|
|
@ -433,8 +433,8 @@ provisionLogic() {
|
|||
logg info "Handling Qubes dom0 logic (if applicable)" && handleQubesDom0
|
||||
logg info "Handling pre-provision logic" && initChezmoiAndPrompt
|
||||
logg info "Running the Chezmoi provisioning" && runChezmoi
|
||||
logg info "Ensuring temporary passwordless sudo is removed" && removePasswordlessSudo
|
||||
logg info "Determing whether or not reboot" && handleRequiredReboot
|
||||
logg info "Ensuring temporary passwordless sudo is removed" && removePasswordlessSudo
|
||||
logg info "Handling post-provision logic" && postProvision
|
||||
}
|
||||
provisionLogic
|
||||
|
|
|
@ -1174,11 +1174,6 @@ softwarePackages:
|
|||
_github: https://github.com/cupcakearmy/autorestic/
|
||||
_home: https://autorestic.vercel.app/
|
||||
_name: Autorestic
|
||||
_post: |
|
||||
#!/usr/bin/env bash
|
||||
sudo mkdir -p /var/local/backups/apps
|
||||
sudo mkdir -p /var/local/backups/home
|
||||
sudo mkdir -p /var/local/backups/docker
|
||||
ansible: professormanhattan.autorestic
|
||||
brew: autorestic
|
||||
awscli:
|
||||
|
|
4
system/etc/bash.bashrc
Normal file
4
system/etc/bash.bashrc
Normal file
|
@ -0,0 +1,4 @@
|
|||
### Nix
|
||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
||||
fi
|
15
system/etc/bashrc
Normal file
15
system/etc/bashrc
Normal file
|
@ -0,0 +1,15 @@
|
|||
# System-wide .bashrc file for interactive bash(1) shells.
|
||||
if [ -z "$PS1" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
PS1='\h:\W \u\$ '
|
||||
# Make bash check its window size after a process completes
|
||||
shopt -s checkwinsize
|
||||
|
||||
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
|
||||
|
||||
### Nix
|
||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
||||
fi
|
78
system/etc/zshrc
Normal file
78
system/etc/zshrc
Normal file
|
@ -0,0 +1,78 @@
|
|||
# System-wide profile for interactive zsh(1) shells.
|
||||
|
||||
# Setup user specific overrides for this in ~/.zshrc. See zshbuiltins(1)
|
||||
# and zshoptions(1) for more details.
|
||||
|
||||
# Correctly display UTF-8 with combining characters.
|
||||
if [[ "$(locale LC_CTYPE)" == "UTF-8" ]]; then
|
||||
setopt COMBINING_CHARS
|
||||
fi
|
||||
|
||||
# Disable the log builtin, so we don't conflict with /usr/bin/log
|
||||
disable log
|
||||
|
||||
# Save command history
|
||||
HISTFILE=${ZDOTDIR:-$HOME}/.zsh_history
|
||||
HISTSIZE=2000
|
||||
SAVEHIST=1000
|
||||
|
||||
# Beep on error
|
||||
setopt BEEP
|
||||
|
||||
# Use keycodes (generated via zkbd) if present, otherwise fallback on
|
||||
# values from terminfo
|
||||
if [[ -r ${ZDOTDIR:-$HOME}/.zkbd/${TERM}-${VENDOR} ]] ; then
|
||||
source ${ZDOTDIR:-$HOME}/.zkbd/${TERM}-${VENDOR}
|
||||
else
|
||||
typeset -g -A key
|
||||
|
||||
[[ -n "$terminfo[kf1]" ]] && key[F1]=$terminfo[kf1]
|
||||
[[ -n "$terminfo[kf2]" ]] && key[F2]=$terminfo[kf2]
|
||||
[[ -n "$terminfo[kf3]" ]] && key[F3]=$terminfo[kf3]
|
||||
[[ -n "$terminfo[kf4]" ]] && key[F4]=$terminfo[kf4]
|
||||
[[ -n "$terminfo[kf5]" ]] && key[F5]=$terminfo[kf5]
|
||||
[[ -n "$terminfo[kf6]" ]] && key[F6]=$terminfo[kf6]
|
||||
[[ -n "$terminfo[kf7]" ]] && key[F7]=$terminfo[kf7]
|
||||
[[ -n "$terminfo[kf8]" ]] && key[F8]=$terminfo[kf8]
|
||||
[[ -n "$terminfo[kf9]" ]] && key[F9]=$terminfo[kf9]
|
||||
[[ -n "$terminfo[kf10]" ]] && key[F10]=$terminfo[kf10]
|
||||
[[ -n "$terminfo[kf11]" ]] && key[F11]=$terminfo[kf11]
|
||||
[[ -n "$terminfo[kf12]" ]] && key[F12]=$terminfo[kf12]
|
||||
[[ -n "$terminfo[kf13]" ]] && key[F13]=$terminfo[kf13]
|
||||
[[ -n "$terminfo[kf14]" ]] && key[F14]=$terminfo[kf14]
|
||||
[[ -n "$terminfo[kf15]" ]] && key[F15]=$terminfo[kf15]
|
||||
[[ -n "$terminfo[kf16]" ]] && key[F16]=$terminfo[kf16]
|
||||
[[ -n "$terminfo[kf17]" ]] && key[F17]=$terminfo[kf17]
|
||||
[[ -n "$terminfo[kf18]" ]] && key[F18]=$terminfo[kf18]
|
||||
[[ -n "$terminfo[kf19]" ]] && key[F19]=$terminfo[kf19]
|
||||
[[ -n "$terminfo[kf20]" ]] && key[F20]=$terminfo[kf20]
|
||||
[[ -n "$terminfo[kbs]" ]] && key[Backspace]=$terminfo[kbs]
|
||||
[[ -n "$terminfo[kich1]" ]] && key[Insert]=$terminfo[kich1]
|
||||
[[ -n "$terminfo[kdch1]" ]] && key[Delete]=$terminfo[kdch1]
|
||||
[[ -n "$terminfo[khome]" ]] && key[Home]=$terminfo[khome]
|
||||
[[ -n "$terminfo[kend]" ]] && key[End]=$terminfo[kend]
|
||||
[[ -n "$terminfo[kpp]" ]] && key[PageUp]=$terminfo[kpp]
|
||||
[[ -n "$terminfo[knp]" ]] && key[PageDown]=$terminfo[knp]
|
||||
[[ -n "$terminfo[kcuu1]" ]] && key[Up]=$terminfo[kcuu1]
|
||||
[[ -n "$terminfo[kcub1]" ]] && key[Left]=$terminfo[kcub1]
|
||||
[[ -n "$terminfo[kcud1]" ]] && key[Down]=$terminfo[kcud1]
|
||||
[[ -n "$terminfo[kcuf1]" ]] && key[Right]=$terminfo[kcuf1]
|
||||
fi
|
||||
|
||||
# Default key bindings
|
||||
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
|
||||
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
|
||||
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
|
||||
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
|
||||
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search
|
||||
|
||||
# Default prompt
|
||||
PS1="%n@%m %1~ %# "
|
||||
|
||||
# Useful support for interacting with Terminal.app or other terminal programs
|
||||
[ -r "/etc/zshrc_$TERM_PROGRAM" ] && . "/etc/zshrc_$TERM_PROGRAM"
|
||||
|
||||
### Nix
|
||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
||||
fi
|
Loading…
Reference in a new issue