base 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. #!/usr/bin/env bash
  2. # NAME: Install base system packages with hardware detection
  3. set -euo pipefail
  4. # Source common functions
  5. source "$(dirname "$0")/../common.sh" || {
  6. echo "[ERROR] Could not source common.sh" >&2
  7. exit 1
  8. }
  9. check_requirements() {
  10. if ! command_exists paru; then
  11. log_error "paru not found. Install it first"
  12. exit 1
  13. fi
  14. }
  15. detect_hardware() {
  16. local cpu_vendor gpu_info microcode gpu_packages
  17. cpu_vendor=$(lscpu | grep "Vendor ID" | awk '{print $3}')
  18. gpu_info=$(lspci | grep -i vga)
  19. log_info "Detected CPU: $cpu_vendor"
  20. log_info "Detected GPU: $gpu_info"
  21. # Determine microcode package
  22. microcode=""
  23. case "$cpu_vendor" in
  24. "GenuineIntel")
  25. microcode="intel-ucode"
  26. log_info "Using Intel microcode"
  27. ;;
  28. "AuthenticAMD")
  29. microcode="amd-ucode"
  30. log_info "Using AMD microcode"
  31. ;;
  32. *)
  33. microcode=""
  34. log_warn "Unknown CPU vendor, skipping microcode"
  35. ;;
  36. esac
  37. # Determine GPU drivers
  38. gpu_packages=""
  39. if echo "$gpu_info" | grep -qi "amd\|radeon"; then
  40. gpu_packages="xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon opencl-mesa lib32-opencl-mesa"
  41. log_info "Using AMD GPU drivers"
  42. elif echo "$gpu_info" | grep -qi "intel"; then
  43. gpu_packages="xf86-video-intel vulkan-intel lib32-vulkan-intel intel-media-driver"
  44. log_info "Using Intel GPU drivers"
  45. elif echo "$gpu_info" | grep -qi "nvidia"; then
  46. gpu_packages="nvidia nvidia-utils lib32-nvidia-utils nvidia-settings"
  47. log_info "Using NVIDIA drivers"
  48. else
  49. log_warn "Unknown GPU, using generic drivers"
  50. fi
  51. }
  52. install_base_system() {
  53. log_info "Installing system base packages"
  54. local base_packages="base base-devel sudo stow linux-cachyos linux-cachyos-headers linux-firmware efibootmgr efitools mkinitcpio grub systemd-boot-manager"
  55. if [[ -n "$microcode" ]]; then
  56. base_packages="$base_packages $microcode"
  57. fi
  58. paru -S --needed --overwrite="*" $base_packages
  59. }
  60. install_networking() {
  61. log_info "Installing networking packages"
  62. paru -S --needed \
  63. networkmanager networkmanager-openvpn network-manager-applet \
  64. dhclient dnsmasq iptables-nft iwd wpa_supplicant wireless-regdb \
  65. bluez-libs blueman openssh
  66. }
  67. install_audio_video() {
  68. log_info "Installing audio and video packages"
  69. paru -S --needed \
  70. pipewire pipewire-alsa pipewire-pulse wireplumber \
  71. pavucontrol alsa-firmware alsa-plugins alsa-utils \
  72. gst-libav gst-plugin-pipewire gst-plugins-bad gst-plugins-ugly \
  73. mpv ffmpegthumbnailer easyeffects lsp-plugins-lv2
  74. }
  75. install_fonts_themes() {
  76. log_info "Installing fonts and themes"
  77. paru -S --needed \
  78. adobe-source-han-sans-cn-fonts adobe-source-han-sans-jp-fonts \
  79. adobe-source-han-sans-kr-fonts adobe-source-serif-fonts \
  80. awesome-terminal-fonts inter-font noto-fonts noto-fonts-cjk noto-fonts-emoji \
  81. ttf-bitstream-vera ttf-dejavu ttf-fantasque-nerd ttf-fira-code ttf-fira-mono \
  82. ttf-fira-sans ttf-font-awesome-5 ttf-liberation ttf-linux-libertine \
  83. ttf-meslo-nerd ttf-opensans otf-font-awesome-5 otf-libertinus \
  84. papirus-icon-theme rose-pine-gtk-theme
  85. }
  86. install_development() {
  87. log_info "Installing development tools"
  88. paru -S --needed \
  89. git git-lfs git-crypt github-cli lazygit \
  90. go go-task python python-defusedxml python-packaging \
  91. python-protobuf python-pynvim python-pywlroots lua luarocks \
  92. ccls cmake ninja neovim-nightly-bin
  93. }
  94. install_cli_utilities() {
  95. log_info "Installing CLI utilities"
  96. paru -S --needed \
  97. bat btop duf dysk dust eza fd fzf glances glow httpie ncdu \
  98. plocate ripgrep tealdeer the_silver_searcher tmux wget \
  99. xdg-user-dirs zoxide yazi yq zsh
  100. }
  101. install_window_managers() {
  102. log_info "Installing window managers and desktop environment"
  103. paru -S --needed \
  104. swaybg swayfx swayidle swaylock-effects waybar \
  105. wlogout wdisplays wl-clipboard rofi-lbonn-wayland-git
  106. }
  107. install_gui_applications() {
  108. log_info "Installing GUI applications"
  109. paru -S --needed \
  110. chromium zen-browser-bin \
  111. legcord-bin slack-desktop teams-for-linux-bin \
  112. obs-studio obsidian sublime-merge dbeaver \
  113. libreoffice-fresh kitty nemo nemo-fileroller
  114. }
  115. install_system_utilities() {
  116. log_info "Installing system utilities"
  117. paru -S --needed \
  118. brightnessctl cronie cups cups-pdf gamemode gvfs gvfs-afc gvfs-google \
  119. gvfs-gphoto2 gvfs-mtp gvfs-nfs gvfs-smb haveged hdparm less lvm2 \
  120. man-db man-pages meld modemmanager mtools mupdf netctl nss-mdns \
  121. ntfs-3g ntp nvme-cli opencl-mesa pacman-contrib pass pika-backup \
  122. pkgfile power-profiles-daemon pv reflector remmina rsync rtkit \
  123. samba seahorse sg3_utils smartmontools snapper solaar steam \
  124. steam-native-runtime syncthing localsend system-config-printer \
  125. transmission-qt ufw unrar unzip upower usb_modeswitch usbutils \
  126. vi vorta w3m which xdg-desktop-portal xdg-desktop-portal-gnome \
  127. xdg-desktop-portal-gtk xdg-desktop-portal-wlr yad zenity
  128. }
  129. install_gaming_graphics() {
  130. log_info "Installing gaming and graphics packages"
  131. local gaming_base="lib32-alsa-lib lib32-alsa-plugins lib32-gamemode lib32-libpulse lib32-mesa lib32-openal
  132. lib32-vkd3d lib32-vulkan-mesa-layers vkd3d vulkan-mesa-layers vulkan-tools vulkan-validation-layers
  133. wine protonup-qt"
  134. if [[ -n "$gpu_packages" ]]; then
  135. paru -S --needed $gaming_base $gpu_packages
  136. else
  137. paru -S --needed $gaming_base
  138. fi
  139. }
  140. install_hardware_support() {
  141. log_info "Installing hardware support"
  142. paru -S --needed \
  143. sof-firmware xf86-input-libinput xfsprogs \
  144. xorg-server xorg-xdpyinfo xorg-xhost xorg-xinit xorg-xinput \
  145. xorg-xkill xorg-xrandr xorg-xwayland
  146. }
  147. install_cloud_devops() {
  148. log_info "Installing cloud and DevOps tools"
  149. paru -S --needed \
  150. aws-cli aws-session-manager-plugin insomnia-bin \
  151. kubectl kubectx kubefwd-bin ngrok postgresql
  152. }
  153. install_document_tools() {
  154. log_info "Installing document and productivity tools"
  155. paru -S --needed \
  156. pandoc-cli texinfo wkhtmltopdf-bin zathura zathura-pdf-mupdf \
  157. swappy wf-recorder
  158. }
  159. install_security_tools() {
  160. log_info "Installing security tools"
  161. paru -S --needed \
  162. yubico-authenticator-bin yubikey-manager-qt
  163. }
  164. install_misc_packages() {
  165. log_info "Installing miscellaneous packages"
  166. paru -S --needed \
  167. pyenv watchman-bin wimlib \
  168. slurp grim swaync gum nwg-look lxsession colordiff
  169. log_info "Updating tldr database"
  170. tldr --update
  171. }
  172. main() {
  173. init_script
  174. check_requirements
  175. detect_hardware
  176. install_base_system
  177. install_networking
  178. install_audio_video
  179. install_fonts_themes
  180. install_development
  181. install_cli_utilities
  182. install_window_managers
  183. install_gui_applications
  184. install_system_utilities
  185. install_gaming_graphics
  186. install_hardware_support
  187. install_cloud_devops
  188. install_document_tools
  189. install_security_tools
  190. install_misc_packages
  191. finish_script 0
  192. }
  193. main "$@"