summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.sops.yaml2
-rw-r--r--flake.lock18
-rw-r--r--flake.nix5
-rw-r--r--justfile2
-rwxr-xr-xmut/bin/dmenu2
-rw-r--r--mvbs.sh347
-rw-r--r--profiles/homeserver/transmission.nix24
-rw-r--r--progs.csv119
8 files changed, 421 insertions, 98 deletions
diff --git a/.sops.yaml b/.sops.yaml
index 015bfac..d675280 100644
--- a/.sops.yaml
+++ b/.sops.yaml
@@ -1,7 +1,7 @@
keys:
- &ivi age10q9wse8dh0749ffj576q775q496pycucxlla9rjdq5rd7f4csyhqqrmkk0
- &serber age1sjqz54u07jv9ykpmg6s5fqms2jqyxzdwf7q940veapqzuafzr5es9nnl2v
- - &pump age1tzsvgxaxwvh4874d977fk0z7ghm4mqpm0c80vhxft87dv46p5uesq7mk42
+ - &pump age17gxedtcuxdz2r6hp03ursczhrhudmnxtfultnctwd60s9ul25fgqjjp40w
creation_rules:
- path_regex: secrets/[^/]+\.?(yaml|json|env|ini)?$
key_groups:
diff --git a/flake.lock b/flake.lock
index 0bcc090..7aebaec 100644
--- a/flake.lock
+++ b/flake.lock
@@ -399,23 +399,6 @@
"type": "github"
}
},
- "nix-darwin": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1737063096,
- "narHash": "sha256-Qv40syutOYQZOBjS76Swk4VeUz08KDrsc9IDSdXmyqs=",
- "path": "/Users/ivi/nix-darwin",
- "type": "path"
- },
- "original": {
- "path": "/Users/ivi/nix-darwin",
- "type": "path"
- }
- },
"nixpkgs": {
"locked": {
"lastModified": 1702272962,
@@ -566,7 +549,6 @@
"ghostty": "ghostty",
"home-manager": "home-manager",
"neovim-nightly-overlay": "neovim-nightly-overlay",
- "nix-darwin": "nix-darwin",
"nixpkgs": "nixpkgs_4",
"simple-nixos-mailserver": "simple-nixos-mailserver",
"sops-nix": "sops-nix"
diff --git a/flake.nix b/flake.nix
index ebff67f..4ecfa4f 100644
--- a/flake.nix
+++ b/flake.nix
@@ -19,10 +19,6 @@
ghostty = {
url = "github:ghostty-org/ghostty";
};
- nix-darwin = {
- url = "path:/Users/ivi/nix-darwin";
- inputs.nixpkgs.follows = "nixpkgs";
- };
};
@@ -42,7 +38,6 @@
lib =
(withLibs [
- inputs.nix-darwin.lib
home-manager.lib
])
.extend
diff --git a/justfile b/justfile
index dd5694f..dec7bec 100644
--- a/justfile
+++ b/justfile
@@ -78,5 +78,5 @@ NIXNAME := "vm-aarch64"
! [ -d ~/.config/nushell ] && ln -sf /nix-config/mut/nushell ~/.config/nushell
! [ -d ~/.config/vis ] && ln -sf /nix-config/mut/vis ~/.config/vis
- rm -rf "$HOME/Library/Application Support/nushell"; ln -sf /nix-config/mut/nushell "$HOME/Library/Application Support/nushell"
+ [ -d "$HOME/Library/Application Support" ] && { rm -rf "$HOME/Library/Application Support/nushell"; ln -sf /nix-config/mut/nushell "$HOME/Library/Application Support/nushell"; }
true
diff --git a/mut/bin/dmenu b/mut/bin/dmenu
deleted file mode 100755
index 2442c2c..0000000
--- a/mut/bin/dmenu
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-/Applications/dmenu-mac.app/Contents/MacOS/dmenu-mac "$@"
diff --git a/mvbs.sh b/mvbs.sh
new file mode 100644
index 0000000..0791385
--- /dev/null
+++ b/mvbs.sh
@@ -0,0 +1,347 @@
+#!/bin/sh
+
+# Based on:
+# Luke's Auto Rice Bootstrapping Script (MVBS)
+# by Luke Smith <luke@lukesmith.xyz>
+# License: GNU GPLv3
+
+### OPTIONS AND VARIABLES ###
+
+dotfilesrepo="https://github.com/ivi-vink/flake.git"
+progsfile="https://raw.githubusercontent.com/LukeSmithxyz/MVBS/master/static/progs.csv"
+repobranch="master"
+export TERM=ansi
+
+### FUNCTIONS ###
+
+installpkg() {
+ xbps-install --yes "$1" >/dev/null 2>&1
+}
+
+error() {
+ # Log to stderr and exit with failure.
+ printf "%s\n" "$1" >&2
+ exit 1
+}
+
+welcomemsg() {
+ whiptail --title "Welcome!" \
+ --msgbox "Welcome to the Auto-Unix-IDE Bootstrapping Script!\\n\\nThis script will automatically install a fully-featured Unix IDE and optionally a Linux desktop.\\n\\n-Mike" 10 60
+}
+
+getuserandpass() {
+ # Prompts user for new username and password.
+ name=$(whiptail --inputbox "First, please enter a name for the user account." 10 60 3>&1 1>&2 2>&3 3>&1) || exit 1
+ while ! echo "$name" | grep -q "^[a-z_][a-z0-9_-]*$"; do
+ name=$(whiptail --nocancel --inputbox "Username not valid. Give a username beginning with a letter, with only lowercase letters, - or _." 10 60 3>&1 1>&2 2>&3 3>&1)
+ done
+ pass1=$(whiptail --nocancel --passwordbox "Enter a password for that user." 10 60 3>&1 1>&2 2>&3 3>&1)
+ pass2=$(whiptail --nocancel --passwordbox "Retype password." 10 60 3>&1 1>&2 2>&3 3>&1)
+ while ! [ "$pass1" = "$pass2" ]; do
+ unset pass2
+ pass1=$(whiptail --nocancel --passwordbox "Passwords do not match.\\n\\nEnter password again." 10 60 3>&1 1>&2 2>&3 3>&1)
+ pass2=$(whiptail --nocancel --passwordbox "Retype password." 10 60 3>&1 1>&2 2>&3 3>&1)
+ done
+}
+
+usercheck() {
+ ! { id -u "$name" >/dev/null 2>&1; } ||
+ whiptail --title "WARNING" --yes-button "CONTINUE" \
+ --no-button "No wait..." \
+ --yesno "The user \`$name\` already exists on this system. MVBS can install for a user already existing, but it will OVERWRITE any conflicting settings/dotfiles on the user account.\\n\\nMVBS will NOT overwrite your user files, documents, videos, etc., so don't worry about that, but only click <CONTINUE> if you don't mind your settings being overwritten.\\n\\nNote also that MVBS will change $name's password to the one you just gave." 14 70
+}
+
+preinstallmsg() {
+ whiptail --title "Let's get this party started!" --yes-button "Let's go!" \
+ --no-button "No, nevermind!" \
+ --yesno "The rest of the installation will now be totally automated, so you can sit back and relax.\\n\\nIt will take some time, but when done, you can relax even more with your complete system.\\n\\nNow just press <Let's go!> and the system will begin installation!" 13 60 || {
+ clear
+ exit 1
+ }
+}
+
+adduserandpass() {
+ # Adds user `$name` with password $pass1.
+ whiptail --infobox "Adding user \"$name\"..." 7 50
+ useradd -m -g wheel -s /bin/zsh "$name" >/dev/null 2>&1 ||
+ usermod -a -G wheel "$name" && mkdir -p /home/"$name" && chown "$name":wheel /home/"$name"
+ export repodir="/home/$name/.local/src"
+ mkdir -p "$repodir"
+ chown -R "$name":wheel "$(dirname "$repodir")"
+ echo "$name:$pass1" | chpasswd
+ unset pass1 pass2
+}
+
+refreshkeys() {
+ case "$(readlink -f /sbin/init)" in
+ *systemd*)
+ whiptail --infobox "Refreshing Arch Keyring..." 7 40
+ pacman --noconfirm -S archlinux-keyring >/dev/null 2>&1
+ ;;
+ *)
+ whiptail --infobox "Enabling Arch Repositories for more a more extensive software collection..." 7 40
+ pacman --noconfirm --needed -S \
+ artix-keyring artix-archlinux-support >/dev/null 2>&1
+ grep -q "^\[extra\]" /etc/pacman.conf ||
+ echo "[extra]
+Include = /etc/pacman.d/mirrorlist-arch" >>/etc/pacman.conf
+ pacman -Sy --noconfirm >/dev/null 2>&1
+ pacman-key --populate archlinux >/dev/null 2>&1
+ ;;
+ esac
+}
+
+maininstall() {
+ # Installs all needed programs from main repo.
+ whiptail --title "MVBS Installation" --infobox "Installing \`$1\` ($n of $total). $1 $2" 9 70
+ installpkg "$1"
+}
+
+gitmakeinstall() {
+ progname="${1##*/}"
+ progname="${progname%.git}"
+ dir="$repodir/$progname"
+ whiptail --title "MVBS Installation" \
+ --infobox "Installing \`$progname\` ($n of $total) via \`git\` and \`make\`. $(basename "$1") $2" 8 70
+ sudo -u "$name" git -C "$repodir" clone --depth 1 --single-branch \
+ --no-tags -q "$1" "$dir" ||
+ {
+ cd "$dir" || return 1
+ sudo -u "$name" git pull --force origin master
+ }
+ cd "$dir" || exit 1
+ make >/dev/null 2>&1
+ make install >/dev/null 2>&1
+ cd /tmp || return 1
+}
+
+aurinstall() {
+ whiptail --title "MVBS Installation" \
+ --infobox "Installing \`$1\` ($n of $total) from the AUR. $1 $2" 9 70
+ echo "$aurinstalled" | grep -q "^$1$" && return 1
+ sudo -u "$name" $aurhelper -S --noconfirm "$1" >/dev/null 2>&1
+}
+
+pipinstall() {
+ whiptail --title "MVBS Installation" \
+ --infobox "Installing the Python package \`$1\` ($n of $total). $1 $2" 9 70
+ [ -x "$(command -v "pip")" ] || installpkg python-pip >/dev/null 2>&1
+ yes | pip install "$1"
+}
+
+installationloop() {
+ flavor="$(whiptail --menu 'Package list flavor:' 10 60 2 cli 'installs unix ide cli tools only.' desktop 'installs a desktop with managed windows.' 3>&1 1>&2 2>&3 3>&1)"
+ ([ -f "$progsfile" ] && cp "$progsfile" /tmp/progs.csv) ||
+ curl -Ls "$progsfile" | sed '/^#/d' >/tmp/progs.csv
+ case "$flavor" in
+ cli) total=$(grep -e "^cli" /tmp/progs.csv | wc -l); grep -e "^cli" /tmp/progs.csv ;;
+ desktop) total=$(grep -e "^desktop" -e "^cli" /tmp/progs.csv | wc -l); grep -e "^desktop" -e "^cli" /tmp/progs.csv ;;
+ *) total=$(wc -l </tmp/progs.csv); cat /tmp/progs.csv ;;
+ esac | while IFS=, read -r flavor tag program comment; do
+ n=$((n + 1))
+ echo "$comment" | grep -q "^\".*\"$" &&
+ comment="$(echo "$comment" | sed -E "s/(^\"|\"$)//g")"
+ case "$tag" in
+ "G") gitmakeinstall "$program" "$comment" ;;
+ *) maininstall "$program" "$comment" ;;
+ esac
+ done </tmp/progs.csv
+}
+
+putgitrepo() {
+ # Downloads a gitrepo $1 and places the files in $2 only overwriting conflicts
+ whiptail --infobox "Downloading and installing config files..." 7 60
+ [ -z "$3" ] && branch="master" || branch="$repobranch"
+ dir=$(mktemp -d)
+ [ ! -d "$2" ] && mkdir -p "$2"
+ chown "$name":wheel "$dir" "$2"
+ sudo -u "$name" git -C "$repodir" clone --depth 1 \
+ --single-branch --no-tags -q --recursive -b "$branch" \
+ --recurse-submodules "$1" "$dir"
+ sudo -u "$name" cp -rfT "$dir" "$2"
+}
+
+vimplugininstall() {
+ # Installs vim plugins.
+ whiptail --infobox "Installing neovim plugins..." 7 60
+ mkdir -p "/home/$name/.config/nvim/autoload"
+ curl -Ls "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > "/home/$name/.config/nvim/autoload/plug.vim"
+ chown -R "$name:wheel" "/home/$name/.config/nvim"
+ sudo -u "$name" nvim -c "PlugInstall|q|q"
+}
+
+makeuserjs(){
+ # Get the Arkenfox user.js and prepare it.
+ arkenfox="$pdir/arkenfox.js"
+ overrides="$pdir/user-overrides.js"
+ userjs="$pdir/user.js"
+ ln -fs "/home/$name/.config/firefox/larbs.js" "$overrides"
+ [ ! -f "$arkenfox" ] && curl -sL "https://raw.githubusercontent.com/arkenfox/user.js/master/user.js" > "$arkenfox"
+ cat "$arkenfox" "$overrides" > "$userjs"
+ chown "$name:wheel" "$arkenfox" "$userjs"
+ # Install the updating script.
+ mkdir -p /usr/local/lib /etc/pacman.d/hooks
+ cp "/home/$name/.local/bin/arkenfox-auto-update" /usr/local/lib/
+ chown root:root /usr/local/lib/arkenfox-auto-update
+ chmod 755 /usr/local/lib/arkenfox-auto-update
+ # Trigger the update when needed via a pacman hook.
+ echo "[Trigger]
+Operation = Upgrade
+Type = Package
+Target = firefox
+Target = librewolf
+Target = librewolf-bin
+[Action]
+Description=Update Arkenfox user.js
+When=PostTransaction
+Depends=arkenfox-user.js
+Exec=/usr/local/lib/arkenfox-auto-update" > /etc/pacman.d/hooks/arkenfox.hook
+}
+
+installffaddons(){
+ addonlist="ublock-origin decentraleyes istilldontcareaboutcookies vim-vixen"
+ addontmp="$(mktemp -d)"
+ trap "rm -fr $addontmp" HUP INT QUIT TERM PWR EXIT
+ IFS=' '
+ sudo -u "$name" mkdir -p "$pdir/extensions/"
+ for addon in $addonlist; do
+ if [ "$addon" = "ublock-origin" ]; then
+ addonurl="$(curl -sL https://api.github.com/repos/gorhill/uBlock/releases/latest | grep -E 'browser_download_url.*\.firefox\.xpi' | cut -d '"' -f 4)"
+ else
+ addonurl="$(curl --silent "https://addons.mozilla.org/en-US/firefox/addon/${addon}/" | grep -o 'https://addons.mozilla.org/firefox/downloads/file/[^"]*')"
+ fi
+ file="${addonurl##*/}"
+ sudo -u "$name" curl -LOs "$addonurl" > "$addontmp/$file"
+ id="$(unzip -p "$file" manifest.json | grep "\"id\"")"
+ id="${id%\"*}"
+ id="${id##*\"}"
+ mv "$file" "$pdir/extensions/$id.xpi"
+ done
+ chown -R "$name:$name" "$pdir/extensions"
+ # Fix a Vim Vixen bug with dark mode not fixed on upstream:
+ sudo -u "$name" mkdir -p "$pdir/chrome"
+ [ ! -f "$pdir/chrome/userContent.css" ] && sudo -u "$name" echo ".vimvixen-console-frame { color-scheme: light !important; }
+#category-more-from-mozilla { display: none !important }" > "$pdir/chrome/userContent.css"
+}
+
+finalize() {
+ whiptail --title "All done!" \
+ --msgbox "Congrats! Provided there were no hidden errors, the script completed successfully and all the programs and configuration files should be in place.\\n\\nTo run the new graphical environment, log out and log back in as your new user, then run the command \"startx\" to start the graphical environment (it will start automatically in tty1).\\n\\n.t Luke" 13 80
+}
+
+### THE ACTUAL SCRIPT ###
+
+### This is how everything happens in an intuitive format and order.
+
+# Check if user is root on Arch distro. Install whiptail.
+xbps-install --yes newt ||
+ error "Are you sure you're running this as the root user, are on Void Linux and have an internet connection?"
+
+# Welcome user and pick dotfiles.
+welcomemsg || error "User exited."
+
+# Get and verify username and password.
+getuserandpass || error "User exited."
+
+# Give warning if user already exists.
+usercheck || error "User exited."
+
+# Last chance for user to back out before install.
+preinstallmsg || error "User exited."
+
+### The rest of the script requires no user input.
+for x in curl ca-certificates base-devel git ntp oksh; do
+ whiptail --title "MVBS Installation" \
+ --infobox "Installing \`$x\` which is required to install and configure other programs." 8 70
+ installpkg "$x"
+done
+
+whiptail --title "MVBS Installation" \
+ --infobox "Synchronizing system time to ensure successful and secure installation of software..." 8 70
+ntpd -q -g >/dev/null 2>&1
+
+adduserandpass || error "Error adding username and/or password."
+
+echo "%wheel ALL=(ALL) NOPASSWD: ALL
+Defaults:%wheel,root runcwd=*" >/etc/sudoers.d/mvbs
+
+# The command that does all the installing. Reads the progs.csv file and
+# installs each needed program the way required. Be sure to run this only after
+# the user has been created and has privileges to run sudo without a password
+# and all build dependencies are installed.
+installationloop
+
+# # Install the dotfiles in the user's home directory, but remove .git dir and
+# # other unnecessary files.
+# putgitrepo "$dotfilesrepo" "/home/$name" "$repobranch"
+# rm -rf "/home/$name/.git/" "/home/$name/README.md" "/home/$name/LICENSE" "/home/$name/FUNDING.yml"
+#
+# # Write urls for newsboat if it doesn't already exist
+# [ -s "/home/$name/.config/newsboat/urls" ] ||
+ # sudo -u "$name" echo "$rssurls" > "/home/$name/.config/newsboat/urls"
+#
+# # Install vim plugins if not alread present.
+# [ ! -f "/home/$name/.config/nvim/autoload/plug.vim" ] && vimplugininstall
+#
+# # Most important command! Get rid of the beep!
+# rmmod pcspkr
+# echo "blacklist pcspkr" >/etc/modprobe.d/nobeep.conf
+#
+# # Make zsh the default shell for the user.
+# chsh -s /bin/zsh "$name" >/dev/null 2>&1
+# sudo -u "$name" mkdir -p "/home/$name/.cache/zsh/"
+# sudo -u "$name" mkdir -p "/home/$name/.config/abook/"
+# sudo -u "$name" mkdir -p "/home/$name/.config/mpd/playlists/"
+#
+# # Make dash the default #!/bin/sh symlink.
+# ln -sfT /bin/dash /bin/sh >/dev/null 2>&1
+#
+# # dbus UUID must be generated for Artix runit.
+# dbus-uuidgen >/var/lib/dbus/machine-id
+#
+# # Use system notifications for Brave on Artix
+# echo "export \$(dbus-launch)" >/etc/profile.d/dbus.sh
+#
+# # Enable tap to click
+# [ ! -f /etc/X11/xorg.conf.d/40-libinput.conf ] && printf 'Section "InputClass"
+ # Identifier "libinput touchpad catchall"
+ # MatchIsTouchpad "on"
+ # MatchDevicePath "/dev/input/event*"
+ # Driver "libinput"
+ # # Enable left mouse button by tapping
+ # Option "Tapping" "on"
+# EndSection' >/etc/X11/xorg.conf.d/40-libinput.conf
+#
+# # All this below to get Librewolf installed with add-ons and non-bad settings.
+#
+# whiptail --infobox "Setting browser privacy settings and add-ons..." 7 60
+#
+# browserdir="/home/$name/.librewolf"
+# profilesini="$browserdir/profiles.ini"
+#
+# # Start librewolf headless so it generates a profile. Then get that profile in a variable.
+# sudo -u "$name" librewolf --headless >/dev/null 2>&1 &
+# sleep 1
+# profile="$(sed -n "/Default=.*.default-default/ s/.*=//p" "$profilesini")"
+# pdir="$browserdir/$profile"
+#
+# [ -d "$pdir" ] && makeuserjs
+#
+# [ -d "$pdir" ] && installffaddons
+#
+# # Kill the now unnecessary librewolf instance.
+# pkill -u "$name" librewolf
+#
+# # Allow wheel users to sudo with password and allow several system commands
+# # (like `shutdown` to run without password).
+# echo "%wheel ALL=(ALL:ALL) ALL" >/etc/sudoers.d/00-larbs-wheel-can-sudo
+# echo "%wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/systemctl suspend,/usr/bin/wifi-menu,/usr/bin/mount,/usr/bin/umount,/usr/bin/pacman -Syu,/usr/bin/pacman -Syyu,/usr/bin/pacman -Syyu --noconfirm,/usr/bin/loadkeys,/usr/bin/pacman -Syyuw --noconfirm,/usr/bin/pacman -S -y --config /etc/pacman.conf --,/usr/bin/pacman -S -y -u --config /etc/pacman.conf --" >/etc/sudoers.d/01-larbs-cmds-without-password
+# echo "Defaults editor=/usr/bin/nvim" >/etc/sudoers.d/02-larbs-visudo-editor
+# mkdir -p /etc/sysctl.d
+# echo "kernel.dmesg_restrict = 0" > /etc/sysctl.d/dmesg.conf
+#
+# # Cleanup
+# rm -f /etc/sudoers.d/larbs-temp
+#
+# # Last message! Install complete!
+# finalize
diff --git a/profiles/homeserver/transmission.nix b/profiles/homeserver/transmission.nix
index 8d047d7..c7e4e59 100644
--- a/profiles/homeserver/transmission.nix
+++ b/profiles/homeserver/transmission.nix
@@ -58,6 +58,7 @@ in {
"jellyfin.${my.domain}" = {locations."/" = {proxyPass = "http://127.0.0.1:8096";};};
};
};
+ networking.firewall.allowedTCPPorts = [ 8989 7878 6767 8787 9696 9091 8096 ];
# services = {
# jellyfin = { enable = true; group = "multimedia"; };
# sonarr = { enable = true; group = "multimedia"; };
@@ -79,7 +80,7 @@ in {
PGID = "${toString config.users.groups.multimedia.gid}";
};
volumes = [
- # "/data/config/prowlarr/data:/config"
+ "/data/config/prowlarr/data:/config"
"/data:/data"
];
};
@@ -92,7 +93,7 @@ in {
};
volumes = [
# "/data/media:/data"
- # "/data/config/bazarr/data:/config"
+ "/data/config/bazarr/data:/config"
"/data:/data"
];
};
@@ -104,7 +105,7 @@ in {
PGID = "${toString config.users.groups.multimedia.gid}";
};
volumes = [
- # "/data/config/radarr/data:/config"
+ "/data/config/radarr/data:/config"
"/data:/data"
];
};
@@ -116,7 +117,7 @@ in {
PGID = "${toString config.users.groups.multimedia.gid}";
};
volumes = [
- # "/data/config/sonarr/data:/config"
+ "/data/config/sonarr/data:/config"
"/data:/data"
];
};
@@ -125,21 +126,22 @@ in {
extraOptions = ["--net=host"];
user = "${toString config.users.users.jellyfin.uid}:${toString config.users.groups.multimedia.gid}";
volumes = [
- # "/data/media:/media"
- # "/data/config/jellyfin/config:/config"
- # "/data/config/jellyfin/cache:/cache"
+ "/data/config/jellyfin/config:/config"
+ "/data/config/jellyfin/cache:/cache"
"/data:/data"
];
};
transmission = {
image = "haugene/transmission-openvpn";
- extraOptions = ["--cap-add=NET_ADMIN" "--group-add=${toString config.users.groups.multimedia.gid}"];
+ extraOptions = ["--cap-add=NET_ADMIN" "--group-add=${toString config.users.groups.multimedia.gid}" "--device=/dev/net/tun"];
volumes = [
- # "/data/config/ovpn:/etc/openvpn/custom"
- # "/data/config/transmission:/config"
- # "/data/torrents:/data/torrents"
+ "/data/config/ovpn:/etc/openvpn/custom"
+ "/data/config/transmission:/config"
"/data:/data"
];
+ environment = {
+ CREATE_TUN_DEVICE="false";
+ };
ports = [
"9091:9091"
"5299:5299"
diff --git a/progs.csv b/progs.csv
index 9c4b720..4e8a467 100644
--- a/progs.csv
+++ b/progs.csv
@@ -1,63 +1,62 @@
-# #TAG,NAME IN REPO (or git url),PURPOSE (should be a verb phrase to sound right while installing)
-# ,xorg-server,"is the graphical server. This first one may take a while as it pulls many other dependencies first on clean installs."
-# ,xorg-xwininfo,"allows querying information about windows."
-# ,xorg-xinit,"starts the graphical server."
-# ,xorg-xset,"utility for configuring and ajusting X server"
-# ,polkit,"manages user policies."
-# ,libertinus-font,"provides the sans and serif fonts for LARBS."
-# ,ttf-font-awesome,"provides extended glyph support."
-# ,ttf-dejavu,"properly displays emojis."
-# A,lf-git,"is an extensive terminal file manager that everyone likes."
+# FLAVOR,TAG,NAME IN REPO (or git url),PURPOSE (should be a verb phrase to sound right while installing)
+cli,,vis,"is a minimal text editor based on vi and Plan9's structural regular expressions."
+desktop,,xorg-server,"is the graphical server. This first one may take a while as it pulls many other dependencies first on clean installs."
+desktop,,xorg-xwininfo,"allows querying information about windows."
+desktop,,xorg-xinit,"starts the graphical server."
+desktop,,xorg-xset,"utility for configuring and ajusting X server"
+desktop,,polkit,"manages user policies."
+desktop,,libertinus-font,"provides the sans and serif fonts for LARBS."
+desktop,,ttf-font-awesome,"provides extended glyph support."
+desktop,,ttf-dejavu,"properly displays emojis."
+cli,,lf,"is an extensive terminal file manager that everyone likes."
# ,ueberzug,"enables previews in the lf file manager."
-# ,bc,"is a mathematics language used for the dropdown calculator."
-# ,xcompmgr,"is for transparency and removing screen-tearing."
-# ,xorg-xprop,"is a tool for detecting window properties."
-# ,arandr,"allows the user to customize monitor arrangements."
-# ,dosfstools,"allows your computer to access dos-like filesystems."
-# ,libnotify,"allows desktop notifications."
-# ,dunst,"is a suckless notification system."
+cli,,bc,"is a mathematics language used for the dropdown calculator."
+desktop,,xcompmgr,"is for transparency and removing screen-tearing."
+desktop,,xorg-xprop,"is a tool for detecting window properties."
+desktop,,arandr,"allows the user to customize monitor arrangements."
+desktop,,dosfstools,"allows your computer to access dos-like filesystems."
+desktop,,libnotify,"allows desktop notifications."
+desktop,,dunst,"is a suckless notification system."
# ,calcurse,"terminal-based organizer for interactive and command line use"
-# ,exfat-utils,"allows management of FAT drives."
-# ,nsxiv,"is a minimalist image viewer."
-# ,xwallpaper,"sets the wallpaper."
-# ,ffmpeg,"can record and splice video and audio on the command line."
-# ,ffmpegthumbnailer,"creates thumbnail previews of video files."
-# ,gnome-keyring,"serves as the system keyring."
-# A,gtk-theme-arc-gruvbox-git,"gives the dark GTK theme used in LARBS."
-# ,python-qdarkstyle,"provides a dark Qt theme."
-# ,neovim,"a tidier vim with some useful features"
-# ,mpd,"is a lightweight music daemon."
-# ,mpc,"is a terminal interface for mpd."
-# ,mpv,"is the patrician's choice video player."
-# ,man-db,"lets you read man pages of programs."
-# ,ncmpcpp,"a ncurses interface for music with multiple formats and a powerful tag editor."
-# ,newsboat,"is a terminal RSS client."
+desktop,,exfat-utils,"allows management of FAT drives."
+desktop,,nsxiv,"is a minimalist image viewer."
+desktop,,xwallpaper,"sets the wallpaper."
+cli,,ffmpeg,"can record and splice video and audio on the command line."
+desktop,,ffmpegthumbnailer,"creates thumbnail previews of video files."
+desktop,,gnome-keyring,"serves as the system keyring."
+desktop,,gtk-theme-arc-gruvbox-git,"gives the dark GTK theme used in LARBS."
+desktop,,python-qdarkstyle,"provides a dark Qt theme."
+desktop,,mpd,"is a lightweight music daemon."
+desktop,,mpc,"is a terminal interface for mpd."
+desktop,,mpv,"is the patrician's choice video player."
+cli,,man-db,"lets you read man pages of programs."
+desktop,,ncmpcpp,"a ncurses interface for music with multiple formats and a powerful tag editor."
+cli,,newsboat,"is a terminal RSS client."
# A,librewolf-bin,"is the default browser of LARBS which also comes with ad-blocking and other sensible and necessary features by default."
# A,arkenfox-user.js,"provides hardened security settings for Firefox and Librewolf to avoid Mozilla spyware and general web fingerprinting."
-# ,noto-fonts,"is an expansive font package."
-# ,noto-fonts-emoji,"is an emoji font."
-# ,ntfs-3g,"allows accessing NTFS partitions."
-# ,wireplumber,"is the audio system."
-# ,pipewire-pulse,"gives pipewire compatibility with PulseAudio programs."
-# ,pulsemixer,"is an audio controller."
-# A,sc-im,"is an Excel-like terminal spreadsheet manager."
-# ,maim,"can take quick screenshots at your request."
-# A,abook,"is an offline addressbook usable by neomutt."
-# ,unclutter,"hides an inactive mouse."
-# ,unzip,"unzips zips."
-# ,lynx,"is a terminal browser also used in LARBS for generating in-terminal previews of websites, emails and HTML files."
-# ,xcape,"gives the special escape/super mappings of LARBS."
-# ,xclip,"allows for copying and pasting from the command line."
-# ,xdotool,"provides window action utilities on the command line."
-# ,yt-dlp,"can download any YouTube video (or playlist or channel) when given the link."
-# ,zathura,"is a pdf viewer with vim-like bindings."
-# ,zathura-pdf-mupdf,"allows mupdf pdf compatibility in zathura."
-# ,poppler,"manipulates .pdfs and gives .pdf previews and other .pdf functions."
-# ,mediainfo,"shows audio and video information and is used in the file browser."
-# ,atool,"manages and gives information about archives."
-# ,fzf,"is a fuzzy finder tool used for easy selection and location of files."
-# ,bat,"can highlight code output and display files and is used to generate previews in the file browser."
-# ,xorg-xbacklight,"enables changing screen brightness levels."
+desktop,,noto-fonts,"is an expansive font package."
+desktop,,noto-fonts-emoji,"is an emoji font."
+desktop,,ntfs-3g,"allows accessing NTFS partitions."
+desktop,,wireplumber,"is the audio system."
+desktop,,pipewire-pulse,"gives pipewire compatibility with PulseAudio programs."
+desktop,,pulsemixer,"is an audio controller."
+# cli,,sc-im,"is an Excel-like terminal spreadsheet manager."
+desktop,,maim,"can take quick screenshots at your request."
+desktop,,abook,"is an offline addressbook usable by neomutt."
+desktop,,unclutter,"hides an inactive mouse."
+desktop,,unzip,"unzips zips."
+desktop,,xcape,"gives the special escape/super mappings of LARBS."
+desktop,,xclip,"allows for copying and pasting from the command line."
+desktop,,xdotool,"provides window action utilities on the command line."
+cli,,yt-dlp,"can download any YouTube video (or playlist or channel) when given the link."
+desktop,,zathura,"is a pdf viewer with vim-like bindings."
+desktop,,zathura-pdf-mupdf,"allows mupdf pdf compatibility in zathura."
+cli,,poppler,"manipulates .pdfs and gives .pdf previews and other .pdf functions."
+cli,,mediainfo,"shows audio and video information and is used in the file browser."
+cli,,atool,"manages and gives information about archives."
+cli,,fzf,"is a fuzzy finder tool used for easy selection and location of files."
+cli,,bat,"can highlight code output and display files and is used to generate previews in the file browser."
+desktop,,xorg-xbacklight,"enables changing screen brightness levels."
# A,zsh-fast-syntax-highlighting-git,"provides syntax highlighting in the shell."
# A,task-spooler,"queues commands or files for download."
# A,simple-mtpfs,"enables the mounting of cell phones."
@@ -66,9 +65,9 @@
# G,https://github.com/lukesmithxyz/dmenu.git,"runs commands and provides a UI for selection."
# G,https://github.com/lukesmithxyz/st.git,"is my custom build of suckless's terminal emulator."
# G,https://github.com/lukesmithxyz/dwm.git,"is the window manager."
-# A,mutt-wizard-git,"is a light-weight terminal-based email system."
-# ,slock,"allows you to lock your computer, and quickly unlock with your password."
-# ,socat,"is a utility which establishes two byte streams and transfers data between them."
-# ,moreutils,"is a collection of useful unix tools."
+desktop,,mutt-wizard-git,"is a light-weight terminal-based email system."
+desktop,,slock,"allows you to lock your computer, and quickly unlock with your password."
+desktop,,socat,"is a utility which establishes two byte streams and transfers data between them."
+desktop,,moreutils,"is a collection of useful unix tools."
# ,tesseract,"command-line OCR engine for advance maimpick"
# ,tesseract-data-eng,"english language pack for OCR"