function deploySoftware -d "Deploys a the specified software action" -a action
    set -l dir (status dirname)
    . "$dir/software.fish"
    . "$dir/../../lib/settings.fish"

    if [ -z "$action" ]
        set action install
    end

    set -l isInstall (
        if [ "$action" = "install" ]
            echo true
        else
            echo false
        end
    )

    if isOSEnabled secureBoot
        source "$dir/../Config/SecureBoot/main.fish" $argv
    end

    and if isOSEnabled hardware.surfaceBook
        source "$dir/../Drivers/SurfaceBook2/main.fish" $argv
    end

    and if isOSEnabled hardware.nvidiaGPU
        source "$dir/../Software/nvidia-dkms/main.fish" $argv
    end

    and if isOSEnabled hardware.xoneReceiver
        source "$dir/../Software/xone/main.fish" $argv
    end

    and for component in (getOSConfig hardware.components --json | jq '.[]' --raw-output0 | string split0)
        switch "$component"
            case "Logitech G903"
                source "$dir/../../Common/Drivers/Logitech G903/main.fish" $argv
            case "ROG Zenith Extreme Alpha"
                if $isInstall
                    sudo systemctl mask "dev-tpmrm0.device"
                end
        end
    end

    and if isEnabled valhalla.windows.dualboot.enable && $isInstall
        yayinst bt-dualboot
    end

    and if collectionActive essential && $isInstall
        yayinst \
            mkinitcpio-firmware \
            neofetch \
            bash-completion \
            wget \
            screen \
            tmux \
            htop \
            lsof \
            zsh \
            fish \
            pkgfile \
            sl \
            rar

        and sudo pkgfile --update

        yayinst \
            tldr \
            btop \
            terminal-parrot
    end

    and source "$dir/../../Common/Software/bash/main.fish" $argv
    and source "$dir/../../Common/Software/nuke-usb/main.fish" $argv
    and source "$dir/../Software/sudo/main.fish" $argv
    and source "$dir/../Software/aliae/main.fish" $argv
    and source "$dir/../Software/oh-my-posh/main.fish" $argv
    and source "$dir/../Software/openssh/main.fish" $argv
    and source "$dir/../Software/vim/main.fish" $argv
    and source "$dir/../Software/git/main.fish" $argv
    and source "$dir/../Software/zoxide/main.fish" $argv
    and source "$dir/../Software/logo-ls/main.fish" $argv
    and source "$dir/../../Common/Software/linux/main.fish" $argv

    # GRUB Shenanigans - if that's not essential I don't know what is!
    and source "$dir/../Software/minegrub-theme/main.fish" $argv

    # Desktop Experience
    and source "$dir/../Software/plasma/main.fish" $argv
    and source "$dir/../Software/sddm/main.fish" $argv
    and source "$dir/../Software/icedtea/main.fish" $argv

    and if collectionActive desktopExperience && $isInstall
        yayinst \
            maliit-keyboard \
            dconf-editor \
            flatpak (
                # Fixes: https://www.reddit.com/r/flatpak/comments/168tav2/how_to_fix_blurry_flatpaks_on_high_resolution/
            ) xdg-desktop-portal-gtk

        # Fonts
        and yayinst \
            ttf-cascadia-code-nerd \
            ttf-ms-win11-auto \
            otf-cascadia-code \
            ttf-droid

        # Password Management
        and yayinst \
            bitwarden \
            keepass \
            keepassxc

        # Tools
        and yayinst \
            android-tools \
            blackbox-terminal \
            cpu-x \
            gnome-calculator \
            yubikey-manager-qt \
            wireshark-qt \
            linux-wifi-hotspot

        # Remote Access
        and yayinst \
            remmina (
                # RDP support for Remmina
            ) freerdp

        # Creativity
        and yayinst \
            gimp \
            inkscape

        # Office stuff
        and yayinst \
            libreoffice-fresh \
            naps2-bin \
            pdfarranger \
            protonmail-bridge

        and yayinst \
            texlive \
            texlive-langgerman

        # Virtualization
        and yayinst propertree-git # mac .plist config file editor
    end

    and if isProgramEnabled thunderbird && $isInstall
        yayinst thunderbird
    end

    # School & Studies
    and if collectionActive school && $isInstall
        yayinst \
            teams-for-linux \
            xournalpp-git \
            rnote
    end

    # Internet Access
    and source "$dir/../Software/firefox/main.fish" $argv
    and source "$dir/../Software/brave/main.fish" $argv
    and source "$dir/../Software/pennywise/main.fish" $argv

    # Virtualization
    and source "$dir/../Software/waydroid/main.fish" $argv
    and source "$dir/../Software/virt-manager/main.fish" $argv

    and if $isInstall
        if collectionActive server
        else
            # Energy Saving
            yayinst power-profiles-daemon
            and sudo systemctl enable --now power-profiles-daemon

            # Networking
            and yayinst \
                networkmanager-openvpn \
                networkmanager-openconnect \
                proton-vpn-gtk-app \
                protonvpn-cli-community \
                img2pdf \
                numbat-bin \
                nvtop \
                pdf2svg \
                tnef
        end

        and if collectionActive media
            yayinst \
                ytmdesktop-bin \
                netflix \
                spotube-bin \
                stremio \
                tidal-dl-ng \
                tidal-hifi-bin \
                nuclear-player-bin \
                audius-client-bin
        end

        and if isProgramEnabled nextcloud
            yayinst nextcloud-client
        end
    end

    and source "$dir/../Software/rclone/main.fish" $argv

    if $isInstall
        if collectionActive socialMedia
            yayinst signal-desktop

            and begin
                yes y | runYay threema-desktop
            end

            and begin
                yes y | runYay nodejs
            end
        end

        and if isProgramEnabled discord
            yayinst vesktop-bin
        end

        and if collectionActive productivity
            yayinst \
                anki-bin
        end
    end

    and if collectionActive school
        if $isInstall
            yayinst \
                jdk17-temurin \
                gradle \
                jetbrains-toolbox
        end

        and source "$dir/../../Common/Software/udev/ct-board.fish"
    end

    # Development
    and if collectionActive coding
        if $isInstall
            yayinst \
                archiso \
                wimlib (
                    # ISO support for wimlib
                ) cdrkit \
                tea \
                woodpecker-cli (
                    # AsciiDocs
                ) python-docutils (
                    # reStructuredText
                ) esbonio \
                devdocs-desktop \
                godot-mono \
                python \
                python-pip \
                python-pipenv
        end
    end

    and source "$dir/../Software/pyenv/main.fish" $argv
    and source "$dir/../Software/nodejs-n/main.fish" $argv
    and source "$dir/../Software/docker/main.fish" $argv
    and source "$dir/../Software/vscode/main.fish" $argv

    if $isInstall
        if collectionActive gaming
            if $isInstall
                yayinst \
                    supertux \
                    gamepad-tool-bin

                and yayinst chiaki-ng || true
                and sudo flatpak install -y flathub com.usebottles.bottles
            end
        end

        and if isProgramEnabled "osu!lazer"
            yayinst osu-lazer-bin
        end

        and if isProgramEnabled retroarch
            yayinst libretro
        end
    end

    and source "$dir/../Software/lutris/main.fish" $argv
    and source "$dir/../Software/steam/main.fish" $argv

    and if collectionActive essential && $isInstall
        yayinst bb
    end
end

deploySoftware $argv