diff --git a/config/defaults.conf b/config/defaults.conf index c3279ab..175c550 100644 --- a/config/defaults.conf +++ b/config/defaults.conf @@ -28,7 +28,8 @@ MIRROR_URL='https://mirrors.logal.dev/archlinux/$repo/os/$arch' # Paths CA_CERTS_DIR="${SCRIPT_DIR}/files/certs" CONFIG_SRC_DIR="${SCRIPT_DIR}/files/etc" -HOME_CONFIG_DIR="${SCRIPT_DIR}/files/home" +HOME_SKEL_DIR="${SCRIPT_DIR}/files/home-skel" +HOME_SKEL_DESKTOP_DIR="${SCRIPT_DIR}/files/home-skel-desktop" MOUNT_POINT="/mnt" # Base packages to install with pacstrap @@ -51,4 +52,6 @@ BASE_PACKAGES=( iptables-nft openssh usbguard + 7zip + fwupd ) diff --git a/config/profiles.conf b/config/profiles.conf index e8f2878..af440dd 100644 --- a/config/profiles.conf +++ b/config/profiles.conf @@ -16,52 +16,95 @@ # profiles.conf - Profile and desktop environment package definitions # -# Defines XFCE packages and installation profiles. Adding a new profile +# Defines KDE packages and installation profiles. Adding a new profile # requires only adding entries here - no code changes needed. #=============================================================================== # DESKTOP ENVIRONMENT PACKAGES #=============================================================================== -# XFCE base packages -XFCE_PACKAGES=( - lightdm - lightdm-gtk-greeter - lightdm-gtk-greeter-settings - thunar - thunar-archive-plugin - gvfs - xfce4-panel - xfce4-power-manager - xfce4-session - xfce4-settings - xfce4-terminal - xfdesktop - xfwm4 - papirus-icon-theme - xfce4-battery-plugin - xfce4-notifyd - xfce4-whiskermenu-plugin - xfce4-screensaver - xfce4-screenshooter - mousepad - noto-fonts - noto-fonts-cjk - noto-fonts-emoji - noto-fonts-extra +# KDE Plasma base packages +KDE_PACKAGES=( + # Display manager + sddm + + # Core Plasma + plasma-desktop + plasma-workspace + plasma-pa + powerdevil + kscreen + + # Multimedia backend + phonon-qt6-vlc + vlc-plugin-ffmpeg + ffmpeg + + # System settings + systemsettings + kinfocenter + sddm-kcm + kde-gtk-config + breeze-gtk + + # Essential applications + konsole + dolphin + kate + ark + spectacle + gwenview + kcalc + + # Browser and media + chromium + haruna + elisa + okular + + # File management + filelight + kfind + + # Text and diff tools + kompare + + # Security + plasma-vault + kleopatra + kwalletmanager + + # Accessibility + kmousetool + + # Network analysis + wireshark-qt + + # Utilities + kcolorchooser + kcharselect + kalarm + sweeper + kdialog + + # Thumbnails and previews + kdegraphics-thumbnailers + ffmpegthumbs + markdownpart + svgpart + + # Audio pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber - pavucontrol - xfce4-pulseaudio-plugin - ristretto - webp-pixbuf-loader - libopenraw - xarchiver - 7zip - xreader + + # Fonts + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + noto-fonts-extra ) #=============================================================================== @@ -69,12 +112,12 @@ XFCE_PACKAGES=( #=============================================================================== # Profile registry - order determines menu numbering -PROFILES=(minimal server minimal_desktop htpc htpc_gaming office dev) +PROFILES=(minimal server basic office) # Each profile defines: # PROFILE__NAME - Display name # PROFILE__DESC - Description shown in menu -# PROFILE__XFCE - Whether to install XFCE (true/false) +# PROFILE__KDE - Whether to install KDE (true/false) # PROFILE__PACKAGES - Package array # PROFILE__SERVICES - Services to enable array @@ -83,7 +126,7 @@ PROFILES=(minimal server minimal_desktop htpc htpc_gaming office dev) #--------------------------------------------------------------------------- PROFILE_minimal_NAME="Minimal" PROFILE_minimal_DESC="Base Arch Linux system, no additional packages." -PROFILE_minimal_XFCE=false +PROFILE_minimal_KDE=false PROFILE_minimal_PACKAGES=() PROFILE_minimal_SERVICES=() @@ -92,7 +135,7 @@ PROFILE_minimal_SERVICES=() #--------------------------------------------------------------------------- PROFILE_server_NAME="Server" PROFILE_server_DESC="Adds Restic, Docker, and Docker Compose." -PROFILE_server_XFCE=false +PROFILE_server_KDE=false PROFILE_server_PACKAGES=( restic docker @@ -101,92 +144,42 @@ PROFILE_server_PACKAGES=( PROFILE_server_SERVICES=(docker.service) #--------------------------------------------------------------------------- -# Profile: Minimal Desktop +# Profile: Basic Desktop #--------------------------------------------------------------------------- -PROFILE_minimal_desktop_NAME="Minimal Desktop" -PROFILE_minimal_desktop_DESC="XFCE 4 with no additional applications." -PROFILE_minimal_desktop_XFCE=true -PROFILE_minimal_desktop_PACKAGES=() -PROFILE_minimal_desktop_SERVICES=() - -#--------------------------------------------------------------------------- -# Profile: Home Theater PC -#--------------------------------------------------------------------------- -PROFILE_htpc_NAME="Home Theater PC" -PROFILE_htpc_DESC="XFCE 4 with Chromium and VLC media player." -PROFILE_htpc_XFCE=true -PROFILE_htpc_PACKAGES=( - chromium - vlc - vlc-plugin-ffmpeg -) -PROFILE_htpc_SERVICES=() - -#--------------------------------------------------------------------------- -# Profile: Home Theater PC with Gaming -#--------------------------------------------------------------------------- -PROFILE_htpc_gaming_NAME="Home Theater PC with Gaming" -PROFILE_htpc_gaming_DESC="XFCE 4 with Chromium, VLC media player, and Dolphin." -PROFILE_htpc_gaming_XFCE=true -PROFILE_htpc_gaming_PACKAGES=( - dolphin-emu - chromium - vlc - vlc-plugin-ffmpeg -) -PROFILE_htpc_gaming_SERVICES=() +PROFILE_basic_NAME="Basic Desktop" +PROFILE_basic_DESC="KDE Plasma with Chromium and multimedia applications." +PROFILE_basic_KDE=true +PROFILE_basic_PACKAGES=() +PROFILE_basic_SERVICES=() #--------------------------------------------------------------------------- # Profile: Office Workstation #--------------------------------------------------------------------------- PROFILE_office_NAME="Office Workstation" -PROFILE_office_DESC="XFCE 4 with a full suite of desktop applications aimed at general office work." -PROFILE_office_XFCE=true +PROFILE_office_DESC="KDE Plasma with office and productivity applications." +PROFILE_office_KDE=true PROFILE_office_PACKAGES=( - chromium - vlc - vlc-plugin-ffmpeg - hunspell-en_us + # Office and documents libreoffice-fresh - keepassxc - qalculate-gtk - ffmpeg + hunspell-en_us + ghostwriter + marknote + + # Graphics and multimedia gimp - syncthing + kdenlive + kid3 tenacity - git + + # Communication + neochat + tokodon + akregator + + # Utilities + keepassxc + syncthing gnucash + git ) PROFILE_office_SERVICES=() - -#--------------------------------------------------------------------------- -# Profile: Software Development Workstation -#--------------------------------------------------------------------------- -PROFILE_dev_NAME="Software Development Workstation" -PROFILE_dev_DESC="XFCE 4 with a suite of software development applications." -PROFILE_dev_XFCE=true -PROFILE_dev_PACKAGES=( - chromium - vlc - vlc-plugin-ffmpeg - hunspell-en_us - libreoffice-fresh - keepassxc - qalculate-gtk - ffmpeg - gimp - syncthing - tenacity - git - docker - docker-compose - python - python-virtualenv - pycharm-community-edition - jdk-openjdk - intellij-idea-community-edition - go - code - wireshark-qt -) -PROFILE_dev_SERVICES=(docker.service) diff --git a/files/home/chromium-flags.conf b/files/home-skel-desktop/.config/chromium-flags.conf similarity index 100% rename from files/home/chromium-flags.conf rename to files/home-skel-desktop/.config/chromium-flags.conf diff --git a/files/home-skel-desktop/.config/dolphinrc b/files/home-skel-desktop/.config/dolphinrc new file mode 100644 index 0000000..4feca6e --- /dev/null +++ b/files/home-skel-desktop/.config/dolphinrc @@ -0,0 +1,2 @@ +[ContextMenu] +ShowShareActions=false diff --git a/files/home-skel-desktop/.gitkeep b/files/home-skel-desktop/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/files/home-skel-desktop/.local/share/applications/assistant.desktop b/files/home-skel-desktop/.local/share/applications/assistant.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/assistant.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/avahi-discover.desktop b/files/home-skel-desktop/.local/share/applications/avahi-discover.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/avahi-discover.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/bssh.desktop b/files/home-skel-desktop/.local/share/applications/bssh.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/bssh.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/bvnc.desktop b/files/home-skel-desktop/.local/share/applications/bvnc.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/bvnc.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/designer.desktop b/files/home-skel-desktop/.local/share/applications/designer.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/designer.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/linguist.desktop b/files/home-skel-desktop/.local/share/applications/linguist.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/linguist.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/lstopo.desktop b/files/home-skel-desktop/.local/share/applications/lstopo.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/lstopo.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/mpv.desktop b/files/home-skel-desktop/.local/share/applications/mpv.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/mpv.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/qdbusviewer.desktop b/files/home-skel-desktop/.local/share/applications/qdbusviewer.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/qdbusviewer.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/qv4l2.desktop b/files/home-skel-desktop/.local/share/applications/qv4l2.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/qv4l2.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel-desktop/.local/share/applications/qvidcap.desktop b/files/home-skel-desktop/.local/share/applications/qvidcap.desktop new file mode 100644 index 0000000..5829b2d --- /dev/null +++ b/files/home-skel-desktop/.local/share/applications/qvidcap.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +NoDisplay=true diff --git a/files/home-skel/.gitkeep b/files/home-skel/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/thunar.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/thunar.xml deleted file mode 100644 index e70405a..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/thunar.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml deleted file mode 100644 index da0aac1..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml deleted file mode 100644 index 6fc3567..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml deleted file mode 100644 index 26feb96..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml deleted file mode 100644 index 2b014e7..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml deleted file mode 100644 index 83fa8af..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml deleted file mode 100644 index 16a5ca2..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-terminal.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-terminal.xml deleted file mode 100644 index df79ef7..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfce4-terminal.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml deleted file mode 100644 index bdafecd..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/files/home/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml b/files/home/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml deleted file mode 100644 index 2f69db2..0000000 --- a/files/home/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/install-arch-linux.sh b/install-arch-linux.sh index e0b6f71..9ede658 100755 --- a/install-arch-linux.sh +++ b/install-arch-linux.sh @@ -39,7 +39,7 @@ source "${SCRIPT_DIR}/lib/system/security.sh" source "${SCRIPT_DIR}/lib/system/user.sh" # Source desktop modules -source "${SCRIPT_DIR}/lib/desktop/xfce.sh" +source "${SCRIPT_DIR}/lib/desktop/kde.sh" source "${SCRIPT_DIR}/lib/desktop/drivers.sh" # Source profile system diff --git a/lib/desktop/kde.sh b/lib/desktop/kde.sh new file mode 100644 index 0000000..c8aa4b4 --- /dev/null +++ b/lib/desktop/kde.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Copyright 2026 Logan Fick +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# kde.sh - KDE Plasma desktop environment installation +# +# Installs KDE Plasma with SDDM display manager. +# KDE_PACKAGES is defined in config/profiles.conf. + +# Install KDE base packages +install_kde_packages() { + chroot_pacman_install "${KDE_PACKAGES[@]}" +} + +# Copy desktop skeleton files to user home +# Arguments: +# $1 - username +copy_desktop_skel() { + local username="$1" + local home_dir="${MOUNT_POINT}/home/${username}" + + cp -r "${HOME_SKEL_DESKTOP_DIR}/." "${home_dir}/" + rm -f "${home_dir}/.gitkeep" + chown -R 1000:1000 "${home_dir}" +} + +# Full KDE installation +# Arguments: +# $1 - username +install_kde() { + local username="$1" + + install_kde_packages + chroot_systemd_enable sddm.service + copy_desktop_skel "$username" + chroot_run usermod -aG wireshark "$username" +} diff --git a/lib/desktop/xfce.sh b/lib/desktop/xfce.sh deleted file mode 100644 index 608b38e..0000000 --- a/lib/desktop/xfce.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -# Copyright 2026 Logan Fick -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# xfce.sh - XFCE desktop environment installation -# -# Installs XFCE4 with LightDM and copies pre-configured user settings. -# XFCE_PACKAGES is defined in config/profiles.conf. - -# Install XFCE base packages -install_xfce_packages() { - chroot_pacman_install "${XFCE_PACKAGES[@]}" -} - -# Configure LightDM greeter -configure_lightdm() { - chroot_run sh -c "cat > /etc/lightdm/lightdm-gtk-greeter.conf" <