Krolyxon
Commit e5e86b3

Branches

Refs →

aurorae5e86b3

install.sh: txt package lists, --check, backup conflicts

Author
krolyxon
Date
2026-10-17 15:43 +0530
Parent
187d87f
Commit
e5e86b395f56bb5c8a735ab2e307c25a65c44f3e

+419 −268

15 files changed

  1. M .local/share/applications/img.desktop +1 −1
  2. M install.sh +196 −123
  3. A packages/aur.txt +13 −0
  4. A packages/base.txt +18 −0
  5. A packages/desktop.txt +40 −0
  6. A packages/dev.txt +19 −0
  7. A packages/gpu.txt +6 −0
  8. A packages/optional.txt +12 −0
  9. D packages/pkg_aur.sh +0 −11
  10. D packages/pkg_desktop.sh +0 −12
  11. D packages/pkg_dev_tools.sh +0 −12
  12. D packages/pkg_gpu.sh +0 −8
  13. D packages/pkg_optional.sh +0 −11
  14. D packages/pkg_utils.sh +0 −90
  15. A packages/utils.txt +114 −0
M .local/share/applications/img.desktop View
@@ -1,4 +1,4 @@
11 [Desktop Entry]
22 Type=Application
33 Name=Image viewer
4−Exec=/usr/local/bin/nsxiv -a %f
4+Exec=nsxiv -a %f
M install.sh View
@@ -1,20 +1,29 @@
11 #!/usr/bin/env bash
2+#
3+# krolyxon's dotfiles installer
4+#
5+# READ THIS FIRST:
6+# This sets up MY personal desktop (Arch + Hyprland + aurora), built around my own
7+# hardware (Lenovo Legion, Intel + NVIDIA hybrid, linux-zen) and my habits.
8+# It is NOT a general purpose installer and I'm not trying to make it one.
9+#
10+# Only run it on a FRESHLY INSTALLED, UNCONFIGURED Arch Linux system.
11+# It installs a lot of packages, moves your existing configs out of the way,
12+# changes your login shell and can enable system services.
13+#
14+# If you just want a piece of the setup, copy the files you like instead.
15+#
16+# Usage:
17+# ./install.sh interactive
18+# ./install.sh --yes pre-select everything (still asks the fresh-system question)
19+# ./install.sh --check compare installed packages with packages/*.txt, changes nothing
220
321 trap 'log WARN "Interrupted by user"; exit 130' INT
422
523 INSTALL_STATUS="none" # none | partial | complete | failed
624 AUTO_YES=0
7−
8−#######################
9−## Arguement Parsing ##
10−#######################
11−for arg in "$@"; do
12− case "$arg" in
13− --yes|--ci|--non-interactive)
14− AUTO_YES=1
15− ;;
16− esac
17−done
25+CHECK_ONLY=0
26+BACKUP_DIR=""
1827
1928 log() {
2029 local level="$1"
@@ -33,6 +42,79 @@ log() {
3342 "$color" "$(date '+%H:%M:%S')" "$level" "$reset" "$*" >&2
3443 }
3544
45+usage() {
46+ sed -n '3,19s/^# \{0,1\}//p' "$0"
47+}
48+
49+#######################
50+## Arguement Parsing ##
51+#######################
52+for arg in "$@"; do
53+ case "$arg" in
54+ --yes|--ci|--non-interactive)
55+ AUTO_YES=1
56+ ;;
57+ --check)
58+ CHECK_ONLY=1
59+ ;;
60+ -h|--help)
61+ usage
62+ exit 0
63+ ;;
64+ *)
65+ log ERROR "Unknown option: $arg"
66+ usage
67+ exit 1
68+ ;;
69+ esac
70+done
71+
72+currentDir="$(dirname "$(readlink -f "$0")")"
73+cd "$currentDir" || exit 1
74+PKG_DIR="$currentDir/packages"
75+
76+
77+###################
78+## Package lists ##
79+###################
80+# packages/*.txt: one package per line, '#' comments.
81+# A trailing '!' (e.g. "blender !") means: listed, but not pre-selected in the picker.
82+
83+# All packages in a list
84+read_list() {
85+ sed 's/#.*//' "$PKG_DIR/$1.txt" | awk 'NF { print $1 }'
86+}
87+
88+# Packages of a list that are pre-selected in the picker
89+preselected() {
90+ sed 's/#.*//' "$PKG_DIR/$1.txt" | awk 'NF && $2 != "!" { print $1 }'
91+}
92+
93+check_packages() {
94+ local listed installed aur
95+ listed=$(for f in "$PKG_DIR"/*.txt; do read_list "$(basename "$f" .txt)"; done | sort -u)
96+ installed=$(pacman -Qqe | sort -u)
97+ aur=$(pacman -Qqm | sort -u)
98+
99+ echo "Installed explicitly, but not in any packages/*.txt:"
100+ comm -23 <(echo "$installed") <(echo "$listed") | while read -r p; do
101+ if grep -qx "$p" <<< "$aur"; then echo " $p (aur)"; else echo " $p"; fi
102+ done
103+
104+ echo
105+ echo "Listed, but not installed:"
106+ comm -13 <(pacman -Qq | sort -u) <(echo "$listed") | sed 's/^/ /'
107+}
108+
109+if ((CHECK_ONLY)); then
110+ check_packages
111+ exit 0
112+fi
113+
114+
115+#################
116+## GATEKEEPING ##
117+#################
36118
37119 ## Prevent user from running this script as root
38120 if [[ "$EUID" -eq 0 ]]; then
@@ -41,11 +123,51 @@ if [[ "$EUID" -eq 0 ]]; then
41123 exit 1
42124 fi
43125
126+if [[ ! -f /etc/arch-release ]]; then
127+ log ERROR "This is not Arch Linux. These dotfiles and this script are for Arch only."
128+ exit 1
129+fi
130+
131+## Does this look like a system that is already set up?
132+## (configs this repo doesn't provide, or another desktop's config)
133+check_fresh_system() {
134+ local foreign=() desktops=() entry
135+ for entry in "$HOME"/.config/*; do
136+ [[ -e "$entry" ]] || continue
137+ entry="$(basename "$entry")"
138+ [[ -e "$currentDir/.config/$entry" ]] || foreign+=("$entry")
139+ done
140+ for entry in i3 sway niri river awesome bspwm openbox qtile xfce4 \
141+ kdeglobals plasma-org.kde.plasma.desktop-appletsrc gnome-session; do
142+ [[ -e "$HOME/.config/$entry" ]] && desktops+=("$entry")
143+ done
144+
145+ ((${#foreign[@]} <= 10 && ${#desktops[@]} == 0)) && return 0
146+
147+ printf '\033[1;31m'
148+ echo "=================================================================="
149+ echo " This does NOT look like a fresh Arch install."
150+ echo
151+ ((${#desktops[@]})) && echo " Found another desktop's config: ${desktops[*]}"
152+ ((${#foreign[@]} > 10)) && echo " Found ${#foreign[@]} entries in ~/.config that this repo doesn't provide."
153+ echo
154+ echo " This installer is meant for a freshly installed, unconfigured"
155+ echo " system. On a system you already use it WILL change things you"
156+ echo " care about: your configs get moved aside, your shell changes, and"
157+ echo " lots of packages get installed."
158+ echo "=================================================================="
159+ printf '\033[0m'
160+ local answer
161+ read -rp "Type 'I understand' to continue anyway: " answer
162+ [[ "$answer" == "I understand" ]] || { log WARN "Aborted."; exit 1; }
163+}
164+check_fresh_system
165+
44166 choose_packages() {
45− local -n arr=$1
167+ local list="$1"
46168 gum choose --no-limit \
47− --selected "$(IFS=,; echo "${arr[*]}")" \
48− "${arr[@]}"
169+ --selected "$(preselected "$list" | paste -sd,)" \
170+ $(read_list "$list")
49171 }
50172
51173 prompt_style() {
@@ -82,18 +204,10 @@ install_prerequisites() {
82204 sudo pacman -S --needed --noconfirm stow gum git zsh
83205 }
84206
85−
86−#################
87−## GATEKEEPING ##
88−#################
89−
90207 ## Installs prerequisites
91208 log INFO "Installing prerequisites: "
92209 install_prerequisites
93210
94−currentDir="$(dirname "$(readlink -f "$0")")"
95−cd "$currentDir"
96−
97211
98212 DISCLAIMER=$(gum style \
99213 --border double \
@@ -102,18 +216,18 @@ DISCLAIMER=$(gum style \
102216 --bold \
103217 "⚠️ DISCLAIMER
104218
105−This script is provided AS IS, WITHOUT ANY WARRANTY.
106−There is NO guarantee that it will work on your system.
219+These are MY personal dotfiles, built for MY machine
220+(Lenovo Legion, Intel + NVIDIA hybrid, linux-zen) and the way I work.
221+They are NOT general purpose. They're public as a reference,
222+or for people who want exactly the same setup.
107223
108−It may:
109−• Modify system files
110−• Overwrite or DELETE existing configuration
111−• Potentially break your setup
224+Only run this on a FRESHLY INSTALLED, UNCONFIGURED Arch system.
112225
113−You are STRONGLY ADVISED to back up:
114−• ~/.config
115−• ~/.local
116−• /etc (if modified)
226+This script is provided AS IS, WITHOUT ANY WARRANTY. It will:
227+• Install a lot of packages (including NVIDIA drivers if selected)
228+• Move conflicting files in your \$HOME to ~/.dotfiles-backup/
229+• Change your login shell to zsh
230+• Optionally write /etc/keyd and enable keyd
117231
118232 Proceed at your OWN RISK."
119233 )
@@ -123,68 +237,26 @@ confirm "$DISCLAIMER
123237 Do you understand the risks and want to continue?" || exit 1
124238
125239
126−###########
127−## UTILS ##
128−###########
129−source "$currentDir/packages/pkg_utils.sh"
130−prompt_style "Important utilities (Most likely go with defaults)"
131−if ((AUTO_YES)); then
132− UTILITY_PKGS=("${pkg_utils[@]}")
133−else
134− gum_to_array UTILITY_PKGS < <(choose_packages pkg_utils)
135−fi
136−
137−
138−###############
139−## DEV TOOLS ##
140−###############
141−source "$currentDir/packages/pkg_dev_tools.sh"
142−prompt_style "Select Development Tools"
143−if ((AUTO_YES)); then
144− DEV_PKGS=("${pkg_dev_tools[@]}")
145−else
146− gum_to_array DEV_PKGS < <(choose_packages pkg_dev_tools)
147−fi
148−
149−
150−
151240 #######################
152−## OPTIONAL PACKAGES ##
241+## Package selection ##
153242 #######################
154−source "$currentDir/packages/pkg_optional.sh"
155−prompt_style "Select Optional Desktop Packages"
156−if ((AUTO_YES)); then
157− OPTIONAL_PKGS=("${pkg_optional[@]}")
158−else
159− gum_to_array OPTIONAL_PKGS < <(choose_packages pkg_optional)
160−fi
161−
162−
163−
164−#################
165−## GPU DRIVERS ##
166−#################
167−source "$currentDir/packages/pkg_gpu.sh"
168−prompt_style "Select GPU drivers"
169−if ((AUTO_YES)); then
170− GPU_PKGS=("${pkg_gpu[@]}")
171−else
172− gum_to_array GPU_PKGS < <(choose_packages pkg_gpu)
173−fi
174−
175−
176−##################
177−## AUR PACKAGES ##
178−##################
179−source "$currentDir/packages/pkg_aur.sh"
180−prompt_style "Select AUR packages"
181−
182−if ((AUTO_YES)); then
183− AUR_PKGS=("${pkg_aur[@]}")
184−else
185− gum_to_array AUR_PKGS < <(choose_packages pkg_aur)
186−fi
243+SELECTED_PKGS=()
244+for list in utils dev gpu optional aur; do
245+ case "$list" in
246+ utils) prompt_style "Important utilities (Most likely go with defaults)" ;;
247+ dev) prompt_style "Select Development Tools" ;;
248+ gpu) prompt_style "Select GPU drivers" ;;
249+ optional) prompt_style "Select Optional Desktop Packages" ;;
250+ aur) prompt_style "Select AUR packages" ;;
251+ esac
187252
253+ if ((AUTO_YES)); then
254+ mapfile -t picked < <(preselected "$list")
255+ else
256+ gum_to_array picked < <(choose_packages "$list")
257+ fi
258+ SELECTED_PKGS+=("${picked[@]}")
259+done
188260
189261
190262 ##########################
@@ -195,8 +267,8 @@ WARNING=$(gum style \
195267 --border-foreground 196 \
196268 --padding "1 2" \
197269 --bold \
198− "⚠️ This will DELETE any conflicting files and replace them with symlinks from this repo.
199−Make sure you have already backed up all your existing config files (~/.config)")
270+ "⚠️ Files in your \$HOME that conflict with this repo will be MOVED to
271+~/.dotfiles-backup/<date>/ and replaced with symlinks from this repo.")
200272
201273 if confirm "$WARNING
202274
@@ -205,40 +277,39 @@ Proceed with system configuration (stow, shell)?"; then
205277 ## Stow dotfiles ##
206278 ###################
207279 log INFO "Detecting conflicts..."
208− conflicts=$(stow . --no-folding -nv 2>&1 | \
280+ mapfile -t conflicts < <(stow . --no-folding -nv 2>&1 | \
209281 sed -n 's/.*existing target \(.*\) since neither.*/\1/p')
210282
211− if [[ -z "$conflicts" ]]; then
283+ if ((${#conflicts[@]} == 0)); then
212284 log INFO "No conflicts. Running stow normally..."
213− stow . --no-folding \
214− && log SUCCESS "Dotfiles stowed successfully" \
215− || log ERROR "Stow failed"
216285 else
217− log WARN "These paths conflict and will be removed:"
218− printf ' %s\n' $conflicts
219− read -rp "Proceed with deleting these files? (y/N): " ok
220− if [[ ! "$ok" =~ ^[Yy]$ ]]; then
221− log WARN "Aborted."
286+ log WARN "These paths conflict and will be moved to a backup:"
287+ printf ' %s\n' "${conflicts[@]}"
288+ if ! confirm "Move these files to ~/.dotfiles-backup/ ?"; then
289+ log WARN "Aborted."
222290 exit 1
223291 fi
224292
225− # Remove conflicts relative to $HOME
226− for path in $conflicts; do
227− [[ -n "$path" && "$path" != "/" ]] && rm -rf "$HOME/$path" && log INFO "Deleted $path"
228− done
293+ # Move conflicts (relative to $HOME) into the backup dir, keeping their paths
294+ BACKUP_DIR="$HOME/.dotfiles-backup/$(date '+%Y%m%d-%H%M%S')"
295+ for path in "${conflicts[@]}"; do
296+ [[ -n "$path" && "$path" != "/" ]] || continue
297+ mkdir -p "$BACKUP_DIR/$(dirname "$path")"
298+ mv "$HOME/$path" "$BACKUP_DIR/$path" && log INFO "Backed up $path"
299+ done
300+ log INFO "Backups are in $BACKUP_DIR"
301+ fi
229302
230− log INFO "Running stow..."
231303 stow . --no-folding \
232− && log INFO "Dotfiles stowed with overwrite." \
304+ && log SUCCESS "Dotfiles stowed successfully" \
233305 || log ERROR "Stow failed"
234− fi
235306
236307 #################################
237308 ## Change default shell to zsh ##
238309 #################################
239310 log INFO "Changing the default shell to ZSH"
240311 if [[ "$SHELL" != "$(command -v zsh)" ]]; then
241− chsh -s $(which zsh) \
312+ chsh -s "$(command -v zsh)" \
242313 && log SUCCESS "Default shell successfully set to zsh" \
243314 || log ERROR "Default shell could not be set to zsh"
244315 else
@@ -250,15 +321,10 @@ else
250321 fi
251322
252323
253−
254−source "$currentDir/packages/pkg_desktop.sh"
324+mapfile -t DESKTOP_PKGS < <(read_list desktop)
255325 ALL_PKGS=(
256− "${DEV_PKGS[@]}"
257− "${OPTIONAL_PKGS[@]}"
258− "${GPU_PKGS[@]}"
259− "${UTILITY_PKGS[@]}"
260− "${AUR_PKGS[@]}"
261− "${pkg_desktop[@]}"
326+ "${DESKTOP_PKGS[@]}"
327+ "${SELECTED_PKGS[@]}"
262328 )
263329
264330 ########################
@@ -271,6 +337,7 @@ if ((${#ALL_PKGS[@]})); then
271337 ## Installing paru if not installed already
272338 if ! command -v paru >/dev/null 2>&1; then
273339 log INFO "Installing Paru (AUR package manager)"
340+ sudo pacman -S --needed --noconfirm base-devel
274341 git clone https://aur.archlinux.org/paru.git
275342 (cd paru && makepkg -sri)
276343 rm -rf paru
@@ -309,6 +376,12 @@ fi
309376 ####################
310377 ## Final dialogue ##
311378 ####################
379+BACKUP_NOTE=""
380+[[ -n "$BACKUP_DIR" ]] && BACKUP_NOTE="
381+
382+Your old conflicting files are in:
383+$BACKUP_DIR"
384+
312385 case "$INSTALL_STATUS" in
313386 complete)
314387 gum style \
@@ -319,7 +392,7 @@ case "$INSTALL_STATUS" in
319392 "✔ Installation Complete!
320393
321394 All selected packages were installed successfully.
322−You may now reboot the system for all the changes to apply."
395+You may now reboot the system for all the changes to apply.$BACKUP_NOTE"
323396 ;;
324397 partial)
325398 gum style \
@@ -330,7 +403,7 @@ You may now reboot the system for all the changes to apply."
330403 "⚠ Setup Finished (Partial)
331404
332405 Some steps were skipped by user choice.
333−Your system was NOT fully configured."
406+Your system was NOT fully configured.$BACKUP_NOTE"
334407 ;;
335408 failed)
336409 gum style \
@@ -341,9 +414,9 @@ Your system was NOT fully configured."
341414 "❌ Installation Failed
342415
343416 One or more steps did not complete successfully.
344−Check the logs above."
417+Check the logs above.$BACKUP_NOTE"
345418 ;;
346419 *)
347− gum style --bold "Finished."
420+ gum style --bold "Finished.$BACKUP_NOTE"
348421 ;;
349422 esac
A packages/aur.txt View
@@ -0,0 +1,13 @@
1+# AUR packages (installed with paru). A trailing ! means "not pre-selected".
2+envycontrol
3+htop-vim
4+hyprshade-git
5+jmtpfs
6+python-pywal16-git
7+yaru-icon-theme
8+zsh-fast-syntax-highlighting-git
9+claude-code
10+github-copilot-cli-bin
11+lmstudio-bin !
12+easyeda-bin !
13+davinci-resolve-studio !
A packages/base.txt View
@@ -0,0 +1,18 @@
1+# Reference only: install.sh never installs these.
2+# archinstall (or a manual install) sets them up; they're listed so `./install.sh --check`
3+# doesn't report them as drift.
4+base
5+base-devel
6+linux
7+linux-zen
8+linux-zen-headers
9+linux-firmware
10+grub
11+efibootmgr
12+os-prober
13+networkmanager
14+git
15+zsh
16+stow
17+gum
18+paru
A packages/desktop.txt View
@@ -0,0 +1,40 @@
1+# Always installed, no picker: the desktop doesn't work without these.
2+
3+# Hyprland
4+hyprland
5+hypridle
6+hyprlock
7+hyprpaper
8+hyprpicker
9+hyprpolkitagent
10+hyprshot
11+xdg-desktop-portal-hyprland
12+xdg-desktop-portal-gtk
13+qt6-wayland
14+
15+# Shell (aurora) and what it calls
16+quickshell
17+upower
18+power-profiles-daemon
19+cava
20+wf-recorder
21+grim
22+slurp
23+wl-clipboard
24+cliphist
25+playerctl
26+gnome-keyring
27+
28+# Audio
29+pipewire
30+pipewire-pulse
31+pipewire-alsa
32+wireplumber
33+
34+# Apps the configs/keybinds assume
35+foot
36+fuzzel
37+kanshi
38+nsxiv
39+xdg-utils
40+curl
A packages/dev.txt View
@@ -0,0 +1,19 @@
1+# Development tools
2+neovim
3+tmux
4+lazygit
5+nodejs
6+pnpm
7+php
8+uv
9+rustup
10+rust-analyzer
11+gdb
12+nasm
13+docker
14+docker-compose
15+nmap
16+# Embedded
17+platformio-core
18+esptool
19+picocom
A packages/gpu.txt View
@@ -0,0 +1,6 @@
1+# Intel iGPU + NVIDIA dGPU (hybrid, switched with envycontrol).
2+# nvidia-open-dkms because the kernel is linux-zen.
3+intel-media-driver
4+mesa
5+nvidia-open-dkms
6+nvidia-utils
A packages/optional.txt View
@@ -0,0 +1,12 @@
1+# Desktop apps. A trailing ! means "not pre-selected".
2+librewolf
3+obsidian
4+syncthing
5+libreoffice-fresh
6+obs-studio
7+telegram-desktop
8+torbrowser-launcher
9+qbittorrent
10+tailscale
11+blender !
12+matugen !
D packages/pkg_aur.sh View
@@ -1,11 +0,0 @@
1−#!/bin/env bash
2−
3−
4−export pkg_aur=(
5− "envycontrol"
6− "htop-vim"
7− "hyprshade"
8− "jmtpfs"
9− "python-pywal16"
10− "yaru-icon-theme"
11−)
D packages/pkg_desktop.sh View
@@ -1,12 +0,0 @@
1−#!/bin/env bash
2−
3−export pkg_desktop=(
4− "hypridle"
5− "hyprland"
6− "hyprlock"
7− "hyprpaper"
8− "hyprpicker"
9− "hyprpolkitagent"
10− "hyprshot"
11− "xdg-desktop-portal-hyprland"
12−)
D packages/pkg_dev_tools.sh View
@@ -1,12 +0,0 @@
1−#!/bin/env bash
2−
3−export pkg_dev_tools=(
4− "neovim"
5− "platformio-core"
6− "tmux"
7− "nodejs"
8− "rust-analyzer"
9− "rustup"
10− "lazygit"
11− "uv"
12−)
D packages/pkg_gpu.sh View
@@ -1,8 +0,0 @@
1−#!/bin/env bash
2−
3−export pkg_gpu=(
4− "intel-media-driver"
5− "mesa"
6− "nvidia-open"
7− "nvidia-utils"
8−)
D packages/pkg_optional.sh View
@@ -1,11 +0,0 @@
1−#!/bin/env bash
2−
3−export pkg_optional=(
4− "obsidian"
5− "syncthing"
6− "librewolf"
7− "libreoffice-fresh"
8− "obs-studio"
9− "telegram-desktop"
10− "torbrowser-launcher"
11−)
D packages/pkg_utils.sh View
@@ -1,90 +0,0 @@
1−#!/bin/env bash
2−
3−export pkg_utils=(
4− "7zip"
5− "acpi"
6− "alacritty"
7− "aria2"
8− "awesome-terminal-fonts"
9− "bat"
10− "blueman"
11− "bluez"
12− "bluez-utils"
13− "brightnessctl"
14− "chafa"
15− "clang"
16− "cliphist"
17− "cmake"
18− "cpio"
19− "cryptsetup"
20− "ddcutil"
21− "eza"
22− "fastfetch"
23− "fd"
24− "ffmpegthumbnailer"
25− "fuzzel"
26− "fzf"
27− "gammastep"
28− "ghostscript"
29− "gobject-introspection"
30− "gparted"
31− "gvfs"
32− "gvfs-mtp"
33− "imagemagick"
34− "imlib2"
35− "jq"
36− "kanshi"
37− "keyd"
38− "lf"
39− "libnotify"
40− "lua"
41− "lvm2"
42− "man-db"
43− "meson"
44− "mpc"
45− "mpd"
46− "mpd-mpris"
47− "mpv"
48− "ncdu"
49− "ncmpcpp"
50− "ntfs-3g"
51− "nwg-look"
52− "pacman-contrib"
53− "pamixer"
54− "pavucontrol"
55− "pcmanfm"
56− "pipewire"
57− "pipewire-pulse"
58− "progress"
59− "python-gobject"
60− "python-pip"
61− "python-virtualenv"
62− "qpdf"
63− "quickshell"
64− "reflector"
65− "ripgrep"
66− "rsync"
67− "sshfs"
68− "tesseract"
69− "transmission-cli"
70− "noto-fonts"
71− "noto-fonts-cjk"
72− "noto-fonts-emoji"
73− "ttf-jetbrains-mono-nerd"
74− "tree"
75− "unzip"
76− "upower"
77− "wget"
78− "woff2-font-awesome"
79− "wtype"
80− "xarchiver"
81− "xdg-user-dirs"
82− "yt-dlp"
83− "zathura"
84− "zathura-pdf-mupdf"
85− "zip"
86− "zola"
87− "zsh-autosuggestions"
88− "zsh-syntax-highlighting"
89−)
90−
A packages/utils.txt View
@@ -0,0 +1,114 @@
1+# CLI tools, fonts and small desktop utilities (most likely keep the defaults).
2+
3+# Files / archives
4+7zip
5+unzip
6+zip
7+unrar
8+cpio
9+xarchiver
10+lf
11+pcmanfm
12+gvfs
13+gvfs-mtp
14+ntfs-3g
15+sshfs
16+rsync
17+rclone
18+croc
19+ncdu
20+tree
21+fd
22+ripgrep
23+bat
24+eza
25+fzf
26+jq
27+progress
28+
29+# System
30+acpi
31+brightnessctl
32+ddcutil
33+keyd
34+btop
35+dmidecode
36+evtest
37+cryptsetup
38+lvm2
39+gparted
40+man-db
41+pacman-contrib
42+reflector
43+xdg-user-dirs
44+glmark2
45+openresolv
46+
47+# Network / bluetooth
48+bluez
49+bluez-utils
50+blueman
51+inetutils
52+bind
53+openbsd-netcat
54+wakeonlan
55+aria2
56+wget
57+transmission-cli
58+
59+# Audio / media
60+pamixer
61+pavucontrol
62+mpd
63+mpd-mpris
64+mpc
65+ncmpcpp
66+mpv
67+yt-dlp
68+ffmpegthumbnailer
69+imagemagick
70+imlib2
71+chafa
72+perl-image-exiftool
73+tesseract
74+zathura
75+zathura-pdf-mupdf
76+ghostscript
77+qpdf
78+
79+# Desktop bits
80+alacritty
81+gammastep
82+libnotify
83+wtype
84+nwg-look
85+fastfetch
86+newsboat
87+cmatrix
88+
89+# Build / scripting (also needed by hyprpm plugins)
90+clang
91+cmake
92+meson
93+lua
94+bc
95+python-gobject
96+gobject-introspection
97+python-pip
98+python-virtualenv
99+git-filter-repo
100+screen
101+pwgen
102+zola
103+
104+# Shell
105+zsh-autosuggestions
106+zsh-syntax-highlighting
107+
108+# Fonts
109+ttf-jetbrains-mono-nerd
110+noto-fonts
111+noto-fonts-cjk
112+noto-fonts-emoji
113+awesome-terminal-fonts
114+woff2-font-awesome