~kris/dots

sdeploy

ebdf5308ccb6316f7dc8e882bb711780bdad077f — Kris Yotam 5 months ago 9cef564
Rename ksd-arch to ksd-artix
R ksd-arch/deploy.sh => ksd-artix/deploy.sh +12 -117
@@ 17,7 17,7 @@
# Contact: krisyotam@protonmail.com
# Date: 2026.01.23
# License: GNU GPLv3
# Repository: https://github.com/krisyotam/lazykris
# Repository: https://github.com/krisyotam/sdeploy
# ============================================================================

# ============================================================================


@@ 27,9 27,9 @@
# Repository URLs and branches
DOTFILES_REPO="https://github.com/krisyotam/srice.git"
DOTFILES_BRANCH="main"
PROGS_FILE="https://raw.githubusercontent.com/krisyotam/sdeploy/main/ksd-arch/progs.csv"
NOTES_FILE="https://raw.githubusercontent.com/krisyotam/sdeploy/main/ksd-arch/notes.csv"
DEV_FILE="https://raw.githubusercontent.com/krisyotam/sdeploy/main/ksd-arch/dev.csv"
PROGS_FILE="https://raw.githubusercontent.com/krisyotam/sdeploy/main/ksd-artix/progs.csv"
NOTES_FILE="https://raw.githubusercontent.com/krisyotam/sdeploy/main/ksd-artix/notes.csv"
DEV_FILE="https://raw.githubusercontent.com/krisyotam/sdeploy/main/ksd-artix/dev.csv"

# Doom Emacs repository
DOOM_REPO="https://github.com/doomemacs/doomemacs"


@@ 40,19 40,12 @@ DEV_TLDS="sites systems formal foss labs parsing"
# AUR helper of choice (yay is recommended)
AUR_HELPER="yay"

# BlackArch repository setup script
# BlackArch repository setup script (pentest machines only, not enabled by default)
BLACKARCH_STRAP="https://blackarch.org/strap.sh"

# AppImages directory (relative to user home)
APPIMAGES_DIR=".local/bin/appimages"

# Source directory for git builds (suckless, etc)
SRC_DIR=".local/src"

# Flatpak remote
FLATPAK_REMOTE="flathub"
FLATPAK_REMOTE_URL="https://dl.flathub.org/repo/flathub.flatpakrepo"

# Terminal settings
export TERM=ansi



@@ 232,7 225,7 @@ welcomemsg() {
Welcome to LazyKris!

This script will automatically install a fully-featured
Arch Linux desktop with my custom builds of dwm, dmenu,
Artix Linux desktop with my custom builds of dwm, dmenu,
dwmblocks, st, and surf. In addition several extreme privacy
configs for the rotation of browsers ran.



@@ 375,35 368,6 @@ Include = /etc/pacman.d/mirrorlist-arch" >>/etc/pacman.conf
    esac
}

# Set up BlackArch repository for security tools
setup_blackarch() {
    whiptail --infobox "Setting up BlackArch repository..." 7 50

    # Check if BlackArch is already configured
    if grep -q "^\[blackarch\]" /etc/pacman.conf; then
        return 0
    fi

    # Download and run the strap script
    curl -sL "$BLACKARCH_STRAP" -o /tmp/blackarch-strap.sh
    chmod +x /tmp/blackarch-strap.sh
    /tmp/blackarch-strap.sh >/dev/null 2>&1

    # Sync repos
    pacman -Sy --noconfirm >/dev/null 2>&1
}

# Set up Flatpak
setup_flatpak() {
    whiptail --infobox "Setting up Flatpak..." 7 40

    # Install flatpak if not present
    installpkg flatpak

    # Add flathub remote
    flatpak remote-add --if-not-exists "$FLATPAK_REMOTE" "$FLATPAK_REMOTE_URL" >/dev/null 2>&1
}

# ============================================================================
# PACKAGE INSTALLATION FUNCTIONS
# ============================================================================


@@ 476,51 440,6 @@ $2" 8 70
    cd /tmp || return 1
}

# Install from Flatpak
flatpakinstall() {
    whiptail --title "LazyKris Installation" \
        --infobox "[$n/$total] Installing Flatpak: $1

$2" 8 70

    flatpak install -y "$FLATPAK_REMOTE" "$1" >/dev/null 2>&1
}

# Install AppImage from URL
appimageinstall() {
    # Extract filename from URL
    filename="${1##*/}"
    # Clean up the filename (remove version numbers for cleaner name)
    cleanname=$(echo "$filename" | sed 's/-[0-9].*\.AppImage/.AppImage/')

    whiptail --title "LazyKris Installation" \
        --infobox "[$n/$total] Downloading AppImage: $cleanname

$2" 8 70

    # Create appimages directory
    appdir="/home/$name/$APPIMAGES_DIR"
    sudo -u "$name" mkdir -p "$appdir"

    # Download and make executable
    sudo -u "$name" curl -sL "$1" -o "$appdir/$cleanname"
    chmod +x "$appdir/$cleanname"
    chown "$name":wheel "$appdir/$cleanname"
}

# Install from BlackArch repository
blackarchinstall() {
    whiptail --title "LazyKris Installation" \
        --infobox "[$n/$total] Installing from BlackArch: $1

$2" 8 70

    # Ensure BlackArch is set up
    grep -q "^\[blackarch\]" /etc/pacman.conf || setup_blackarch

    installpkg "$1"
}

# ============================================================================
# MAIN INSTALLATION LOOP
# ============================================================================


@@ 538,23 457,6 @@ installationloop() {
    total=$(wc -l </tmp/progs-clean.csv)
    aurinstalled=$(pacman -Qqm 2>/dev/null)

    # Track if we need special setup
    needs_blackarch=false
    needs_flatpak=false

    # First pass: check what we need
    while IFS=, read -r tag program comment; do
        case "$tag" in
            "B") needs_blackarch=true ;;
            "F") needs_flatpak=true ;;
        esac
    done </tmp/progs-clean.csv

    # Set up special repositories if needed
    [ "$needs_blackarch" = true ] && setup_blackarch
    [ "$needs_flatpak" = true ] && setup_flatpak

    # Second pass: install everything
    n=0
    while IFS=, read -r tag program comment; do
        n=$((n + 1))


@@ 566,9 468,6 @@ installationloop() {
        case "$tag" in
            "A") aurinstall "$program" "$comment" ;;
            "G") gitmakeinstall "$program" "$comment" ;;
            "F") flatpakinstall "$program" "$comment" ;;
            "I") appimageinstall "$program" "$comment" ;;
            "B") blackarchinstall "$program" "$comment" ;;
            *)   maininstall "$program" "$comment" ;;
        esac
    done </tmp/progs-clean.csv


@@ 722,7 621,7 @@ putgitrepo() {
    rm -rf "$2/.git" "$2/README.md" "$2/LICENSE" "$2/FUNDING.yml" "$2/.stowrc" "$2/.stow-local-ignore"

    # Keep a copy of the repo in .local/src for reference/updates
    dotfiles_dir="/home/$name/.local/src/lazykris"
    dotfiles_dir="/home/$name/.local/src/srice"
    sudo -u "$name" mkdir -p "$(dirname "$dotfiles_dir")"
    sudo -u "$name" cp -rfT "$dir/repo" "$dotfiles_dir"



@@ 733,7 632,7 @@ putgitrepo() {
setup_wallpaper() {
    whiptail --infobox "Setting wallpaper..." 7 50

    wallpaper="/home/$name/.local/share/lazykris/lazykris-wallpaper.png"
    wallpaper="/home/$name/.local/share/wallpapers/d1e2f1-horizontal.png"
    if [ -f "$wallpaper" ] && [ -x "/home/$name/.local/bin/setbg" ]; then
        sudo -u "$name" /home/$name/.local/bin/setbg -s "$wallpaper"
    fi


@@ 814,7 713,6 @@ create_directories() {

    # XDG directories (.local)
    sudo -u "$name" mkdir -p "$homedir/.local/bin"
    sudo -u "$name" mkdir -p "$homedir/.local/bin/appimages"
    sudo -u "$name" mkdir -p "$homedir/.local/bin/statusbar"
    sudo -u "$name" mkdir -p "$homedir/.local/src"
    sudo -u "$name" mkdir -p "$homedir/.local/share"


@@ 826,9 724,6 @@ create_directories() {
    sudo -u "$name" mkdir -p "$homedir/.cache"
    sudo -u "$name" mkdir -p "$homedir/.cache/fish"

    # Flatpak data directory
    sudo -u "$name" mkdir -p "$homedir/.var/app"

    # Keys and security (empty, managed by tools)
    sudo -u "$name" mkdir -p "$homedir/.ssh"
    sudo -u "$name" mkdir -p "$homedir/.gnupg"


@@ 921,7 816,7 @@ setup_sudoers() {
    echo "%wheel ALL=(ALL:ALL) ALL" >/etc/sudoers.d/00-wheel-can-sudo

    # Allow certain commands without password
    echo "%wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/systemctl suspend,/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" >/etc/sudoers.d/01-cmds-without-password
    echo "%wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/loginctl suspend,/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" >/etc/sudoers.d/01-cmds-without-password

    # Set neovim as default editor for visudo
    echo "Defaults editor=/usr/bin/nvim" >/etc/sudoers.d/02-visudo-editor


@@ 939,7 834,7 @@ setup_sudoers() {
# Clean up temporary files
cleanup() {
    rm -f /tmp/progs.csv /tmp/progs-clean.csv
    rm -f /etc/sudoers.d/lazykris-temp
    rm -f /etc/sudoers.d/sdeploy-temp
}

# Display completion message


@@ 1006,9 901,9 @@ adduserandpass || error "Failed to create user account."
[ -f /etc/sudoers.pacnew ] && cp /etc/sudoers.pacnew /etc/sudoers

# Temporarily allow passwordless sudo for builds
trap 'rm -f /etc/sudoers.d/lazykris-temp' HUP INT QUIT TERM PWR EXIT
trap 'rm -f /etc/sudoers.d/sdeploy-temp' HUP INT QUIT TERM PWR EXIT
echo "%wheel ALL=(ALL) NOPASSWD: ALL
Defaults:%wheel,root runcwd=*" >/etc/sudoers.d/lazykris-temp
Defaults:%wheel,root runcwd=*" >/etc/sudoers.d/sdeploy-temp

# Apply system tweaks
system_tweaks

R ksd-arch/dev.csv => ksd-artix/dev.csv +0 -0
R ksd-arch/manual.pdf => ksd-artix/manual.pdf +0 -0
R ksd-arch/manual.tex => ksd-artix/manual.tex +0 -0
R ksd-arch/notes.csv => ksd-artix/notes.csv +0 -0
R ksd-arch/post-install.sh => ksd-artix/post-install.sh +0 -0
R ksd-arch/progs.csv => ksd-artix/progs.csv +97 -72
@@ 1,14 1,14 @@
#TAG,PACKAGE,DESCRIPTION
#
# Legend:
# (empty) = pacman (official repos)
# A = AUR (via yay)
# G = Git clone + make install
# F = Flatpak
# I = AppImage (download URL)
# B = BlackArch (requires strap.sh first)
# (empty) = pacman (Artix + Arch repos via artix-archlinux-support)
# A = AUR (via yay) — only when no official repo alternative exists
# G = Git clone + make install — suckless builds only
# B = BlackArch (requires strap.sh) — NOT enabled by default, pentest flag only
#
# =====================================================================
# Basic Programs
# =====================================================================
A,lf,"terminal file browser/manager"
,btop,"task manager and system monitor"
,neomutt,"terminal email client"


@@ 18,7 18,7 @@ A,abook,"address book for neomutt"
,networkmanager,"provides nmtui for wifi management"
,bluez,"Bluetooth protocol stack"
,bluez-utils,"Bluetooth utilities (bluetoothctl)"
,blueman,"Bluetooth manager GUI (blueman-manager)"
,blueman,"Bluetooth manager GUI"
,newsboat,"terminal RSS feed reader"
,pulsemixer,"terminal audio control"
A,mouseless-bin,"keyboard-driven mouse control"


@@ 28,7 28,9 @@ A,mouseless-bin,"keyboard-driven mouse control"
,calcurse,"terminal calendar and organizer"
A,sc-im,"terminal spreadsheet (Excel-like)"
#
# System/X11
# =====================================================================
# System / X11
# =====================================================================
,xorg-server,"graphical server"
,xorg-xinit,"starts graphical server"
,xorg-xwininfo,"window info queries"


@@ 36,75 38,72 @@ A,sc-im,"terminal spreadsheet (Excel-like)"
,xorg-xprop,"window properties tool"
,xorg-xbacklight,"screen brightness control"
,polkit,"user policy management"
,xcompmgr,"compositor for transparency"
,picom,"compositor for transparency and effects"
,webkit2gtk,"web rendering engine for surf"
,gcr,"crypto UI library for surf"
,xwallpaper,"wallpaper setter"
,xclip,"clipboard from command line"
,xdotool,"window automation tool"
,xcape,"key remapping (capslock to escape)"
,unclutter,"hides inactive mouse cursor"
,slock,"simple screen locker"
,arandr,"monitor arrangement GUI"
#
# =====================================================================
# Suckless Builds
# =====================================================================
G,https://github.com/krisyotam/dwm,"tiling window manager"
G,https://github.com/krisyotam/dwmblocks,"modular status bar"
G,https://github.com/krisyotam/dmenu,"application launcher"
G,https://github.com/krisyotam/st,"terminal emulator"
G,https://github.com/krisyotam/scron,"simple cron daemon"
G,https://github.com/krisyotam/quark,"tiny HTTP server"
G,https://github.com/krisyotam/surf,"minimal webkit browser for deep work"
G,https://github.com/krisyotam/surf,"minimal webkit browser"
#
# Fonts - System
# =====================================================================
# Fonts — System
# =====================================================================
,noto-fonts,"comprehensive Unicode coverage"
,noto-fonts-cjk,"Chinese Japanese Korean support"
,noto-fonts-emoji,"emoji font"
,ttf-liberation,"metric-compatible Arial Times Courier"
,ttf-dejavu,"excellent Unicode coverage"
,ttf-roboto,"Google Roboto font"
A,ttf-opensans,"Open Sans font"
,ttf-ubuntu-font-family,"Ubuntu fonts"
,ttf-droid,"Droid fonts"
,inter-font,"modern UI font"
,adobe-source-sans-fonts,"Adobe Source Sans"
,adobe-source-serif-fonts,"Adobe Source Serif"
,adobe-source-code-pro-fonts,"Adobe Source Code Pro"
A,ttf-cascadia-code,"Microsoft Cascadia Code"
,otf-libertinus,"Libertinus serif and sans"
,ttf-font-awesome,"icons and glyphs"
#
# Fonts - Monospace/Coding
# =====================================================================
# Fonts — Monospace / Coding
# =====================================================================
,ttf-fira-code,"coding font with ligatures"
,ttf-hack,"Hack monospace font"
,ttf-inconsolata,"Inconsolata font"
A,ttf-iosevka-bin,"Iosevka font (prebuilt)"
,ttf-jetbrains-mono,"JetBrains Mono font"
#
# Fonts - Nerd Fonts
# =====================================================================
# Fonts — Nerd Fonts
# =====================================================================
,ttf-jetbrains-mono-nerd,"JetBrains Mono with Nerd icons"
,ttf-firacode-nerd,"Fira Code with Nerd icons"
,ttf-hack-nerd,"Hack with Nerd icons"
,ttf-meslo-nerd,"Meslo with Nerd icons"
,ttf-sourcecodepro-nerd,"Source Code Pro with Nerd icons"
A,ttf-iosevka-nerd-bin,"Iosevka with Nerd icons (prebuilt)"
,ttf-cascadia-code-nerd,"Cascadia Code with Nerd icons"
A,ttf-ubuntu-nerd,"Ubuntu Mono with Nerd icons"
A,ttf-roboto-mono-nerd,"Roboto Mono with Nerd icons"
,ttf-nerd-fonts-symbols,"standalone Nerd symbols"
#
# =====================================================================
# Font Management
# =====================================================================
,fontconfig,"font configuration"
A,fontpreview-ueberzug,"terminal font previewer"
#
# =====================================================================
# Theming
# =====================================================================
,gnome-keyring,"system keyring"
A,gtk-theme-arc-gruvbox-git,"dark GTK theme"
,python-qdarkstyle,"dark Qt theme"
,libnotify,"desktop notifications library"
,dunst,"notification daemon"
#
# Audio/Video
# =====================================================================
# Audio / Video
# =====================================================================
,mpd,"music player daemon"
,mpc,"mpd terminal interface"
,mpv,"video player"


@@ 115,13 114,17 @@ A,gtk-theme-arc-gruvbox-git,"dark GTK theme"
,pipewire-pulse,"PulseAudio compatibility"
,alsa-utils,"ALSA utilities including amixer"
#
# =====================================================================
# Filesystem
# =====================================================================
,dosfstools,"DOS filesystem tools"
,exfatprogs,"exFAT filesystem tools"
,ntfs-3g,"NTFS partition access"
A,simple-mtpfs,"phone and MTP mounting"
#
# =====================================================================
# Utilities
# =====================================================================
,bc,"calculator language"
,man-db,"man pages database"
,maim,"screenshot tool"


@@ 129,7 132,6 @@ A,simple-mtpfs,"phone and MTP mounting"
,atool,"archive management"
,poppler,"PDF utilities"
,mediainfo,"media file info"
A,task-spooler,"command queue"
,socat,"data transfer utility"
,moreutils,"unix utilities collection"
,tesseract,"OCR engine"


@@ 147,22 149,27 @@ A,task-spooler,"command queue"
,eza,"modern ls replacement"
,zoxide,"smarter cd command"
,dust,"disk usage analyzer"
A,dysk,"disk usage viewer for statusbar"
,lm_sensors,"hardware sensors for temperature"
,sysstat,"system stats including iostat"
,playerctl,"media player controller for statusbar"
,playerctl,"media player controller"
,upower,"battery and power device info"
,acpi,"battery status utility"
#
# IDEs/Editors
# =====================================================================
# Editors / IDEs
# =====================================================================
,neovim,"modern vim"
,zed,"AI-powered IDE"
A,claude-code-bin,"Anthropic AI CLI"
#
# =====================================================================
# Terminals
A,warp-terminal,"AI terminal"
# =====================================================================
A,warp-terminal,"AI terminal (proprietary — phasing out)"
#
# =====================================================================
# Browsers
# =====================================================================
A,librewolf-bin,"privacy-focused browser"
A,librewolf-extension-localcdn-bin,"CDN emulation extension"
A,librewolf-extension-istilldontcareaboutcookies-bin,"cookie banner remover"


@@ 170,15 177,20 @@ A,librewolf-extension-tridactyl-bin,"vim bindings extension"
A,librewolf-extension-ublock-origin-bin,"ad blocker extension"
A,arkenfox-user.js,"browser hardening config"
,torbrowser-launcher,"Tor browser"
A,mullvad-browser-bin,"Mullvad privacy browser"
#
# Writing Software (Flatpak)
I,https://github.com/vkbo/novelWriter/releases/download/v2.8.2/novelwriter-2.8.2-x86_64.AppImage,"novel writing software"
F,com.notesnook.Notesnook,"encrypted note-taking"
# =====================================================================
# Writing Software
# =====================================================================
A,novelwriter,"novel writing software"
A,notesnook-bin,"encrypted note-taking"
#
# LaTeX - use post-install.sh for full texlive suite
# =====================================================================
# LaTeX — use post-install.sh for full texlive suite
# =====================================================================
#
# =====================================================================
# Tools
# =====================================================================
,git,"version control"
,github-cli,"GitHub CLI"
,openssh,"SSH client and server"


@@ 197,59 209,47 @@ A,flarectl,"Cloudflare CLI"
,zathura-pdf-mupdf,"mupdf backend for zathura"
,yt-dlp,"YouTube downloader"
#
# Media/Anime
# =====================================================================
# Media / Anime
# =====================================================================
A,ani-cli,"anime streaming CLI"
A,manga-tui,"terminal manga reader with image support"
A,manga-tui,"terminal manga reader"
A,hakuneko-desktop,"manga and anime downloader"
I,https://api.hayase.watch/files/linux-hayase-6.4.50-linux.AppImage,"anime streaming app"
A,hayase-bin,"anime streaming app"
#
# Misc Programs
A,speedtest-cli,"internet speed test"
A,wikiman,"offline wiki and man pages"
A,gphoto2,"DSLR camera control"
A,v4l2loopback-dkms,"virtual webcam for DSLR"
,bat,"cat with syntax highlighting"
A,python-pywal,"colorscheme generator"
#
# VPNs
A,mullvad-vpn-bin,"Mullvad VPN client"
,openvpn,"OpenVPN client"
#
# Security
A,protonmail-bridge,"Proton Mail bridge for email clients"
A,proton-pass,"Proton Authenticator"
,proxychains-ng,"proxy chaining"
,gnupg,"GPG encryption"
,pass,"password manager using GPG"
,sqlcipher,"encrypted SQLite"
A,clipnotify,"clipboard change notifications"
#
# Video/Graphics
# =====================================================================
# Video / Graphics
# =====================================================================
,obs-studio,"screen recording and streaming"
#A,davinci-resolve,"video editor - use post-install.sh"
,gimp,"image editor"
,inkscape,"vector graphics editor"
F,org.kde.SymbolEditor,"symbol and icon editor"
,imagemagick,"image manipulation CLI"
,perl-image-exiftool,"read/write EXIF metadata"
,flameshot,"screenshot with annotation"
#
# =====================================================================
# Social
F,com.discordapp.Discord,"Discord client"
# =====================================================================
,element-desktop,"Matrix client"
A,catgirl,"terminal IRC client"
#
# =====================================================================
# Torrent
# =====================================================================
,rtorrent,"terminal torrent client"
,transmission-cli,"transmission daemon and CLI tools"
#
# =====================================================================
# Shell
# =====================================================================
,fish,"friendly interactive shell"
,starship,"cross-shell prompt"
,direnv,"per-directory environment"
,gum,"fluid terminal UI toolkit"
#
# Compilers/Languages
# =====================================================================
# Compilers / Languages
# =====================================================================
,gcc,"C and C++ compiler"
,clang,"LLVM C and C++ compiler"
,dotnet-sdk,".NET SDK"


@@ 264,6 264,31 @@ A,catgirl,"terminal IRC client"
,nodejs,"JavaScript runtime"
,npm,"Node package manager"
,go,"Go language"
#
# =====================================================================
# VPN
# =====================================================================
A,mullvad-vpn-bin,"Mullvad VPN client"
,openvpn,"OpenVPN client"
#
# =====================================================================
# Security
# =====================================================================
A,protonmail-bridge,"Proton Mail bridge for email clients"
,proxychains-ng,"proxy chaining"
,gnupg,"GPG encryption"
,pass,"password manager using GPG"
,sqlcipher,"encrypted SQLite"
#
# =====================================================================
# Misc
# =====================================================================
,bat,"cat with syntax highlighting"
A,python-pywal,"colorscheme generator"
,conky,"system monitor with Lua scripting"
,inetutils,"network utilities including hostname command"
A,cmatrix-git,"matrix terminal animation with transparency"
,conky,"System monitor for X and Wayland with Lua scripting"
A,speedtest-cli,"internet speed test"
A,wikiman,"offline wiki and man pages"
A,gphoto2,"DSLR camera control"
A,v4l2loopback-dkms,"virtual webcam for DSLR"
A,cmatrix-git,"matrix terminal animation"