Archlinux on sway from scratch with the most minimal dependencies. DIY is awesome
For new setup home should be a subvolume/partition mounted on the /root which is preferably btrfs/f2fs/xfs and FILES partition mounted to home/{data,/files} FILES should be 120-140GiB and root should have a max of 60GiB NOTE: make sure to mount btrfs with compression zstd on first mount on live iso
export ZDOTDIR in /etc/zsh/zshenv to $HOME/.config/dotfiles
- systemd-boot as boot manager
- enabling systemd-boot-update service to update systemd-boot on systemd upgrade
- sway/river as window manager with swayidle and swaylock for idle and lock management and waybar/yambar for bar management
- base
- btrfs-progs
- dosfstools
- exfatprogs
- f2fs-tools
- intel-ucode
- iwd
- kitty
- linux-firmware
- linux-zen
- man-db man-pages
- neovim (for config clone awesome-neovim to $XDG_CONFIG_HOME/nvim)
- sudo
- nushell or fish or zsh (set default shell with
chsh -s $(which shellname)
)
- since networking bits are already setup in the iso , You can just copy them .ie /etc/systemd/network/* to the mounted partition and start the necessary services iwd,systemd-networkd,systemd-resolvd Or use configuration in networking/resolve.conf and networking/network
- Enable synchronizing the system clock across the network by enabling systemd-timesyncd.service
- On the freshly installed system use the following fonts
- use fonts with great unicode support like ttf-dejavu or noto-fonts or gnu-free-fonts as system default font
- ttc-iosevka or ttf-jetbrains-mono for monospace,
- ttf-nerd-fonts-symbols-mono for nerd font symbols and noto-font-emoji for emoji
NOTE: don't forget to
ln -s /usr/share/fontconfig/conf.avail/10-nerd-font-symbols.conf /etc/fonts/conf.d/
- configure dns for 1.1.1.1 but this might not be needed since it's the default on arch linux
- enable DNSOverTLS for resolved
- iwd for wifi and enable it dhcp client
- symlink /run/systemd/resolve/stub-resolv.con to /etc/resolv.conf for dns resolution TODO: review the usefullness of the lines below
- disable unneeded services that run at boot like man-db.timer and mask ldconfig.service,systemd-rfkill*
- disable journaling to persistent storage by setting Storage in journal.conf to volatile and masking systemd-journal-flush.service
- link kitty to xterm
- configure hardware acceleration and Intel_graphics and Intel_GVT-g
- manual powermangement with udev rules and modprobe config files in powersaving .udev rules go to /etc/udev/rules.d
- and modprobe configs in /etc/modprobe.d
- add resume kernel parameter to the boot loader and resume hook to mkinitcpio
- add resume to HOOKS in /etc/mkinitcpio.conf and rebuild kernel for hibernation and it variant to work
- enable powersaving options power management laptop
- cpu frequency scaling and udev rules
- Active State Power Management check
if asmp is supported and add or remove
powersave > /sys/module/pcie_aspm/parameters/policy
from udev powersave rules based on that - modify relector configuration in /etc/xdg/reflector/reflector.conf to sort based on download rate with --sort rate
- modify sudoers with visudo using example in suders file
- configure what powerbutton and lidclose does with /etc/systemd/logind.conf
- For pacman enable the following options under option section in /etc/pacman.conf
[options]
Color
CheckSpace
VerbosePkgLists
ParallelDownloads = 5
- configure /etc/motd with the Message Of The Day Eg.
WELCOME MASTER MALPHA! WE ARE READY TO SERVE YOU!!!
- after installation make sure to go through Archlinux General Recommendation
- Enable firefox Hardware video acceleration by setting media.ffmpeg.vaapi.enabled to true and Hardware WebRender by setting gfx.webrender.all to true
- move disk cache to ram by setting browser.cache.disk.parent_directory to /run/user/UID/firefox
- where UID is your user's ID which can be obtained by running id -u
- increase session save interval to 6 minutes (360000 milliseconds) by setting browser.sessionstore.interval to 360000
- Enable DNS over HTTPS in firefox
-
base-devel for Basic c/c++ build tools to build Arch Linux packages
-
yay for AUR packagem mangement
-
android-file-transfer with libmtp for connecting android phones mtp management
-
aria2 as download manager
-
bat is a Cat clone with syntax highlighting and git integration
-
bluez and bluez-utils for bluetooth
-
brightnessctl for controling backlight
-
carapace-bin for completions in nushell
-
pueue for process management in nushell
-
clang/gcc for c++ development
-
rustup with default profile and rust-analyzer component for rust development
-
zig with zls for zig development
-
language servers for
- cpp development
- cppcheck
- web development
- vscode-langservers-extracted
- @tailwindcss/language-server
- typescript
- typescript-language-server
- @volar/server
- eslint
- lau development
- lua-language-server
- stylua
- selene
- python development
- jedi-language-server
- ruff
- mypy
- python-pylint
- python-black
- python-poetry
- cpp development
-
dictd server with dict client and some dictionary sources for yay like dict-wikt-en-all dict-freedict-eng-spa dict-freedict-spa-eng dict-foldoc dict-gcide dict-wn
- NOTE: to disable online mode comment out
server dict.org
in /etc/dict/dict.conf - Make sure locale is properly configured in
DICTD_ARGS
of /etc/conf.d/dictd else the service unit will fail
- NOTE: to disable online mode comment out
-
ffmpegthumbnailer & gnome-epub-thumbnailer for thumbnails
-
firefox with speech-dispatcher (for Text-to-Speech) as pdf reader or zathura and firefox-ublock-origin as adblocker and foliate/fbreader as epub reader
-
fzf for fuzzy search
-
gammastep for controlling nightlight
-
git for version control
-
grim and slurp for screenshot
-
imagemagick for use by kitty for terminal image preview
-
imv as image viewer
-
mako as a lightweight notification daemon for wayland
-
install mesa for opengl and as dri userspace driver and intel-media-driver as va-api for intel
-
jq a Command-line JSON processor
-
iptables-nft and nftable(automatically installed as a dependency of iptables-nft) for firewall configuration (enable the nftables service)
-
nmap and tcpdump for network analysis and auditing
-
docker for containerization of apps
-
ripgrep to recursively searches directories for a regex pattern while respecting your gitignore
-
fd as a simple, fast and user-friendly alternative to find
-
sd as an intuitive find & replace cli alternative to sed
-
libreoffice-fresh for working with openoffice documents and hunspell-en_us for spellcheck, for help setting up spellcheck
-
lldb for debugging zig c and c++
-
mpd for music daemon and ncmpcpp for ui interface and mpc for controlling playing
-
mpv as multimedia player
-
fastfetch for displaying system information
-
lf as filemanger
-
openssh and rsync for syncing file with remote over ssh
-
pipewire and pipewire-audio for audio/video routing and processing, pipewire-pulse as pulseaudio replacement and WirePlumber as pipewire session manager
-
remmina as remote desktop client with plugin like freerdp|libvncserver
-
reflector for choosing fastest pacman server list
-
usb_modeswitch for enabling modem mode for zero-cd based modems
-
wl-clipboard for wayland clipboard
-
sound-theme-freedesktop for standard sounds and tone used in linux
-
fuzzy as the application launcher
-
wlr-randr for wayland output management
-
cliphist as clipboard history manager
-
qt5-wayland for runing qt5 apps under wayland
-
xdg-desktop-portal-wrl for WebRTC screen sharing
-
xdg-utils to assist applications with desktop integration tasks
-
yt-dlp YouTube downloader
-
zig zls-bin for zig development
-
zoxide for efficient directory movement
-
zsh-autosuggestions zsh-completions zsh-fast-syntax-highlighting zsh-theme-powerlevel10k-bin-git zsh-history-substring-search complements zsh