/archsway

Archlinux on river/sway from scratch with the most minimal dependencies. DIY is awesome

Primary LanguageShellGNU General Public License v3.0GPL-3.0

ArchSway

Archlinux on sway from scratch with the most minimal dependencies. DIY is awesome

Standard Installation Steps

Arch Linux Installation Guide

Filesystem Setup

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

needed base system modules

  • 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))

basic configuration

  • 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

Configuring Firefox

  • 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

INSTALLS

  • 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
  • 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
  • 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