diff --git a/docs/INSPIRATION.md b/docs/INSPIRATION.md index 74f3087a..139a7a73 100644 --- a/docs/INSPIRATION.md +++ b/docs/INSPIRATION.md @@ -60,6 +60,7 @@ * https://github.com/pouchdb/pouchdb * https://uppy.io/docs/dashboard/ * https://unkey.dev/ +* [Title](https://github.com/vercel-labs/ai-chatbot) ## Serverless diff --git a/docs/TODO.md b/docs/TODO.md index 124d0e04..40a2e7d6 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -2,6 +2,7 @@ This page outlines various projects and tasks that we are currently working on. Creating a GitHub issue for each of these items would be overkill. +* [Title](https://github.com/KnowledgeCanvas/knowledge) * Configure Navi to automatically download and use the best cheat repositories * Finish TS from 1400 stars * Python @@ -14,7 +15,14 @@ This page outlines various projects and tasks that we are currently working on. * JavaScript start at 10k * Go through https://github.com/jaywcjlove/awesome-mac * https://codesandbox.io/ https://github.com/firecracker-microvm/firecracker - +* (https://www.kolide.com/features/checks/mac-firewall) +* (https://github.com/tobiasbueschel/search-gpt) +* Create IP set for CloudFlare [Title](https://firewalld.org/documentation/man-pages/firewalld.ipset.html) +* https://chainner.app/ +* https://github.com/kyrolabs/awesome-langchain) +( [Title](https://github.com/StanGirard/quivr)) +* [Title](https://github.com/PromtEngineer/localGPT) +* [Title](https://github.com/reworkd/AgentGPT) ## Upstream The following items are things we would like to include into the Install Doctor system but are waiting on upstream changes. @@ -182,6 +190,15 @@ The following items have been reviewed but need to be revisited due to complexit * https://github.com/OpenNebula/one /. https://github.com/OpenNebula/minione * https://github.com/ConvoyPanel/panel * https://github.com/hashicorp/nomad +* [Title](https://github.com/Soft/xcolor) +* [Title](https://github.com/Xpra-org/xpra) +* [Title](https://github.com/ksnip/ksnip) +* [Title](https://github.com/leftwm/leftwm) +* [Title](https://github.com/polybar/polybar) +* [Title](https://github.com/kingToolbox/WindTerm) +* [Title](https://github.com/hyprwm/Hypr) +* [Title](https://github.com/Sygil-Dev/sygil-webui) +* [Title](https://github.com/psychic-api/psychic) ## Docker Issue diff --git a/home/.chezmoidata.yaml b/home/.chezmoidata.yaml index 6761f05c..96b3fc68 100644 --- a/home/.chezmoidata.yaml +++ b/home/.chezmoidata.yaml @@ -360,6 +360,7 @@ softwareGroups: - resume - s-search - sad + - search-gpt - slack-term - slides - social-analyzer @@ -916,6 +917,7 @@ softwareGroups: - cookiecutter - gomplate Terraform: &Terraform + - aiac - terraform - tfenv - tflint diff --git a/home/.chezmoiscripts/universal/run_onchange_after_16-vnc.sh.tmpl b/home/.chezmoiscripts/universal/run_onchange_after_16-vnc.sh.tmpl index 140fbc37..2b27f984 100644 --- a/home/.chezmoiscripts/universal/run_onchange_after_16-vnc.sh.tmpl +++ b/home/.chezmoiscripts/universal/run_onchange_after_16-vnc.sh.tmpl @@ -24,15 +24,15 @@ if [ -d /Applications ] && [ -d /System ]; then # Only enable when computer is not a corporate / work computer {{ if (ne .host.work true) -}} logg info 'Enabling VNC using the `VNC_PASSWORD` variable which is `vncpass` when nothing is specified' - sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -clientopts -setvnclegacy -vnclegacy yes -clientopts -setvncpw -vncpw {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "VNC_PASSWORD")) }}{{ includeTemplate "secrets/VNC_PASSWORD" | decrypt | trim }}{{ else }}{{ default "vncpass" (env "VNC_PASSWORD") }}{{ end }} -restart -agent -privs -all + sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -allowAccessFor -specifiedUsers -clientopts -setreqperm -reqperm yes -setvnclegacy -vnclegacy yes -setvncpw -vncpw {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "VNC_PASSWORD")) }}{{ includeTemplate "secrets/VNC_PASSWORD" | decrypt | trim }}{{ else }}{{ default "vncpass" (env "VNC_PASSWORD") }}{{ end }} -restart -agent -privs -all -users {{ .user.name }} {{- end }} else # System is Linux + ### VNC set-up / configuration if command -v vncpasswd > /dev/null; then # TigerVNC (or alternative VNC program) is installed logg info 'Copying VNC configuration files from ~/.config/vnc/etc to /' sudo cp -Rf "${XDG_CONFIG_HOME:-$HOME/.config}/vnc/etc" / - sudo systemctl if [ ! -d "${XDG_CONFIG_HOME:-$HOME/.config}/vnc" ]; then mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/vnc" fi diff --git a/home/.chezmoiscripts/universal/run_onchange_after_18-configure-firewall.sh.tmpl b/home/.chezmoiscripts/universal/run_onchange_after_18-configure-firewall.sh.tmpl new file mode 100644 index 00000000..72343342 --- /dev/null +++ b/home/.chezmoiscripts/universal/run_onchange_after_18-configure-firewall.sh.tmpl @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +if [ -d /Applications ] && [ -d /System ]; then + # System is macOS + logg info 'Enabling macOS firewall' + +fi \ No newline at end of file diff --git a/home/.chezmoitemplates/secrets/GOOGLE_SEARCH_API_KEY b/home/.chezmoitemplates/secrets/GOOGLE_SEARCH_API_KEY new file mode 100644 index 00000000..fbc54b50 --- /dev/null +++ b/home/.chezmoitemplates/secrets/GOOGLE_SEARCH_API_KEY @@ -0,0 +1,7 @@ +-----BEGIN AGE ENCRYPTED FILE----- +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVNHB0YXhyR3NEQVZMaEw5 +RjRSbE56Vk9VU2lZTWo2NHNoSXhjZUZYYVNzClh3ay9ZdStiWUlLMnNXT1RmT3Vw +aVRtNHAvR2xSdmRMQW1LYkR5MlRjbmMKLS0tIFJDcEphZUZZc0RjYmUwRTlkZDFh +SXlFSXErOEdHZHJkVmlDWHJvWDJjSnMKTZuglTRlnTiU/YMzQjNUZY3stUz8ujwP +FsyjC/1mp3eYNr5jEnRH1ACSpTesYZ/jgl0b/B3z2eGPN2ButzjAbQ62+0kDuTo= +-----END AGE ENCRYPTED FILE----- \ No newline at end of file diff --git a/home/.chezmoitemplates/secrets/GOOGLE_SEARCH_ID b/home/.chezmoitemplates/secrets/GOOGLE_SEARCH_ID new file mode 100644 index 00000000..eda2ef93 --- /dev/null +++ b/home/.chezmoitemplates/secrets/GOOGLE_SEARCH_ID @@ -0,0 +1,7 @@ +-----BEGIN AGE ENCRYPTED FILE----- +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUZjBDMy9yQW9LZTBQWFUr +SklhbWtWUVpzZDc3TkhzRkxydmppSmc2NkVZCkVyK1BWQ3UxQTE1OC8vL1VVVStz +Z2t1ckNhWDlPd1BuNXNLakNRZWpVSGMKLS0tIE5mdi9RaWhWUWtwcTZTeW9xWFgy +OUNpQWxnRnBpb1JXbU42SHhaa2Z5UFkKDrEwiM7oz62yvE72M87gABy+6ZWqyR95 +DGFBDzXJqNtk7tyLHwkh7cZFd4MHKIL7sA== +-----END AGE ENCRYPTED FILE----- \ No newline at end of file diff --git a/home/dot_config/firewall/applet.conf b/home/dot_config/firewall/applet.conf new file mode 100644 index 00000000..b3541bde --- /dev/null +++ b/home/dot_config/firewall/applet.conf @@ -0,0 +1,3 @@ +[General] +notifications=true +show-inactive=true diff --git a/home/dot_config/firewall/etc/firewalld/services/ftp.xml b/home/dot_config/firewall/etc/firewalld/services/ftp.xml new file mode 100644 index 00000000..e33bac5f --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/ftp.xml @@ -0,0 +1,7 @@ + + + FTP + FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful. + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/ipfs-api.xml b/home/dot_config/firewall/etc/firewalld/services/ipfs-api.xml new file mode 100644 index 00000000..1db4604a --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/ipfs-api.xml @@ -0,0 +1,6 @@ + + + IPFS Daemon API + InterPlanetary File System (IPFS) is a protocol and peer-to-peer network for storing and sharing data in a distributed file system. + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/ipfs-swarm.xml b/home/dot_config/firewall/etc/firewalld/services/ipfs-swarm.xml new file mode 100644 index 00000000..4189b816 --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/ipfs-swarm.xml @@ -0,0 +1,7 @@ + + + IPFS Swarm + InterPlanetary File System (IPFS) is a protocol and peer-to-peer network for storing and sharing data in a distributed file system. + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/ipfs-websocket.xml b/home/dot_config/firewall/etc/firewalld/services/ipfs-websocket.xml new file mode 100644 index 00000000..b417eadc --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/ipfs-websocket.xml @@ -0,0 +1,6 @@ + + + IPFS Swarm Websockets + InterPlanetary File System (IPFS) is a protocol and peer-to-peer network for storing and sharing data in a distributed file system. + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/jellyfin.xml b/home/dot_config/firewall/etc/firewalld/services/jellyfin.xml new file mode 100644 index 00000000..450493f8 --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/jellyfin.xml @@ -0,0 +1,9 @@ + + + jellyfin + ellyfin is the volunteer-built media solution that puts you in control of your media. Stream to any device from your own server, with no strings attached. Your media, your server, your way. + + + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/k8s-master.xml b/home/dot_config/firewall/etc/firewalld/services/k8s-master.xml new file mode 100644 index 00000000..b6a3e249 --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/k8s-master.xml @@ -0,0 +1,10 @@ + + + Kubernetes Master + Ports required for a Kubernetes Master node per https://kubernetes.io/docs/setup/independent/install-kubeadm/. + + + + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/k8s-worker.xml b/home/dot_config/firewall/etc/firewalld/services/k8s-worker.xml new file mode 100644 index 00000000..2576947c --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/k8s-worker.xml @@ -0,0 +1,8 @@ + + + Kubernetes Worker + Ports required for a Kubernetes Worker node per https://kubernetes.io/docs/setup/independent/install-kubeadm/. + + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/mdns.xml b/home/dot_config/firewall/etc/firewalld/services/mdns.xml new file mode 100644 index 00000000..cde96c3e --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/mdns.xml @@ -0,0 +1,7 @@ + + + Multicast DNS (mDNS) + mDNS provides the ability to use DNS programming interfaces, packet formats and operating semantics in a small network without a conventional DNS server. If you plan to use Avahi, do not disable this option. + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/openvpn-access-server.xml b/home/dot_config/firewall/etc/firewalld/services/openvpn-access-server.xml new file mode 100644 index 00000000..29d71589 --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/openvpn-access-server.xml @@ -0,0 +1,8 @@ + + + OpenVPN Access Server + OpenVPN Access Server is a set of installation and configuration tools that come in one package that simplifies the rapid deployment of a VPN remote access solution. + + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/plex.xml b/home/dot_config/firewall/etc/firewalld/services/plex.xml new file mode 100644 index 00000000..de3a6e5a --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/plex.xml @@ -0,0 +1,12 @@ + + + Plex + . + # Plex Media Server + # Plex DLNA Server + # Plex DLNA Server + # GDM Network Discovery + # GDM Network Discovery + # GDM Network Discovery + # GDM Network Discovery + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/unifi-controller.xml b/home/dot_config/firewall/etc/firewalld/services/unifi-controller.xml new file mode 100644 index 00000000..03ac6129 --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/unifi-controller.xml @@ -0,0 +1,13 @@ + + + UniFi Controller + . + + + + + + + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/unifi-video.xml b/home/dot_config/firewall/etc/firewalld/services/unifi-video.xml new file mode 100644 index 00000000..5fac1d98 --- /dev/null +++ b/home/dot_config/firewall/etc/firewalld/services/unifi-video.xml @@ -0,0 +1,15 @@ + + + unifi-video + . + + + + + + + + + + + \ No newline at end of file diff --git a/home/dot_config/firewall/etc/firewalld/services/xrdp.xml b/home/dot_config/firewall/etc/firewalld/services/xrdp.xml new file mode 100644 index 00000000..e69de29b diff --git a/home/dot_config/firewall/etc/ufw/applications.d/README.md b/home/dot_config/firewall/etc/ufw/applications.d/README.md new file mode 100644 index 00000000..122177cf --- /dev/null +++ b/home/dot_config/firewall/etc/ufw/applications.d/README.md @@ -0,0 +1 @@ +These profiles are unused but are left here as an example should we decide to support `ufw` as well. \ No newline at end of file diff --git a/home/dot_config/firewall/etc/ufw/applications.d/cups b/home/dot_config/firewall/etc/ufw/applications.d/cups new file mode 100644 index 00000000..81191ba7 --- /dev/null +++ b/home/dot_config/firewall/etc/ufw/applications.d/cups @@ -0,0 +1,4 @@ +[CUPS] +title=CUPS +description=CUPS printer server +ports=631/tcp diff --git a/home/dot_config/firewall/etc/ufw/applications.d/maas b/home/dot_config/firewall/etc/ufw/applications.d/maas new file mode 100644 index 00000000..c157cd14 --- /dev/null +++ b/home/dot_config/firewall/etc/ufw/applications.d/maas @@ -0,0 +1,4 @@ +[MAAS] +title=MAAS +description=Ubuntu management software for equipment that is controlled by LPMI +ports=5240|5248|5241:5247/tcp|5241:5247/udp|5250:5270/tcp|5250:5270/udp diff --git a/home/dot_config/firewall/etc/ufw/applications.d/netbootxyz b/home/dot_config/firewall/etc/ufw/applications.d/netbootxyz new file mode 100644 index 00000000..54da9302 --- /dev/null +++ b/home/dot_config/firewall/etc/ufw/applications.d/netbootxyz @@ -0,0 +1,4 @@ +[NetbootXYZ] +title=NetbootXYZ +description=Boot over LAN +ports=69/udp diff --git a/home/dot_config/firewall/etc/ufw/applications.d/nginx b/home/dot_config/firewall/etc/ufw/applications.d/nginx new file mode 100644 index 00000000..ee2efd08 --- /dev/null +++ b/home/dot_config/firewall/etc/ufw/applications.d/nginx @@ -0,0 +1,19 @@ +[Nginx] +title=Nginx Server +description=Nginx server +ports=80/tcp + +[Nginx Secure] +title=Nginx Server (HTTPS) +description=Nginx server (HTTPS) +ports=443/tcp + +[Nginx Full] +title=Nginx Server (HTTP,HTTPS) +description=Nginx server (HTTP,HTTPS) +ports=80,443/tcp + +[Nginx Cache] +title=Nginx Server (8080) +description=Nginx server (8080) +ports=8080/tcp diff --git a/home/dot_config/firewall/etc/ufw/applications.d/plex b/home/dot_config/firewall/etc/ufw/applications.d/plex new file mode 100644 index 00000000..0615b29b --- /dev/null +++ b/home/dot_config/firewall/etc/ufw/applications.d/plex @@ -0,0 +1,14 @@ +[PlexMediaServer] +title=Plex Media Server (Standard) +description=The Plex Media Server +ports=32400/tcp|3005/tcp|5353/udp|8324/tcp|32410:32414/udp + +[PlexMediaServer DLNA] +title=Plex Media Server (DLNA) +description=The Plex Media Server (additional DLNA capability only) +ports=1900/udp|32469/tcp + +[PlexMediaServer Full] +title=Plex Media Server (Standard + DLNA) +description=The Plex Media Server (with additional DLNA capability) +ports=32400/tcp|3005/tcp|5353/udp|8324/tcp|32410:32414/udp|1900/udp|32469/tcp diff --git a/home/dot_config/firewall/etc/ufw/applications.d/rdp b/home/dot_config/firewall/etc/ufw/applications.d/rdp new file mode 100644 index 00000000..0d88da0f --- /dev/null +++ b/home/dot_config/firewall/etc/ufw/applications.d/rdp @@ -0,0 +1,4 @@ +[RDP] +title=RDP +description=Remotely sign into a desktop computer +ports=3389/tcp diff --git a/home/dot_config/firewall/etc/ufw/applications.d/unifi b/home/dot_config/firewall/etc/ufw/applications.d/unifi new file mode 100644 index 00000000..5d0d4be0 --- /dev/null +++ b/home/dot_config/firewall/etc/ufw/applications.d/unifi @@ -0,0 +1,4 @@ +[UniFi] +title=UniFi controller +description=All ports available for UniFi inform, guest portal, speed testing, and access to admin GUI +ports=5514,6789,8080,8843,8880/tcp|1900,3478,10001/udp diff --git a/home/dot_config/shell/private_private.sh.tmpl b/home/dot_config/shell/private_private.sh.tmpl index d970635f..8dba229c 100644 --- a/home/dot_config/shell/private_private.sh.tmpl +++ b/home/dot_config/shell/private_private.sh.tmpl @@ -74,6 +74,11 @@ export OPENAI_API_KEY="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplat ### PyPi export PYPI_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "PYPI_TOKEN")) }}{{ includeTemplate "secrets/PYPI_TOKEN" | decrypt | trim }}{{ else }}{{ env "PYPI_TOKEN" }}{{ end }}" +### Search GPT +# Also relies on `OPENAI_API_KEY` +export GOOGLE_SEARCH_API_KEY="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GOOGLE_SEARCH_API_KEY")) }}{{ includeTemplate "secrets/GOOGLE_SEARCH_API_KEY" | decrypt | trim }}{{ else }}{{ env "GOOGLE_SEARCH_API_KEY" }}{{ end }}" +export GOOGLE_SEARCH_ID="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GOOGLE_SEARCH_ID")) }}{{ includeTemplate "secrets/GOOGLE_SEARCH_ID" | decrypt | trim }}{{ else }}{{ env "GOOGLE_SEARCH_ID" }}{{ end }}" + ### Snapcraft export SNAPCRAFT_EMAIL="{{ .user.snapcraft.username }}" export SNAPCRAFT_MACAROON="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "SNAPCRAFT_MACAROON")) }}{{ includeTemplate "secrets/SNAPCRAFT_MACAROON" | decrypt | trim }}{{ else }}{{ env "SNAPCRAFT_MACAROON" }}{{ end }}" diff --git a/home/dot_local/bin/executable_install-program b/home/dot_local/bin/executable_install-program index b60b1465..60fe9e49 100644 --- a/home/dot_local/bin/executable_install-program +++ b/home/dot_local/bin/executable_install-program @@ -113,6 +113,7 @@ let installOrdersPre = [] let installOrdersPost = [] let installOrdersService = [] let installOrdersGroups = [] +let installOrdersPorts = [] let installOrdersPlugins = [] let installOrdersBinLink = [] let brewUpdated, osType, osID, snapRefreshed @@ -446,6 +447,10 @@ async function updateInstallMaps(preference, packages, scopedPreference, pkg, pa if (groupsHook) { installOrdersGroups = installOrdersGroups.concat(typeof groupsHook === 'string' ? [groupsHook] : groupsHook) } + const portsHook = getHook(packages, 'ports', scopedPreference, preference) + if (portsHook) { + installOrdersPorts = installOrdersPorts.concat(typeof portsHook === 'string' ? [portsHook] : portsHook) + } processPluginOrders(pkg) if (!installOrders[preference]) { installOrders[preference] = [] @@ -1543,6 +1548,41 @@ async function addUserGroup(group) { } } +/** + * Adds the rules specified in the `_ports` key of each entry in the `software.yml` file. + * + * @param rule Firewall rule in the form of 8888/tcp or 9999/udp. Can also be the XML file name stored in ~/.config/firewall/etc/firewalld/services. + */ +async function addFirewallRule(rule) { + const logStage = 'Firewall' + log('info', logStage, `Ensuring the ${rule} rule is added`) + if (osType === 'linux') { + const firewallCmd = which.sync('firewall-cmd', { nothrow: true }) + // const ufw = which.sync('ufw', { nothrow: true }) + if (firewallCmd) { + if (typeof rule.substring(0, 1) === 'number') { + runCommand(`Adding the ${rule} to the firewall configuration`, `sudo firewall-cmd --add-port=${rule} --permanent`) + } else { + runCommand(`Adding the ${rule} user / group`, `sudo firewall-cmd --add-service=${rule} --permanent`) + } + } else { + log('error', logStage, `The firewall-cmd executable is not present on the system so the firewall cannot be configured`) + } + } else if (osType === 'darwin') { + runCommand(`Creating the ${rule} group`, `sudo dscl . create /Groups/${rule}`) + runCommand(`Ensuring the ${rule} group has a GID`, `bash -c 'if [[ "$(sudo dscl . read /Groups/$GROUP gid 2>&1)" == *"No such key"* ]]; then MAX_ID_GROUP="$(dscl . -list /Groups gid | awk "{print $2}" | sort -ug | tail -1)"; GROUP_ID="$((MAX_ID_GROUP+1))"; sudo dscl . create /Groups/${rule} gid "$GROUP_ID"; fi'`) + runCommand(`Adding the ${rule} user`, `sudo dscl . create /Users/${rule}`) + runCommand(`Ensuring the ${rule} user has a PrimaryGroupID`, `bash -c 'if [[ "$(sudo dscl . read /Users/${rule} PrimaryGroupID 2>&1)" == *"No such key"* ]]; then sudo dscl . create /Users/${rule} PrimaryGroupID 20; fi'`) + runCommand(`Ensuring the ${rule} user has a UniqueID`, `bash -c 'if [[ "$(sudo dscl . read /Users/${rule} UniqueID 2>&1)" == *"No such key"* ]]; then MAX_ID_USER="$(dscl . -list /Users UniqueID | sort -nr -k 2 | head -1 | grep -oE "[0-9]+$")"; USER_ID="$((MAX_ID_USER+1))"; sudo dscl . create /Users/${rule} UniqueID "$USERID"; fi'`) + runCommand(`Adding the ${rule} user to the ${rule} group`, `sudo dseditgroup -o edit -t user -a ${rule} ${rule}`) + runCommand(`Adding the ${process.env.USER} user to the ${rule} group`, `sudo dseditgroup -o edit -t user -a ${process.env.USER} ${rule}`) + } else if (osType === 'windows') { + log('warn', logStage, `Windows support not yet added`) + } else { + log('warn', logStage, `Unknown operating system type`) + } +} + async function updateService(service) { const logStage = 'Service Service' if (osType === 'linux') { @@ -1805,6 +1845,10 @@ async function installSoftware(pkgsToInstall) { asyncOrders.push(installPackageList(packageManager, installOrders[packageManager])) await Promise.all(asyncOrders) } + installOrdersPorts.length && log('info', 'Firewall', 'Configuring firewall exceptions') + for (const firewallRule of installOrdersPorts) { + await addFirewallRule(firewallRule) + } installOrdersService.length && log('info', 'Post-Install', `Running package-specific post-installation steps`) for (const service of installOrdersService) { await updateService(service) diff --git a/software.yml b/software.yml index c328fbf4..8d2ec738 100644 --- a/software.yml +++ b/software.yml @@ -2820,14 +2820,6 @@ softwarePackages: dnf: firefox flatpak: org.mozilla.firefox pacman: firefox - firewall: - _bin: null - _desc: This role is intended to be used with the ProfessorManhattan playbook. It integrates tightly with the other roles included with the playbook. - _docs: null - _github: null - _home: null - _name: Firewall - ansible: professormanhattan.firewall fission: _bin: fission _desc: Fast and Simple Serverless Functions for Kubernetes @@ -5795,6 +5787,11 @@ softwarePackages: _github: https://github.com/nginx/nginx _home: https://nginx.org/ _name: NGINX + _ports: + - port: 80 + proto: udp + - port: 443 + proto: udp ansible: professormanhattan.nginx apt: nginx brew: nginx @@ -7099,13 +7096,37 @@ softwarePackages: _name: Microsoft Remote Desktop _when:cask: '! test -d "/Applications/Microsoft Remote Desktop.app"' cask: microsoft-remote-desktop + aiac: + _bin: aiac + _github: https://github.com/gofireflyio/aiac + _name: AIAC + brew: gofireflyio/aiac/aiac + go: github.com/gofireflyio/aiac/v3@latest + firewalld: + _bin: firewall-cmd + _github: https://github.com/firewalld/firewalld + _name: FirewallD + _service: firewalld + _pre: if command -v ufw > /dev/null; then sudo ufw disable; fi + _service: firewalld + _notes: https://computingforgeeks.com/install-and-use-firewalld-on-ubuntu/ + apt: firewalld + dnf: firewalld + emerge: net-firewall/firewalld + pacman: firewalld + script:darwin: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on + zypper: firewalld xrdp: _bin: xrdp _desc: null _docs: null - _github: null - _home: null + _github: https://github.com/neutrinolabs/xrdp + _home: http://www.xrdp.org/ _name: xrdp + _ports: + - port: 3389 + proto: tcp + _post: sudo adduser xrdp ssl-cert _service: xrdp _service:yay: - xrdp @@ -7113,6 +7134,8 @@ softwarePackages: _note: Should work like professormanhattan.remotedesktop apt: xrdp dnf: xrdp + pacman: xrdp + zypper: xrdp yay: xrdp responsively: _bin: null @@ -9566,6 +9589,11 @@ softwarePackages: _home: null _name: Yarnhook npm: yarnhook + search-gpt: + _bin: searchgpt + _github: https://github.com/tobiasbueschel/search-gpt + _name: Search GPT + npm: search-gpt yj: _bin: yj _desc: CLI program that allows you to convert between YAML, TOML, JSON, and HCL. @@ -9687,6 +9715,9 @@ softwarePackages: _bin: tigervncpasswd _github: https://github.com/DukeyToo/tightvnc-server _name: TightVNC Server + _ports: + - port: 5900-5909 + proto: tcp apt: tigervnc-standalone-server dnf: tigervnc-server pacman: tigervnc @@ -9830,6 +9861,7 @@ softwarePlugins: raycast: cmd: null plugins: + - https://www.raycast.com/abielzulio/chatgpt - https://www.raycast.com/BalliAsghar/mailsy steampipe: cmd: steampipe plugin install {PLUGIN}